Difference between revisions of "Error Handling inside Internet Computer"

From Internet Computer Wiki
Jump to: navigation, search
Line 52: Line 52:
 
===== CanisterDidNotReply: StatusCode 506 =====  
 
===== CanisterDidNotReply: StatusCode 506 =====  
  
===== CanisterOutOfMemory: StatusCode 507 =====  
+
===== CanisterOutOfMemory: StatusCode 507 =====
 +
A canister is allowed to reserve some memory for its usage. If a canister didn’t reserve memory before and is using memory beyond the subnet’s capacity, SubnetOverSubscribed error is thrown.
  
 
===== CanisterStopped: StatusCode 508 =====  
 
===== CanisterStopped: StatusCode 508 =====  

Revision as of 16:05, 25 October 2022

This Page is Still Work in Progress

SubnetOverSubscribed: StatusCode 101

This error is raised when installing a new canister or increasing memory allocation in the canister, and no compute allocation or memory capacity is left in the subnet.

MaxNumberOfCanistersReached: StatusCode 102

There is an option in the NNS registry to set a max limit on the number of canisters in a subnet. When a new canister is created, the subnet checks if this maximum limit is reached and throws an error accordingly. Currently, we don’t limit the number of canisters in a subnet.

CanisterOutputQueueFull: StatusCode 201

Internet Computer allows one canister to call another canister. These outgoing inter-canister canister calls are placed in the output queues of the canister. There is a currently a limit of 500 messages per output queue. CanisterOutputQueueFull error is thrown when this limit is reached.

IngressMessageTimeout: StatusCode 202

A user can call a method of a canister by sending an ingress message. The ingress messages go through consensus protocol. The ingress messages that are accepted by the consensus layer are pushed into ingress queue of the corresponding canister. The canister processes the messages in its ingress queue in order. If the system is quite loaded and if a message stays in the ingress queue for over 5 minutes, then IngressMessageTimeout error is thrown.

CanisterNotFound: StatusCode 301

When a user/canister calls a canister which is not found, CanisterNotFound error is thrown.

CanisterMethodNotFound: StatusCode 302

Each canister exposes a few methods that can be invoked by anyone. When a user/canister calls another canister, they need to specify a method to be invoked in the target canister. If this method is not found in the target canister, CanisterMethodNotFound error is thrown.

CanisterAlreadyInstalled: StatusCode 303

When anyone attempts to create a new canister, they can optionally specify a canister id that is to be used for the newly created canister. If the specified canister id is already taken (another canister exists with the specified canister id), then CanisterAlreadyInstalled error is thrown.

CanisterWasmModuleNotFound: StatusCode 304

A canister can be installed in a two step process. In the first step, a canister is created in a subnet and alloted a canister id. At this point, the canister is empty and does not contain any code. In the second step, the controller of the canister can install a Wasm module in the canister. If anyone sends an update/query call to the canister before the wasm module is installed, then CanisterWasmModuleNotFound error is thrown.

InsufficientTransferFunds: StatusCode 401

This error code is deprecated and currently not used anywhere. Earlier, one canister can transfer ICP to another canister. If a canister tries to send more ICP than it owns, InsufficientTransferFunds is thrown. It is later decided that all ICP holdings should be maintained in a ledger in the Network Nervous System, and the only way to transfer is to make a transaction in the ledger. As one canister can no longer transfer ICP to another canister, this error code is deprecated.

InsufficientMemoryAllocation: StatusCode 402

The controller of a canister can specify a limit on how much memory the canister could use. If this memory allocation is too low for the canister to function properly, then InsufficientMemoryAllocation error is thrown.

InsufficientCyclesForCreateCanister: StatusCode 403

When anyone tries to create a new canister, they need to spend at least 2 trillion cycles. If they do not own these funds, then InsufficientCyclesForCreateCanister error is thrown.

SubnetNotFound: StatusCode 404
CanisterOutOfCycles: StatusCode 501

Each canister stores some cycles. When anyone sends a message to a canister, the canister spends a few cycles from its account to process the message. When someone sends a message and the canister doesn’t have enough cycles to process the message, CanisterOutOfCycles error is thrown.

CanisterTrapped: StatusCode 502

This error is thrown if the canister panicked somewhere or throws an error.

CanisterCalledTrap: StatusCode 503

This error is thrown if the canister explicitly decided to call IC0 System API trap method.

CanisterContractViolation: StatusCode 504
CanisterInvalidWasm: StatusCode 505
CanisterDidNotReply: StatusCode 506
CanisterOutOfMemory: StatusCode 507

A canister is allowed to reserve some memory for its usage. If a canister didn’t reserve memory before and is using memory beyond the subnet’s capacity, SubnetOverSubscribed error is thrown.

CanisterStopped: StatusCode 508
CanisterStopping: StatusCode 509
CanisterNotStopped: StatusCode 510
CanisterStoppingCancelled: StatusCode 511
CanisterInvalidController: StatusCode 512

A canister is allowed to have a controller who has special rights over the canister. For example, the controller can call the management canister to upgrade its canister. When someone sends a management message to management canister without being the controller, CanisterInvalidController error is thrown.

CanisterFunctionNotFound: StatusCode 513

The error will be returned when we attempt to invoke a callback function that does not exist in the Wasm’s function table.

CanisterNonEmpty: StatusCode 514

Once someone installs a canister, they cannot install the same canister again. They can either upgrade or reinstall the canister. If someone tries to install an already installed canister, CanisterNonEmpty error is thrown.

CertifiedStateUnavailable: StatusCode 515
CanisterRejectedMessage: StatusCode 516
InterCanisterQueryLoopDetected: StatusCode 517
UnknownManagementMessage: StatusCode 518

Inside each subnet, there is a special canister called management canister[1] with predefined methods. If someone calls a management canister and specifies a method

InvalidManagementPayload: StatusCode 519
InsufficientCyclesInCall: StatusCode 520
CanisterWasmEngineError: StatusCode 521

CanisterWasmEngineError error is thrown by the Internet Computer if WASM runtime library throws any error.

CanisterInstructionLimitExceeded: StatusCode 522
CanisterInstallCodeRateLimited: StatusCode 523

After a canister is created, the controller of the canister can upgrade the WASM code inside the canister. If the controller upgrades the canister too many times or if the install_code has a lot of instructions, then CanisterInstallCodeRateLimited error is thrown.

CanisterMemoryAccessLimitExceeded: StatusCode 524

A canister can store up to 32 GB of memory. In a single canister call, the canister is allowed to access up to 8 GB of memory. If a canister accesses more memory than the limit in a single canister call, CanisterMemoryAccessLimitExceeded error is thrown.