pub fn call_with_payment128<T: ArgumentEncoder, R: for<'a> ArgumentDecoder<'a>>(
id: Principal,
method: &str,
args: T,
cycles: u128,
) -> impl Future<Output = CallResult<R>> + Send + Sync
Expand description
Performs an asynchronous call to another canister and pay cycles (in u128
) at the same time.
§Example
Assuming that the callee canister has following interface:
service : {
add_user: (name: text) -> (nat64);
}
It can be called:
async fn call_add_user() -> u64 {
let (user_id,) = call_with_payment128(callee_canister(), "add_user", ("Alice".to_string(),), 1_000_000u128).await.unwrap();
user_id
}
§Note
- Both argument and return types are tuples even if it has only one value, e.g
(user_id,)
,("Alice".to_string(),)
. - The type annotation on return type is required. Or the return type can be inferred from the context.
- The asynchronous call must be awaited in order for the inter-canister call to be made.
- If the reply payload is not a valid encoding of the expected type
T
, the call results in RejectionCode::CanisterError error.