- New canister method
canister_on_low_wasm_memory
invoked when the canister is low on main memory according to a newwasm_memory_threshold
in canister settings. - New system APIs
ic0.cost_call
,ic0.cost_create_canister
,ic0.cost_http_request
,ic0.cost_sign_with_ecdsa
,ic0.cost_sign_with_schnorr
, andic0.cost_vetkd_derive_encrypted_key
for cycles cost calculation. - New field
memory_metrics
providing detailed metrics on the memory consumption of a canister in the response of the management canister'scanister_status
endpoint.
- New system API
ic0.subnet_self_size
andic0.subnet_self_copy
.
- Allow accepting and burning cycles in replicated queries.
- Add support for Schnorr auxiliary inputs
- Add management canister endpoint
subnet_info
. - Support for wasm64: 64-bit system API.
- Allow anonymous query and read state requests with invalid
ingress_expiry
. - Add allowed viewers variant to canister log visibility.
- Deprecate the Bitcoin API of the management canister.
- Add new management canister methods for canister snapshot support.
- EXPERIMENTAL: Management canister API to fetch Bitcoin block headers.
- Synchronous update call API at
/api/v3/canister/.../call
.
- EXPERIMENTAL: Management canister API for threshold Schnorr signatures.
- Query call statistics.
- New
wasm_memory_persistence
option for canister upgrades. - Rename
num_blocks_total
tonum_blocks_proposed_total
in node metrics served by the management canister. - Management canister query call to fetch canister logs.
- WASM heap memory limit in canisters settings.
- 32-bit stable memory System API is marked DEPRECATED.
- Remove the management canister query calls
bitcoin_get_balance_query
andbitcoin_get_utxos_query
.
- Wrap chunk hash for install chunked code in a record and rename
storage_canister
tostore_canister
. - Update subnet read state request conditions on requested paths.
- Fix: allow inter-canister calls (requests) to be spontaneously rejected in the abstract spec.
- The maximum length of a nonce in an ingress message is 32 bytes.
- Update specification of responses from the endpoint
/api/v2/status
. - Stop canister calls might be rejected upon timeout.
- The IC sends a
user-agent
header with the valueic/1.0
in canister HTTPS outcalls if the canister does not provide one. - Add a management canister method for retrieving node metrics.
- Specify the resource reservation mechanism.
- Allow
in_replicated_execution
system API method to be executed duringcanister_start
. - Set the maximum depth of a delegation in a read_state response/certified variable certificate to 1.
- Canister version is guaranteed to increase if the canister's running status changes.
- Calls to frozen canisters are rejected with
SYS_TRANSIENT
instead ofCANISTER_ERROR
. - Add API boundary nodes information into the certified state tree.
- Add metrics on subnet usage into the certified state tree and a new HTTP endpoint
/api/v2/subnet/<subnet_id>/read_state
for retrieving them. - Add management canister methods to support installing large WebAssembly modules split into chunks.
- Add a system API method to determine if the canister is running in replicated or non-replicated mode.
- Add a system API method to burn cycles of the canister that calls this method.
- Add a check that a canister receiving an ingress message is Running before the ingress message is marked as Received.
- Increase the maximum number of globals in a canister's WASM.
- Add per-call context performance counter.
- Update the computation of the representation-independent hash for the case of maps with nested maps.
- Remove
senders
field from user delegations.
- Canister cycle balance cannot decrease below the freezing limit after executing
install_code
on the management canister. - System API calls
ic0.msg_caller_size
andic0.msg_caller_copy
can be called in all contexts except for (start) function. - Added note on confidentiality of values in the certified state tree.
- Update algorithm computing the request and response hash in the HTTP Gateway including clarification of when the HTTP Gateway can allow for arbitrary certification version in the canister's response.
- Update conditions on requested paths in HTTP read state requests.
- Added new query methods in the Bitcoin API.
- Added node public keys to certified state and node signatures to query call responses.
- Added a new mode for canister upgrades skipping pre-upgrade method's execution.
- IC Bitcoin API, ECDSA API, canister HTTPS outcalls API, and 128-bit cycles System API are considered stable.
- Add conditions on requested paths in read state requests.
- Add composite queries.
- Specify that the canister version is incremented upon every successful message execution except for successful message execution of a query method.
- canister version can be specified in some management canister calls (canister creation, canister code changes, canister settings changes)
- IC records canister history (canister creation, canister code changes, and canister controllers changes)
- added a new
canister_info
management canister call returning current module hash, current controllers, and canister history - added a new system API call
ic0.is_controller
(checking if a principal is a controller of the canister) - stable memory System API calls can be invoked in the WebAssembly module
(start)
function - the system API call
ic0.global_timer_set
can be invoked in canister pre-upgrade - added modeling WASM start function in the concrete
CanisterModule
specification - WebAssembly module requirements have been revised (relaxed max number of declared functions and globals, added conditions on exported functions)
- certified variables are cleared if a canister is reinstalled
- a canister having an open call context marked as deleted cannot reach Stopped state
- a desired canister ID of the canister created by
provisional_create_canister_with_cycles
(in testing environments) can be specified usingspecified_id
- conditions on envelope delegations have been revised (relaxed max number of delegations, restricted max number of targets per delegation, forbidden cycles in the delegation chain)
- added a new optional field
senders
in envelope delegations (restricting users to which a delegation applies) - all
/request_status/<request_id>
paths must refer to the samerequest_id
in aread_state
request - IC protocol execution error conditions (such as failing
inspect_message
method of a canister) are returned as 200 HTTP responses with a cbor body describing the error (instead of 4xx or 5xx HTTP responses)
- Global timers
- Canister version
- Clarifications for HTTP requests & Bitcoin integration costs
- Updated HTTP request API
- Canister status available to canister
- 64-bit stable memory is no longer experimental
- HTTP request API
- Reserved principals
- Canister access to performance metrics
- Query calls are rejected when the canister is frozen
- Support for implementation-specific error codes for requests
- Deleted call contexts do not prevent canister from reaching Stopped state
- Update effective canister id checks in certificate delegations
- Formal model in Isabelle
- Idle consumption of resources in cycles per day can be obtain via
canister_status
method of the management canister - Include the HTTP Gateway Protocol in this spec
- Clarifications in definition of cycles consumption
- Canister cycle balances are represented by 128 bits, and no system-defined upper limit exists anymore
- Canister modules can be gzip-encoded
- Expose Wasm custom sections in the state tree
- EXPERIMENTAL: Canister API for accessing Bitcoin transactions
- EXPERIMENTAL: Canister API for threshold ECDSA signatures
- New System API which uses 128-bit values to represent the amount of cycles
- Subnet delegations include a canister id scope
- Canister heartbeat
- Terminology changes
- Support for 64-bit stable memory
- Support RSA PKCS#1 v1.5 signatures in web authentication
- Spec clarification: Fix various typos and improve textual clarity
- A canister has a set of controllers, instead of always one
- Canister Signatures are introduced
- Spec clarification: the signature in the WebAuthn scheme is prefixed by the CBOR self-identifying tag
- Cycle-depleted canisters are forcibly uninstalled
- Canister settings in
create_canister
andupdate_settings
.install_code
no longer takes allocation settings. - A freezing threshold can be configured via the canister settings
- The cleanup callback is introduced
- New http v2 API that allows for stateless boundary nodes
- The system may impose limits on the number of globals and functions
- No ingress messages towards empty canisters are accepted
- No ingress messages towards
raw_rand
anddeposit_cycles
are accepted - A memory allocation of
0
means “best effort”
- deposit_cycles(): any caller allowed
- Ingress message filtering
- Add ECDSA signatures on curve secp256k1
- Clarify that the
ic0.data_certificate_present
system function may be called in all contexts.
- Expose module hash and controller via
read_state
- The document is renamed to “Internet Computer Interface Spec”
- Support for raw Ed25519 keys is removed
- The default
memory_allocation
becomes unspecified
- Support for funds is scaled back to only support cycles
- The
ic0.msg_cycles_accept
system call now returns the actually accepted cycles - The
provisional_
management calls are introduced
- The
ic0.canister_status
system call
- Delegation between user public keys
- Certification (also removes “request-status” request)
- User authentication method based on WebAuthn is introduced
- User authentication can use ECDSA
- Public keys are DER-encoded
- Return more information in the
canister_status
management call
- Anonymous requests must have the sender field set
- The
deposit_funds
call
- Inter-canister calls are now performed using a builder-like API
- Support for funds (balances and transfers)
- The anonymous user is introduced
- Forward-port changes from 0.9.3
- Users can set/update a memory allocation when installing/upgrading a canister.
- The
expiry
field is added to requests
- The management canister supports the
raw_rand
method
- Canister controllers can stop/start canisters and can query their status.
- Canister controllers can delete canisters
- Forward-port changes from 0.8.2
- Introduction of a domain separator (again)
- The calculation of “derived ids” has changed
- The self-authenticating and derived id forms use a truncated hash
- The textual representation of principals has changed
- Installing code via
reinstall
works also on the empty canister
- Reflect refined process in README and intro.
ic0.time
added
- Revert the introduction of a domain separator
- Fix meaning-changing typos in
ic.did
- Make all canister ids system-chosen
- HTTP requests for management features are removed
- (editorial) the term “principal” is now used for the id of a canister or user, not the canister or user itself
- The signature of a request needs to be calculated using a domain separator
- Describe the
controller
attribute, add a request to change it - The IC management canister is introduced
- More tests about calls from query methods
- Bugfix: Mode should be
reinstall
, notreplace
- Include section with CDDL description
- simplify versioning (only three components), skip 0.2.2 to avoid confusion with 0.2.0.2
- Clarification:
reply
field is always present - General cleanup based on front-to-back reading
- This is the first release. Subsequent releases will include a changelog.