call
Make calls to other canisters with full type safety.
import { call, IDL, update, Principal } from 'azle';
export default class {
@update([IDL.Principal, IDL.Text], IDL.Text)
async callOtherCanister(
canisterId: Principal,
message: string
): Promise<string> {
const result = await call(canisterId, 'process_message', {
args: [message],
paramIdlTypes: [IDL.Text],
returnIdlType: IDL.Text
});
return result;
}
@update([IDL.Principal], IDL.Nat)
async transferCycles(recipient: Principal): Promise<bigint> {
const cyclesToSend = 1_000_000n;
await call(recipient, 'receive_cycles', {
cycles: cyclesToSend
});
return cyclesToSend;
}
}
The call function makes
inter-canister calls with full type safety,
automatic serialization/deserialization, and
comprehensive error handling.
Parameters:
-
canisterId: Target canister principal (Principal) -
methodName: Name of the method to call (string) -
options: Call configuration object
Options Object:
-
args?: Array of arguments to pass -
paramIdlTypes?: IDL types for parameters -
returnIdlType?: IDL type for return value -
cycles?: Cycles to send with the call (bigint)
Returns: Promise resolving to the method's return value
Important Notes:
- Automatically handles Candid serialization/deserialization
- Supports cycle transfers
- Provides comprehensive error handling
- Works with both query and update methods