Release Notes
- fix:
icp sync no longer needs controller rights. Its check that each canister is running used canister_status, which only a controller or a listed status viewer may read, so an identity the canister merely authorizes (a developer preparing an SNS-owned frontend for a commit proposal, say) was refused before anything was uploaded. It now probes with a query, as icp deploy already does after starting a canister. A stopped canister is still refused with the same advice, after the probe's 30-second wait rather than at once.
- fix:
icp cycles buy --json and icp cycles buy -q imply --yes: a machine-readable run has nobody to ask, so neither prompts for confirmation on a terminal nor refuses without one, and the quote stays off stderr.
- fix:
icp cycles buy says, with neither --amount nor --cycles, that one of the two is needed; and that a negative --amount or --cycles (-1, -5t) is negative, in the same words and with exit status 2 for both, where clap read -5t as an unknown flag
- fix:
icp cycles buy says in words what is wrong with a --gateway that is not a canister id, a canister that serves no gateway, and one a boundary node cannot route to, where it printed the replica's IC0536 or the HTTP gateway's routing error; CyclePay and Stripe are named only for CyclePay's gateway, any other is "the gateway"
- fix:
icp cycles buy draws the payment QR code black on white on any terminal theme. It used to take the terminal's own colours, which a light theme inverts and a dark theme often renders grey on near-black, and many phone cameras read neither. A terminal without colour support gets the plain drawing as before.
Experimental
- feat(extension): extensions add third-party commands to icp. An extension is a WebAssembly component that runs sandboxed: it has no filesystem, environment variables, sockets or processes, and reaches the outside only through what icp hands it, namely canister calls as the resolved identity on the resolved network, a yes/no prompt, and showing the user an http(s) URL to visit. On mainnet it may call only the canisters it declares; on other networks this allowlist is not enforced, so it can be tried against a local network. Calls to the management canister are refused on every network.
icp extension install <NAME> <SOURCE> installs one from an https URL or a local path as the command icp <NAME>; --sha256 refuses a component with a different hash. Install shows the extension, its sha256 and the mainnet canisters it will call, flagging ledgers, and asks for approval (--yes skips the prompt). The sha256 is recorded and checked before every run. Installing under a name already installed replaces it, and any name works, so a build can be tried beside the installed one (cyclepay-beta beside cyclepay).
icp extension list, icp extension show <NAME> (both with --json) and icp extension uninstall <NAME> manage what is installed.
- An extension declares its commands, and they become ordinary icp subcommands: help, parse errors and shell completion work as for built-ins, and
--identity, -e/-n and the like are icp's own, resolved before the extension runs. A built-in command always wins over an extension of the same name.
Install icp-cli 1.8.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/dfinity/icp-cli/releases/download/v1.8.0/icp-cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/dfinity/icp-cli/releases/download/v1.8.0/icp-cli-installer.ps1 | iex"
Download icp-cli 1.8.0