This PR specifies a new system API ic0.call_cycles_try_add128 which behaves analogously to ic0.call_cycles_add128, but does not trap if the canister balance would decrease below the canister's freezing limit after transferring the specified amount of cycles onto the call. Since a canister cannot reliably derive its freezing limit, this new system API is necessary to avoid spurious traps when attaching cycles onto a call.
This PR also specifies to abort the call builder pattern in case of an error since otherwise the developer would not be able to cleanly abort the call in case of an error.
This PR specifies a new system API
ic0.call_cycles_try_add128
which behaves analogously toic0.call_cycles_add128
, but does not trap if the canister balance would decrease below the canister's freezing limit after transferring the specified amount of cycles onto the call. Since a canister cannot reliably derive its freezing limit, this new system API is necessary to avoid spurious traps when attaching cycles onto a call.This PR also specifies to abort the call builder pattern in case of an error since otherwise the developer would not be able to cleanly abort the call in case of an error.