Releases: dfinity/pocketic
Version 7.0.0
7.0.0 - 2024-11-13
Added
- Support for IC Bitcoin API via the management canister if the bitcoin canister is installed as the bitcoin testnet canister
(canister IDg4xu7-jiaaa-aaaan-aaaaq-cai
) on the bitcoin subnet and configured withNetwork::Regtest
and abitcoind
process is listening at an address and port specified in an additional argument
of the endpoint/instances/
to create a new PocketIC instance. - New endpoint
/instances/<instance_id>/_/topology
returning the topology of the PocketIC instance. - New CLI option
--log-levels
to specify the log levels for PocketIC server logs (defaults topocket_ic_server=info,tower_http=info,axum::rejection=trace
). - New endpoint
/instances/<instance_id/read/get_controllers
to get the controllers of a canister.
Fixed
- Renamed
dfx_test_key1
tECDSA and tSchnorr keys todfx_test_key
.
Changed
- The PocketIC HTTP gateway routes requests whose paths start with
/_/
and for which no canister ID can be found
directly to the PocketIC instance/replica (this only used to apply to requests for/_/dashboard
independently
of whether a canister ID could be found). - Subnet ids can be specified in
SubnetSpec
s for all subnet kinds. - The certified time of a round is only bumped by
1ns
if the time of the corresponding PocketIC instance did not increase since the last round. - The endpoint
/instances/<instance_id>/update/set_time
returns an error if the time of a PocketIC instance is set into the past. - Subnet sizes to match the subnet sizes on the ICP mainnet: II from 28 to 31 nodes, Fiduciary from 28 to 34 nodes.
Removed
- The CLI option
--pid
: use the CLI option--port-file
instead.
Full changelog: CHANGELOG.md
Commit hash: 172f8c78653c93ad101af75b94251439b4ccf098
Version 6.0.0
6.0.0 - 2024-09-12
Added
- New CLI option
--ip_addr
to specify the IP address at which the PocketIC server should listen (defaults to127.0.0.1
). - New argument
ip_addr
of the endpoint/http_gateway
to specify the IP address at which the HTTP gateway should listen (defaults to127.0.0.1
). - New GET endpoint
/http_gateway
listing all HTTP gateways and their details. - Support for query statistics in the management canister.
- The argument of the endpoint
/instances/<instance_id>/auto_progress
becomes a struct with an optional fieldartificial_delay_ms
specifying the minimum delay between consecutive rounds in auto progress mode. - Support for verified application subnets: the record types
SubnetConfigSet
andExtendedSubnetConfigSet
contain a new fieldverified_application
specifying verified application subnets;
the enumeration typeSubnetKind
has a new variantVerifiedApplication
. - New endpoint
/instances/<instance_id>/api/v2/subnet/...
supporting the IC HTTP subnet read state requests. - New endpoint
/api/v2/subnet
of the PocketIC HTTP gateway supporting the IC HTTP subnet read state requests. - The argument of the endpoint
/instances/
takes an additional optional fieldlog_level
specifying the replica log level of the PocketIC instance. - ECDSA support (IC mainnet-like): there are three ECDSA keys with names
dfx_test_key1
,test_key_1
, andkey_1
on the II and fiduciary subnet. - tSchnorr support (IC mainnet-like): there are three Schnorr keys with names
dfx_test_key1
,test_key_1
, andkey_1
and algorithm BIP340 as well as three Schnorr keys with namesdfx_test_key1
,test_key_1
, andkey_1
and algorithm Ed25519 on the II and fiduciary subnet. The messages to sign with tSchnorr must be of length 32 bytes. - New endpoint
/_/dashboard
of the PocketIC HTTP gateway returning the dashboard of the underlying PocketIC instance or replica. - The argument of the endpoint
/instances/<instance_id>/mock_canister_http_response
takes an additional fieldadditional_responses
to mock additional responses for a pending canister HTTP outcall;
if non-empty, the total number of responses (one plus the number of additional responses) must be equal to the size of the subnet on which the canister making the HTTP outcall is deployed.
Changed
- The argument
listen_at
of the endpoint/http_gateway
has been renamed toport
. - The endpoint
/instances/<instance_id>/auto_progress
returns an error if the corresponding PocketIC instance is already in auto progress mode.
Removed
- The option
--ready-file
: the PocketIC server is ready to accept HTTP connections once the port file (specified via--pid
or--port-file
) contains a line terminated by a newline character.
Full changelog: CHANGELOG.md
Commit hash: 5aa7ad88dfd29ba9b6e166552d1e84f48001acb3
Version 5.0.0
5.0.0 - 2024-07-22
Added
- A new subnet is created on an existing PocketIC instance if a new canister is created with a specified mainnet canister ID that does not belong to any existing subnet's canister range.
- The argument of the endpoint
/http_gateway
takes an additional optional fielddomains
specifying the domains at which the HTTP gateway is listening (default tolocalhost
). - The argument of the endpoint
/http_gateway
takes an additional optional fieldhttps_config
specifying the TLS certificate and key. If provided, then an HTTPS gateway is started using that TLS certificate. - A new endpoint
/instances/<instance_id>/read/topology
to retrieve the topology of the PocketIC instance. The topology contains a list of node IDs instead of subnet size which can be derived from the number of node IDs. - New CLI option
--ready-file
to specify a file which is created by the PocketIC server once it is ready to accept HTTP connections. - A new endpoint
/instances/<instance_id>/_/dashboard
serving a PocketIC dashboard. - ECDSA support (IC mainnet-like): there are three ECDSA keys with names
dfx_test_key1
,test_key_1
, andkey_1
on the II subnet. - The argument of the endpoint
/instances/
to create a new PocketIC instance becomes a struct with three fields:
the original argument of that endpoint is the fieldsubnet_config_set
, the new optional fieldstate_dir
specifies a directory in which the state of the PocketIC instance can be preserved across the PocketIC instance lifetime
(that directory should be empty when specified asstate_dir
for the very first time), and the new optional fieldnonmainnet_features
specifies if non-mainnet features (e.g., best-effort responses) should be enabled for the PocketIC instance.
The topology contains a new fieldsubnet_seed
which is equal to the directory name of the directory in thestate_dir
storing the state of the corresponding subnet.
The state directory (if specified) also contains a fileregistry.proto
containing the current snapshot of the registry. - Support for canister HTTP outcalls: endpoint
/instances/<instance_id>/get_canister_http
to retrieve pending canister HTTP outcalls
and endpoint/instances/<instance_id>/mock_canister_http_response
to mock a response for a pending canister HTTP outcall,
the server produces responses for pending canister HTTP outcalls automatically in the auto-progress mode (started by calling the endpoint/instances/<instance_id>/auto_progress
). - New endpoint
/instance/<instance_id>/api/v3/canister/<effective_canister_id>/call
supporting a synchronous HTTP interface of the IC for update calls.
Note that this endpoint might non-deterministically return a response with status code 202 and empty body (in this case, the status of the call
must be polled at the endpoint/instance/<instance_id>/api/v3/canister/<effective_canister_id>/read_state
).
Fixed
- Executing a query call on a new PocketIC instance crashed the PocketIC server.
Full changelog: CHANGELOG.md
Commit hash: cec100d1607eb2258441ff292a144ba88564458e
Version 4.0.0
4.0.0 - 2024-04-30
Added
- New endpoints
/instances/<instance_id>/auto_progress
and/instances/<instance_id>/stop_progress
to make IC instances
progress (updating time and executing rounds) automatically. - New endpoints
/instances/<instance_id>/api/v2/...
supporting the HTTP interface of the IC as described
by the Interface Specification. - Breaking: New subnet specification allowing to set very high instruction limits for (asymptotic) benchmarking canister code.
- New endpoint
/read_graph/:state_label/:op_id
for polling on a long-running operation. Thestate_label
andop_id
are returned byApiResponse::Started{state_label, op_id}
. - New CLI option
--port-file
to specify a file to which the PocketIC server port should be written. - New endpoints
/http_gateway
and/http_gateway/:id/stop
to start and stop an HTTP gateway. - Breaking: DTS is enabled on a subnet based on a new field
dts_flag
inSubnetSpec
. - New endpoints
submit_ingress_message
(submit an ingress message without executing it) andawait_ingress_message
(execute rounds on the PocketIc instance until the message is executed).
Fixed
- Potentially breaking: Subnet IDs are derived from the subnets' public keys by default.
- Potentially breaking: The time of every subnet advances by 1ns before every round execution to make sure the subnet time is strictly increasing in every round.
Full changelog: CHANGELOG.md
Commit hash: bb76748d1d225c08d88037e99ca9a066f97de496
Version 3.0.1
3.0.1 - 2024-02-14
Fixed
- traps in tECDSA calls
- server rejects jsons containing unimplemented variants of SubnetSpec
- inspect_message no longer panics when call is rejected
Full changelog: CHANGELOG.md
Commit hash: 0e49fd1a2944bbd7aa4aab3d9381aa0676dcb97f
3.0.0
3.0.0 - 2024-02-06
Added
- New endpoint
/api.json
that serves an OpenAPI documentation of the PocketIC server. - Instances can be created from existing NNS state.
Changed
- Breaking: The create_instance endpoint accepts an ExtendedSubnetConfigSet, which allows more options.
Fixed
- Canister inspect message errors when executing ingress messages are returned as canister execution results rather than request errors.
- Subnets agree on which subnet id is the NNS subnet id. Fixes the problem where a canister installation via CMC directly would fail.
Full changelog: CHANGELOG.md
Commit hash: 6b7b236790c1fd4e2aeaf3444244b270c7378b02
2.0.1
Fixed
- Fixed a bug where
get_subnet()
would return results for non-existent canisters, causingcanister_exists()
to returntrue
for non-existent canisters in client libraries - Fixed a bug related to
PocketIc
s internal time being set to the current time, which lead to non-deterministic behavior
Changed
- Cycles consumption is now more appropriately scaled according to the size of the subnet
Full changelog: CHANGELOG.md
Commit hash: 69e1408347723dbaa7a6cd2faa9b65c42abbe861
2.0.0
Added
- Support for multiple subnets
- Support for cross-subnet canister calls
- Improved support to start the PocketIC server from the command line:
- Ability to start the server without any flags
- Use
-p or --port
to specify a port where the server should listen - Use
--ttl
to specify for how long the server should be running before it shuts down --pid
flag is no longer required and discouraged to use from the command line
- Improved logging support:
- Use the
POCKET_IC_LOG_DIR
environment varible to specify where to store logs - Use the environment variable
POCKET_IC_LOG_DIR_LEVELS=trace
to specify the log level of the logs that are written to the log file
- Use the
read/pub_key
endpoint to retrieve the public key of a subnetread/get_subnet
endpoint to retrieve the subnet id of a canister
Changed
- POST
instances/
endpoint requires a subnet config - POST
instances/
endpoint returns a toplogy of the instance /read/query
and/update/execute_ingress_message
require aneffective_principal
field
Removed
- Checkpointing
read/canister_exists
endpoint (superseded byread/get_subnet
)read/root_key
endpoint (superseded byread/pub_key
)
Full changelog: CHANGELOG.md
Commit hash: 29ec86dc9f9ca4691d4d4386c8b2aa41e14d9d16
1.0.0
Added
- Blocking REST-API: Encode IC-call in endpoint, not in body.
Full changelog: CHANGELOG.md
Commit hash: 307d5847c1d2fe1f5e19181c7d0fcec23f4658b3
0.1.0
Added
- Blocking API to make IC-calls to a PocketIC server.
Full changelog: CHANGELOG.md
Commit hash: 865a816108b31956bd449282e5803ce40007789f