Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

## [0.49.0] - 2026-07-13

* `ic-utils`: Bump `ic-management-canister-types` to 0.8.0.
* Added `with_snapshot_visibility` setter to `CreateCanisterBuilder` and `UpdateSettingsBuilder`.
* Added `canister_metrics()` to `ManagementCanister`.
* Added `list_canisters()` method to `ManagementCanister`. This is a subnet-scoped, query-only management-canister method (callable only by subnet administrators); the request is routed to the subnet-scoped query endpoint via `Agent::query_signed` with an `EffectiveId::Subnet`.
* Re-exported new types: `SnapshotVisibility`, `CanisterIdRange`, `ListCanistersResult`, `CyclesConsumed`, `CanisterMetricsArgs`, `CanisterMetricsResult`.
* `ic-utils`: Added `with_canister_settings(CanisterSettings)` to `CreateCanisterBuilder` and `UpdateSettingsBuilder`, for callers that already hold a fully built `CanisterSettings` (e.g. decoded from config or forwarded from another call). It is currently mutually exclusive with the individual settings setters (`with_controller`, `with_compute_allocation`, …); building the call returns an error if the two are combined.
* `ic-utils`: `ManagementCanister::canister_status` and `canister_metrics` now default to a cheap, non-replicated **query** call and return a `QueryOrUpdateCall` builder. Call `.call().await` for the query, or `.as_update().call().await` to issue a replicated update call instead (e.g. when a fully certified result is required). Query responses are replica-signed and verified by the agent unless query-signature verification is disabled. These are the only two management read methods the replica accepts as both query and update; `fetch_canister_logs` and `list_canisters` remain query-only per the interface spec.

### Breaking Changes

* `ic-utils`: The re-exported `CanisterSettings` and `DefiniteCanisterSettings` structs (from `ic-management-canister-types` 0.8.0) gained a `snapshot_visibility` field, controlling who may read a canister's snapshots. Neither struct is `#[non_exhaustive]`, so code that constructs them with a struct literal must add the new field (`snapshot_visibility: None` on `CanisterSettings`, or the desired `SnapshotVisibility`).
* `ic-utils`: `ManagementCanister::canister_status` no longer returns an `impl AsyncCall` and no longer performs a replicated update call by default. It now returns a `QueryOrUpdateCall` that defaults to a query call.
* Migration: replace `canister_status(&id).call_and_wait().await` with `canister_status(&id).call().await` to accept the (cheaper) query, or `canister_status(&id).as_update().call().await` to preserve the previous replicated-update behavior.
* `ic-utils`: The `MgmtMethod` enum gained `CanisterMetrics` and `ListCanisters` variants. `MgmtMethod` is not `#[non_exhaustive]`, so exhaustive `match` expressions over it must add arms for the new variants.

## [0.48.1] - 2026-07-07

* `ic-transport-types`: `Delegation`, `SignedDelegation`, and `DelegationPermissions` now derive `candid::CandidType`, so they can be used directly in Candid interfaces (e.g. matching Internet Identity's `Delegation`/`SignedDelegation` types). The generated Candid maps the byte fields to `blob` and `DelegationPermissions` to `variant { queries; all }`; the added `permissions` field is `opt`, so the encoding stays subtype-compatible with delegation interfaces that omit it.
Expand Down
77 changes: 54 additions & 23 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 7 additions & 7 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ members = [
]

[workspace.package]
version = "0.48.1"
version = "0.49.0"
authors = ["DFINITY Stiftung <sdk@dfinity.org>"]
edition = "2021"
repository = "https://github.com/dfinity/agent-rs"
Expand All @@ -30,10 +30,10 @@ license = "Apache-2.0"
# a comment listing those crates). Otherwise, features are declared in the individual crate Cargo.toml.
#
# The path dependencies below ensure all workspace members use the same version of internal crates.
ic-agent = { path = "ic-agent", version = "0.48.1", default-features = false }
ic-identity-hsm = { path = "ic-identity-hsm", version = "0.48.1" }
ic-transport-types = { path = "ic-transport-types", version = "0.48.1" }
ic-utils = { path = "ic-utils", version = "0.48.1" }
ic-agent = { path = "ic-agent", version = "0.49.0", default-features = false }
ic-identity-hsm = { path = "ic-identity-hsm", version = "0.49.0" }
ic-transport-types = { path = "ic-transport-types", version = "0.49.0" }
ic-utils = { path = "ic-utils", version = "0.49.0" }
ic-utils-bindgen = { path = "ic-utils-bindgen" }
ref-tests = { path = "ref-tests" }

Expand Down Expand Up @@ -64,7 +64,7 @@ http-body-util = "0.1.3"
humantime = "2.0.1"
ic-certification = "3"
ic-ed25519 = "0.6.0"
ic-management-canister-types = "0.7.1"
ic-management-canister-types = "0.8.0"
ic_principal = { version = "0.1.2", features = ["rangemap"] }
ic-verify-bls-signature = "0.6"
js-sys = "0.3"
Expand All @@ -83,7 +83,7 @@ pkcs8 = "0.10.2"
# crates.io — crates.io rejects packages with git dependencies. Published
# crates that need pocket-ic must depend on a released version directly (see
# icx/Cargo.toml).
pocket-ic = { git = "https://github.com/dfinity/ic", rev = "17524c56ef237c54b510a201ceb58da8d790d4d5" } # https://github.com/dfinity/ic/pull/10226
pocket-ic = { git = "https://github.com/dfinity/ic", rev = "992628c4f26cc7320396b6b8be37133a666a4386" } # release-2026-07-09_04-35-base
rand = "0.10.1"
rangemap = "1.7"
reqwest = { version = "0.13.2", default-features = false }
Expand Down
3 changes: 1 addition & 2 deletions ic-utils/src/canister.rs
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,6 @@ impl<'agent: 'canister, 'canister> AsyncCallBuilder<'agent, 'canister> {
#[cfg(all(test, unix))] // pocket-ic
mod tests {
use super::*;
use crate::call::AsyncCall;
use crate::interfaces::ManagementCanister;

#[tokio::test]
Expand All @@ -411,7 +410,7 @@ mod tests {

let (status,) = management_canister
.canister_status(&new_canister_id)
.call_and_wait()
.call()
.await
.unwrap();

Expand Down
Loading
Loading