From a2151ce077724d0b976717d7f8017ef7c7c3236b Mon Sep 17 00:00:00 2001 From: Stephen Antoni <155085865+steve24grd@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:43:03 +0700 Subject: [PATCH] fix: http outcall issue in mainnet (#25) * added transform & adjust max_cycles * fix: formatting --------- Co-authored-by: Stephen Antoni Co-authored-by: Agustinus Theodorus --- src/icp_prototype_backend/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/icp_prototype_backend/src/lib.rs b/src/icp_prototype_backend/src/lib.rs index eeb6711..11a3496 100644 --- a/src/icp_prototype_backend/src/lib.rs +++ b/src/icp_prototype_backend/src/lib.rs @@ -4,7 +4,10 @@ use futures::future::join_all; use ic_cdk::api; use ic_cdk::api::{ call::CallResult, - management_canister::http_request::{http_request, CanisterHttpRequestArgument, HttpMethod}, + management_canister::http_request::{ + http_request, CanisterHttpRequestArgument, HttpMethod, HttpResponse, TransformArgs, + TransformContext, + }, }; use ic_cdk_macros::*; use ic_cdk_timers::TimerId; @@ -410,6 +413,8 @@ async fn send_webhook(tx_hash: String) -> String { return "Webhook URL is not set.".to_string(); } + ic_cdk::println!("Original URL: {}", url); + // Add tx_hash as a query parameter to the URL let url_with_param = match Url::parse(&url) { Ok(mut parsed_url) => { @@ -423,19 +428,21 @@ async fn send_webhook(tx_hash: String) -> String { } }; + ic_cdk::println!("URL with tx_hash parameter: {}", url_with_param); + let request = CanisterHttpRequestArgument { url: url_with_param.clone(), max_response_bytes: None, method: HttpMethod::POST, headers: vec![], // No need to manually add headers body: None, - transform: None, + transform: Some(TransformContext::from_name("transform".to_string(), vec![])), }; // Maximum around 2.5 bilion cycles per call. // Check final cost here: https://internetcomputer.org/docs/current/developer-docs/gas-cost#units-and-fiat-value ic_cdk::println!("Sending HTTP outcall to: {}", url_with_param); - match http_request(request, 2_500_000_000).await { + match http_request(request, 50_850_050_000).await { Ok((response,)) => match String::from_utf8(response.body) { Ok(str_body) => { ic_cdk::println!("{}", format!("{:?}", str_body)); @@ -455,6 +462,11 @@ async fn send_webhook(tx_hash: String) -> String { } } +#[ic_cdk::query] +fn transform(args: TransformArgs) -> HttpResponse { + args.response +} + async fn call_query_blocks() { ic_cdk::println!("Calling query_blocks"); let ledger_principal = PRINCIPAL.with(|stored_ref| stored_ref.borrow().get().clone());