Releases: dfinity/sdk
0.15.0-beta.0: chore: update replica version to release candidate 0ab9178c (#3236)
DFX
feat!: Removed dfx nns and dfx sns commands
Both have now been turned into the dfx extensions. In order to obtain them, please run dfx extension install nns
and dfx extension install sns
respectively. After the installation, you can use them as you did before: dfx nns ...
, and dfx sns ...
.
feat!: Removed dfx replica and dfx bootstrap commands
Use dfx start
instead. If you have a good reason why we should keep these commands, please contribute to the discussion at https://github.com/dfinity/sdk/discussions/3163
fix: Wait for new module hash when installing wallet
A previous change made dfx wait after installing a canister until the replica updated its reported module hash, but this change did not affect wallets. Now dfx waits for wallets too, to eliminate a class of wallet installation errors.
fix: Ctrl-C right after dfx start will hang for minutes and panics
Early break out from actors starting procedure.
feat: can disable the warnings about using an unencrypted identity on mainnet
It's now possible to suppress warnings of this form:
WARN: The <identity> identity is not stored securely. Do not use it to control a lot of cycles/ICP. Create a new identity with `dfx identity new` and use it in mainnet-facing commands with the `--identity` flag
To do so, export the environment variable DFX_WARNING
with the value -mainnet_plaintext_identity
.
export DFX_WARNING="-mainnet_plaintext_identity"
Note that this can be combined to also disable the dfx version check warning:
export DFX_WARNING="-version_check,-mainnet_plaintext_identity"
fix!: restrict dfx identity new
to safe characters
New identities like dfx identity new my/identity
or dfx identity new 'my identity'
can easily lead to problems, either for dfx internals or for usability.
New identities are now restricted to the characters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_@0123456789
.
Existing identities are not affected by this change.
Dependencies
Motoko
Updated Motoko to 0.9.5
Updated candid to 0.9.0
Candid UI
- Updated Candid UI canister to dfinity/candid#449
- Module hash: 32cf0e528ee7a4fc0ac2028c985ce3bbf5af264e802a9473f72ba332eff32185
Frontend canister
- Module hash: e50dfb318c8eb3dfb70fc3276b014302adaa0a26b5d8b4537bac033ad8d934c2
- #3227
Replica
Updated replica to release candidate commit 0ab9178c6684f122ae713928b3664c33a697e9c4.
This incorporates these elected proposals up to commit a17247bd86c7aa4e87742bf74d108614580f216d:
0.14.3-beta.0
Dependencies
Replica
Updated replica to non-elected release candidate 0ab9178c6684f122ae713928b3664c33a697e9c4.
This removes a dependency on OpenSSL in order to avoid spurious errors that reference "Invalid delegation: Invalid public key: Malformed EcdsaP256 public key".
0.14.2
DFX
feat: deprecate dfx bootstrap
and dfx replica
commands
Please use dfx start
instead, which is a combination of the two commands.
If you have a good reason why we should keep these commands, please contribute to the discussion at https://github.com/dfinity/sdk/discussions/3163
feat: add optional custom build command for asset canisters
The custom build command can be set in dfx.json
the same way it is set for custom
type canisters. If the command is not provided, DFX will fallback to the default npm run build
command.
{
"canisters": {
"ui": {
"type": "assets",
"build": ["<custom build command>"]
}
}
}
fix: Diagnose duplicate assets and display upgrade steps
If dfx deploy
detects duplicate assets in the dist/ and frontend assets/ directories, it will now suggest upgrade steps.
fix: motoko canisters can import other canisters with service constructor
After specific canister builder output wasm and candid file, dfx
will do some post processing on the candid file.
The complete IDL will be copied into .dfx
folder with name constructor.did
.
It will be used for type checking during canister installation.
Then it is separated into two parts: service.did
and init_args.txt
, corresponding to canister metadata candid:service
and candid:args
.
service.did
will be imported during dependent canisters building. And it will also be used by the Motoko LSP to provide IDE support.
fix: dfx start now respects the network replica port configuration in dfx.json or networks.json
Frontend canister
NOTE: We've disabled response verification v2 in the asset canister while we improve test coverage.
The redirect from .raw.ic0.app
now redirects to .ic0.app
instead of .icp0.io
The validate_commit_proposed_batch()
method no longer requires any permission to call.
The asset canister now enforces limits during upload. These limits to not apply to assets already uploaded.
Unconditional limits:
create_batch()
now fails ifdfx deploy --by-proposal
got as far as callingpropose_commit_batch()
, and the batch has not since been committed or deleted.
Configurable limits:
max_batches
: limits number of batches being uploaded.max_chunks
: limits total number of chunks across all batches being uploaded.max_bytes
: limits total size of content bytes across all chunks being uploaded.
Added methods:
configure()
to set limitsvalidate_configure()
: companion method for SNSget_configuration()
: to view limits
Suggestions for configured limits:
- dapps controlled by SNS: max_batches=1; max_chunks and max_bytes based on asset composition.
- dapps not controlled by SNS: unlimited (which is the default)
Note that as always, if dfx deploy
does not completely upload and commit a batch, the asset canister will retain the batch until 5 minutes have passed since the last chunk was uploaded. If you have configured limits and the combination of an unsuccessful deployment and a subsequent attempt would exceed those limits, you can either wait 5 minutes before running dfx deploy
again, or delete the incomplete batch with delete_batch()
.
fix: return the correct expr_path for index.html fallback routes
Previously, the requested path was used to construct the expr_path
for the index.html
fallback route. This was incorrect, as the expr_path
should be the path of the index.html
file itself in this case.
Frontend canister assets synchronization
fix: now retries failed create_chunk()
calls
Previously, it would only retry when waiting for the request to complete.
fix: now considers fewer error types to be retryable
Previously, errors were assumed to be retryable, except for a few specific error messages and 403/unauthorized responses. This could cause deployment to appear to hang until timeout.
Now, only transport errors and timeout errors are considered retryable.
Dependencies
Frontend canister
- Module hash: 1286960c50eb7a773cfb5fdd77cc238588f39e21f189cc3eb0f35199a99b9c7e
- #3205
- #3198
- #3154
- #3158
- #3144
ic-ref
Updated ic-ref to 0.0.1-a9f73dba
Cycles wallet
Updated cycles wallet to 20230530
release:
- Module hash: c1290ad65e6c9f840928637ed7672b688216a9c1e919eacbacc22af8c904a5e3
- dfinity/cycles-wallet@313fb01
Motoko
Updated Motoko to 0.9.3
Replica
Updated replica to elected commit ef8ca68771baa20a14af650ab89c9b31b1dc9a5e.
This incorporates the following executed proposals:
0.14.2-beta.2
Release: 0.14.2-beta.2
0.14.2-beta.1
Release: 0.14.2-beta.1
0.14.2-beta.0
Release: 0.14.2-beta.0
0.14.1
0.14.1
DFX
fix: dfx canister delete
without stopping first
When running dfx canister delete
on a canister that has not been stopped, dfx will now confirm the deletion instead of erroring.
feat: gzip option in dfx.json
dfx
can gzip wasm module as the final step in building canisters.
This behavior is disabled by default.
You can enable it in dfx.json
:
{
"canisters" : {
"app" : {
"gzip" : true
}
}
}
You can still specify .wasm.gz
file for custom canisters directly. If any metadata/optimize/shrink options are set in dfx.json
, the .wasm.gz
file will be decompressed, applied all the wasm modifications, and compressed as .wasm.gz
in the end.
fix: prevented using --argument with --all in canister installation
Removed dfx deploy
's behavior of providing the same argument to all canisters, and dfx canister install
's behavior of providing an empty argument to all canisters regardless of what was specified. Now installing multiple canisters and providing an installation argument is an error in both commands.
chore: make sns
subcommands visible in dfx help
chore: upgraded to clap v4
Updated the command-parsing library to v4. Some colors may be different.
feat: dfx deps subcommands
This feature was named dfx pull
before. To make a complete, intuitive user experience, we present a set of subcommands under dfx deps
:
dfx deps pull
: pull the dependencies from mainnet and generatedeps/pulled.json
, the candid files of direct dependencies will also be put intodeps/candid/
;dfx deps init
: set the init arguments for the pulled dependencies and save the data indeps/init.json
;dfx deps deploy
: deploy the pulled dependencies on local replica with the init arguments recorded indeps/init.json
;
All generated files in deps/
are encouraged to be version controlled.
chore: Add the nns-dapp
and internet_identity
to the local canister IDs set by dfx nns import
dfx nns install
installs a set of canisters in a local replica. dfx nns import
complements this by setting the canister IDs so that they can be queried by the user. But dfx nns import
is incomplete. Now it will also provide the IDs of the nns-dapp
and internet_identity
canisters.
feat: .env
file includes all created canister IDs
Previously the .env
file only included canister IDs for canisters that were listed as explicit dependencies during the build process.
Now all canisters that have a canister ID for the specified network are included in .env
.
feat!: Ask for user consent when removing themselves as principal
Removing oneself (or the wallet one uses) can result in the loss of control over a canister.
Therefore dfx canister update-settings
now asks for extra confirmation when removing the currently used principal/wallet from the list of controllers.
To skip this check in CI, use either the --yes
/-y
argument or use echo "yes" | dfx canister update-settings <...>
.
fix: dfx start will restart replica if it does not report healthy after launch
If the replica does not report healthy at least once after launch,
dfx will terminate and restart it.
fix: dfx start now installs the bitcoin canister when bitcoin support is enabled
This is required for future replica versions.
Adds a new field canister_init_arg
to the bitcoin configuration in dfx.json and networks.json. Its default is documented in the JSON schema and is appropriate for the canister wasm bundled with dfx.
fix: no longer enable the bitcoin_regtest feature
docs: cleanup of documentation
Cleaned up documentation of IC SDK.
Asset Canister Synchronization
feat: Added more detailed logging to ic-asset
.
Now, dfx deploy -v
(or -vv
) will print the following information:
- The count for each
BatchOperationKind
inCommitBatchArgs
- The number of chunks uploaded and the total bytes
- The API version of both the
ic-asset
and the canister - (Only for
-vv
) The value ofCommitBatchArgs
fix: Commit batches incrementally in order to account for more expensive v2 certification calculation
In order to allow larger changes without exceeding the per-message instruction limit, the sync process now:
- sets properties of assets already in the canister separately from the rest of the batch.
- splits up the rest of the batch into groups of up to 500 operations.
fix: now retries failed create_chunk()
calls
Previously, it would only retry when waiting for the request to complete.
fix: now considers fewer error types to be retryable
Previously, errors were assumed to be retryable, except for a few specific error messages and 403/unauthorized responses. This could cause deployment to appear to hang until timeout.
Now, only transport errors and timeout errors are considered retryable.
Dependencies
Frontend canister
The asset canister now properly removes the v2-certified response when /index.html
is deleted.
Fix: The fallback file (/index.html
) will now be served when using certification v2 if the requested path was not found.
The HttpResponse type now explicitly mentions the upgrade : Option<bool>
field instead of implicitly returning None
all the time.
The asset canister no longer needs to use await
for access control checks. This will speed up certain operations.
Motoko
Updated Motoko to 0.8.8
Replica
Updated replica to elected commit b3b00ba59c366384e3e0cd53a69457e9053ec987.
This incorporates the following executed proposals:
0.14.0
See also: migration guide
DFX
fix: stop dfx deploy
from creating a wallet if all canisters exist
feat: expose wasm-opt
optimizer in ic-wasm
to users
Add option to specify an "optimize" field for canisters to invoke the wasm-opt
optimizer through ic-wasm
.
This behavior is disabled by default.
If you want to enable this behavior, you can do so in dfx.json:
"canisters" : {
"app" : {
"optimize" : "cycles"
}
}
The options are "cycles", "size", "O4", "O3", "O2", "O1", "O0", "Oz", and "Os". The options starting with "O" are the optimization levels that wasm-opt
provides. The "cycles" and "size" options are recommended defaults for optimizing for cycle usage and binary size respectively.
feat: updates the dfx new starter project for env vars
- Updates the starter project for env vars to use the new
dfx build
&dfx deploy
environment variables - Changes the format of the canister id env vars to be
CANISTER_ID_<canister_name_uppercase>
, for the frontend declaraction file to be consistent with the dfx environment variables.CANISTER_ID
as both a prefix and suffix are supported for backwards compatibility.
fix!: --clean required when network configuration changes
If the network configuration has changed since last time dfx start
was run, dfx start
will now error if you try to run it without --clean
, to avoid spurious errors. You can provide the --force
flag if you are sure you want to start it without cleaning state.
feat: --artificial-delay flag
The local replica uses a 600ms delay by default when performing update calls. With dfx start --artificial-delay <ms>
, you can decrease this value (e.g. 100ms) for faster integration tests, or increase it (e.g. 2500ms) to mimick mainnet latency for e.g. UI responsiveness checks.
fix: make sure assetstorage did file is created as writeable.
feat: specify id when provisional create canister
When creating a canister on non-mainnet replica, you can now specify the canister ID.
dfx canister create <CANISTER_NAME> --specified-id <PRINCIPAL>
dfx deploy <CANISTER_NAME> --specified-id <PRINCIPAL>
You can specify the ID in the range of [0, u64::MAX / 2]
.
If not specify the ID, the canister will be created in the range of [u64::MAX / 2 + 1, u64::MAX]
.
This canister ID allocation behavior only applies to the replica, not the emulator (ic-ref).
feat: dfx nns install --ledger-accounts
dfx nns install
now takes an option --ledger-accounts
to initialize the ledger canister with these accounts.
fix: update Rust canister template.
ic-cdk-timers
is included in the dependencies.
chore: change the default Internet Computer gateway domain to icp0.io
By default, DFX now uses the icp0.io
domain to connect to Internet Computer as opposed to using ic0.app
.
Canisters communicating with ic0.app
will continue to function nominally.
feat: --no-asset-upgrade
feat: confirmation dialogues are no longer case sensitive and accept 'y' in addition to 'yes'
fix: dfx generate
no longer requires canisters to have a canister ID
Previously, canisters required that the canister was created before dfx generate
could be called.
As a result, the --network
parameter does not have an impact on the result of dfx generate
anymore.
This means that dfx generate
now also generates type declarations for remote canisters.
fix: Make build
field optional in dfx.json
The build
field in custom canisters was already optional in code, but this fixes it in the schema.
By specifying the --no-asset-upgrade
flag in dfx deploy
or dfx canister install
, you can ensure that the asset canister itself is not upgraded, but instead only the assets themselves are installed.
feat: Get identity from env var if present
The identity may be specified using the environment variable DFX_IDENTITY
.
feat: Add DFX_ASSETS_WASM
Added the ability to configure the WASM module used for assets canisters through the environment variable DFX_ASSETS_WASM
.
feat: dfx pull can download wasm
fix: dfx deploy and icx-asset no longer retry on permission failure
feat: --created-at-time for the ledger functions: transfer, create-canister, and top-up
fix: ledger transfer duplicate transaction prints the duplicate transaction response before returning success to differentiate between a new transaction response and between a duplicate transaction response.
Before it was possible that a user could send 2 ledger transfers with the same arguments at the same timestamp and both would show success but there would have been only 1 ledger transfer. Now dfx prints different messages when the ledger returns a duplicate transaction response and when the ledger returns a new transaction response.
chore: clarify dfx identity new
help text
chore: Add a message that redeem_faucet_coupon
may take a while to complete
feat: dfx deploy --by-proposal
This supports asset updates through SNS proposal.
Uploads asset changes to an asset canister (propose_commit_batch()), but does not commit them.
The SNS will call commit_proposed_batch()
to commit the changes. If the proposal fails, the caller of dfx deploy --by-proposal
should call delete_batch()
.
feat: dfx deploy --compute-evidence
Builds the specified asset canister, determines the batch operations required to synchronize the assets, and computes a hash ("evidence") over those batch operations. This evidence will match the evidence computed by dfx deploy --by-proposal
, and which will be specified in the update proposal.
No permissions are required to compute evidence, so this can be called with --identity anonymous
or any other identity.
Asset Canister
Added validate_take_ownership()
method so that an SNS is able to add a custom call to take_ownership()
.
Added is_aliased
field to get_asset_properties
and set_asset_properties
.
Added partial support for proposal-based asset updates:
- Batch ids are now stable. With upcoming changes to support asset updates by proposal,
having the asset canister not reuse batch ids will make it easier to verify that a particular
batch has been proposed. - Added methods:
propose_commit_batch()
stores batch arguments for later commitdelete_batch()
deletes a batch, intended for use after compute_evidence if cancellation neededcompute_evidence()
computes a hash ("evidence") over the proposed batch arguments. Once evidence computation is complete, batch will not expire.commit_proposed_batch()
commits batch previously proposed (must have evidence computed)validate_commit_proposed_batch()
required validation method for SNS
Added api_version
endpoint. With upcoming changes we will introduce breaking changes to asset canister's batch upload process. New endpoint will help ic-asset
with differentiation between API version, and allow it to support all versions of the asset canister.
Added support for v2 asset certification. In comparison to v1, v2 asset certification not only certifies the http response body, but also the headers. The v2 spec is first published in this PR
Added canister metadata field supported_certificate_versions
, which contains a comma-separated list of all asset certification protocol versions. You can query it e.g. using dfx canister --network ic metadata <canister name or id> supported_certificate_versions
. In this release, the value of this metadata field value is 1,2
because certification v1 and v2 are supported.
Fixed a bug in http_request
that served assets with the wrong certificate. If no encoding specified in the Accept-Encoding
header is available with a certificate, an available encoding is returned without a certificate (instead of a wrong certificate, which was the case previously). Otherwise, nothing changed.
For completeness' sake, the new behavior is as follows:
- If one of the encodings specified in the
Accept-Encoding
header is available with certification, it now is served with the correct certificate. - If no requested encoding is available with certification, one of the requested encodings is returned without a certificate (instead of a wrong certificate, which was the case previously).
- If no encoding specified in the
Accept-Encoding
header is available, a certified encoding that is available is returned instead.
Added support for API versioning of the asset canister in ic-asset
.
Added functionality that allows you to set asset properties during dfx deploy
, even if the asset has already been deployed to a canister in the past. This eliminates the need to delete and re-deploy assets to modify properties - great news! This feature is also available when deploying assets using the --by-proposal
flag. As a result, the API version of the frontend canister has been incremented from 0
to 1
. The updated ic-asset
version (which is what is being used during dfx deploy
) will remain compatible with frontend canisters implementing both API 0
and 1
. However, please note that the new frontend canister version (with API v1
) will not work with tooling from before the dfx release (0.14.0).
Dependencies
Frontend canister
0.13.1
0.13.0
DFX
feat: Add dfx sns download
This allows users to download SNS canister WASMs.
fix: fixed error text
dfx nns install
had the wrong instructions for setting up the local replica type
fix: creating an identity with --force
no longer switches to the newly created identity
feat(frontend-canister)!: reworked to use permissions-based access control
The permissions are as follows:
- ManagePermissions: Can grant and revoke permissions to any principal. Controllers implicitly have this permission.
- Prepare: Can call create_batch and create_chunk
- Commit: Can call commit_batch and methods that manipulate assets directly, as well as any method permitted by Prepare.
For upgraded frontend canisters, all authorized principals will be granted the Commit permission.
For newly deployed frontend canisters, the initializer (first deployer of the canister) will be granted the Commit permission.
Added three new methods:
- list_permitted: lists principals with a given permission.
- Callable by anyone.
- grant_permission: grants a single permission to a principal
- Callable by Controllers and principals with the ManagePermissions permission.
- revoke_permission: removes a single permission from a principal
- Any principal can revoke its own permissions.
- Only Controllers and principals with the ManagePermissions permission can revoke the permissions of other principals.
Altered the behavior of the existing authorization-related methods to operate only on the "Commit" permission. In this way, they are backwards-compatible.
- authorize(principal): same as grant_permission(principal, Commit)
- deauthorize(principal): same as revoke_permission(permission, Commit)
- list_authorized(): same as list_permitted(Commit)
fix(frontend-canister)!: removed ability of some types of authorized principals to manage the ACL
It used to be the case that any authorized principal could authorize and deauthorize any other principal.
This is no longer the case. See rules above for grant_permission and revoke_permission.
feat(frontend-canister)!: default secure configuration for assets in frontend project template
- Secure HTTP headers, preventing several typical security vulnerabilities (e.g. XSS, clickjacking, and many more). For more details, see comments in
headers
section in default.ic-assets.json5
. - Configures
allow_raw_access
option in starter.ic-assets.json5
config files, with the value set to its default value (which isfalse
). We are showing that configuration in the default starter projects for the sake of easier discoverability, even though its value is set to the default.
feat(frontend-canister)!: add allow_raw_access
config option
By default, the frontend canister will now restrict the access of traffic to the <canister-id>.raw.ic0.app
domain, and will automatically redirect all requests to the certified domain (<canister-id>.ic0.app
), unless configured explicitly. Below is an example configuration to allow access to the robots.txt
file from the "raw" domain:
[
{
"match": "robots.txt",
"allow_raw_access": true
}
]
Important: Note that any assets already uploaded to an asset canister will be protected by this redirection, because at present the asset synchronization process does not update the allow_raw_access
property, or any other properties, after creating an asset. This also applies to assets that are deployed without any configuration, and later configured to allow raw access.
At the present time, there are two ways to reconfigure an existing asset:
- re-create the asset
- delete the asset in your project's directory
- execute
dfx deploy
- re-create the asset in your project's directory
- modify
.ic-assets.json
acordingly - execute
dfx deploy
- via manual candid call
dfx canister call PROJECT_NAME_frontend set_asset_properties '( record { key="/robots.txt"; allow_raw_access=opt(opt(true)) })'
feat(frontend-canister): pretty print asset properties when deploying assets to the canister
feat(frontend-canister): add take_ownership() method
Callable only by a controller. Clears list of authorized principals and adds the caller (controller) as the only authorized principal.
feat(ic-ref):
effective_canister_id
used forprovisional_create_canister_with_cycles
is passed as an command-line argument (defaults torwlgt-iiaaa-aaaaa-aaaaa-cai
if not provided or upon parse failure)
feat(frontend-canister): add get_asset_properties
and set_asset_properties
to frontend canister
As part of creating the support for future work, it's now possible to get and set AssetProperties for assets in frontend canister.
feat: write canister metadata sections for dfx pull
feat: add --argument-file
argument to the dfx canister sign
command
Similar to how this argument works in dfx canister call
, this argument allows providing arguments for the request from a file.
feat: Add support for a default network key
A remote canister ID can now be specified for the __default
network. If specified, dfx
will assume that the canister is remote at the specified canister ID for all networks that don't have a dedicated entry.
feat: use OS-native keyring for pem file storage
If keyring integration is available, PEM files (except for the default identity) are now by default stored in the OS-provided keyring.
If it is not available, it will fall back on the already existing password-encrypted PEM files.
Plaintext PEM files are still available (e.g. for use in non-interactive situations like CI), but not recommended for use since they put the keys at risk.
To force the use of one specific storage mode, use the --storage-mode
flag with either --storage-mode password-protected
or --storage-mode plaintext
.
This works for both dfx identity new
and dfx identity import
.
The flag --disable-encryption
is deprecated in favour of --storage-mode plaintext
. It has the same behavior.
feat: dfx pull
- write canister metadata for dfx pull.
dfx pull
can fetchdfx:deps
metadata and resolve dependencies recursively.
feat(frontend-canister): better control and overview for asset canister authorized principals
The asset canister now has two new functions:
- Query function
list_authorized
displays a list of all principals that are currently authorized to change assets and the list of authorized principals. - Update function
deauthorize
that removes a principal from the list of authorized principals. It can be called by authorized principals and cotrollers of the canister.
In addition, the update function authorize
has new behavior:
Now, controllers of the asset canister are always allowed to authorize new principals (including themselves).
fix: add retry logic to dfx canister delete
dfx canister delete
tries to withdraw as many cycles as possible from a canister before deleting it.
To do so, dfx has to manually send all cycles in the canister, minus some margin.
The margin was previously hard-coded, meaning that withdrawals can fail if the margin is not generous enough.
Now, upon failure with some margin, dfx will retry withdrawing cycles with a continuously larger margin until withdrawing succeeds or the margin becomes larger than the cycles balance.
fix: dfx deploy --mode reinstall for a single Motoko canister fails to compile
The Motoko compiler expects all imported canisters' .did files to be in one folder when it compiles a canister.
dfx
failed to organize the .did files correctly when running dfx deploy <single Motoko canister>
in combintaion with the --mode reinstall
flag.
fix: give more cycles margin when deleting canisters
There have been a few reports of people not being able to delete canisters.
The error happens if the temporary wallet tries to transfer out too many cycles.
The number of cycles left in the canister is bumped a little bit so that people can again reliably delete their canisters.
Dependencies
Updated candid to 0.8.4
- Bug fix in TS bindings
- Pretty print numbers
Frontend canister
- Module hash: d12e4493878911c21364c550ca90b81be900ebde43e7956ae1873c51504a8757
- #2942
ic-ref
Updated ic-ref to master commit 3cc51be5
Motoko
Updated Motoko to 0.7.6
Replica
Updated replica to elected commit b5a1a8c0e005216f2d945f538fc27163bafc3bf7.
This incorporates the following executed proposals: