diff --git a/.bazelignore b/.bazelignore new file mode 100644 index 00000000000..eb5a316cbd1 --- /dev/null +++ b/.bazelignore @@ -0,0 +1 @@ +target diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e5f7c85bcb8..8628c222dd7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45", + "image": "ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d", "remoteUser": "ubuntu", "privileged": true, "runArgs": [ diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fc5852efe00..14c0c7162f5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -27,9 +27,9 @@ /WORKSPACE.bazel @dfinity/idx # [Rust Lang] -rust-toolchain.toml @dfinity/networking -rustfmt.toml @dfinity/networking -deny.toml @dfinity/networking +rust-toolchain.toml @dfinity/consensus +rustfmt.toml @dfinity/consensus +deny.toml @dfinity/consensus clippy.toml @dfinity/ic-interface-owners # [Golang] @@ -50,6 +50,7 @@ go_deps.bzl @dfinity/idx /packages/ic-ledger-hash-of/ @dfinity/finint /packages/pocket-ic/ @dfinity/pocket-ic /packages/ic-ethereum-types/ @dfinity/cross-chain-team +/packages/ic-metrics-assert/ @dfinity/cross-chain-team /packages/ic-sha3/ @dfinity/crypto-team /packages/ic-signature-verification/ @dfinity/crypto-team /packages/ic-vetkd-utils/ @dfinity/crypto-team @@ -91,22 +92,22 @@ go_deps.bzl @dfinity/idx /rs/artifact_pool/ @dfinity/consensus /rs/backup/ @dfinity/consensus /rs/bitcoin/ @dfinity/ic-interface-owners -/rs/bitcoin/adapter/ @dfinity/networking +/rs/bitcoin/adapter/ @dfinity/consensus /rs/bitcoin/ckbtc/ @dfinity/cross-chain-team /rs/bitcoin/mock/ @dfinity/cross-chain-team -/rs/bitcoin/client/ @dfinity/networking +/rs/bitcoin/client/ @dfinity/consensus /rs/bitcoin/consensus/ @dfinity/execution @dfinity/consensus /rs/bitcoin/checker/ @dfinity/cross-chain-team -/rs/bitcoin/service/ @dfinity/networking +/rs/bitcoin/service/ @dfinity/consensus /rs/bitcoin/replica_types/ @dfinity/execution -/rs/bitcoin/validation @dfinity/networking @dfinity/execution +/rs/bitcoin/validation @dfinity/consensus @dfinity/execution /rs/boundary_node/ @dfinity/boundary-node -/rs/canister_client/ @dfinity/networking +/rs/canister_client/ @dfinity/consensus /rs/canister_sandbox/ @dfinity/execution /rs/canonical_state/ @dfinity/ic-message-routing-owners /rs/canonical_state/tree_hash/ @dfinity/ic-message-routing-owners @dfinity/crypto-team /rs/certification/ @dfinity/ic-message-routing-owners @dfinity/crypto-team -/rs/config/ @dfinity/networking +/rs/config/ @dfinity/consensus /rs/config/src/embedders.rs @dfinity/execution /rs/config/src/execution_environment.rs @dfinity/execution /rs/config/src/state_manager.rs @dfinity/ic-message-routing-owners @@ -125,18 +126,18 @@ go_deps.bzl @dfinity/idx /rs/ethereum/ @dfinity/cross-chain-team /rs/execution_environment/ @dfinity/execution /rs/fuzzers/ @dfinity/product-security -/rs/http_endpoints/ @dfinity/networking +/rs/http_endpoints/ @dfinity/consensus /rs/http_endpoints/fuzz/ @dfinity/product-security -/rs/http_endpoints/xnet/ @dfinity/networking @dfinity/ic-message-routing-owners +/rs/http_endpoints/xnet/ @dfinity/consensus @dfinity/ic-message-routing-owners /rs/http_utils/ @dfinity/consensus -/rs/https_outcalls/ @dfinity/networking +/rs/https_outcalls/ @dfinity/consensus /rs/https_outcalls/consensus/ @dfinity/consensus /rs/ic_os/ @dfinity/node /rs/ic_os/fstrim_tool/ @dfinity/node @dfinity/crypto-team /rs/ic_os/nss_icos/ @dfinity/dre /rs/ingress_manager/ @dfinity/consensus /rs/interfaces/ @dfinity/ic-interface-owners -/rs/interfaces/adapter_client/ @dfinity/networking +/rs/interfaces/adapter_client/ @dfinity/consensus /rs/interfaces/certified_stream_store/ @dfinity/ic-message-routing-owners /rs/interfaces/registry/ @dfinity/nns-team /rs/interfaces/src/canister_http.rs @dfinity/consensus @@ -147,22 +148,23 @@ go_deps.bzl @dfinity/idx /rs/interfaces/src/dkg.rs @dfinity/consensus /rs/interfaces/src/execution_environment.rs @dfinity/execution /rs/interfaces/src/messaging.rs @dfinity/ic-message-routing-owners -/rs/interfaces/src/p2p.rs @dfinity/networking -/rs/interfaces/src/p2p/ @dfinity/networking +/rs/interfaces/src/p2p.rs @dfinity/consensus +/rs/interfaces/src/p2p/ @dfinity/consensus +/rs/interfaces/src/vetkd.rs @dfinity/consensus /rs/interfaces/state_manager/ @dfinity/ic-message-routing-owners /rs/ledger_suite/ @dfinity/finint /rs/limits/ @dfinity/ic-interface-owners /rs/memory_tracker/ @dfinity/execution /rs/messaging/ @dfinity/ic-message-routing-owners -/rs/monitoring/ @dfinity/networking -/rs/monitoring/backtrace/ @dfinity/networking @dfinity/ic-message-routing-owners -/rs/monitoring/metrics @dfinity/networking @dfinity/ic-message-routing-owners -/rs/monitoring/pprof/ @dfinity/networking @dfinity/ic-message-routing-owners +/rs/monitoring/ @dfinity/consensus +/rs/monitoring/backtrace/ @dfinity/consensus @dfinity/ic-message-routing-owners +/rs/monitoring/metrics @dfinity/consensus @dfinity/ic-message-routing-owners +/rs/monitoring/pprof/ @dfinity/consensus @dfinity/ic-message-routing-owners /rs/nervous_system/ @dfinity/nns-team /rs/nns/ @dfinity/nns-team /rs/orchestrator/ @dfinity/consensus /rs/orchestrator/src/hostos_upgrade.rs @dfinity/consensus @dfinity/node -/rs/p2p/ @dfinity/networking +/rs/p2p/ @dfinity/consensus /rs/phantom_newtype/ @dfinity/ic-interface-owners /rs/pocket_ic_server/ @dfinity/pocket-ic /rs/prep/ @dfinity/utopia @@ -170,13 +172,13 @@ go_deps.bzl @dfinity/idx /rs/protobuf/def/bitcoin/ @dfinity/execution /rs/protobuf/def/crypto/ @dfinity/crypto-team /rs/protobuf/def/messaging/ @dfinity/ic-message-routing-owners -/rs/protobuf/def/p2p/ @dfinity/networking +/rs/protobuf/def/p2p/ @dfinity/consensus /rs/protobuf/def/registry/ @dfinity/nns-team /rs/protobuf/def/state/ @dfinity/execution @dfinity/ic-message-routing-owners /rs/protobuf/gen/bitcoin/ @dfinity/execution /rs/protobuf/gen/crypto/ @dfinity/crypto-team /rs/protobuf/gen/messaging/ @dfinity/ic-message-routing-owners -/rs/protobuf/gen/p2p/ @dfinity/networking +/rs/protobuf/gen/p2p/ @dfinity/consensus /rs/protobuf/gen/registry/ @dfinity/nns-team /rs/protobuf/gen/state/ @dfinity/execution @dfinity/ic-message-routing-owners /rs/query_stats/ @dfinity/execution @dfinity/consensus @@ -184,7 +186,7 @@ go_deps.bzl @dfinity/idx /rs/registry/ @dfinity/nns-team /rs/registry/helpers/src/crypto.rs @dfinity/crypto-team /rs/registry/helpers/src/crypto/ @dfinity/crypto-team -/rs/registry/helpers/src/firewall.rs @dfinity/networking +/rs/registry/helpers/src/firewall.rs @dfinity/consensus /rs/registry/helpers/src/node.rs @dfinity/node /rs/registry/helpers/src/provisional_whitelist.rs @dfinity/execution /rs/registry/helpers/src/routing_table.rs @dfinity/execution @dfinity/ic-message-routing-owners @@ -192,7 +194,7 @@ go_deps.bzl @dfinity/idx /rs/registry/helpers/src/unassigned_nodes.rs @dfinity/consensus /rs/registry/helpers/tests/root_of_trust.rs @dfinity/crypto-team /rs/replay/ @dfinity/consensus -/rs/replica/ @dfinity/networking +/rs/replica/ @dfinity/consensus /rs/replica_tests/ @dfinity/execution /rs/replicated_state/ @dfinity/execution @dfinity/ic-message-routing-owners /rs/replicated_state/src/canister_state/queues.rs @dfinity/ic-message-routing-owners @@ -204,7 +206,7 @@ go_deps.bzl @dfinity/idx /rs/rust_canisters/backtrace_canister @dfinity/execution /rs/rust_canisters/memory_test/ @dfinity/execution /rs/rust_canisters/call_tree_test/ @dfinity/execution -/rs/rust_canisters/proxy_canister/ @dfinity/networking +/rs/rust_canisters/proxy_canister/ @dfinity/consensus /rs/rust_canisters/response_payload_test/ @dfinity/execution /rs/rust_canisters/stable_structures/ @dfinity/execution /rs/rust_canisters/stable_memory_integrity @dfinity/execution @@ -215,7 +217,7 @@ go_deps.bzl @dfinity/idx /rs/rust_canisters/downstream_calls_test/ @dfinity/ic-message-routing-owners /rs/rust_canisters/random_traffic_test/ @dfinity/ic-message-routing-owners /rs/sns/ @dfinity/nns-team -/rs/starter/ @dfinity/networking +/rs/starter/ @dfinity/consensus /rs/state_layout/ @dfinity/ic-message-routing-owners /rs/state_machine_tests/ @dfinity/ic-message-routing-owners @dfinity/pocket-ic /rs/state_manager/ @dfinity/ic-message-routing-owners @@ -228,7 +230,7 @@ go_deps.bzl @dfinity/idx /rs/test_utilities/embedders/ @dfinity/execution /rs/test_utilities/execution_environment/ @dfinity/execution /rs/test_utilities/in_memory_logger/ @dfinity/crypto-team -/rs/test_utilities/metrics @dfinity/networking @dfinity/ic-message-routing-owners +/rs/test_utilities/metrics @dfinity/consensus @dfinity/ic-message-routing-owners /rs/test_utilities/src/crypto.rs @dfinity/crypto-team /rs/test_utilities/src/crypto/ @dfinity/crypto-team /rs/test_utilities/src/cycles_account_manager.rs @dfinity/execution @@ -238,7 +240,7 @@ go_deps.bzl @dfinity/idx /rs/tests/idx/ @dfinity/idx /rs/tests/testnets/ @dfinity/idx /rs/tests/research @dfinity/research -/rs/tests/driver/src/driver/simulate_network.rs @dfinity/networking @dfinity/idx +/rs/tests/driver/src/driver/simulate_network.rs @dfinity/consensus @dfinity/idx /rs/tests/boundary_nodes/ @dfinity/boundary-node /rs/tests/ckbtc/ @dfinity/cross-chain-team /rs/tests/consensus/ @dfinity/consensus @@ -248,7 +250,7 @@ go_deps.bzl @dfinity/idx /rs/tests/execution/ @dfinity/execution /rs/tests/financial_integrations/ @dfinity/finint /rs/tests/message_routing/ @dfinity/ic-message-routing-owners -/rs/tests/networking/ @dfinity/networking +/rs/tests/networking/ @dfinity/consensus /rs/tests/nns/ @dfinity/nns-team /rs/tests/node/ @dfinity/node /rs/tests/query_stats/ @dfinity/execution @dfinity/consensus @@ -264,7 +266,7 @@ go_deps.bzl @dfinity/idx /rs/types/ @dfinity/ic-interface-owners /rs/types/exhaustive_derive/ @dfinity/consensus /rs/types/management_canister_types/ @dfinity/execution -/rs/types/types/src/artifact.rs @dfinity/consensus @dfinity/networking +/rs/types/types/src/artifact.rs @dfinity/consensus /rs/types/types/src/batch.rs @dfinity/consensus /rs/types/types/src/batch/ @dfinity/consensus /rs/types/types/src/canister_http.rs @dfinity/execution @dfinity/consensus @@ -278,6 +280,7 @@ go_deps.bzl @dfinity/idx /rs/types/wasm_types/ @dfinity/execution /rs/universal_canister/ @dfinity/execution /rs/utils/ @dfinity/ic-interface-owners +/rs/utils/thread/ @dfinity/ic-message-routing-owners /rs/utils/ensure/ @dfinity/finint /rs/validator/ @dfinity/crypto-team /rs/wasm_transform/ @dfinity/execution diff --git a/.github/actions/bazel-test-all/action.yaml b/.github/actions/bazel-test-all/action.yaml index 2317de7b86b..8fb407e3f6d 100644 --- a/.github/actions/bazel-test-all/action.yaml +++ b/.github/actions/bazel-test-all/action.yaml @@ -30,11 +30,6 @@ runs: run: | set +e # manual error handling to ensure we can run some post-build commands - # temporarily set permissions again until we can figure out issue - if [ -e /cache ]; then - sudo chown -RL 1001:1001 /cache - fi - if [ -n "$SSH_PRIVATE_KEY" ]; then # The following adds the SSH private key to the ssh-agent such that CI can SSH into the backup pod. test -z "${SSH_AUTH_SOCK:-}" && { eval "$(ssh-agent -s)"; ssh-add - <<< "${SSH_PRIVATE_KEY}"; } diff --git a/.github/workflows-source/ci-main.yml b/.github/workflows-source/ci-main.yml index ae371889aee..ff9a337cc5f 100644 --- a/.github/workflows-source/ci-main.yml +++ b/.github/workflows-source/ci-main.yml @@ -32,7 +32,7 @@ env: anchors: image: &image - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d dind-large-setup: &dind-large-setup runs-on: labels: dind-large @@ -49,13 +49,12 @@ anchors: container: <<: *image timeout-minutes: 30 - docker-login: &docker-login - name: Login to Dockerhub + before-script: &before-script + name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" checkout: &checkout name: Checkout uses: actions/checkout@v4 @@ -105,7 +104,7 @@ jobs: RUN_ON_DIFF_ONLY: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'CI_ALL_BAZEL_TARGETS') }} steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Set BAZEL_EXTRA_ARGS shell: bash run: | @@ -163,7 +162,7 @@ jobs: if: ${{ contains(github.event.pull_request.labels.*.name, 'CI_BUILD_CHECK') }} steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run bazel build --config=check //rs/... id: bazel-build-config-check uses: ./.github/actions/bazel-test-all/ @@ -190,7 +189,8 @@ jobs: run: | echo "/usr/local/bin" >> $GITHUB_PATH echo "$HOME/.cargo/bin:" >> $GITHUB_PATH - - <<: *docker-login + # use llvm-clang instead of apple's + echo "CC=/usr/local/opt/llvm/bin/clang" >> "$GITHUB_ENV" - name: Run Bazel Test Darwin x86-64 id: bazel-test-darwin-x86-64 uses: ./.github/actions/bazel-test-all/ @@ -273,7 +273,7 @@ jobs: if: ${{ github.event_name != 'merge_group' }} steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Build IC id: build-ic shell: bash diff --git a/.github/workflows-source/ci-pr-only.yml b/.github/workflows-source/ci-pr-only.yml index 6d13482cbb7..10a556e4a67 100644 --- a/.github/workflows-source/ci-pr-only.yml +++ b/.github/workflows-source/ci-pr-only.yml @@ -17,7 +17,7 @@ env: anchors: image: &image - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d dind-small-setup: &dind-small-setup timeout-minutes: 30 runs-on: diff --git a/.github/workflows-source/release-testing.yml b/.github/workflows-source/release-testing.yml index 9b7c1c854d7..a2a6c2d66ff 100644 --- a/.github/workflows-source/release-testing.yml +++ b/.github/workflows-source/release-testing.yml @@ -23,7 +23,7 @@ env: anchors: image: &image - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d dind-large-setup: &dind-large-setup runs-on: group: zh1 @@ -40,13 +40,12 @@ anchors: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - docker-login: &docker-login - name: Login to Dockerhub + before-script: &before-script + name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" bazel-bep: &bazel-bep name: Upload bazel-bep # runs only if previous step succeeded or failed; @@ -73,7 +72,7 @@ jobs: <<: *dind-large-setup steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel System Test Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -90,7 +89,7 @@ jobs: <<: *dind-large-setup steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel System Test Staging id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -108,7 +107,7 @@ jobs: timeout-minutes: 90 steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel Test All id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -135,7 +134,7 @@ jobs: REPO_NAME: ${{ github.repository }} steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Set up Python uses: actions/setup-python@v5 with: @@ -182,7 +181,7 @@ jobs: <<: *dind-large-setup steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run qualification for version ${{ matrix.version }} from the tip of the branch uses: ./.github/actions/bazel-test-all/ with: diff --git a/.github/workflows-source/schedule-daily.yml b/.github/workflows-source/schedule-daily.yml index d8546002961..a5eb842d9e4 100644 --- a/.github/workflows-source/schedule-daily.yml +++ b/.github/workflows-source/schedule-daily.yml @@ -16,7 +16,7 @@ env: anchors: image: &image - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d dind-large-setup: &dind-large-setup runs-on: group: zh1 @@ -31,13 +31,12 @@ anchors: checkout: &checkout name: Checkout uses: actions/checkout@v4 - docker-login: &docker-login - name: Login to Dockerhub + before-script: &before-script + name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" bazel-bep: &bazel-bep name: Upload bazel-bep # runs only if previous step succeeded or failed; @@ -64,7 +63,7 @@ jobs: labels: dind-large steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel Launch Bare Metal shell: bash run: | @@ -108,7 +107,7 @@ jobs: timeout-minutes: 720 # 12 hours steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run FI Tests Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -127,7 +126,7 @@ jobs: timeout-minutes: 20 steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run NNS Tests Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -146,7 +145,7 @@ jobs: timeout-minutes: 480 steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Set Benchmark Targets shell: bash run: | diff --git a/.github/workflows-source/schedule-hourly.yml b/.github/workflows-source/schedule-hourly.yml index 580333253f4..0ed1834aeb2 100644 --- a/.github/workflows-source/schedule-hourly.yml +++ b/.github/workflows-source/schedule-hourly.yml @@ -16,7 +16,7 @@ env: anchors: image: &image - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d dind-large-setup: &dind-large-setup runs-on: labels: dind-large @@ -30,13 +30,12 @@ anchors: checkout: &checkout name: Checkout uses: actions/checkout@v4 - docker-login: &docker-login - name: Login to Dockerhub + before-script: &before-script + name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" bazel-bep: &bazel-bep name: Upload bazel-bep # runs only if previous step succeeded or failed; @@ -58,7 +57,7 @@ jobs: <<: *dind-large-setup steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel Build All No Cache uses: ./.github/actions/bazel-test-all/ env: @@ -77,7 +76,7 @@ jobs: labels: dind-large steps: - <<: *checkout - - <<: *docker-login + - <<: *before-script - name: Run Bazel System Test Hourly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ diff --git a/.github/workflows/anonymization-backend-release.yml b/.github/workflows/anonymization-backend-release.yml index 6cb04a8c820..3f44f4cd37f 100644 --- a/.github/workflows/anonymization-backend-release.yml +++ b/.github/workflows/anonymization-backend-release.yml @@ -33,7 +33,7 @@ jobs: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info diff --git a/.github/workflows/ci-generate-ci.yml b/.github/workflows/ci-generate-ci.yml index 17fc90db937..1ecf196331e 100644 --- a/.github/workflows/ci-generate-ci.yml +++ b/.github/workflows/ci-generate-ci.yml @@ -47,10 +47,11 @@ jobs: if [ -n "$(git status --porcelain)" ]; then git config --global user.name "IDX GitHub Automation" - git config --global user.email "IDX GitHub Automation" + git config --global user.email "idx@dfinity.org" git add . git commit -m "IDX GitHub Automation" git push + exit 1 else echo "git working tree clean - no changes to be committed" fi diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml index e69dad8e241..5b140e1467f 100644 --- a/.github/workflows/ci-main.yml +++ b/.github/workflows/ci-main.yml @@ -30,7 +30,7 @@ jobs: bazel-test-all: name: Bazel Test All container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info timeout-minutes: 90 @@ -48,12 +48,11 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: ${{ github.event_name == 'pull_request' && 256 || 0 }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Set BAZEL_EXTRA_ARGS shell: bash run: | @@ -127,7 +126,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info timeout-minutes: 90 @@ -138,12 +137,11 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: ${{ github.event_name == 'pull_request' && 256 || 0 }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run bazel build --config=check //rs/... id: bazel-build-config-check uses: ./.github/actions/bazel-test-all/ @@ -183,12 +181,8 @@ jobs: run: | echo "/usr/local/bin" >> $GITHUB_PATH echo "$HOME/.cargo/bin:" >> $GITHUB_PATH - - name: Login to Dockerhub - shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + # use llvm-clang instead of apple's + echo "CC=/usr/local/opt/llvm/bin/clang" >> "$GITHUB_ENV" - name: Run Bazel Test Darwin x86-64 id: bazel-test-darwin-x86-64 uses: ./.github/actions/bazel-test-all/ @@ -224,7 +218,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info timeout-minutes: 90 @@ -259,7 +253,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info timeout-minutes: 90 @@ -294,7 +288,7 @@ jobs: runs-on: labels: dind-small container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d timeout-minutes: 30 steps: - name: Checkout @@ -324,7 +318,7 @@ jobs: build-ic: name: Build IC container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info timeout-minutes: 90 @@ -338,12 +332,11 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: ${{ github.event_name == 'pull_request' && 256 || 0 }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Build IC id: build-ic shell: bash @@ -427,7 +420,7 @@ jobs: cargo-clippy-linux: name: Cargo Clippy Linux container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d timeout-minutes: 30 runs-on: group: ch1 @@ -464,7 +457,7 @@ jobs: cargo-build-release-linux: name: Cargo Build Release Linux container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d timeout-minutes: 30 runs-on: group: ch1 diff --git a/.github/workflows/ci-pr-only-nns-team-reminder.yml b/.github/workflows/ci-pr-only-nns-team-reminder.yml new file mode 100644 index 00000000000..9f8577375f5 --- /dev/null +++ b/.github/workflows/ci-pr-only-nns-team-reminder.yml @@ -0,0 +1,68 @@ +name: Governance Unreleased Changelog Reminder + +on: + pull_request: + types: + - review_requested + +jobs: + mainJob: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v6 + id: mainStep + # If the PR requires nns-team to approve, GitHub will force nns-team to + # be in requested_teams. Therefore, the following condition is always + # met when nns-team must approve. (Further filtering takes place in the + # script itself.) + if: contains(github.event.pull_request.requested_teams.*.name, 'nns-team') + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + retries: 3 + script: | + const pullRequestNumber = context.payload.number; + + // Skip reminder if we already reminded (to avoid spam). + const reviews = await github.rest.pulls.listReviews({ + owner: "dfinity", + repo: "ic", + pull_number: pullRequestNumber, + }); + const alreadyRemindedAboutUnreleasedChangelog = reviews + .data + .some(review => review + .body + .startsWith("If this pull request affects the behavior of any canister owned by") + ); + console.log("alreadyRemindedAboutUnreleasedChangelog = " + alreadyRemindedAboutUnreleasedChangelog); + if (alreadyRemindedAboutUnreleasedChangelog) { + return; + } + + // Post a review to remind the author to update unreleased_changelog.md. + // TODO: Figure out how to post in such a way that there is a "Resolve" button nearby. + console.log("Adding reminder to update unreleased_changelog.md..."); + const reminderText = ` + If this pull request affects the behavior of any canister owned by + the Governance team, remember to update the corresponding + unreleased_changes.md file(s). + + To acknowldge this reminder (and unblock the PR), dismiss this + code review by going to the bottom of the pull request page, and + supply one of the following reasons: + + 1. Done. + + 2. No canister behavior changes. + ` + .replace(/^ +/gm, '') + .trim(); + await github.rest.pulls.createReview({ + owner: "dfinity", + repo: "ic", + pull_number: pullRequestNumber, + body: reminderText, + // This is what forces the author to explicitly acknowledge. + event: "REQUEST_CHANGES", + }); + console.log("Reminder was added successfully."); diff --git a/.github/workflows/ci-pr-only.yml b/.github/workflows/ci-pr-only.yml index 1d9a94645d2..870eef04fd0 100644 --- a/.github/workflows/ci-pr-only.yml +++ b/.github/workflows/ci-pr-only.yml @@ -20,7 +20,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME if: ${{ github.event_name != 'merge_group' }} @@ -61,7 +61,7 @@ jobs: runs-on: labels: dind-small container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME if: ${{ github.event_name != 'merge_group' }} @@ -102,7 +102,7 @@ jobs: runs-on: labels: dind-small container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME if: ${{ github.event_name != 'merge_group' }} @@ -150,7 +150,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME if: contains(github.event.pull_request.labels.*.name, 'CI_COVERAGE') diff --git a/.github/workflows/rate-limits-backend-release.yml b/.github/workflows/rate-limits-backend-release.yml index b17b9c10ffb..02948d0370f 100644 --- a/.github/workflows/rate-limits-backend-release.yml +++ b/.github/workflows/rate-limits-backend-release.yml @@ -33,7 +33,7 @@ jobs: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info diff --git a/.github/workflows/release-testing.yml b/.github/workflows/release-testing.yml index f6cdc4c7500..f21715b6e63 100644 --- a/.github/workflows/release-testing.yml +++ b/.github/workflows/release-testing.yml @@ -28,7 +28,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 180 # 3 hours @@ -37,12 +37,11 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel System Test Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -71,7 +70,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 180 # 3 hours @@ -80,12 +79,11 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel System Test Staging id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -114,7 +112,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 90 @@ -123,12 +121,11 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel Test All id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -157,7 +154,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 60 @@ -175,12 +172,11 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Set up Python uses: actions/setup-python@v5 with: @@ -205,7 +201,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 180 # 3 hours @@ -233,7 +229,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 180 # 3 hours @@ -242,12 +238,11 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ github.event.workflow_run.head_branch }} - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run qualification for version ${{ matrix.version }} from the tip of the branch uses: ./.github/actions/bazel-test-all/ with: diff --git a/.github/workflows/rosetta-release.yml b/.github/workflows/rosetta-release.yml index 2da864a410d..cd99e734580 100644 --- a/.github/workflows/rosetta-release.yml +++ b/.github/workflows/rosetta-release.yml @@ -22,7 +22,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/schedule-daily.yml b/.github/workflows/schedule-daily.yml index 833d90f273b..771bc20432e 100644 --- a/.github/workflows/schedule-daily.yml +++ b/.github/workflows/schedule-daily.yml @@ -15,7 +15,7 @@ jobs: bazel-test-bare-metal: name: Bazel Test Bare Metal container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 120 @@ -25,12 +25,11 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel Launch Bare Metal shell: bash run: | @@ -73,19 +72,18 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 720 # 12 hours steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run FI Tests Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -115,19 +113,18 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run NNS Tests Nightly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -157,19 +154,18 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 480 steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Set Benchmark Targets shell: bash run: | @@ -212,7 +208,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 60 @@ -264,7 +260,7 @@ jobs: group: zh1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 120 diff --git a/.github/workflows/schedule-hourly.yml b/.github/workflows/schedule-hourly.yml index f374fb886c1..99c579508e3 100644 --- a/.github/workflows/schedule-hourly.yml +++ b/.github/workflows/schedule-hourly.yml @@ -17,19 +17,18 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 120 steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel Build All No Cache uses: ./.github/actions/bazel-test-all/ env: @@ -54,7 +53,7 @@ jobs: bazel-system-test-hourly: name: Bazel System Tests Hourly container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 120 @@ -64,12 +63,11 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Run Bazel System Test Hourly id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -97,7 +95,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 120 diff --git a/.github/workflows/schedule-rust-bench.yml b/.github/workflows/schedule-rust-bench.yml index b95f77f7bc5..eb8e515e004 100644 --- a/.github/workflows/schedule-rust-bench.yml +++ b/.github/workflows/schedule-rust-bench.yml @@ -20,7 +20,7 @@ jobs: # see linux-x86-64 runner group labels: rust-benchmarks container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d # running on bare metal machine using ubuntu user options: --user ubuntu -v /cache:/cache timeout-minutes: 720 # 12 hours diff --git a/.github/workflows/schedule-weekly.yml b/.github/workflows/schedule-weekly.yml index 918fe9b4864..e0ac84c0026 100644 --- a/.github/workflows/schedule-weekly.yml +++ b/.github/workflows/schedule-weekly.yml @@ -14,7 +14,7 @@ jobs: runs-on: labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME -v /cache:/cache diff --git a/.github/workflows/system-tests-k8s.yml b/.github/workflows/system-tests-k8s.yml index 5544f6a0994..15901a233ad 100644 --- a/.github/workflows/system-tests-k8s.yml +++ b/.github/workflows/system-tests-k8s.yml @@ -8,7 +8,10 @@ name: System Tests K8s on: schedule: - - cron: "0 3 * * *" + - cron: "0 1 * * *" # Run at 1 AM + - cron: "0 3 * * *" # Run at 3 AM + - cron: "0 5 * * *" # Run at 5 AM + - cron: "0 7 * * *" # Run at 7 AM pull_request: paths: - '.github/workflows/system-tests-k8s.yml' @@ -19,9 +22,13 @@ on: required: false default: '//rs/tests/nns:node_removal_from_registry_test' jobs: - description: 'Concurrent Bazel Jobs' + description: 'Concurrent Bazel Test Jobs' required: false - default: '32' + default: '10' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name != 'schedule' }} env: TARGETS: | @@ -29,9 +36,9 @@ env: github.event_name == 'workflow_dispatch' && github.event.inputs.targets || '//rs/tests/nns:node_removal_from_registry_test' }} JOBS: | - ${{ github.event_name == 'schedule' && '12' || + ${{ github.event_name == 'schedule' && '10' || github.event_name == 'workflow_dispatch' && github.event.inputs.jobs || - '32' }} + '10' }} BRANCH_NAME: ${{ github.head_ref || github.ref_name }} CI_COMMIT_SHA: ${{ github.sha }} CI_JOB_NAME: ${{ github.job }} @@ -48,7 +55,7 @@ jobs: group: ln1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME -e KUBECONFIG --privileged --cgroupns host @@ -58,12 +65,11 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub + - name: Before script + id: before-script shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} + run: | + [ -n "${NODE_NAME:-}" ] && echo "Node: $NODE_NAME" - name: Set KUBECONFIG shell: bash @@ -82,7 +88,7 @@ jobs: BAZEL_COMMAND: "test" BAZEL_TARGETS: "${{ env.TARGETS }}" BAZEL_CI_CONFIG: "--config=ci --repository_cache=/cache/bazel" - BAZEL_EXTRA_ARGS: "--jobs=${{ env.JOBS }} --test_tag_filters=k8s,-manual,-colocated,-system_test_hourly,-system_test_nightly --k8s" + BAZEL_EXTRA_ARGS: "--local_test_jobs=${{ env.JOBS }} --test_tag_filters=k8s,-manual,-colocated,-long_test,-system_test_hourly,-system_test_nightly --k8s" BUILDEVENT_APIKEY: ${{ secrets.HONEYCOMB_API_TOKEN }} - name: Upload bazel-bep @@ -103,26 +109,19 @@ jobs: group: ln1 labels: dind-large container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME -e KUBECONFIG --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp timeout-minutes: 150 + # always run after 'system-tests-k8s' job only on manual dispatch and schedule + if: ${{ always() && (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') }} needs: [system-tests-k8s] - # always run after 'system-tests-k8s' job but on schedule event only - if: ${{ always() && github.event_name == 'schedule' }} steps: - name: Checkout uses: actions/checkout@v4 - - name: Login to Dockerhub - shell: bash - run: ./ci/scripts/docker-login.sh - env: - DOCKER_HUB_USER: ${{ vars.DOCKER_HUB_USER }} - DOCKER_HUB_PASSWORD_RO: ${{ secrets.DOCKER_HUB_PASSWORD_RO }} - - name: Set KUBECONFIG shell: bash run: | @@ -131,6 +130,25 @@ jobs: env: TNET_KUBECONFIG: ${{ secrets.TNET_KUBECONFIG }} + - name: Get Bazel Target List + shell: bash + run: | + # Query Bazel for targets: system tests with k8s flag AND (long_test flag OR system_test_hourly flag) + T=$(bazel query 'attr(tags, "k8s", tests(attr(tags, "long_test|system_test_hourly", //...))) except attr(tags, "colocated|manual|system_test_nightly", //...)') + + # Handle empty target list + if [[ -z "$T" ]]; then + echo "No Bazel targets found matching the criteria." + echo "TARGETS=" >> $GITHUB_ENV + exit 1 + fi + + # Convert to space-separated list and trim + T=$(echo "$T" | tr '\n' ' ' | sed -e 's/,$//' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') + + # Export to GitHub environment + echo "TARGETS=$T" >> $GITHUB_ENV + - name: Run System Tests on K8s id: bazel-test-all uses: ./.github/actions/bazel-test-all/ @@ -140,7 +158,7 @@ jobs: BAZEL_COMMAND: "test" BAZEL_TARGETS: "${{ env.TARGETS }}" BAZEL_CI_CONFIG: "--config=ci --repository_cache=/cache/bazel" - BAZEL_EXTRA_ARGS: "--jobs=${{ env.JOBS }} --test_tag_filters=k8s,system_test_hourly,-manual,-colocated,-system_test_nightly --k8s" + BAZEL_EXTRA_ARGS: "--local_test_jobs=${{ env.JOBS }} --test_tag_filters=k8s --k8s --flaky_test_attempts=3" BUILDEVENT_APIKEY: ${{ secrets.HONEYCOMB_API_TOKEN }} - name: Upload bazel-bep diff --git a/.github/workflows/test-namespace-darwin.yaml b/.github/workflows/test-namespace-darwin.yaml index 69f85eb4fa8..2f89d52daca 100644 --- a/.github/workflows/test-namespace-darwin.yaml +++ b/.github/workflows/test-namespace-darwin.yaml @@ -32,6 +32,9 @@ jobs: # Build and test, excluding 'upload' jobs that are not required on macOS (used in reproducibility tests) - name: Test run: | + # Until we have a hermetic CC toolchain, tell bazel to use the "real" clang + # (instead of Apple's, which sometimes breaks on wasm32) + export CC=/opt/homebrew/opt/llvm/bin/clang bazel \ --noworkspace_rc \ --bazelrc=./bazel/conf/.bazelrc.build --bazelrc=/tmp/bazel-cache.bazelrc \ diff --git a/.github/workflows/update-mainnet-revisions.yaml b/.github/workflows/update-mainnet-revisions.yaml index d847894404e..605c82259e1 100644 --- a/.github/workflows/update-mainnet-revisions.yaml +++ b/.github/workflows/update-mainnet-revisions.yaml @@ -38,7 +38,7 @@ jobs: runs-on: labels: dind-small container: - image: ghcr.io/dfinity/ic-build@sha256:4fd13b47285e783c3a6f35aadd9559d097c0de162a1cf221ead66ab1598d5d45 + image: ghcr.io/dfinity/ic-build@sha256:2e8185171700872d48fdfb4b08e175fca5be27b3fbbc4d7bed681ec8486f8b1d options: >- -e NODE_NAME --privileged --cgroupns host -v /cache:/cache -v /var/sysimage:/var/sysimage -v /var/tmp:/var/tmp -v /ceph-s3-info:/ceph-s3-info steps: diff --git a/Cargo.Bazel.Fuzzing.json.lock b/Cargo.Bazel.Fuzzing.json.lock index 0193c3d81d8..62b92f3b732 100644 --- a/Cargo.Bazel.Fuzzing.json.lock +++ b/Cargo.Bazel.Fuzzing.json.lock @@ -1,5 +1,5 @@ { - "checksum": "cb75bff2d9f6d8056d5a1b773fe08cd804f54831a43b9b23ed7da9d675a827c2", + "checksum": "e2f0c9fb8047d4200e8e14e235a3d28792aef48b70952cf21a1f849ff9ea495d", "crates": { "abnf 0.12.0": { "name": "abnf", @@ -537,7 +537,7 @@ "target": "regex_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -969,7 +969,7 @@ "target": "regex_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -1646,7 +1646,7 @@ "target": "schemars" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -1821,14 +1821,14 @@ ], "license_file": null }, - "allocator-api2 0.2.16": { + "allocator-api2 0.2.21": { "name": "allocator-api2", - "version": "0.2.16", + "version": "0.2.21", "package_url": "https://github.com/zakarumych/allocator-api2", "repository": { "Http": { - "url": "https://static.crates.io/crates/allocator-api2/0.2.16/download", - "sha256": "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + "url": "https://static.crates.io/crates/allocator-api2/0.2.21/download", + "sha256": "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" } }, "targets": [ @@ -1857,14 +1857,14 @@ "selects": {} }, "edition": "2018", - "version": "0.2.16" + "version": "0.2.21" }, "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], - "license_file": "license" + "license_file": "LICENSE-APACHE" }, "android-tzdata 0.1.1": { "name": "android-tzdata", @@ -2674,7 +2674,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -2772,7 +2772,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -3123,7 +3123,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -3284,6 +3284,62 @@ ], "license_file": "LICENSE-APACHE" }, + "async-channel 1.9.0": { + "name": "async-channel", + "version": "1.9.0", + "package_url": "https://github.com/smol-rs/async-channel", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/async-channel/1.9.0/download", + "sha256": "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" + } + }, + "targets": [ + { + "Library": { + "crate_name": "async_channel", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "async_channel", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "concurrent-queue 2.5.0", + "target": "concurrent_queue" + }, + { + "id": "event-listener 2.5.3", + "target": "event_listener" + }, + { + "id": "futures-core 0.3.31", + "target": "futures_core" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.9.0" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "async-channel 2.3.1": { "name": "async-channel", "version": "2.3.1", @@ -4103,6 +4159,54 @@ ], "license_file": "LICENSE-APACHE" }, + "async-watch 0.3.1": { + "name": "async-watch", + "version": "0.3.1", + "package_url": "https://github.com/cynecx/async-watch", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/async-watch/0.3.1/download", + "sha256": "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" + } + }, + "targets": [ + { + "Library": { + "crate_name": "async_watch", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "async_watch", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "event-listener 2.5.3", + "target": "event_listener" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.3.1" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "async-web-client 0.6.2": { "name": "async-web-client", "version": "0.6.2", @@ -4545,7 +4649,7 @@ "target": "pin_project_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -4808,7 +4912,7 @@ "target": "pin_project_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -5335,7 +5439,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -5802,7 +5906,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6028,7 +6132,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6720,7 +6824,7 @@ "target": "secp256k1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6836,7 +6940,7 @@ "target": "secp256k1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde", "alias": "actual_serde" } @@ -7297,7 +7401,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -7357,7 +7461,7 @@ "alias": "internals" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -7476,7 +7580,7 @@ "target": "log" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -7531,7 +7635,7 @@ "target": "bitcoin" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -8739,7 +8843,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -8875,14 +8979,14 @@ ], "license_file": null }, - "bumpalo 3.14.0": { + "bumpalo 3.16.0": { "name": "bumpalo", - "version": "3.14.0", + "version": "3.16.0", "package_url": "https://github.com/fitzgen/bumpalo", "repository": { "Http": { - "url": "https://static.crates.io/crates/bumpalo/3.14.0/download", - "sha256": "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + "url": "https://static.crates.io/crates/bumpalo/3.16.0/download", + "sha256": "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" } }, "targets": [ @@ -8906,12 +9010,22 @@ ], "crate_features": { "common": [ + "allocator-api2", "default" ], "selects": {} }, + "deps": { + "common": [ + { + "id": "allocator-api2 0.2.21", + "target": "allocator_api2" + } + ], + "selects": {} + }, "edition": "2021", - "version": "3.14.0" + "version": "3.16.0" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -9045,7 +9159,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -9326,7 +9440,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -9500,7 +9614,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -9558,14 +9672,14 @@ ], "license_file": null }, - "cached 0.47.0": { + "cached 0.49.2": { "name": "cached", - "version": "0.47.0", + "version": "0.49.2", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.47.0/download", - "sha256": "69b0116662497bc24e4b177c90eaf8870e39e2714c3fcfa296327a93f593fc21" + "url": "https://static.crates.io/crates/cached/0.49.2/download", + "sha256": "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" } }, "targets": [ @@ -9587,26 +9701,8 @@ "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "ahash", - "cached_proc_macro", - "cached_proc_macro_types", - "default", - "proc_macro" - ], - "selects": {} - }, "deps": { "common": [ - { - "id": "ahash 0.8.11", - "target": "ahash" - }, - { - "id": "cached_proc_macro_types 0.1.0", - "target": "cached_proc_macro_types" - }, { "id": "hashbrown 0.14.5", "target": "hashbrown" @@ -9627,16 +9723,7 @@ "selects": {} }, "edition": "2018", - "proc_macro_deps": { - "common": [ - { - "id": "cached_proc_macro 0.18.1", - "target": "cached_proc_macro" - } - ], - "selects": {} - }, - "version": "0.47.0" + "version": "0.49.2" }, "license": "MIT", "license_ids": [ @@ -9644,14 +9731,14 @@ ], "license_file": "LICENSE" }, - "cached 0.49.2": { + "cached 0.52.0": { "name": "cached", - "version": "0.49.2", + "version": "0.52.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.49.2/download", - "sha256": "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" + "url": "https://static.crates.io/crates/cached/0.52.0/download", + "sha256": "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" } }, "targets": [ @@ -9673,8 +9760,18 @@ "compile_data_glob": [ "**" ], + "crate_features": { + "common": [ + "ahash" + ], + "selects": {} + }, "deps": { "common": [ + { + "id": "ahash 0.8.11", + "target": "ahash" + }, { "id": "hashbrown 0.14.5", "target": "hashbrown" @@ -9695,7 +9792,7 @@ "selects": {} }, "edition": "2018", - "version": "0.49.2" + "version": "0.52.0" }, "license": "MIT", "license_ids": [ @@ -9703,14 +9800,14 @@ ], "license_file": "LICENSE" }, - "cached 0.52.0": { + "cached 0.54.0": { "name": "cached", - "version": "0.52.0", + "version": "0.54.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.52.0/download", - "sha256": "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" + "url": "https://static.crates.io/crates/cached/0.54.0/download", + "sha256": "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" } }, "targets": [ @@ -9734,7 +9831,11 @@ ], "crate_features": { "common": [ - "ahash" + "ahash", + "cached_proc_macro", + "cached_proc_macro_types", + "default", + "proc_macro" ], "selects": {} }, @@ -9745,12 +9846,12 @@ "target": "ahash" }, { - "id": "hashbrown 0.14.5", - "target": "hashbrown" + "id": "cached_proc_macro_types 0.1.1", + "target": "cached_proc_macro_types" }, { - "id": "instant 0.1.12", - "target": "instant" + "id": "hashbrown 0.14.5", + "target": "hashbrown" }, { "id": "once_cell 1.19.0", @@ -9759,12 +9860,25 @@ { "id": "thiserror 1.0.68", "target": "thiserror" + }, + { + "id": "web-time 1.1.0", + "target": "web_time" } ], "selects": {} }, "edition": "2018", - "version": "0.52.0" + "proc_macro_deps": { + "common": [ + { + "id": "cached_proc_macro 0.23.0", + "target": "cached_proc_macro" + } + ], + "selects": {} + }, + "version": "0.54.0" }, "license": "MIT", "license_ids": [ @@ -9772,14 +9886,14 @@ ], "license_file": "LICENSE" }, - "cached_proc_macro 0.18.1": { + "cached_proc_macro 0.23.0": { "name": "cached_proc_macro", - "version": "0.18.1", + "version": "0.23.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached_proc_macro/0.18.1/download", - "sha256": "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" + "url": "https://static.crates.io/crates/cached_proc_macro/0.23.0/download", + "sha256": "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" } }, "targets": [ @@ -9804,7 +9918,7 @@ "deps": { "common": [ { - "id": "darling 0.14.4", + "id": "darling 0.20.10", "target": "darling" }, { @@ -9816,29 +9930,29 @@ "target": "quote" }, { - "id": "syn 1.0.109", + "id": "syn 2.0.87", "target": "syn" } ], "selects": {} }, "edition": "2018", - "version": "0.18.1" + "version": "0.23.0" }, "license": "MIT", "license_ids": [ "MIT" ], - "license_file": null + "license_file": "LICENSE" }, - "cached_proc_macro_types 0.1.0": { + "cached_proc_macro_types 0.1.1": { "name": "cached_proc_macro_types", - "version": "0.1.0", + "version": "0.1.1", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached_proc_macro_types/0.1.0/download", - "sha256": "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" + "url": "https://static.crates.io/crates/cached_proc_macro_types/0.1.1/download", + "sha256": "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" } }, "targets": [ @@ -9861,13 +9975,13 @@ "**" ], "edition": "2018", - "version": "0.1.0" + "version": "0.1.1" }, "license": "MIT", "license_ids": [ "MIT" ], - "license_file": null + "license_file": "LICENSE" }, "camino 1.1.6": { "name": "camino", @@ -9924,7 +10038,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -10028,7 +10142,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10099,7 +10213,7 @@ "target": "ic_cdk" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -10257,7 +10371,7 @@ "target": "pretty" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10528,7 +10642,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -10594,7 +10708,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10652,20 +10766,14 @@ ], "license_file": "LICENSE-APACHE" }, - "cc 1.0.83": { + "cc 1.1.37": { "name": "cc", - "version": "1.0.83", + "version": "1.1.37", "package_url": "https://github.com/rust-lang/cc-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/cc/1.0.83/download", - "sha256": "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@//bazel:cc_rs.patch" - ] + "url": "https://static.crates.io/crates/cc/1.1.37/download", + "sha256": "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" } }, "targets": [ @@ -10691,97 +10799,98 @@ "common": [], "selects": { "aarch64-apple-darwin": [ - "jobserver", "parallel" ], "aarch64-pc-windows-msvc": [ - "jobserver", "parallel" ], "aarch64-unknown-linux-gnu": [ - "jobserver", "parallel" ], "aarch64-unknown-nixos-gnu": [ - "jobserver", "parallel" ], "arm-unknown-linux-gnueabi": [ - "jobserver", "parallel" ], "i686-pc-windows-msvc": [ - "jobserver", "parallel" ], "i686-unknown-linux-gnu": [ - "jobserver", "parallel" ], "powerpc-unknown-linux-gnu": [ - "jobserver", "parallel" ], "s390x-unknown-linux-gnu": [ - "jobserver", "parallel" ], "x86_64-apple-darwin": [ - "jobserver", "parallel" ], "x86_64-pc-windows-msvc": [ - "jobserver", "parallel" ], "x86_64-unknown-freebsd": [ - "jobserver", "parallel" ], "x86_64-unknown-linux-gnu": [ - "jobserver", "parallel" ], "x86_64-unknown-nixos-gnu": [ - "jobserver", "parallel" ] } }, "deps": { - "common": [], + "common": [ + { + "id": "shlex 1.3.0", + "target": "shlex" + } + ], "selects": { "aarch64-apple-darwin": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-pc-windows-msvc": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "aarch64-unknown-linux-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-unknown-nixos-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "arm-unknown-linux-gnueabi": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" - } - ], - "cfg(unix)": [ + }, { "id": "libc 0.2.158", "target": "libc" @@ -10789,62 +10898,90 @@ ], "i686-pc-windows-msvc": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "i686-unknown-linux-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "powerpc-unknown-linux-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "s390x-unknown-linux-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-apple-darwin": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-pc-windows-msvc": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "x86_64-unknown-freebsd": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-unknown-linux-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-unknown-nixos-gnu": [ { - "id": "jobserver 0.1.27", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ] } }, "edition": "2018", - "version": "1.0.83" + "version": "1.1.37" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -10973,7 +11110,7 @@ "target": "regex_syntax" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -11008,19 +11145,19 @@ "target": "crossterm" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "crossterm 0.27.0", "target": "crossterm" @@ -11144,7 +11281,7 @@ "target": "wasm_bindgen" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "serde-wasm-bindgen 0.5.0", "target": "serde_wasm_bindgen" @@ -11166,25 +11303,25 @@ "target": "crossterm" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "crossterm 0.27.0", "target": "crossterm" @@ -11624,7 +11761,7 @@ "target": "num_traits" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -11647,12 +11784,6 @@ "target": "iana_time_zone" } ], - "aarch64-fuchsia": [ - { - "id": "iana-time-zone 0.1.59", - "target": "iana_time_zone" - } - ], "aarch64-linux-android": [ { "id": "android-tzdata 0.1.1", @@ -11669,6 +11800,12 @@ "target": "windows_targets" } ], + "aarch64-unknown-fuchsia": [ + { + "id": "iana-time-zone 0.1.59", + "target": "iana_time_zone" + } + ], "aarch64-unknown-linux-gnu": [ { "id": "iana-time-zone 0.1.59", @@ -11777,12 +11914,6 @@ "target": "iana_time_zone" } ], - "x86_64-fuchsia": [ - { - "id": "iana-time-zone 0.1.59", - "target": "iana_time_zone" - } - ], "x86_64-linux-android": [ { "id": "android-tzdata 0.1.1", @@ -11805,6 +11936,12 @@ "target": "iana_time_zone" } ], + "x86_64-unknown-fuchsia": [ + { + "id": "iana-time-zone 0.1.59", + "target": "iana_time_zone" + } + ], "x86_64-unknown-linux-gnu": [ { "id": "iana-time-zone 0.1.59", @@ -11876,7 +12013,7 @@ "target": "ciborium_ll" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -12822,7 +12959,7 @@ "target": "reqwest" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -13151,7 +13288,7 @@ "target": "pretty_assertions" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -14033,7 +14170,7 @@ "target": "log" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -14092,7 +14229,7 @@ "target": "bitcoin_private" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -14228,14 +14365,14 @@ ], "license_file": "LICENSE-APACHE" }, - "cranelift-bforest 0.114.0": { + "cranelift-bforest 0.115.0": { "name": "cranelift-bforest", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-bforest/0.114.0/download", - "sha256": "2ba4f80548f22dc9c43911907b5e322c5555544ee85f785115701e6a28c9abe1" + "url": "https://static.crates.io/crates/cranelift-bforest/0.115.0/download", + "sha256": "ac89549be94911dd0e839b4a7db99e9ed29c17517e1c026f61066884c168aa3c" } }, "targets": [ @@ -14260,14 +14397,14 @@ "deps": { "common": [ { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14275,14 +14412,14 @@ ], "license_file": "LICENSE" }, - "cranelift-bitset 0.114.0": { + "cranelift-bitset 0.115.0": { "name": "cranelift-bitset", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-bitset/0.114.0/download", - "sha256": "005884e3649c3e5ff2dc79e8a94b138f11569cc08a91244a292714d2a86e9156" + "url": "https://static.crates.io/crates/cranelift-bitset/0.115.0/download", + "sha256": "b9bd49369f76c77e34e641af85d0956869237832c118964d08bf5f51f210875a" } }, "targets": [ @@ -14313,7 +14450,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -14323,13 +14460,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14337,14 +14474,14 @@ ], "license_file": null }, - "cranelift-codegen 0.114.0": { + "cranelift-codegen 0.115.0": { "name": "cranelift-codegen", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen/0.114.0/download", - "sha256": "fe4036255ec33ce9a37495dfbcfc4e1118fd34e693eff9a1e106336b7cd16a9b" + "url": "https://static.crates.io/crates/cranelift-codegen/0.115.0/download", + "sha256": "fd96ce9cf8efebd7f5ab8ced5a0ce44250280bbae9f593d74a6d7effc3582a35" } }, "targets": [ @@ -14391,31 +14528,31 @@ "deps": { "common": [ { - "id": "bumpalo 3.14.0", + "id": "bumpalo 3.16.0", "target": "bumpalo" }, { - "id": "cranelift-bforest 0.114.0", + "id": "cranelift-bforest 0.115.0", "target": "cranelift_bforest" }, { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "build_script_build" }, { - "id": "cranelift-codegen-shared 0.114.0", + "id": "cranelift-codegen-shared 0.115.0", "target": "cranelift_codegen_shared" }, { - "id": "cranelift-control 0.114.0", + "id": "cranelift-control 0.115.0", "target": "cranelift_control" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { @@ -14431,7 +14568,7 @@ "target": "log" }, { - "id": "regalloc2 0.10.2", + "id": "regalloc2 0.11.1", "target": "regalloc2" }, { @@ -14450,7 +14587,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -14462,11 +14599,11 @@ "deps": { "common": [ { - "id": "cranelift-codegen-meta 0.114.0", + "id": "cranelift-codegen-meta 0.115.0", "target": "cranelift_codegen_meta" }, { - "id": "cranelift-isle 0.114.0", + "id": "cranelift-isle 0.115.0", "target": "cranelift_isle" } ], @@ -14479,14 +14616,14 @@ ], "license_file": "LICENSE" }, - "cranelift-codegen-meta 0.114.0": { + "cranelift-codegen-meta 0.115.0": { "name": "cranelift-codegen-meta", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen-meta/0.114.0/download", - "sha256": "f7ca74f4b68319da11d39e894437cb6e20ec7c2e11fbbda823c3bf207beedff7", + "url": "https://static.crates.io/crates/cranelift-codegen-meta/0.115.0/download", + "sha256": "5a68e358827afe4bfb6239fcbf6fbd5ac56206ece8a99c8f5f9bbd518773281a", "patch_args": [ "-p4" ], @@ -14517,14 +14654,14 @@ "deps": { "common": [ { - "id": "cranelift-codegen-shared 0.114.0", + "id": "cranelift-codegen-shared 0.115.0", "target": "cranelift_codegen_shared" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14532,14 +14669,14 @@ ], "license_file": "LICENSE" }, - "cranelift-codegen-shared 0.114.0": { + "cranelift-codegen-shared 0.115.0": { "name": "cranelift-codegen-shared", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen-shared/0.114.0/download", - "sha256": "897e54f433a0269c4187871aa06d452214d5515d228d5bdc22219585e9eef895" + "url": "https://static.crates.io/crates/cranelift-codegen-shared/0.115.0/download", + "sha256": "e184c9767afbe73d50c55ec29abcf4c32f9baf0d9d22b86d58c4d55e06dee181" } }, "targets": [ @@ -14562,7 +14699,7 @@ "**" ], "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14570,14 +14707,14 @@ ], "license_file": "LICENSE" }, - "cranelift-control 0.114.0": { + "cranelift-control 0.115.0": { "name": "cranelift-control", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-control/0.114.0/download", - "sha256": "29cb4018f5bf59fb53f515fa9d80e6f8c5ce19f198dc538984ebd23ecf8965ec" + "url": "https://static.crates.io/crates/cranelift-control/0.115.0/download", + "sha256": "5cc7664f2a66f053e33f149e952bb5971d138e3af637f5097727ed6dc0ed95dd" } }, "targets": [ @@ -14616,7 +14753,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14624,14 +14761,14 @@ ], "license_file": "LICENSE" }, - "cranelift-entity 0.114.0": { + "cranelift-entity 0.115.0": { "name": "cranelift-entity", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-entity/0.114.0/download", - "sha256": "305399fd781a2953ac78c1396f02ff53144f39c33eb7fc7789cf4e8936d13a96" + "url": "https://static.crates.io/crates/cranelift-entity/0.115.0/download", + "sha256": "118597e3a9cf86c3556fa579a7a23b955fa18231651a52a77a2475d305a9cf84" } }, "targets": [ @@ -14664,11 +14801,11 @@ "deps": { "common": [ { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -14678,13 +14815,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14692,14 +14829,14 @@ ], "license_file": "LICENSE" }, - "cranelift-frontend 0.114.0": { + "cranelift-frontend 0.115.0": { "name": "cranelift-frontend", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-frontend/0.114.0/download", - "sha256": "9230b460a128d53653456137751d27baf567947a3ab8c0c4d6e31fd08036d81e" + "url": "https://static.crates.io/crates/cranelift-frontend/0.115.0/download", + "sha256": "7638ea1efb069a0aa18d8ee67401b6b0d19f6bfe5de5e9ede348bfc80bb0d8c7" } }, "targets": [ @@ -14731,7 +14868,7 @@ "deps": { "common": [ { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { @@ -14750,7 +14887,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14758,14 +14895,14 @@ ], "license_file": "LICENSE" }, - "cranelift-isle 0.114.0": { + "cranelift-isle 0.115.0": { "name": "cranelift-isle", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime/tree/main/cranelift/isle", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-isle/0.114.0/download", - "sha256": "b961e24ae3ec9813a24a15ae64bbd2a42e4de4d79a7f3225a412e3b94e78d1c8", + "url": "https://static.crates.io/crates/cranelift-isle/0.115.0/download", + "sha256": "15c53e1152a0b01c4ed2b1e0535602b8e86458777dd9d18b28732b16325c7dc0", "patch_args": [ "-p4" ], @@ -14814,14 +14951,14 @@ "deps": { "common": [ { - "id": "cranelift-isle 0.114.0", + "id": "cranelift-isle 0.115.0", "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -14837,14 +14974,14 @@ ], "license_file": null }, - "cranelift-native 0.114.0": { + "cranelift-native 0.115.0": { "name": "cranelift-native", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-native/0.114.0/download", - "sha256": "4d5bd76df6c9151188dfa428c863b33da5b34561b67f43c0cf3f24a794f9fa1f" + "url": "https://static.crates.io/crates/cranelift-native/0.115.0/download", + "sha256": "7b7d8f895444fa52dd7bdd0bed11bf007a7fb43af65a6deac8fcc4094c6372f7" } }, "targets": [ @@ -14876,7 +15013,7 @@ "deps": { "common": [ { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { @@ -14894,7 +15031,7 @@ } }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -15083,7 +15220,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -15109,7 +15246,7 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], @@ -15644,7 +15781,7 @@ "target": "signal_hook_mio" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "mio 0.8.10", "target": "mio" @@ -15658,7 +15795,17 @@ "target": "signal_hook_mio" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ + { + "id": "crossterm_winapi 0.9.1", + "target": "crossterm_winapi" + }, + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ], + "aarch64-unknown-fuchsia": [ { "id": "mio 0.8.10", "target": "mio" @@ -15672,16 +15819,6 @@ "target": "signal_hook_mio" } ], - "aarch64-pc-windows-msvc": [ - { - "id": "crossterm_winapi 0.9.1", - "target": "crossterm_winapi" - }, - { - "id": "winapi 0.3.9", - "target": "winapi" - } - ], "aarch64-unknown-linux-gnu": [ { "id": "mio 0.8.10", @@ -15894,7 +16031,7 @@ "target": "signal_hook_mio" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "mio 0.8.10", "target": "mio" @@ -15908,7 +16045,17 @@ "target": "signal_hook_mio" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ + { + "id": "crossterm_winapi 0.9.1", + "target": "crossterm_winapi" + }, + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ], + "x86_64-unknown-freebsd": [ { "id": "mio 0.8.10", "target": "mio" @@ -15922,17 +16069,7 @@ "target": "signal_hook_mio" } ], - "x86_64-pc-windows-msvc": [ - { - "id": "crossterm_winapi 0.9.1", - "target": "crossterm_winapi" - }, - { - "id": "winapi 0.3.9", - "target": "winapi" - } - ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "mio 0.8.10", "target": "mio" @@ -16405,7 +16542,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -16917,77 +17054,14 @@ ], "license_file": "LICENSE" }, - "darling 0.14.4": { - "name": "darling", - "version": "0.14.4", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling/0.14.4/download", - "sha256": "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" - } - }, - "targets": [ - { - "Library": { - "crate_name": "darling", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "default", - "suggestions" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "darling_core 0.14.4", - "target": "darling_core" - } - ], - "selects": {} - }, - "edition": "2018", - "proc_macro_deps": { - "common": [ - { - "id": "darling_macro 0.14.4", - "target": "darling_macro" - } - ], - "selects": {} - }, - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling 0.20.3": { + "darling 0.20.10": { "name": "darling", - "version": "0.20.3", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling/0.20.3/download", - "sha256": "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" + "url": "https://static.crates.io/crates/darling/0.20.10/download", + "sha256": "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" } }, "targets": [ @@ -17019,23 +17093,23 @@ "deps": { "common": [ { - "id": "darling_core 0.20.3", + "id": "darling_core 0.20.10", "target": "darling_core" } ], "selects": {} }, - "edition": "2018", + "edition": "2021", "proc_macro_deps": { "common": [ { - "id": "darling_macro 0.20.3", + "id": "darling_macro 0.20.10", "target": "darling_macro" } ], "selects": {} }, - "version": "0.20.3" + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -17117,14 +17191,14 @@ ], "license_file": "LICENSE" }, - "darling_core 0.14.4": { + "darling_core 0.20.10": { "name": "darling_core", - "version": "0.14.4", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling_core/0.14.4/download", - "sha256": "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" + "url": "https://static.crates.io/crates/darling_core/0.20.10/download", + "sha256": "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" } }, "targets": [ @@ -17172,81 +17246,7 @@ "target": "quote" }, { - "id": "strsim 0.10.0", - "target": "strsim" - }, - { - "id": "syn 1.0.109", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling_core 0.20.3": { - "name": "darling_core", - "version": "0.20.3", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling_core/0.20.3/download", - "sha256": "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" - } - }, - "targets": [ - { - "Library": { - "crate_name": "darling_core", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling_core", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "strsim", - "suggestions" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "fnv 1.0.7", - "target": "fnv" - }, - { - "id": "ident_case 1.0.1", - "target": "ident_case" - }, - { - "id": "proc-macro2 1.0.89", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "strsim 0.10.0", + "id": "strsim 0.11.1", "target": "strsim" }, { @@ -17256,8 +17256,8 @@ ], "selects": {} }, - "edition": "2018", - "version": "0.20.3" + "edition": "2021", + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -17320,69 +17320,14 @@ ], "license_file": "LICENSE" }, - "darling_macro 0.14.4": { - "name": "darling_macro", - "version": "0.14.4", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling_macro/0.14.4/download", - "sha256": "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" - } - }, - "targets": [ - { - "ProcMacro": { - "crate_name": "darling_macro", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling_macro", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "darling_core 0.14.4", - "target": "darling_core" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "syn 1.0.109", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling_macro 0.20.3": { + "darling_macro 0.20.10": { "name": "darling_macro", - "version": "0.20.3", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling_macro/0.20.3/download", - "sha256": "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" + "url": "https://static.crates.io/crates/darling_macro/0.20.10/download", + "sha256": "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" } }, "targets": [ @@ -17407,7 +17352,7 @@ "deps": { "common": [ { - "id": "darling_core 0.20.3", + "id": "darling_core 0.20.10", "target": "darling_core" }, { @@ -17421,8 +17366,8 @@ ], "selects": {} }, - "edition": "2018", - "version": "0.20.3" + "edition": "2021", + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -18585,7 +18530,7 @@ "target": "cargo_metadata" }, { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -18809,7 +18754,7 @@ "target": "hyper_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { @@ -18825,11 +18770,11 @@ "target": "ic_canister_log" }, { - "id": "ic-canister-sig-creation 1.0.1", + "id": "ic-canister-sig-creation 1.1.0", "target": "ic_canister_sig_creation" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { @@ -18841,11 +18786,11 @@ "target": "ic_cdk_timers" }, { - "id": "ic-certificate-verification 2.6.0", + "id": "ic-certificate-verification 3.0.2", "target": "ic_certificate_verification" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -18853,11 +18798,11 @@ "target": "ic_certified_map" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-http-gateway 0.0.0", + "id": "ic-http-gateway 0.1.0", "target": "ic_http_gateway" }, { @@ -18865,7 +18810,7 @@ "target": "ic_metrics_encoder" }, { - "id": "ic-response-verification 2.6.0", + "id": "ic-response-verification 3.0.2", "target": "ic_response_verification" }, { @@ -18881,11 +18826,11 @@ "target": "ic_test_state_machine_client" }, { - "id": "ic-transport-types 0.37.1", + "id": "ic-transport-types 0.39.2", "target": "ic_transport_types" }, { - "id": "ic-utils 0.37.0", + "id": "ic-utils 0.39.2", "target": "ic_utils" }, { @@ -18949,7 +18894,7 @@ "target": "intmap" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -19118,7 +19063,7 @@ "target": "opentelemetry_prometheus" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -19359,7 +19304,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -19466,6 +19411,10 @@ "id": "syn 1.0.109", "target": "syn" }, + { + "id": "syscalls 0.6.18", + "target": "syscalls" + }, { "id": "tar 0.4.39", "target": "tar" @@ -19534,6 +19483,10 @@ "id": "tokio-socks 0.5.2", "target": "tokio_socks" }, + { + "id": "tokio-stream 0.1.17", + "target": "tokio_stream" + }, { "id": "tokio-test 0.4.4", "target": "tokio_test" @@ -19651,11 +19604,11 @@ "target": "wasmprinter" }, { - "id": "wasmtime 27.0.0", + "id": "wasmtime 28.0.0", "target": "wasmtime" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" }, { @@ -20344,7 +20297,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -20429,6 +20382,7 @@ "common": [ "alloc", "arithmetic", + "default", "der", "digest", "hazmat", @@ -20596,7 +20550,7 @@ "target": "rand_core" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -20915,6 +20869,7 @@ "common": [ "alloc", "arithmetic", + "default", "digest", "ff", "group", @@ -21789,7 +21744,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -22027,7 +21982,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -22102,7 +22057,7 @@ "target": "once_cell" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22192,7 +22147,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22481,7 +22436,7 @@ "target": "rlp" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22562,7 +22517,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -22578,6 +22533,45 @@ ], "license_file": "LICENSE-APACHE" }, + "event-listener 2.5.3": { + "name": "event-listener", + "version": "2.5.3", + "package_url": "https://github.com/smol-rs/event-listener", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/event-listener/2.5.3/download", + "sha256": "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + } + }, + "targets": [ + { + "Library": { + "crate_name": "event_listener", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "event_listener", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "2.5.3" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "event-listener 4.0.3": { "name": "event-listener", "version": "4.0.3", @@ -22644,19 +22638,19 @@ "target": "parking" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "parking 2.1.1", "target": "parking" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "parking 2.1.1", "target": "parking" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "parking 2.1.1", "target": "parking" @@ -22776,25 +22770,25 @@ "target": "parking" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "parking 2.1.1", "target": "parking" @@ -22897,19 +22891,19 @@ "target": "parking" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "parking 2.1.1", "target": "parking" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "parking 2.1.1", "target": "parking" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "parking 2.1.1", "target": "parking" @@ -23029,25 +23023,25 @@ "target": "parking" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "parking 2.1.1", "target": "parking" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "parking 2.1.1", "target": "parking" @@ -23247,7 +23241,7 @@ "target": "num_bigint" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -23973,7 +23967,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -24295,6 +24289,44 @@ ], "license_file": "LICENSE-APACHE" }, + "foldhash 0.1.4": { + "name": "foldhash", + "version": "0.1.4", + "package_url": "https://github.com/orlp/foldhash", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/foldhash/0.1.4/download", + "sha256": "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "foldhash", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "foldhash", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2021", + "version": "0.1.4" + }, + "license": "Zlib", + "license_ids": [ + "Zlib" + ], + "license_file": "LICENSE" + }, "form_urlencoded 1.2.1": { "name": "form_urlencoded", "version": "1.2.1", @@ -26564,11 +26596,11 @@ "target": "ahash" }, { - "id": "allocator-api2 0.2.16", + "id": "allocator-api2 0.2.21", "target": "allocator_api2" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -26584,6 +26616,60 @@ ], "license_file": "LICENSE-APACHE" }, + "hashbrown 0.15.2": { + "name": "hashbrown", + "version": "0.15.2", + "package_url": "https://github.com/rust-lang/hashbrown", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/hashbrown/0.15.2/download", + "sha256": "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hashbrown", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "hashbrown", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default-hasher" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "foldhash 0.1.4", + "target": "foldhash" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "0.15.2" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "hashlink 0.8.4": { "name": "hashlink", "version": "0.8.4", @@ -27219,7 +27305,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -27522,7 +27608,7 @@ "target": "idna" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -28282,62 +28368,6 @@ ], "license_file": "LICENSE" }, - "http-body-to-bytes 0.2.0": { - "name": "http-body-to-bytes", - "version": "0.2.0", - "package_url": "https://github.com/bk-rs/http-body-ext", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/http-body-to-bytes/0.2.0/download", - "sha256": "17a08236c6f51c2ee95d840f45acf8fa9e339390e00b4ef640857b2f2a534d70" - } - }, - "targets": [ - { - "Library": { - "crate_name": "http_body_to_bytes", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "http_body_to_bytes", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "bytes 1.9.0", - "target": "bytes" - }, - { - "id": "http-body 1.0.1", - "target": "http_body" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.2.0" - }, - "license": "Apache-2.0 OR MIT", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, "http-body-util 0.1.2": { "name": "http-body-util", "version": "0.1.2", @@ -28638,7 +28668,7 @@ "target": "humantime" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -29106,15 +29136,15 @@ "webpki-roots", "webpki-tokio" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "webpki-roots", "webpki-tokio" ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ "webpki-roots", "webpki-tokio" ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ "webpki-roots", "webpki-tokio" ], @@ -29194,10 +29224,6 @@ "webpki-roots", "webpki-tokio" ], - "x86_64-fuchsia": [ - "webpki-roots", - "webpki-tokio" - ], "x86_64-linux-android": [ "webpki-roots", "webpki-tokio" @@ -29210,6 +29236,10 @@ "webpki-roots", "webpki-tokio" ], + "x86_64-unknown-fuchsia": [ + "webpki-roots", + "webpki-tokio" + ], "x86_64-unknown-linux-gnu": [ "webpki-roots", "webpki-tokio" @@ -29291,19 +29321,19 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" @@ -29423,25 +29453,25 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" @@ -29864,7 +29894,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -29878,14 +29908,14 @@ ], "license_file": "LICENSE-APACHE" }, - "ic-agent 0.37.1": { + "ic-agent 0.39.2": { "name": "ic-agent", - "version": "0.37.1", + "version": "0.39.2", "package_url": "https://github.com/dfinity/agent-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-agent/0.37.1/download", - "sha256": "3fd3fdf5e5c4f4a9fe5ca612f0febd22dcb161d2f2b75b0142326732be5e4978" + "url": "https://static.crates.io/crates/ic-agent/0.39.2/download", + "sha256": "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" } }, "targets": [ @@ -29910,19 +29940,29 @@ "crate_features": { "common": [ "default", - "experimental_sync_call", - "hyper", "pem", - "reqwest" + "ring" ], "selects": {} }, "deps": { "common": [ + { + "id": "arc-swap 1.7.1", + "target": "arc_swap" + }, + { + "id": "async-channel 1.9.0", + "target": "async_channel" + }, { "id": "async-lock 3.3.0", "target": "async_lock" }, + { + "id": "async-watch 0.3.1", + "target": "async_watch" + }, { "id": "backoff 0.4.0", "target": "backoff" @@ -29935,10 +29975,22 @@ "id": "candid 0.10.10", "target": "candid" }, + { + "id": "der 0.7.8", + "target": "der" + }, + { + "id": "ecdsa 0.16.9", + "target": "ecdsa" + }, { "id": "ed25519-consensus 2.1.0", "target": "ed25519_consensus" }, + { + "id": "elliptic-curve 0.13.8", + "target": "elliptic_curve" + }, { "id": "futures-util 0.3.31", "target": "futures_util" @@ -29956,15 +30008,11 @@ "target": "http_body" }, { - "id": "hyper 1.5.1", - "target": "hyper" - }, - { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-transport-types 0.37.1", + "id": "ic-transport-types 0.39.2", "target": "ic_transport_types" }, { @@ -30012,7 +30060,7 @@ "target": "sec1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -30032,732 +30080,32 @@ "target": "simple_asn1" }, { - "id": "thiserror 1.0.68", + "id": "stop-token 0.7.0", + "target": "stop_token" + }, + { + "id": "thiserror 2.0.3", "target": "thiserror" }, { "id": "time 0.3.36", "target": "time" }, + { + "id": "tower-service 0.3.3", + "target": "tower_service" + }, { "id": "url 2.5.3", "target": "url" } ], "selects": { - "aarch64-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-apple-ios": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-fuchsia": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "armv7-linux-androideabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], "cfg(not(target_family = \"wasm\"))": [ - { - "id": "rustls-webpki 0.102.8", - "target": "webpki" - }, { "id": "tokio 1.42.0", "target": "tokio" } - ], - "i686-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-unknown-freebsd": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "riscv32imc-unknown-none-elf": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "riscv64gc-unknown-none-elf": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "thumbv7em-none-eabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "thumbv8m.main-none-eabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-apple-ios": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-fuchsia": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-nixos-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-none": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } ] } }, @@ -30765,13 +30113,17 @@ "proc_macro_deps": { "common": [ { - "id": "serde_repr 0.1.16", + "id": "async-trait 0.1.83", + "target": "async_trait" + }, + { + "id": "serde_repr 0.1.19", "target": "serde_repr" } ], "selects": {} }, - "version": "0.37.1" + "version": "0.39.2" }, "license": "Apache-2.0", "license_ids": [ @@ -30953,7 +30305,7 @@ "target": "scopeguard" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31095,7 +30447,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31146,7 +30498,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -31161,14 +30513,16 @@ ], "license_file": "LICENSE" }, - "ic-canister-sig-creation 1.0.1": { + "ic-canister-sig-creation 1.1.0": { "name": "ic-canister-sig-creation", - "version": "1.0.1", + "version": "1.1.0", "package_url": "https://github.com/dfinity/ic-canister-sig-creation", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-canister-sig-creation/1.0.1/download", - "sha256": "5d1fc58d747480967a25810d8a90d460e7e9ea4c669ab0286541a148736513f9" + "Git": { + "remote": "https://github.com/dfinity/ic-canister-sig-creation", + "commitish": { + "Rev": "7f9e931954637526295269155881207f6c832d6d" + } } }, "targets": [ @@ -31201,15 +30555,15 @@ "target": "hex" }, { - "id": "ic-cdk 0.14.1", + "id": "ic-cdk 0.17.0", "target": "ic_cdk" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { @@ -31217,7 +30571,7 @@ "target": "lazy_static" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31233,14 +30587,14 @@ "target": "sha2" }, { - "id": "thiserror 1.0.68", + "id": "thiserror 2.0.3", "target": "thiserror" } ], "selects": {} }, "edition": "2021", - "version": "1.0.1" + "version": "1.1.0" }, "license": "Apache-2.0", "license_ids": [ @@ -31248,14 +30602,14 @@ ], "license_file": "LICENSE" }, - "ic-cbor 2.6.0": { + "ic-cbor 3.0.2": { "name": "ic-cbor", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-cbor/2.6.0/download", - "sha256": "02b0e48b4166c891e79d624f3a184b4a7c145d307576872d9a46dedb8c73ea8f" + "url": "https://static.crates.io/crates/ic-cbor/3.0.2/download", + "sha256": "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" } }, "targets": [ @@ -31284,7 +30638,7 @@ "target": "candid" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -31303,7 +30657,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -31351,7 +30705,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31379,74 +30733,6 @@ ], "license_file": "LICENSE" }, - "ic-cdk 0.14.1": { - "name": "ic-cdk", - "version": "0.14.1", - "package_url": "https://github.com/dfinity/cdk-rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk/0.14.1/download", - "sha256": "9cff1a3c3db565e3384c9c9d6d676b0a3f89a0886f4f787294d9c946d844369f" - } - }, - "targets": [ - { - "Library": { - "crate_name": "ic_cdk", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ic_cdk", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "candid 0.10.10", - "target": "candid" - }, - { - "id": "ic0 0.23.0", - "target": "ic0" - }, - { - "id": "serde 1.0.214", - "target": "serde" - }, - { - "id": "serde_bytes 0.11.15", - "target": "serde_bytes" - } - ], - "selects": {} - }, - "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "ic-cdk-macros 0.14.0", - "target": "ic_cdk_macros" - } - ], - "selects": {} - }, - "version": "0.14.1" - }, - "license": "Apache-2.0", - "license_ids": [ - "Apache-2.0" - ], - "license_file": "LICENSE" - }, "ic-cdk 0.16.0": { "name": "ic-cdk", "version": "0.16.0", @@ -31487,7 +30773,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31555,7 +30841,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31627,7 +30913,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31694,7 +30980,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31717,73 +31003,6 @@ ], "license_file": "LICENSE" }, - "ic-cdk-macros 0.14.0": { - "name": "ic-cdk-macros", - "version": "0.14.0", - "package_url": "https://github.com/dfinity/cdk-rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk-macros/0.14.0/download", - "sha256": "01dc6bc425ec048d6ac4137c7c0f2cfbd6f8b0be8efc568feae2b265f566117c" - } - }, - "targets": [ - { - "ProcMacro": { - "crate_name": "ic_cdk_macros", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ic_cdk_macros", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "candid 0.10.10", - "target": "candid" - }, - { - "id": "proc-macro2 1.0.89", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "serde 1.0.214", - "target": "serde" - }, - { - "id": "serde_tokenstream 0.2.1", - "target": "serde_tokenstream" - }, - { - "id": "syn 2.0.87", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.14.0" - }, - "license": "Apache-2.0", - "license_ids": [ - "Apache-2.0" - ], - "license_file": "LICENSE" - }, "ic-cdk-macros 0.16.0": { "name": "ic-cdk-macros", "version": "0.16.0", @@ -31828,7 +31047,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31895,7 +31114,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31962,7 +31181,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31985,14 +31204,14 @@ ], "license_file": "LICENSE" }, - "ic-certificate-verification 2.6.0": { + "ic-certificate-verification 3.0.2": { "name": "ic-certificate-verification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-certificate-verification/2.6.0/download", - "sha256": "586e09b06a93d930f6a33f5f909bb11d2e4a06be3635dd5da1eb0e6554b7dae4" + "url": "https://static.crates.io/crates/ic-certificate-verification/3.0.2/download", + "sha256": "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" } }, "targets": [ @@ -32017,7 +31236,7 @@ "deps": { "common": [ { - "id": "cached 0.47.0", + "id": "cached 0.54.0", "target": "cached" }, { @@ -32025,11 +31244,11 @@ "target": "candid" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -32064,7 +31283,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32116,7 +31335,7 @@ "target": "hex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32139,6 +31358,72 @@ ], "license_file": "LICENSE" }, + "ic-certification 3.0.2": { + "name": "ic-certification", + "version": "3.0.2", + "package_url": "https://github.com/dfinity/response-verification", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/ic-certification/3.0.2/download", + "sha256": "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ic_certification", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "ic_certification", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "serde" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "hex 0.4.3", + "target": "hex" + }, + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "serde_bytes 0.11.15", + "target": "serde_bytes" + }, + { + "id": "sha2 0.10.8", + "target": "sha2" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "3.0.2" + }, + "license": "Apache-2.0", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, "ic-certified-map 0.3.4": { "name": "ic-certified-map", "version": "0.3.4", @@ -32171,7 +31456,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32194,14 +31479,14 @@ ], "license_file": "LICENSE" }, - "ic-http-certification 2.6.0": { + "ic-http-certification 3.0.2": { "name": "ic-http-certification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-http-certification/2.6.0/download", - "sha256": "ff0b97e949845039149dc5e7ea6a7c12ee4333bb402e37bc507904643c7b3e41" + "url": "https://static.crates.io/crates/ic-http-certification/3.0.2/download", + "sha256": "479941fca8e68c2267cddf686d34ed6fb491168667ff259c08a3d65d28bd26d2" } }, "targets": [ @@ -32225,26 +31510,34 @@ ], "deps": { "common": [ + { + "id": "base64 0.22.1", + "target": "base64" + }, { "id": "candid 0.10.10", "target": "candid" }, { - "id": "http 0.2.12", + "id": "http 1.2.0", "target": "http" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, + { + "id": "serde_cbor 0.11.2", + "target": "serde_cbor" + }, { "id": "thiserror 1.0.68", "target": "thiserror" @@ -32257,7 +31550,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32265,17 +31558,14 @@ ], "license_file": "LICENSE" }, - "ic-http-gateway 0.0.0": { + "ic-http-gateway 0.1.0": { "name": "ic-http-gateway", - "version": "0.0.0", + "version": "0.1.0", "package_url": "https://github.com/dfinity/http-gateway", "repository": { - "Git": { - "remote": "https://github.com/dfinity/http-gateway", - "commitish": { - "Rev": "3be26b5a2c71bf56e05b910951c1935a1ac550c4" - }, - "strip_prefix": "packages/ic-http-gateway" + "Http": { + "url": "https://static.crates.io/crates/ic-http-gateway/0.1.0/download", + "sha256": "8e8b30a8ff19af1a7dc64b1dbe1a38f1b60c7eea566e2049f755ce3bace0e630" } }, "targets": [ @@ -32324,19 +31614,19 @@ "target": "http_body_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-response-verification 2.6.0", + "id": "ic-response-verification 3.0.2", "target": "ic_response_verification" }, { - "id": "ic-utils 0.37.0", + "id": "ic-utils 0.39.2", "target": "ic_utils" }, { @@ -32347,7 +31637,7 @@ "selects": {} }, "edition": "2021", - "version": "0.0.0" + "version": "0.1.0" }, "license": "Apache-2.0", "license_ids": [ @@ -32393,14 +31683,14 @@ ], "license_file": "LICENSE" }, - "ic-representation-independent-hash 2.6.0": { + "ic-representation-independent-hash 3.0.2": { "name": "ic-representation-independent-hash", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-representation-independent-hash/2.6.0/download", - "sha256": "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" + "url": "https://static.crates.io/crates/ic-representation-independent-hash/3.0.2/download", + "sha256": "3643f12824280580d31e47d380f1be23abee29944a1430c3ed22b164ac8e68db" } }, "targets": [ @@ -32436,7 +31726,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32444,14 +31734,14 @@ ], "license_file": null }, - "ic-response-verification 2.6.0": { + "ic-response-verification 3.0.2": { "name": "ic-response-verification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-response-verification/2.6.0/download", - "sha256": "2bef02ef84189d61a7d39889b7e9a3ae212d45c3df293513f7b2568027fd08a8" + "url": "https://static.crates.io/crates/ic-response-verification/3.0.2/download", + "sha256": "2b97514fada84797baf61a6a29f1c71695798c2628cb6013d97a5dd6ecc26df7" } }, "targets": [ @@ -32476,7 +31766,7 @@ "deps": { "common": [ { - "id": "base64 0.21.4", + "id": "base64 0.22.1", "target": "base64" }, { @@ -32492,27 +31782,27 @@ "target": "hex" }, { - "id": "http 0.2.12", + "id": "http 1.2.0", "target": "http" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { - "id": "ic-certificate-verification 2.6.0", + "id": "ic-certificate-verification 3.0.2", "target": "ic_certificate_verification" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { @@ -32543,7 +31833,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32706,7 +31996,7 @@ "target": "ciborium" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32773,7 +32063,7 @@ "target": "leb128" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32795,7 +32085,7 @@ "proc_macro_deps": { "common": [ { - "id": "serde_repr 0.1.16", + "id": "serde_repr 0.1.19", "target": "serde_repr" } ], @@ -32809,14 +32099,102 @@ ], "license_file": null }, - "ic-utils 0.37.0": { + "ic-transport-types 0.39.2": { + "name": "ic-transport-types", + "version": "0.39.2", + "package_url": "https://github.com/dfinity/agent-rs", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/ic-transport-types/0.39.2/download", + "sha256": "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ic_transport_types", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "ic_transport_types", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "candid 0.10.10", + "target": "candid" + }, + { + "id": "hex 0.4.3", + "target": "hex" + }, + { + "id": "ic-certification 3.0.2", + "target": "ic_certification" + }, + { + "id": "leb128 0.2.5", + "target": "leb128" + }, + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "serde_bytes 0.11.15", + "target": "serde_bytes" + }, + { + "id": "serde_cbor 0.11.2", + "target": "serde_cbor" + }, + { + "id": "sha2 0.10.8", + "target": "sha2" + }, + { + "id": "thiserror 2.0.3", + "target": "thiserror" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "serde_repr 0.1.19", + "target": "serde_repr" + } + ], + "selects": {} + }, + "version": "0.39.2" + }, + "license": "Apache-2.0", + "license_ids": [ + "Apache-2.0" + ], + "license_file": null + }, + "ic-utils 0.39.2": { "name": "ic-utils", - "version": "0.37.0", + "version": "0.39.2", "package_url": "https://github.com/dfinity/agent-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-utils/0.37.0/download", - "sha256": "2fa832296800758c9c921dd1704985ded6b3e6fbc3aee409727eb1f00d69a595" + "url": "https://static.crates.io/crates/ic-utils/0.39.2/download", + "sha256": "e1fb9c35ef4976a71d37f3ebf73ee43bb52b360be60d91d3a77f74fbc875dda4" } }, "targets": [ @@ -32855,7 +32233,7 @@ "target": "futures_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { @@ -32867,7 +32245,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32883,7 +32261,7 @@ "target": "strum" }, { - "id": "thiserror 1.0.68", + "id": "thiserror 2.0.3", "target": "thiserror" }, { @@ -32911,7 +32289,7 @@ ], "selects": {} }, - "version": "0.37.0" + "version": "0.39.2" }, "license": "Apache-2.0", "license_ids": [ @@ -33141,7 +32519,7 @@ "target": "rustc_demangle" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33204,7 +32582,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -33479,7 +32857,7 @@ "target": "data_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33545,7 +32923,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33694,7 +33072,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_locid 1.5.0": { @@ -33766,7 +33146,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_locid_transform 1.5.0": { @@ -33842,7 +33224,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_locid_transform_data 1.5.0": { @@ -33878,7 +33262,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_normalizer 1.5.0": { @@ -33971,7 +33357,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_normalizer_data 1.5.0": { @@ -34007,7 +33395,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_properties 1.5.1": { @@ -34088,7 +33478,9 @@ "version": "1.5.1" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_properties_data 1.5.0": { @@ -34124,7 +33516,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_provider 1.5.0": { @@ -34212,7 +33606,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_provider_macros 1.5.0": { @@ -34265,7 +33661,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "id-arena 2.2.1": { @@ -34817,7 +34215,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35069,7 +34467,7 @@ "target": "hashbrown" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35647,7 +35045,7 @@ "target": "rustls_pki_types" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -35717,7 +35115,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35827,14 +35225,14 @@ ], "license_file": "LICENSE-APACHE" }, - "ipnet 2.8.0": { + "ipnet 2.10.1": { "name": "ipnet", - "version": "2.8.0", + "version": "2.10.1", "package_url": "https://github.com/krisprice/ipnet", "repository": { "Http": { - "url": "https://static.crates.io/crates/ipnet/2.8.0/download", - "sha256": "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + "url": "https://static.crates.io/crates/ipnet/2.10.1/download", + "sha256": "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" } }, "targets": [ @@ -35859,12 +35257,22 @@ "crate_features": { "common": [ "default", + "serde", "std" ], "selects": {} }, + "deps": { + "common": [ + { + "id": "serde 1.0.217", + "target": "serde" + } + ], + "selects": {} + }, "edition": "2018", - "version": "2.8.0" + "version": "2.10.1" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -35912,7 +35320,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -36066,7 +35474,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36428,14 +35836,14 @@ ], "license_file": "LICENSE-APACHE" }, - "jobserver 0.1.27": { + "jobserver 0.1.32": { "name": "jobserver", - "version": "0.1.27", - "package_url": "https://github.com/alexcrichton/jobserver-rs", + "version": "0.1.32", + "package_url": "https://github.com/rust-lang/jobserver-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/jobserver/0.1.27/download", - "sha256": "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" + "url": "https://static.crates.io/crates/jobserver/0.1.32/download", + "sha256": "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" } }, "targets": [ @@ -36468,10 +35876,10 @@ ] } }, - "edition": "2018", - "version": "0.1.27" + "edition": "2021", + "version": "0.1.32" }, - "license": "MIT/Apache-2.0", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" @@ -36566,7 +35974,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36626,7 +36034,7 @@ "target": "pest" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -36771,7 +36179,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36835,7 +36243,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -37012,7 +36420,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -37302,7 +36710,7 @@ "target": "secrecy" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -37397,7 +36805,7 @@ "target": "k8s_openapi" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -38859,7 +38267,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -39141,7 +38549,7 @@ "target": "bindgen" }, { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39242,7 +38650,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39348,7 +38756,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39457,7 +38865,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39555,7 +38963,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39750,7 +39158,9 @@ "version": "0.7.3" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "little-loadshedder 0.2.0": { @@ -39961,7 +39371,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -40266,8 +39676,6 @@ ], "crate_features": { "common": [ - "max_level_off", - "release_max_level_off", "std" ], "selects": {} @@ -40733,7 +40141,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -41256,7 +40664,7 @@ "target": "memchr" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -41892,7 +41300,7 @@ "target": "rustls_pemfile" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -42354,10 +41762,10 @@ "aarch64-apple-ios-sim": [ "os-ext" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "os-ext" ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ "os-ext" ], "aarch64-unknown-linux-gnu": [ @@ -42402,15 +41810,15 @@ "x86_64-apple-ios": [ "os-ext" ], - "x86_64-fuchsia": [ - "os-ext" - ], "x86_64-linux-android": [ "os-ext" ], "x86_64-unknown-freebsd": [ "os-ext" ], + "x86_64-unknown-fuchsia": [ + "os-ext" + ], "x86_64-unknown-linux-gnu": [ "os-ext" ], @@ -43421,7 +42829,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -43510,7 +42918,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -44293,7 +43701,7 @@ "target": "num_traits" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -44398,7 +43806,7 @@ "target": "rand" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -45185,14 +44593,14 @@ ], "license_file": "LICENSE-APACHE" }, - "object 0.36.1": { + "object 0.36.7": { "name": "object", - "version": "0.36.1", + "version": "0.36.7", "package_url": "https://github.com/gimli-rs/object", "repository": { "Http": { - "url": "https://static.crates.io/crates/object/0.36.1/download", - "sha256": "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" + "url": "https://static.crates.io/crates/object/0.36.7/download", + "sha256": "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" } }, "targets": [ @@ -45207,6 +44615,18 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } } ], "library_target_name": "object", @@ -45236,7 +44656,7 @@ "target": "crc32fast" }, { - "id": "hashbrown 0.14.5", + "id": "hashbrown 0.15.2", "target": "hashbrown" }, { @@ -45246,12 +44666,24 @@ { "id": "memchr 2.6.4", "target": "memchr" + }, + { + "id": "object 0.36.7", + "target": "build_script_build" } ], "selects": {} }, "edition": "2018", - "version": "0.36.1" + "version": "0.36.7" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] }, "license": "Apache-2.0 OR MIT", "license_ids": [ @@ -45781,7 +45213,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -46150,7 +45582,7 @@ "target": "opentelemetry_proto" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -46374,7 +45806,7 @@ "target": "opentelemetry" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -46917,7 +46349,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -46941,14 +46373,14 @@ ], "license_file": "LICENSE" }, - "opentelemetry_sdk 0.27.0": { + "opentelemetry_sdk 0.27.1": { "name": "opentelemetry_sdk", - "version": "0.27.0", + "version": "0.27.1", "package_url": "https://github.com/open-telemetry/opentelemetry-rust", "repository": { "Http": { - "url": "https://static.crates.io/crates/opentelemetry_sdk/0.27.0/download", - "sha256": "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" + "url": "https://static.crates.io/crates/opentelemetry_sdk/0.27.1/download", + "sha256": "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" } }, "targets": [ @@ -47007,10 +46439,6 @@ "id": "glob 0.3.1", "target": "glob" }, - { - "id": "once_cell 1.19.0", - "target": "once_cell" - }, { "id": "opentelemetry 0.27.0", "target": "opentelemetry" @@ -47036,7 +46464,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -47056,7 +46484,7 @@ ], "selects": {} }, - "version": "0.27.0" + "version": "0.27.1" }, "license": "Apache-2.0", "license_ids": [ @@ -47492,7 +46920,7 @@ "target": "byte_slice_cast" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -48231,7 +47659,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -50011,7 +49439,7 @@ "target": "schemars" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -50347,7 +49775,7 @@ "target": "embedded_io" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -51327,7 +50755,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -53126,7 +52554,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -53302,14 +52730,14 @@ ], "license_file": "LICENSE" }, - "pulley-interpreter 27.0.0": { + "pulley-interpreter 28.0.0": { "name": "pulley-interpreter", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime/tree/main/pulley", "repository": { "Http": { - "url": "https://static.crates.io/crates/pulley-interpreter/27.0.0/download", - "sha256": "a3b8d81cf799e20564931e9867ca32de545188c6ee4c2e0f6e41d32f0c7dc6fb" + "url": "https://static.crates.io/crates/pulley-interpreter/28.0.0/download", + "sha256": "403a1a95f4c18a45c86c7bff13df00347afd0abcbf2e54af273c837339ffcf77" } }, "targets": [ @@ -53334,7 +52762,7 @@ "deps": { "common": [ { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { @@ -53349,7 +52777,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -54340,13 +53768,13 @@ "target": "libc" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -54436,19 +53864,19 @@ "target": "libc" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -55888,14 +55316,14 @@ ], "license_file": "LICENSE" }, - "regalloc2 0.10.2": { + "regalloc2 0.11.1": { "name": "regalloc2", - "version": "0.10.2", + "version": "0.11.1", "package_url": "https://github.com/bytecodealliance/regalloc2", "repository": { "Http": { - "url": "https://static.crates.io/crates/regalloc2/0.10.2/download", - "sha256": "12908dbeb234370af84d0579b9f68258a0f67e201412dd9a2814e6f45b2fc0f0" + "url": "https://static.crates.io/crates/regalloc2/0.11.1/download", + "sha256": "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3" } }, "targets": [ @@ -55928,7 +55356,15 @@ "deps": { "common": [ { - "id": "hashbrown 0.14.5", + "id": "allocator-api2 0.2.21", + "target": "allocator_api2" + }, + { + "id": "bumpalo 3.16.0", + "target": "bumpalo" + }, + { + "id": "hashbrown 0.15.2", "target": "hashbrown" }, { @@ -55939,10 +55375,6 @@ "id": "rustc-hash 2.0.0", "target": "rustc_hash" }, - { - "id": "slice-group-by 0.3.1", - "target": "slice_group_by" - }, { "id": "smallvec 1.13.2", "target": "smallvec" @@ -55951,7 +55383,7 @@ "selects": {} }, "edition": "2018", - "version": "0.10.2" + "version": "0.11.1" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -56574,7 +56006,7 @@ "target": "http" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -56689,7 +56121,7 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "async-compression 0.4.4", "target": "async_compression" @@ -56719,7 +56151,7 @@ "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "async-compression 0.4.4", "target": "async_compression" @@ -56749,7 +56181,7 @@ "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "async-compression 0.4.4", "target": "async_compression" @@ -56977,7 +56409,7 @@ "target": "hyper" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -57215,187 +56647,97 @@ "target": "webpki_roots" } ], - "riscv32imc-unknown-none-elf": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "riscv64gc-unknown-none-elf": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "thumbv7em-none-eabi": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "thumbv8m.main-none-eabi": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "x86_64-apple-darwin": [ - { - "id": "async-compression 0.4.4", - "target": "async_compression" - }, - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.3", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "tokio-util 0.7.13", - "target": "tokio_util" - }, - { - "id": "webpki-roots 0.25.2", - "target": "webpki_roots" - } - ], - "x86_64-apple-ios": [ + "riscv32imc-unknown-none-elf": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], + "riscv64gc-unknown-none-elf": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], + "thumbv7em-none-eabi": [ { "id": "async-compression 0.4.4", "target": "async_compression" @@ -57425,7 +56767,67 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "thumbv8m.main-none-eabi": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], + "x86_64-apple-darwin": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], + "x86_64-apple-ios": [ { "id": "async-compression 0.4.4", "target": "async_compression" @@ -57545,6 +56947,36 @@ "target": "webpki_roots" } ], + "x86_64-unknown-fuchsia": [ + { + "id": "async-compression 0.4.4", + "target": "async_compression" + }, + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.3", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "tokio-util 0.7.13", + "target": "tokio_util" + }, + { + "id": "webpki-roots 0.25.2", + "target": "webpki_roots" + } + ], "x86_64-unknown-linux-gnu": [ { "id": "async-compression 0.4.4", @@ -57724,7 +57156,7 @@ "target": "mime_guess" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -57899,7 +57331,7 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -57949,7 +57381,7 @@ "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -57999,7 +57431,7 @@ "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -58367,7 +57799,7 @@ "target": "hyper_util" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -58975,7 +58407,7 @@ "target": "wasm_streams" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "wasm-streams 0.4.0", "target": "wasm_streams" @@ -59081,7 +58513,7 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59131,7 +58563,7 @@ "target": "webpki_roots" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59181,7 +58613,7 @@ "target": "webpki_roots" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59231,7 +58663,7 @@ "target": "webpki_roots" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59807,7 +59239,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -59924,7 +59356,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -60912,7 +60344,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -61349,7 +60781,7 @@ "time", "use-libc-auxv" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "default", "event", "mm", @@ -61359,7 +60791,7 @@ "time", "use-libc-auxv" ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ "default", "event", "mm", @@ -61530,7 +60962,7 @@ "termios", "use-libc-auxv" ], - "wasm32-wasi": [ + "wasm32-wasip1": [ "default", "termios", "use-libc-auxv" @@ -61555,7 +60987,7 @@ "time", "use-libc-auxv" ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ "default", "event", "mm", @@ -61565,7 +60997,7 @@ "time", "use-libc-auxv" ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ "default", "event", "mm", @@ -61575,7 +61007,7 @@ "time", "use-libc-auxv" ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ "default", "event", "mm", @@ -61663,7 +61095,7 @@ "target": "libc" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "errno 0.3.8", "target": "errno", @@ -61674,22 +61106,22 @@ "target": "libc" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" - }, - { - "id": "libc 0.2.158", - "target": "libc" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-unknown-nto-qnx710": [ @@ -61865,7 +61297,7 @@ "target": "libc" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "errno 0.3.8", "target": "errno", @@ -61898,7 +61330,7 @@ "target": "libc" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "errno 0.3.8", "target": "errno", @@ -61909,25 +61341,25 @@ "target": "libc" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" - }, - { - "id": "libc 0.2.158", - "target": "libc" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "errno 0.3.8", "target": "errno", @@ -62398,7 +61830,7 @@ "target": "ring" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -63054,104 +62486,7 @@ "ring", "std" ], - "selects": { - "aarch64-apple-darwin": [ - "default" - ], - "aarch64-apple-ios": [ - "default" - ], - "aarch64-apple-ios-sim": [ - "default" - ], - "aarch64-fuchsia": [ - "default" - ], - "aarch64-linux-android": [ - "default" - ], - "aarch64-pc-windows-msvc": [ - "default" - ], - "aarch64-unknown-linux-gnu": [ - "default" - ], - "aarch64-unknown-nixos-gnu": [ - "default" - ], - "aarch64-unknown-nto-qnx710": [ - "default" - ], - "arm-unknown-linux-gnueabi": [ - "default" - ], - "armv7-linux-androideabi": [ - "default" - ], - "armv7-unknown-linux-gnueabi": [ - "default" - ], - "i686-apple-darwin": [ - "default" - ], - "i686-linux-android": [ - "default" - ], - "i686-pc-windows-msvc": [ - "default" - ], - "i686-unknown-freebsd": [ - "default" - ], - "i686-unknown-linux-gnu": [ - "default" - ], - "powerpc-unknown-linux-gnu": [ - "default" - ], - "riscv32imc-unknown-none-elf": [ - "default" - ], - "riscv64gc-unknown-none-elf": [ - "default" - ], - "s390x-unknown-linux-gnu": [ - "default" - ], - "thumbv7em-none-eabi": [ - "default" - ], - "thumbv8m.main-none-eabi": [ - "default" - ], - "x86_64-apple-darwin": [ - "default" - ], - "x86_64-apple-ios": [ - "default" - ], - "x86_64-fuchsia": [ - "default" - ], - "x86_64-linux-android": [ - "default" - ], - "x86_64-pc-windows-msvc": [ - "default" - ], - "x86_64-unknown-freebsd": [ - "default" - ], - "x86_64-unknown-linux-gnu": [ - "default" - ], - "x86_64-unknown-nixos-gnu": [ - "default" - ], - "x86_64-unknown-none": [ - "default" - ] - } + "selects": {} }, "deps": { "common": [ @@ -63650,7 +62985,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -64181,7 +63516,7 @@ "target": "secp256k1_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64252,7 +63587,7 @@ "target": "secp256k1_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64396,7 +63731,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64481,7 +63816,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64570,7 +63905,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64624,7 +63959,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -64968,7 +64303,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64992,14 +64327,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde 1.0.214": { + "serde 1.0.217": { "name": "serde", - "version": "1.0.214", + "version": "1.0.217", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde/1.0.214/download", - "sha256": "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" + "url": "https://static.crates.io/crates/serde/1.0.217/download", + "sha256": "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" } }, "targets": [ @@ -65047,7 +64382,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "build_script_build" } ], @@ -65057,13 +64392,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "1.0.214" + "version": "1.0.217" }, "build_script_attrs": { "compile_data_glob": [ @@ -65120,7 +64455,7 @@ "target": "hex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65171,7 +64506,7 @@ "target": "ordered_float" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65222,7 +64557,7 @@ "target": "js_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65280,7 +64615,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65339,7 +64674,7 @@ "target": "half" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65355,14 +64690,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde_derive 1.0.214": { + "serde_derive 1.0.217": { "name": "serde_derive", - "version": "1.0.214", + "version": "1.0.217", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_derive/1.0.214/download", - "sha256": "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" + "url": "https://static.crates.io/crates/serde_derive/1.0.217/download", + "sha256": "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" } }, "targets": [ @@ -65408,7 +64743,7 @@ "selects": {} }, "edition": "2015", - "version": "1.0.214" + "version": "1.0.217" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -65540,7 +64875,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65604,7 +64939,7 @@ "target": "itoa" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65656,7 +64991,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65712,7 +65047,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65728,14 +65063,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde_repr 0.1.16": { + "serde_repr 0.1.19": { "name": "serde_repr", - "version": "0.1.16", + "version": "0.1.19", "package_url": "https://github.com/dtolnay/serde-repr", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_repr/0.1.16/download", - "sha256": "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" + "url": "https://static.crates.io/crates/serde_repr/0.1.19/download", + "sha256": "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" } }, "targets": [ @@ -65775,7 +65110,7 @@ "selects": {} }, "edition": "2021", - "version": "0.1.16" + "version": "0.1.19" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -65820,7 +65155,7 @@ "target": "proc_macro2" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65879,7 +65214,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65942,7 +65277,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65998,7 +65333,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -66069,7 +65404,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -66186,7 +65521,7 @@ "deps": { "common": [ { - "id": "darling 0.20.3", + "id": "darling 0.20.10", "target": "darling" }, { @@ -66254,7 +65589,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -66318,7 +65653,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -67549,44 +66884,6 @@ ], "license_file": "LICENSE" }, - "slice-group-by 0.3.1": { - "name": "slice-group-by", - "version": "0.3.1", - "package_url": "https://github.com/Kerollmops/slice-group-by", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/slice-group-by/0.3.1/download", - "sha256": "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - } - }, - "targets": [ - { - "Library": { - "crate_name": "slice_group_by", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "slice_group_by", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "edition": "2018", - "version": "0.3.1" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, "slog 2.7.0": { "name": "slog", "version": "2.7.0", @@ -67886,7 +67183,7 @@ "target": "erased_serde" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -68225,7 +67522,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -68570,15 +67867,15 @@ "aarch64-apple-ios-sim": [ "once" ], - "aarch64-fuchsia": [ - "once" - ], "aarch64-linux-android": [ "once" ], "aarch64-pc-windows-msvc": [ "once" ], + "aarch64-unknown-fuchsia": [ + "once" + ], "aarch64-unknown-linux-gnu": [ "once" ], @@ -68624,9 +67921,6 @@ "x86_64-apple-ios": [ "once" ], - "x86_64-fuchsia": [ - "once" - ], "x86_64-linux-android": [ "once" ], @@ -68636,6 +67930,9 @@ "x86_64-unknown-freebsd": [ "once" ], + "x86_64-unknown-fuchsia": [ + "once" + ], "x86_64-unknown-linux-gnu": [ "once" ], @@ -68946,7 +68243,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -68999,6 +68296,66 @@ ], "license_file": "LICENSE-APACHE" }, + "stop-token 0.7.0": { + "name": "stop-token", + "version": "0.7.0", + "package_url": "https://github.com/async-rs/stop-token", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/stop-token/0.7.0/download", + "sha256": "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "stop_token", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "stop_token", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "async-channel 1.9.0", + "target": "async_channel" + }, + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "futures-core 0.3.31", + "target": "futures_core" + }, + { + "id": "pin-project-lite 0.2.13", + "target": "pin_project_lite" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, "str_stack 0.1.0": { "name": "str_stack", "version": "0.1.0", @@ -69098,7 +68455,7 @@ "target": "precomputed_hash" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -70345,6 +69702,95 @@ ], "license_file": "LICENSE" }, + "syscalls 0.6.18": { + "name": "syscalls", + "version": "0.6.18", + "package_url": "https://github.com/jasonwhite/syscalls", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/syscalls/0.6.18/download", + "sha256": "43d0e35dc7d73976a53c7e6d7d177ef804a0c0ee774ec77bcc520c2216fd7cbe" + } + }, + "targets": [ + { + "Library": { + "crate_name": "syscalls", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "syscalls", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "serde", + "serde_repr", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "syscalls 0.6.18", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "serde_repr 0.1.19", + "target": "serde_repr" + } + ], + "selects": {} + }, + "version": "0.6.18" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] + }, + "license": "BSD-2-Clause", + "license_ids": [ + "BSD-2-Clause" + ], + "license_file": "LICENSE" + }, "system-configuration 0.5.1": { "name": "system-configuration", "version": "0.5.1", @@ -70726,13 +70172,13 @@ "target": "xattr" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "xattr 0.2.3", "target": "xattr" @@ -70828,19 +70274,19 @@ "target": "xattr" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "xattr 0.2.3", "target": "xattr" @@ -71019,7 +70465,7 @@ "target": "rand" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -72347,7 +71793,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -72524,7 +71970,7 @@ "target": "num_threads" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -72534,7 +71980,7 @@ "target": "num_threads" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -72684,7 +72130,7 @@ "target": "num_threads" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -72694,7 +72140,7 @@ "target": "num_threads" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" @@ -72704,7 +72150,7 @@ "target": "num_threads" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -73032,7 +72478,9 @@ "version": "0.7.6" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "tinytemplate 1.2.1": { @@ -73067,7 +72515,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -73415,7 +72863,7 @@ "target": "socket2" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -73429,7 +72877,17 @@ "target": "socket2" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ], + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -73443,16 +72901,6 @@ "target": "socket2" } ], - "aarch64-pc-windows-msvc": [ - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], "aarch64-unknown-linux-gnu": [ { "id": "libc 0.2.158", @@ -73689,7 +73137,7 @@ "target": "socket2" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -73703,7 +73151,17 @@ "target": "socket2" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ], + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" @@ -73717,17 +73175,7 @@ "target": "socket2" } ], - "x86_64-pc-windows-msvc": [ - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -73954,7 +73402,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -74225,7 +73673,7 @@ "target": "pin_project" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -74320,14 +73768,14 @@ ], "license_file": "LICENSE" }, - "tokio-stream 0.1.16": { + "tokio-stream 0.1.17": { "name": "tokio-stream", - "version": "0.1.16", + "version": "0.1.17", "package_url": "https://github.com/tokio-rs/tokio", "repository": { "Http": { - "url": "https://static.crates.io/crates/tokio-stream/0.1.16/download", - "sha256": "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" + "url": "https://static.crates.io/crates/tokio-stream/0.1.17/download", + "sha256": "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" } }, "targets": [ @@ -74375,7 +73823,7 @@ "selects": {} }, "edition": "2021", - "version": "0.1.16" + "version": "0.1.17" }, "license": "MIT", "license_ids": [ @@ -74431,7 +73879,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -74645,7 +74093,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -74934,7 +74382,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -76290,7 +75738,7 @@ "target": "opentelemetry" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -76368,7 +75816,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76419,7 +75867,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76574,7 +76022,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76782,7 +76230,7 @@ "target": "idna" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -77164,7 +76612,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -78136,7 +77584,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -78437,7 +77885,7 @@ "target": "getrandom" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -78673,7 +78121,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -79205,7 +78653,7 @@ "target": "scoped_tls" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -79429,7 +78877,7 @@ "deps": { "common": [ { - "id": "bumpalo 3.14.0", + "id": "bumpalo 3.16.0", "target": "bumpalo" }, { @@ -79844,14 +79292,14 @@ ], "license_file": null }, - "wasm-encoder 0.219.1": { + "wasm-encoder 0.221.2": { "name": "wasm-encoder", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasm-encoder", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasm-encoder/0.219.1/download", - "sha256": "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" + "url": "https://static.crates.io/crates/wasm-encoder/0.221.2/download", + "sha256": "c17a3bd88f2155da63a1f2fcb8a56377a24f0b6dfed12733bb5f544e86f690c5" } }, "targets": [ @@ -79890,7 +79338,7 @@ "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80156,7 +79604,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -80233,7 +79681,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -80249,14 +79697,14 @@ ], "license_file": null }, - "wasmparser 0.219.1": { + "wasmparser 0.221.2": { "name": "wasmparser", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasmparser", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmparser/0.219.1/download", - "sha256": "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" + "url": "https://static.crates.io/crates/wasmparser/0.221.2/download", + "sha256": "9845c470a2e10b61dd42c385839cdd6496363ed63b5c9e420b5488b77bd22083" } }, "targets": [ @@ -80271,6 +79719,18 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } } ], "library_target_name": "wasmparser", @@ -80283,6 +79743,7 @@ "component-model", "features", "serde", + "simd", "std", "validate" ], @@ -80290,35 +79751,35 @@ }, "deps": { "common": [ - { - "id": "ahash 0.8.11", - "target": "ahash" - }, { "id": "bitflags 2.6.0", "target": "bitflags" }, - { - "id": "hashbrown 0.14.5", - "target": "hashbrown" - }, - { - "id": "indexmap 2.2.6", - "target": "indexmap" - }, { "id": "semver 1.0.22", "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" + }, + { + "id": "wasmparser 0.221.2", + "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80383,14 +79844,14 @@ ], "license_file": null }, - "wasmprinter 0.219.1": { + "wasmprinter 0.221.2": { "name": "wasmprinter", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasmprinter", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmprinter/0.219.1/download", - "sha256": "228cdc1f30c27816da225d239ce4231f28941147d34713dee8f1fff7cb330e54" + "url": "https://static.crates.io/crates/wasmprinter/0.221.2/download", + "sha256": "a80742ff1b9e6d8c231ac7c7247782c6fc5bce503af760bca071811e5fc9ee56" } }, "targets": [ @@ -80430,14 +79891,14 @@ "target": "termcolor" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" } ], "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80446,14 +79907,14 @@ ], "license_file": null }, - "wasmtime 27.0.0": { + "wasmtime 28.0.0": { "name": "wasmtime", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime/27.0.0/download", - "sha256": "5b79302e3e084713249cc5622e8608e7410afdeeea8c8026d04f491d1fab0b4b" + "url": "https://static.crates.io/crates/wasmtime/28.0.0/download", + "sha256": "f639ecae347b9a2227e453a7b7671e84370a0b61f47a15e0390fe9b7725e47b3" } }, "targets": [ @@ -80495,6 +79956,7 @@ "once_cell", "parallel-compilation", "runtime", + "signals-based-traps", "std" ], "selects": {} @@ -80510,7 +79972,7 @@ "target": "bitflags" }, { - "id": "bumpalo 3.14.0", + "id": "bumpalo 3.16.0", "target": "bumpalo" }, { @@ -80538,7 +80000,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -80554,7 +80016,7 @@ "target": "rayon" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -80570,31 +80032,31 @@ "target": "target_lexicon" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmtime 27.0.0", + "id": "wasmtime 28.0.0", "target": "build_script_build" }, { - "id": "wasmtime-asm-macros 27.0.0", + "id": "wasmtime-asm-macros 28.0.0", "target": "wasmtime_asm_macros" }, { - "id": "wasmtime-cranelift 27.0.0", + "id": "wasmtime-cranelift 28.0.0", "target": "wasmtime_cranelift" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" }, { - "id": "wasmtime-jit-icache-coherence 27.0.0", + "id": "wasmtime-jit-icache-coherence 28.0.0", "target": "wasmtime_jit_icache_coherence" }, { - "id": "wasmtime-slab 27.0.0", + "id": "wasmtime-slab 28.0.0", "target": "wasmtime_slab" } ], @@ -80621,12 +80083,6 @@ "target": "rustix" } ], - "aarch64-fuchsia": [ - { - "id": "rustix 0.38.32", - "target": "rustix" - } - ], "aarch64-linux-android": [ { "id": "rustix 0.38.32", @@ -80639,6 +80095,12 @@ "target": "windows_sys" } ], + "aarch64-unknown-fuchsia": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], "aarch64-unknown-linux-gnu": [ { "id": "memfd 0.6.4", @@ -80769,12 +80231,6 @@ "target": "rustix" } ], - "x86_64-fuchsia": [ - { - "id": "rustix 0.38.32", - "target": "rustix" - } - ], "x86_64-linux-android": [ { "id": "rustix 0.38.32", @@ -80793,6 +80249,12 @@ "target": "rustix" } ], + "x86_64-unknown-fuchsia": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], "x86_64-unknown-linux-gnu": [ { "id": "memfd 0.6.4", @@ -80823,11 +80285,11 @@ "target": "paste" }, { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" }, { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], @@ -80854,7 +80316,7 @@ ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -80866,7 +80328,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -80875,7 +80337,7 @@ "proc_macro_deps": { "common": [ { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], @@ -80888,14 +80350,14 @@ ], "license_file": "LICENSE" }, - "wasmtime-asm-macros 27.0.0": { + "wasmtime-asm-macros 28.0.0": { "name": "wasmtime-asm-macros", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-asm-macros/27.0.0/download", - "sha256": "fe53a24e7016a5222875d8ca3ad6024b464465985693c42098cd0bb710002c28" + "url": "https://static.crates.io/crates/wasmtime-asm-macros/28.0.0/download", + "sha256": "882a18800471cfc063c8b3ccf75723784acc3fd534009ac09421f2fac2fcdcec" } }, "targets": [ @@ -80927,7 +80389,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -80935,14 +80397,14 @@ ], "license_file": null }, - "wasmtime-component-macro 27.0.0": { + "wasmtime-component-macro 28.0.0": { "name": "wasmtime-component-macro", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-component-macro/27.0.0/download", - "sha256": "e118acbd2bc09b32ad8606bc7cef793bf5019c1b107772e64dc6c76b5055d40b" + "url": "https://static.crates.io/crates/wasmtime-component-macro/28.0.0/download", + "sha256": "eb5c0a77c9e1927c3d471f53cc13767c3d3438e5d5ffd394e3eb31c86445fd60" } }, "targets": [ @@ -80995,26 +80457,26 @@ "target": "syn" }, { - "id": "wasmtime-component-macro 27.0.0", + "id": "wasmtime-component-macro 28.0.0", "target": "build_script_build" }, { - "id": "wasmtime-component-util 27.0.0", + "id": "wasmtime-component-util 28.0.0", "target": "wasmtime_component_util" }, { - "id": "wasmtime-wit-bindgen 27.0.0", + "id": "wasmtime-wit-bindgen 28.0.0", "target": "wasmtime_wit_bindgen" }, { - "id": "wit-parser 0.219.1", + "id": "wit-parser 0.221.2", "target": "wit_parser" } ], "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -81030,14 +80492,14 @@ ], "license_file": null }, - "wasmtime-component-util 27.0.0": { + "wasmtime-component-util 28.0.0": { "name": "wasmtime-component-util", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-component-util/27.0.0/download", - "sha256": "4a6db4f3ee18c699629eabb9c64e77efe5a93a5137f098db7cab295037ba41c2" + "url": "https://static.crates.io/crates/wasmtime-component-util/28.0.0/download", + "sha256": "43702ca98bf5162eca0573db691ed9ecd36d716f8c6688410fe26ec16b6f9bcb" } }, "targets": [ @@ -81060,7 +80522,7 @@ "**" ], "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81068,14 +80530,14 @@ ], "license_file": null }, - "wasmtime-cranelift 27.0.0": { + "wasmtime-cranelift 28.0.0": { "name": "wasmtime-cranelift", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-cranelift/27.0.0/download", - "sha256": "8b87e6c78f562b50aff1afd87ff32a57e241424c846c1c8f3c5fd352d2d62906" + "url": "https://static.crates.io/crates/wasmtime-cranelift/28.0.0/download", + "sha256": "20070aa5b75080a8932ec328419faf841df2bc6ceb16b55b0df2b952098392a2" } }, "targets": [ @@ -81115,23 +80577,23 @@ "target": "cfg_if" }, { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { - "id": "cranelift-control 0.114.0", + "id": "cranelift-control 0.115.0", "target": "cranelift_control" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { - "id": "cranelift-frontend 0.114.0", + "id": "cranelift-frontend 0.115.0", "target": "cranelift_frontend" }, { - "id": "cranelift-native 0.114.0", + "id": "cranelift-native 0.115.0", "target": "cranelift_native" }, { @@ -81147,7 +80609,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -81163,11 +80625,11 @@ "target": "thiserror" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" } ], @@ -81177,13 +80639,13 @@ "proc_macro_deps": { "common": [ { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81191,14 +80653,14 @@ ], "license_file": "LICENSE" }, - "wasmtime-environ 27.0.0": { + "wasmtime-environ 28.0.0": { "name": "wasmtime-environ", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-environ/27.0.0/download", - "sha256": "c25bfeaa16432d59a0706e2463d315ef4c9ebcfaf5605670b99d46373bdf9f27" + "url": "https://static.crates.io/crates/wasmtime-environ/28.0.0/download", + "sha256": "2604ddb24879d4dc1dedcb7081d7a8e017259bce916fdae097a97db52cbaab80" } }, "targets": [ @@ -81236,11 +80698,11 @@ "target": "anyhow" }, { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { @@ -81256,7 +80718,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -81264,7 +80726,7 @@ "target": "postcard" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -81276,15 +80738,15 @@ "target": "target_lexicon" }, { - "id": "wasm-encoder 0.219.1", + "id": "wasm-encoder 0.221.2", "target": "wasm_encoder" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmprinter 0.219.1", + "id": "wasmprinter 0.221.2", "target": "wasmprinter" } ], @@ -81294,13 +80756,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81308,14 +80770,133 @@ ], "license_file": "LICENSE" }, - "wasmtime-jit-icache-coherence 27.0.0": { + "wasmtime-fiber 28.0.0": { + "name": "wasmtime-fiber", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/wasmtime-fiber/28.0.0/download", + "sha256": "98593412d2b167ebe2b59d4a17a184978a72f976b53b3a0ec05629451079ac1d" + } + }, + "targets": [ + { + "Library": { + "crate_name": "wasmtime_fiber", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "wasmtime_fiber", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "wasmtime-asm-macros 28.0.0", + "target": "wasmtime_asm_macros" + }, + { + "id": "wasmtime-fiber 28.0.0", + "target": "build_script_build" + } + ], + "selects": { + "cfg(unix)": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], + "cfg(windows)": [ + { + "id": "windows-sys 0.59.0", + "target": "windows_sys" + } + ] + } + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "wasmtime-versioned-export-macros 28.0.0", + "target": "wasmtime_versioned_export_macros" + } + ], + "selects": {} + }, + "version": "28.0.0" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.1.37", + "target": "cc" + } + ], + "selects": {} + }, + "proc_macro_deps": { + "common": [ + { + "id": "wasmtime-versioned-export-macros 28.0.0", + "target": "wasmtime_versioned_export_macros" + } + ], + "selects": {} + } + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, + "wasmtime-jit-icache-coherence 28.0.0": { "name": "wasmtime-jit-icache-coherence", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-jit-icache-coherence/27.0.0/download", - "sha256": "91b218a92866f74f35162f5d03a4e0f62cd0e1cc624285b1014275e5d4575fad" + "url": "https://static.crates.io/crates/wasmtime-jit-icache-coherence/28.0.0/download", + "sha256": "d40d7722b9e1fbeae135715710a8a2570b1e6cf72b74dd653962d89831c6c70d" } }, "targets": [ @@ -81364,7 +80945,7 @@ } }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81372,14 +80953,14 @@ ], "license_file": null }, - "wasmtime-slab 27.0.0": { + "wasmtime-slab 28.0.0": { "name": "wasmtime-slab", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-slab/27.0.0/download", - "sha256": "4d5f8acf677ee6b3b8ba400dd9753ea4769e56a95c4b30b045ac6d2d54b2f8ea" + "url": "https://static.crates.io/crates/wasmtime-slab/28.0.0/download", + "sha256": "8579c335220b4ece9aa490a0e8b46de78cd342b195ab21ff981d095e14b52383" } }, "targets": [ @@ -81402,7 +80983,7 @@ "**" ], "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81410,14 +80991,14 @@ ], "license_file": null }, - "wasmtime-versioned-export-macros 27.0.0": { + "wasmtime-versioned-export-macros 28.0.0": { "name": "wasmtime-versioned-export-macros", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-versioned-export-macros/27.0.0/download", - "sha256": "df09be00c38f49172ca9936998938476e3f2df782673a39ae2ef9fb0838341b6" + "url": "https://static.crates.io/crates/wasmtime-versioned-export-macros/28.0.0/download", + "sha256": "d7de0a56fb0a69b185968f2d7a9ba54750920a806470dff7ad8de91ac06d277e" } }, "targets": [ @@ -81457,7 +81038,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81465,14 +81046,93 @@ ], "license_file": null }, - "wasmtime-wit-bindgen 27.0.0": { + "wasmtime-winch 28.0.0": { + "name": "wasmtime-winch", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/wasmtime-winch/28.0.0/download", + "sha256": "abd309943c443f5590d12f9aba9ba63c481091c955a0a14de0c2a9e0e3aaeca9" + } + }, + "targets": [ + { + "Library": { + "crate_name": "wasmtime_winch", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "wasmtime_winch", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cranelift-codegen 0.115.0", + "target": "cranelift_codegen" + }, + { + "id": "gimli 0.31.1", + "target": "gimli" + }, + { + "id": "object 0.36.7", + "target": "object" + }, + { + "id": "target-lexicon 0.12.16", + "target": "target_lexicon" + }, + { + "id": "wasmparser 0.221.2", + "target": "wasmparser" + }, + { + "id": "wasmtime-cranelift 28.0.0", + "target": "wasmtime_cranelift" + }, + { + "id": "wasmtime-environ 28.0.0", + "target": "wasmtime_environ" + }, + { + "id": "winch-codegen 28.0.0", + "target": "winch_codegen" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "28.0.0" + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, + "wasmtime-wit-bindgen 28.0.0": { "name": "wasmtime-wit-bindgen", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-wit-bindgen/27.0.0/download", - "sha256": "bf3963c9c29df91564d8bd181eb00d0dbaeafa1b2a01e15952bb7391166b704e" + "url": "https://static.crates.io/crates/wasmtime-wit-bindgen/28.0.0/download", + "sha256": "969f83022dac3435d6469edb582ceed04cfe32aa44dc3ef16e5cb55574633df8" } }, "targets": [ @@ -81509,14 +81169,14 @@ "target": "indexmap" }, { - "id": "wit-parser 0.219.1", + "id": "wit-parser 0.221.2", "target": "wit_parser" } ], "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81563,7 +81223,7 @@ "deps": { "common": [ { - "id": "bumpalo 3.14.0", + "id": "bumpalo 3.16.0", "target": "bumpalo" }, { @@ -82485,6 +82145,109 @@ ], "license_file": null }, + "winch-codegen 28.0.0": { + "name": "winch-codegen", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/winch-codegen/28.0.0/download", + "sha256": "9110decc2983ed94de904804dcd979ba59cbabc78a94fec6b1d8468ec513d0f6" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winch_codegen", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "winch_codegen", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cranelift-codegen 0.115.0", + "target": "cranelift_codegen" + }, + { + "id": "gimli 0.31.1", + "target": "gimli" + }, + { + "id": "regalloc2 0.11.1", + "target": "regalloc2" + }, + { + "id": "smallvec 1.13.2", + "target": "smallvec" + }, + { + "id": "target-lexicon 0.12.16", + "target": "target_lexicon" + }, + { + "id": "wasmparser 0.221.2", + "target": "wasmparser" + }, + { + "id": "wasmtime-cranelift 28.0.0", + "target": "wasmtime_cranelift" + }, + { + "id": "wasmtime-environ 28.0.0", + "target": "wasmtime_environ" + }, + { + "id": "winch-codegen 28.0.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "28.0.0" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, "windows-core 0.52.0": { "name": "windows-core", "version": "0.52.0", @@ -84939,14 +84702,14 @@ ], "license_file": "LICENSE" }, - "wit-parser 0.219.1": { + "wit-parser 0.221.2": { "name": "wit-parser", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wit-parser", "repository": { "Http": { - "url": "https://static.crates.io/crates/wit-parser/0.219.1/download", - "sha256": "4a86f669283257e8e424b9a4fc3518e3ade0b95deb9fbc0f93a1876be3eda598" + "url": "https://static.crates.io/crates/wit-parser/0.221.2/download", + "sha256": "fbe1538eea6ea5ddbe5defd0dc82539ad7ba751e1631e9185d24a931f0a5adc8" } }, "targets": [ @@ -85000,7 +84763,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -85012,7 +84775,7 @@ "target": "unicode_xid" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" } ], @@ -85022,13 +84785,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -85115,7 +84878,9 @@ "version": "0.5.5" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "wsl 0.1.0": { @@ -85240,7 +85005,7 @@ "target": "data_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -85778,7 +85543,9 @@ "version": "0.7.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "yoke-derive 0.7.4": { @@ -85835,7 +85602,9 @@ "version": "0.7.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerocopy 0.7.32": { @@ -86001,7 +85770,9 @@ "version": "0.1.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerofrom-derive 0.1.4": { @@ -86058,7 +85829,9 @@ "version": "0.1.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zeroize 1.8.1": { @@ -86236,7 +86009,9 @@ "version": "0.10.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerovec-derive 0.10.3": { @@ -86289,7 +86064,9 @@ "version": "0.10.3" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zstd 0.13.2": { @@ -86509,7 +86286,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -86547,9 +86324,6 @@ "aarch64-apple-ios-sim": [ "aarch64-apple-ios-sim" ], - "aarch64-fuchsia": [ - "aarch64-fuchsia" - ], "aarch64-linux-android": [ "aarch64-linux-android" ], @@ -86557,6 +86331,9 @@ "aarch64-pc-windows-msvc": [ "aarch64-pc-windows-msvc" ], + "aarch64-unknown-fuchsia": [ + "aarch64-unknown-fuchsia" + ], "aarch64-unknown-linux-gnu": [ "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu" @@ -86599,10 +86376,10 @@ "cfg(all(not(curve25519_dalek_backend = \"fiat\"), not(curve25519_dalek_backend = \"serial\"), target_arch = \"x86_64\"))": [ "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86620,8 +86397,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-nto-qnx710", "armv7-linux-androideabi", "i686-apple-darwin", @@ -86634,12 +86411,12 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-none" ], "cfg(all(target_arch = \"aarch64\", target_env = \"msvc\", not(windows_raw_dylib)))": [ @@ -86664,7 +86441,7 @@ "wasm32-unknown-unknown" ], "cfg(all(target_arch = \"wasm32\", target_os = \"wasi\"))": [ - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(all(target_arch = \"wasm32\", target_vendor = \"unknown\", target_os = \"unknown\", target_env = \"\"))": [ "wasm32-unknown-unknown" @@ -86692,8 +86469,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86708,14 +86485,14 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], "cfg(all(unix, not(target_os = \"android\"), not(target_vendor = \"apple\"), not(target_arch = \"wasm32\")))": [ - "aarch64-fuchsia", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86725,16 +86502,16 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "x86_64-fuchsia", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], "cfg(all(unix, not(target_os = \"macos\")))": [ "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86747,9 +86524,9 @@ "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -86758,9 +86535,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86776,10 +86553,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86788,9 +86565,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86801,10 +86578,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86813,9 +86590,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86826,10 +86603,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86846,17 +86623,17 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" ], "cfg(any(target_arch = \"x86\", target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"fuchsia\", target_os = \"linux\"))))": [ - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "arm-unknown-linux-gnueabi", @@ -86869,10 +86646,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86885,10 +86662,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86931,9 +86708,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "arm-unknown-linux-gnueabi", @@ -86946,13 +86723,13 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87006,8 +86783,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87022,9 +86799,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87032,8 +86809,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87048,9 +86825,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87058,8 +86835,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87072,12 +86849,12 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87085,9 +86862,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87103,10 +86880,10 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87115,9 +86892,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87134,13 +86911,13 @@ "riscv64gc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87149,8 +86926,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87168,19 +86945,19 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" ], "cfg(not(any(target_os = \"macos\", target_os = \"ios\", target_os = \"windows\", target_arch = \"wasm32\")))": [ - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87196,9 +86973,9 @@ "s390x-unknown-linux-gnu", "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87207,8 +86984,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87227,9 +87004,9 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87238,8 +87015,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87256,12 +87033,12 @@ "s390x-unknown-linux-gnu", "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87270,9 +87047,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87292,10 +87069,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87304,9 +87081,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87326,10 +87103,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87338,8 +87115,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87357,12 +87134,12 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87371,9 +87148,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87392,13 +87169,13 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87408,16 +87185,16 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710" ], "cfg(target_arch = \"wasm32\")": [ "wasm32-unknown-unknown", - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(target_arch = \"x86\")": [ "i686-apple-darwin", @@ -87429,10 +87206,10 @@ "cfg(target_arch = \"x86_64\")": [ "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87453,8 +87230,8 @@ "cfg(target_os = \"cloudabi\")": [], "cfg(target_os = \"dragonfly\")": [], "cfg(target_os = \"fuchsia\")": [ - "aarch64-fuchsia", - "x86_64-fuchsia" + "aarch64-unknown-fuchsia", + "x86_64-unknown-fuchsia" ], "cfg(target_os = \"haiku\")": [], "cfg(target_os = \"hermit\")": [], @@ -87481,7 +87258,7 @@ ], "cfg(target_os = \"redox\")": [], "cfg(target_os = \"wasi\")": [ - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(target_os = \"windows\")": [ "aarch64-pc-windows-msvc", @@ -87493,8 +87270,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87509,9 +87286,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87560,8 +87337,8 @@ "wasm32-unknown-unknown": [ "wasm32-unknown-unknown" ], - "wasm32-wasi": [ - "wasm32-wasi" + "wasm32-wasip1": [ + "wasm32-wasip1" ], "x86_64-apple-darwin": [ "x86_64-apple-darwin" @@ -87569,9 +87346,6 @@ "x86_64-apple-ios": [ "x86_64-apple-ios" ], - "x86_64-fuchsia": [ - "x86_64-fuchsia" - ], "x86_64-linux-android": [ "x86_64-linux-android" ], @@ -87583,6 +87357,9 @@ "x86_64-unknown-freebsd": [ "x86_64-unknown-freebsd" ], + "x86_64-unknown-fuchsia": [ + "x86_64-unknown-fuchsia" + ], "x86_64-unknown-linux-gnu": [ "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" @@ -87643,7 +87420,7 @@ "candid 0.10.10", "candid_parser 0.1.2", "cargo_metadata 0.14.2", - "cc 1.0.83", + "cc 1.1.37", "cddl 0.9.4", "cfg-if 1.0.0", "chacha20poly1305 0.10.1", @@ -87700,27 +87477,27 @@ "hyper-rustls 0.27.3", "hyper-socks2 0.9.1", "hyper-util 0.1.10", - "ic-agent 0.37.1", + "ic-agent 0.39.2", "ic-bn-lib 0.1.0", "ic-btc-interface 0.2.2", "ic-canister-log 0.2.0", - "ic-canister-sig-creation 1.0.1", - "ic-cbor 2.6.0", + "ic-canister-sig-creation 1.1.0", + "ic-cbor 3.0.2", "ic-cdk 0.16.0", "ic-cdk-macros 0.9.0", "ic-cdk-timers 0.11.0", - "ic-certificate-verification 2.6.0", - "ic-certification 2.6.0", + "ic-certificate-verification 3.0.2", + "ic-certification 3.0.2", "ic-certified-map 0.3.4", - "ic-http-certification 2.6.0", - "ic-http-gateway 0.0.0", + "ic-http-certification 3.0.2", + "ic-http-gateway 0.1.0", "ic-metrics-encoder 1.1.1", - "ic-response-verification 2.6.0", + "ic-response-verification 3.0.2", "ic-sha3 1.0.0", "ic-stable-structures 0.6.5", "ic-test-state-machine-client 3.0.1", - "ic-transport-types 0.37.1", - "ic-utils 0.37.0", + "ic-transport-types 0.39.2", + "ic-utils 0.39.2", "ic-verify-bls-signature 0.6.0", "ic-wasm 0.8.4", "ic-xrc-types 1.2.0", @@ -87737,7 +87514,7 @@ "insta 1.34.0", "instant-acme 0.7.2", "intmap 1.1.0", - "ipnet 2.8.0", + "ipnet 2.10.1", "isocountry 0.3.2", "itertools 0.12.0", "json-patch 0.2.7", @@ -87780,7 +87557,7 @@ "opentelemetry 0.27.0", "opentelemetry-otlp 0.27.0", "opentelemetry-prometheus 0.13.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "p256 0.13.2", "pairing 0.23.0", "parking_lot 0.12.1", @@ -87844,7 +87621,7 @@ "scraper 0.17.1", "secp256k1 0.22.2", "semver 1.0.22", - "serde 1.0.214", + "serde 1.0.217", "serde-bytes-repr 0.1.5", "serde_bytes 0.11.15", "serde_cbor 0.11.2", @@ -87872,6 +87649,7 @@ "stubborn-io 0.3.2", "subtle 2.6.1", "syn 1.0.109", + "syscalls 0.6.18", "tar 0.4.39", "tarpc 0.34.0", "tempfile 3.12.0", @@ -87890,6 +87668,7 @@ "tokio-rustls 0.26.0", "tokio-serde 0.8.0", "tokio-socks 0.5.2", + "tokio-stream 0.1.17", "tokio-test 0.4.4", "tokio-util 0.7.13", "toml 0.5.11", @@ -87919,8 +87698,8 @@ "wasm-smith 0.212.0", "wasmparser 0.217.0", "wasmprinter 0.217.0", - "wasmtime 27.0.0", - "wasmtime-environ 27.0.0", + "wasmtime 28.0.0", + "wasmtime-environ 28.0.0", "wast 212.0.0", "wat 1.212.0", "wee_alloc 0.4.5", @@ -87933,5 +87712,6 @@ "zeroize 1.8.1", "zstd 0.13.2" ], - "direct_dev_deps": [] + "direct_dev_deps": [], + "unused_patches": [] } diff --git a/Cargo.Bazel.Fuzzing.toml.lock b/Cargo.Bazel.Fuzzing.toml.lock index 7d84abcd087..36b66b3cf23 100644 --- a/Cargo.Bazel.Fuzzing.toml.lock +++ b/Cargo.Bazel.Fuzzing.toml.lock @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -570,6 +570,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -723,6 +734,15 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "async-watch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-web-client" version = "0.6.2" @@ -1342,7 +1362,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite", @@ -1507,9 +1527,12 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] [[package]] name = "by_address" @@ -1610,13 +1633,10 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "cached" -version = "0.47.0" +version = "0.49.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b0116662497bc24e4b177c90eaf8870e39e2714c3fcfa296327a93f593fc21" +checksum = "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" dependencies = [ - "ahash 0.8.11", - "cached_proc_macro", - "cached_proc_macro_types", "hashbrown 0.14.5", "instant", "once_cell", @@ -1625,10 +1645,11 @@ dependencies = [ [[package]] name = "cached" -version = "0.49.2" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" +checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" dependencies = [ + "ahash 0.8.11", "hashbrown 0.14.5", "instant", "once_cell", @@ -1637,34 +1658,36 @@ dependencies = [ [[package]] name = "cached" -version = "0.52.0" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" +checksum = "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" dependencies = [ "ahash 0.8.11", + "cached_proc_macro", + "cached_proc_macro_types", "hashbrown 0.14.5", - "instant", "once_cell", "thiserror 1.0.68", + "web-time", ] [[package]] name = "cached_proc_macro" -version = "0.18.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" +checksum = "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" dependencies = [ - "darling 0.14.4", + "darling 0.20.10", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "cached_proc_macro_types" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "camino" @@ -1804,12 +1827,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.83" +version = "1.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -2341,18 +2365,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba4f80548f22dc9c43911907b5e322c5555544ee85f785115701e6a28c9abe1" +checksum = "ac89549be94911dd0e839b4a7db99e9ed29c17517e1c026f61066884c168aa3c" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-bitset" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005884e3649c3e5ff2dc79e8a94b138f11569cc08a91244a292714d2a86e9156" +checksum = "b9bd49369f76c77e34e641af85d0956869237832c118964d08bf5f51f210875a" dependencies = [ "serde", "serde_derive", @@ -2360,9 +2384,9 @@ dependencies = [ [[package]] name = "cranelift-codegen" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4036255ec33ce9a37495dfbcfc4e1118fd34e693eff9a1e106336b7cd16a9b" +checksum = "fd96ce9cf8efebd7f5ab8ced5a0ce44250280bbae9f593d74a6d7effc3582a35" dependencies = [ "bumpalo", "cranelift-bforest", @@ -2384,33 +2408,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ca74f4b68319da11d39e894437cb6e20ec7c2e11fbbda823c3bf207beedff7" +checksum = "5a68e358827afe4bfb6239fcbf6fbd5ac56206ece8a99c8f5f9bbd518773281a" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e54f433a0269c4187871aa06d452214d5515d228d5bdc22219585e9eef895" +checksum = "e184c9767afbe73d50c55ec29abcf4c32f9baf0d9d22b86d58c4d55e06dee181" [[package]] name = "cranelift-control" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cb4018f5bf59fb53f515fa9d80e6f8c5ce19f198dc538984ebd23ecf8965ec" +checksum = "5cc7664f2a66f053e33f149e952bb5971d138e3af637f5097727ed6dc0ed95dd" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305399fd781a2953ac78c1396f02ff53144f39c33eb7fc7789cf4e8936d13a96" +checksum = "118597e3a9cf86c3556fa579a7a23b955fa18231651a52a77a2475d305a9cf84" dependencies = [ "cranelift-bitset", "serde", @@ -2419,9 +2443,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9230b460a128d53653456137751d27baf567947a3ab8c0c4d6e31fd08036d81e" +checksum = "7638ea1efb069a0aa18d8ee67401b6b0d19f6bfe5de5e9ede348bfc80bb0d8c7" dependencies = [ "cranelift-codegen", "log", @@ -2431,15 +2455,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b961e24ae3ec9813a24a15ae64bbd2a42e4de4d79a7f3225a412e3b94e78d1c8" +checksum = "15c53e1152a0b01c4ed2b1e0535602b8e86458777dd9d18b28732b16325c7dc0" [[package]] name = "cranelift-native" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5bd76df6c9151188dfa428c863b33da5b34561b67f43c0cf3f24a794f9fa1f" +checksum = "7b7d8f895444fa52dd7bdd0bed11bf007a7fb43af65a6deac8fcc4094c6372f7" dependencies = [ "cranelift-codegen", "libc", @@ -2720,22 +2744,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -2754,29 +2768,15 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", + "strsim 0.11.1", "syn 2.0.87", ] @@ -2793,22 +2793,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.3", + "darling_core 0.20.10", "quote", "syn 2.0.87", ] @@ -3094,7 +3083,7 @@ dependencies = [ "ic-cdk-macros 0.9.0", "ic-cdk-timers", "ic-certificate-verification", - "ic-certification", + "ic-certification 3.0.2", "ic-certified-map", "ic-http-certification", "ic-http-gateway", @@ -3103,7 +3092,7 @@ dependencies = [ "ic-sha3", "ic-stable-structures", "ic-test-state-machine-client", - "ic-transport-types", + "ic-transport-types 0.39.2", "ic-utils", "ic-verify-bls-signature 0.6.0", "ic-wasm", @@ -3164,7 +3153,7 @@ dependencies = [ "opentelemetry 0.27.0", "opentelemetry-otlp", "opentelemetry-prometheus 0.13.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "p256", "pairing", "parking_lot 0.12.1", @@ -3256,6 +3245,7 @@ dependencies = [ "stubborn-io", "subtle", "syn 1.0.109", + "syscalls", "tar", "tarpc", "tempfile", @@ -3274,6 +3264,7 @@ dependencies = [ "tokio-rustls 0.26.0", "tokio-serde", "tokio-socks", + "tokio-stream", "tokio-test", "tokio-util", "toml", @@ -3792,6 +3783,12 @@ dependencies = [ "serde", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "4.0.3" @@ -4008,6 +4005,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -4389,6 +4392,16 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", + "serde", +] + [[package]] name = "hashlink" version = "0.8.4" @@ -4685,17 +4698,6 @@ dependencies = [ "http 1.2.0", ] -[[package]] -name = "http-body-to-bytes" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17a08236c6f51c2ee95d840f45acf8fa9e339390e00b4ef640857b2f2a534d70" -dependencies = [ - "bytes", - "http-body 1.0.1", - "http-body-util", -] - [[package]] name = "http-body-util" version = "0.1.2" @@ -4919,26 +4921,28 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.37.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd3fdf5e5c4f4a9fe5ca612f0febd22dcb161d2f2b75b0142326732be5e4978" +checksum = "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" dependencies = [ + "arc-swap", + "async-channel 1.9.0", "async-lock", + "async-trait", + "async-watch", "backoff", "cached 0.52.0", "candid", + "der", + "ecdsa", "ed25519-consensus", + "elliptic-curve", "futures-util", "hex", "http 1.2.0", "http-body 1.0.1", - "http-body-to-bytes", - "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", - "hyper-util", - "ic-certification", - "ic-transport-types", + "ic-certification 3.0.2", + "ic-transport-types 0.39.2", "ic-verify-bls-signature 0.5.0", "k256", "leb128", @@ -4949,7 +4953,6 @@ dependencies = [ "rangemap", "reqwest 0.12.9", "ring 0.17.7", - "rustls-webpki 0.102.8", "sec1", "serde", "serde_bytes", @@ -4957,10 +4960,11 @@ dependencies = [ "serde_repr", "sha2 0.10.8", "simple_asn1", - "thiserror 1.0.68", + "stop-token", + "thiserror 2.0.3", "time", "tokio", - "tower 0.4.13", + "tower-service", "url", ] @@ -5051,31 +5055,30 @@ dependencies = [ [[package]] name = "ic-canister-sig-creation" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1fc58d747480967a25810d8a90d460e7e9ea4c669ab0286541a148736513f9" +version = "1.1.0" +source = "git+https://github.com/dfinity/ic-canister-sig-creation?rev=7f9e931954637526295269155881207f6c832d6d#7f9e931954637526295269155881207f6c832d6d" dependencies = [ "candid", "hex", - "ic-cdk 0.14.1", - "ic-certification", + "ic-cdk 0.17.0", + "ic-certification 3.0.2", "ic-representation-independent-hash", "lazy_static", "serde", "serde_bytes", "serde_cbor", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 2.0.3", ] [[package]] name = "ic-cbor" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b0e48b4166c891e79d624f3a184b4a7c145d307576872d9a46dedb8c73ea8f" +checksum = "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" dependencies = [ "candid", - "ic-certification", + "ic-certification 3.0.2", "leb128", "nom", "thiserror 1.0.68", @@ -5094,19 +5097,6 @@ dependencies = [ "serde_bytes", ] -[[package]] -name = "ic-cdk" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cff1a3c3db565e3384c9c9d6d676b0a3f89a0886f4f787294d9c946d844369f" -dependencies = [ - "candid", - "ic-cdk-macros 0.14.0", - "ic0 0.23.0", - "serde", - "serde_bytes", -] - [[package]] name = "ic-cdk" version = "0.16.0" @@ -5161,20 +5151,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ic-cdk-macros" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01dc6bc425ec048d6ac4137c7c0f2cfbd6f8b0be8efc568feae2b265f566117c" -dependencies = [ - "candid", - "proc-macro2", - "quote", - "serde", - "serde_tokenstream 0.2.1", - "syn 2.0.87", -] - [[package]] name = "ic-cdk-macros" version = "0.16.0" @@ -5219,14 +5195,14 @@ dependencies = [ [[package]] name = "ic-certificate-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "586e09b06a93d930f6a33f5f909bb11d2e4a06be3635dd5da1eb0e6554b7dae4" +checksum = "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" dependencies = [ - "cached 0.47.0", + "cached 0.54.0", "candid", "ic-cbor", - "ic-certification", + "ic-certification 3.0.2", "lazy_static", "leb128", "miracl_core_bls12381", @@ -5248,6 +5224,18 @@ dependencies = [ "sha2 0.10.8", ] +[[package]] +name = "ic-certification" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" +dependencies = [ + "hex", + "serde", + "serde_bytes", + "sha2 0.10.8", +] + [[package]] name = "ic-certified-map" version = "0.3.4" @@ -5261,23 +5249,26 @@ dependencies = [ [[package]] name = "ic-http-certification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0b97e949845039149dc5e7ea6a7c12ee4333bb402e37bc507904643c7b3e41" +checksum = "479941fca8e68c2267cddf686d34ed6fb491168667ff259c08a3d65d28bd26d2" dependencies = [ + "base64 0.22.1", "candid", - "http 0.2.12", - "ic-certification", + "http 1.2.0", + "ic-certification 3.0.2", "ic-representation-independent-hash", "serde", + "serde_cbor", "thiserror 1.0.68", "urlencoding", ] [[package]] name = "ic-http-gateway" -version = "0.0.0" -source = "git+https://github.com/dfinity/http-gateway?tag=0.1.0-b0#3be26b5a2c71bf56e05b910951c1935a1ac550c4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8b30a8ff19af1a7dc64b1dbe1a38f1b60c7eea566e2049f755ce3bace0e630" dependencies = [ "bytes", "candid", @@ -5300,9 +5291,9 @@ checksum = "8b5c7628eac357aecda461130f8074468be5aa4d258a002032d82d817f79f1f8" [[package]] name = "ic-representation-independent-hash" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" +checksum = "3643f12824280580d31e47d380f1be23abee29944a1430c3ed22b164ac8e68db" dependencies = [ "leb128", "sha2 0.10.8", @@ -5310,18 +5301,18 @@ dependencies = [ [[package]] name = "ic-response-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef02ef84189d61a7d39889b7e9a3ae212d45c3df293513f7b2568027fd08a8" +checksum = "2b97514fada84797baf61a6a29f1c71695798c2628cb6013d97a5dd6ecc26df7" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "candid", "flate2", "hex", - "http 0.2.12", + "http 1.2.0", "ic-cbor", "ic-certificate-verification", - "ic-certification", + "ic-certification 3.0.2", "ic-http-certification", "ic-representation-independent-hash", "leb128", @@ -5370,7 +5361,7 @@ checksum = "875dc4704780383112e8e8b5063a1b98de114321d0c7d3e7f635dcf360a57fba" dependencies = [ "candid", "hex", - "ic-certification", + "ic-certification 2.6.0", "leb128", "serde", "serde_bytes", @@ -5379,11 +5370,29 @@ dependencies = [ "thiserror 1.0.68", ] +[[package]] +name = "ic-transport-types" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" +dependencies = [ + "candid", + "hex", + "ic-certification 3.0.2", + "leb128", + "serde", + "serde_bytes", + "serde_cbor", + "serde_repr", + "sha2 0.10.8", + "thiserror 2.0.3", +] + [[package]] name = "ic-utils" -version = "0.37.0" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa832296800758c9c921dd1704985ded6b3e6fbc3aee409727eb1f00d69a595" +checksum = "e1fb9c35ef4976a71d37f3ebf73ee43bb52b360be60d91d3a77f74fbc875dda4" dependencies = [ "async-trait", "candid", @@ -5396,7 +5405,7 @@ dependencies = [ "sha2 0.10.8", "strum 0.26.3", "strum_macros 0.26.4", - "thiserror 1.0.68", + "thiserror 2.0.3", "time", "tokio", ] @@ -5914,9 +5923,12 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +dependencies = [ + "serde", +] [[package]] name = "ipnetwork" @@ -6009,9 +6021,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -7322,12 +7334,12 @@ dependencies = [ [[package]] name = "object" -version = "0.36.1" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "indexmap 2.2.6", "memchr", ] @@ -7476,7 +7488,7 @@ dependencies = [ "http 1.2.0", "opentelemetry 0.27.0", "opentelemetry-proto", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "prost 0.13.3", "thiserror 1.0.68", "tokio", @@ -7517,7 +7529,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "prost 0.13.3", "tonic", ] @@ -7624,16 +7636,15 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" +checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" dependencies = [ "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", - "once_cell", "opentelemetry 0.27.0", "percent-encoding", "rand 0.8.5", @@ -8137,8 +8148,8 @@ dependencies = [ "base64 0.13.1", "candid", "hex", - "ic-certification", - "ic-transport-types", + "ic-certification 2.6.0", + "ic-transport-types 0.37.1", "reqwest 0.12.9", "schemars", "serde", @@ -8677,9 +8688,9 @@ dependencies = [ [[package]] name = "pulley-interpreter" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b8d81cf799e20564931e9867ca32de545188c6ee4c2e0f6e41d32f0c7dc6fb" +checksum = "403a1a95f4c18a45c86c7bff13df00347afd0abcbf2e54af273c837339ffcf77" dependencies = [ "cranelift-bitset", "log", @@ -9088,14 +9099,15 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.10.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12908dbeb234370af84d0579b9f68258a0f67e201412dd9a2814e6f45b2fc0f0" +checksum = "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3" dependencies = [ - "hashbrown 0.14.5", + "allocator-api2", + "bumpalo", + "hashbrown 0.15.2", "log", "rustc-hash 2.0.0", - "slice-group-by", "smallvec", ] @@ -10019,9 +10031,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.214" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -10079,9 +10091,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", @@ -10146,9 +10158,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", @@ -10234,7 +10246,7 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.3", + "darling 0.20.10", "proc-macro2", "quote", "syn 2.0.87", @@ -10458,12 +10470,6 @@ dependencies = [ "autocfg 1.1.0", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "slog" version = "2.7.0" @@ -10672,6 +10678,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stop-token" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" +dependencies = [ + "async-channel 1.9.0", + "cfg-if 1.0.0", + "futures-core", + "pin-project-lite", +] + [[package]] name = "str_stack" version = "0.1.0" @@ -10876,6 +10894,16 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "syscalls" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d0e35dc7d73976a53c7e6d7d177ef804a0c0ee774ec77bcc520c2216fd7cbe" +dependencies = [ + "serde", + "serde_repr", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -11406,9 +11434,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -11764,7 +11792,7 @@ dependencies = [ "js-sys", "once_cell", "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "smallvec", "tracing", "tracing-core", @@ -12355,12 +12383,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" +checksum = "c17a3bd88f2155da63a1f2fcb8a56377a24f0b6dfed12733bb5f544e86f690c5" dependencies = [ "leb128", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] @@ -12432,13 +12460,12 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" +checksum = "9845c470a2e10b61dd42c385839cdd6496363ed63b5c9e420b5488b77bd22083" dependencies = [ - "ahash 0.8.11", "bitflags 2.6.0", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "indexmap 2.2.6", "semver", "serde", @@ -12457,20 +12484,20 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228cdc1f30c27816da225d239ce4231f28941147d34713dee8f1fff7cb330e54" +checksum = "a80742ff1b9e6d8c231ac7c7247782c6fc5bce503af760bca071811e5fc9ee56" dependencies = [ "anyhow", "termcolor", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] name = "wasmtime" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b79302e3e084713249cc5622e8608e7410afdeeea8c8026d04f491d1fab0b4b" +checksum = "f639ecae347b9a2227e453a7b7671e84370a0b61f47a15e0390fe9b7725e47b3" dependencies = [ "anyhow", "bitflags 2.6.0", @@ -12484,7 +12511,7 @@ dependencies = [ "log", "mach2", "memfd", - "object 0.36.1", + "object 0.36.7", "once_cell", "paste", "postcard", @@ -12497,31 +12524,33 @@ dependencies = [ "smallvec", "sptr", "target-lexicon", - "wasmparser 0.219.1", + "wasmparser 0.221.2", "wasmtime-asm-macros", "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", + "wasmtime-fiber", "wasmtime-jit-icache-coherence", "wasmtime-slab", "wasmtime-versioned-export-macros", + "wasmtime-winch", "windows-sys 0.59.0", ] [[package]] name = "wasmtime-asm-macros" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe53a24e7016a5222875d8ca3ad6024b464465985693c42098cd0bb710002c28" +checksum = "882a18800471cfc063c8b3ccf75723784acc3fd534009ac09421f2fac2fcdcec" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-component-macro" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e118acbd2bc09b32ad8606bc7cef793bf5019c1b107772e64dc6c76b5055d40b" +checksum = "eb5c0a77c9e1927c3d471f53cc13767c3d3438e5d5ffd394e3eb31c86445fd60" dependencies = [ "anyhow", "proc-macro2", @@ -12534,15 +12563,15 @@ dependencies = [ [[package]] name = "wasmtime-component-util" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6db4f3ee18c699629eabb9c64e77efe5a93a5137f098db7cab295037ba41c2" +checksum = "43702ca98bf5162eca0573db691ed9ecd36d716f8c6688410fe26ec16b6f9bcb" [[package]] name = "wasmtime-cranelift" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b87e6c78f562b50aff1afd87ff32a57e241424c846c1c8f3c5fd352d2d62906" +checksum = "20070aa5b75080a8932ec328419faf841df2bc6ceb16b55b0df2b952098392a2" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -12554,20 +12583,20 @@ dependencies = [ "gimli 0.31.1", "itertools 0.12.0", "log", - "object 0.36.1", + "object 0.36.7", "smallvec", "target-lexicon", "thiserror 1.0.68", - "wasmparser 0.219.1", + "wasmparser 0.221.2", "wasmtime-environ", "wasmtime-versioned-export-macros", ] [[package]] name = "wasmtime-environ" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25bfeaa16432d59a0706e2463d315ef4c9ebcfaf5605670b99d46373bdf9f27" +checksum = "2604ddb24879d4dc1dedcb7081d7a8e017259bce916fdae097a97db52cbaab80" dependencies = [ "anyhow", "cranelift-bitset", @@ -12575,22 +12604,37 @@ dependencies = [ "gimli 0.31.1", "indexmap 2.2.6", "log", - "object 0.36.1", + "object 0.36.7", "postcard", "serde", "serde_derive", "smallvec", "target-lexicon", - "wasm-encoder 0.219.1", - "wasmparser 0.219.1", - "wasmprinter 0.219.1", + "wasm-encoder 0.221.2", + "wasmparser 0.221.2", + "wasmprinter 0.221.2", +] + +[[package]] +name = "wasmtime-fiber" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98593412d2b167ebe2b59d4a17a184978a72f976b53b3a0ec05629451079ac1d" +dependencies = [ + "anyhow", + "cc", + "cfg-if 1.0.0", + "rustix", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys 0.59.0", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b218a92866f74f35162f5d03a4e0f62cd0e1cc624285b1014275e5d4575fad" +checksum = "d40d7722b9e1fbeae135715710a8a2570b1e6cf72b74dd653962d89831c6c70d" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -12600,26 +12644,43 @@ dependencies = [ [[package]] name = "wasmtime-slab" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5f8acf677ee6b3b8ba400dd9753ea4769e56a95c4b30b045ac6d2d54b2f8ea" +checksum = "8579c335220b4ece9aa490a0e8b46de78cd342b195ab21ff981d095e14b52383" [[package]] name = "wasmtime-versioned-export-macros" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df09be00c38f49172ca9936998938476e3f2df782673a39ae2ef9fb0838341b6" +checksum = "d7de0a56fb0a69b185968f2d7a9ba54750920a806470dff7ad8de91ac06d277e" dependencies = [ "proc-macro2", "quote", "syn 2.0.87", ] +[[package]] +name = "wasmtime-winch" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abd309943c443f5590d12f9aba9ba63c481091c955a0a14de0c2a9e0e3aaeca9" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "object 0.36.7", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", + "winch-codegen", +] + [[package]] name = "wasmtime-wit-bindgen" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3963c9c29df91564d8bd181eb00d0dbaeafa1b2a01e15952bb7391166b704e" +checksum = "969f83022dac3435d6469edb582ceed04cfe32aa44dc3ef16e5cb55574633df8" dependencies = [ "anyhow", "heck 0.5.0", @@ -12760,6 +12821,23 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winch-codegen" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9110decc2983ed94de904804dcd979ba59cbabc78a94fec6b1d8468ec513d0f6" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "regalloc2", + "smallvec", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -13043,9 +13121,9 @@ dependencies = [ [[package]] name = "wit-parser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a86f669283257e8e424b9a4fc3518e3ade0b95deb9fbc0f93a1876be3eda598" +checksum = "fbe1538eea6ea5ddbe5defd0dc82539ad7ba751e1631e9185d24a931f0a5adc8" dependencies = [ "anyhow", "id-arena", @@ -13056,7 +13134,7 @@ dependencies = [ "serde_derive", "serde_json", "unicode-xid", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] diff --git a/Cargo.Bazel.json.lock b/Cargo.Bazel.json.lock index 681e97b733b..ae3a6e269f4 100644 --- a/Cargo.Bazel.json.lock +++ b/Cargo.Bazel.json.lock @@ -1,5 +1,5 @@ { - "checksum": "6fe3acd7d34fb9438b36f7ec483d8e3f6f4e0a9ba130dc790a394422c002a555", + "checksum": "c940ed0c71e779f38de47e366662d71cd883022d89016936e1952a55719fe089", "crates": { "abnf 0.12.0": { "name": "abnf", @@ -537,7 +537,7 @@ "target": "regex_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -973,7 +973,7 @@ "target": "regex_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -1650,7 +1650,7 @@ "target": "schemars" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -1825,14 +1825,14 @@ ], "license_file": null }, - "allocator-api2 0.2.16": { + "allocator-api2 0.2.21": { "name": "allocator-api2", - "version": "0.2.16", + "version": "0.2.21", "package_url": "https://github.com/zakarumych/allocator-api2", "repository": { "Http": { - "url": "https://static.crates.io/crates/allocator-api2/0.2.16/download", - "sha256": "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + "url": "https://static.crates.io/crates/allocator-api2/0.2.21/download", + "sha256": "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" } }, "targets": [ @@ -1861,14 +1861,14 @@ "selects": {} }, "edition": "2018", - "version": "0.2.16" + "version": "0.2.21" }, "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], - "license_file": "license" + "license_file": "LICENSE-APACHE" }, "android-tzdata 0.1.1": { "name": "android-tzdata", @@ -2678,7 +2678,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -2776,7 +2776,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -3127,7 +3127,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -3288,6 +3288,62 @@ ], "license_file": "LICENSE-APACHE" }, + "async-channel 1.9.0": { + "name": "async-channel", + "version": "1.9.0", + "package_url": "https://github.com/smol-rs/async-channel", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/async-channel/1.9.0/download", + "sha256": "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" + } + }, + "targets": [ + { + "Library": { + "crate_name": "async_channel", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "async_channel", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "concurrent-queue 2.5.0", + "target": "concurrent_queue" + }, + { + "id": "event-listener 2.5.3", + "target": "event_listener" + }, + { + "id": "futures-core 0.3.31", + "target": "futures_core" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.9.0" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "async-channel 2.3.1": { "name": "async-channel", "version": "2.3.1", @@ -4107,6 +4163,54 @@ ], "license_file": "LICENSE-APACHE" }, + "async-watch 0.3.1": { + "name": "async-watch", + "version": "0.3.1", + "package_url": "https://github.com/cynecx/async-watch", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/async-watch/0.3.1/download", + "sha256": "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" + } + }, + "targets": [ + { + "Library": { + "crate_name": "async_watch", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "async_watch", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "event-listener 2.5.3", + "target": "event_listener" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.3.1" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "async-web-client 0.6.2": { "name": "async-web-client", "version": "0.6.2", @@ -4549,7 +4653,7 @@ "target": "pin_project_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -4812,7 +4916,7 @@ "target": "pin_project_lite" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -5336,7 +5440,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -5803,7 +5907,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6029,7 +6133,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6700,7 +6804,7 @@ "target": "secp256k1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -6795,7 +6899,7 @@ "target": "secp256k1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde", "alias": "actual_serde" } @@ -7214,7 +7318,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -7274,7 +7378,7 @@ "alias": "internals" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -7393,7 +7497,7 @@ "target": "log" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -7448,7 +7552,7 @@ "target": "bitcoin" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -8656,7 +8760,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -8823,10 +8927,20 @@ ], "crate_features": { "common": [ + "allocator-api2", "default" ], "selects": {} }, + "deps": { + "common": [ + { + "id": "allocator-api2 0.2.21", + "target": "allocator_api2" + } + ], + "selects": {} + }, "edition": "2021", "version": "3.16.0" }, @@ -8962,7 +9076,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -9243,7 +9357,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -9417,7 +9531,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -9475,14 +9589,14 @@ ], "license_file": null }, - "cached 0.47.0": { + "cached 0.49.2": { "name": "cached", - "version": "0.47.0", + "version": "0.49.2", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.47.0/download", - "sha256": "69b0116662497bc24e4b177c90eaf8870e39e2714c3fcfa296327a93f593fc21" + "url": "https://static.crates.io/crates/cached/0.49.2/download", + "sha256": "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" } }, "targets": [ @@ -9504,26 +9618,8 @@ "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "ahash", - "cached_proc_macro", - "cached_proc_macro_types", - "default", - "proc_macro" - ], - "selects": {} - }, "deps": { "common": [ - { - "id": "ahash 0.8.11", - "target": "ahash" - }, - { - "id": "cached_proc_macro_types 0.1.0", - "target": "cached_proc_macro_types" - }, { "id": "hashbrown 0.14.5", "target": "hashbrown" @@ -9544,16 +9640,7 @@ "selects": {} }, "edition": "2018", - "proc_macro_deps": { - "common": [ - { - "id": "cached_proc_macro 0.18.1", - "target": "cached_proc_macro" - } - ], - "selects": {} - }, - "version": "0.47.0" + "version": "0.49.2" }, "license": "MIT", "license_ids": [ @@ -9561,14 +9648,14 @@ ], "license_file": "LICENSE" }, - "cached 0.49.2": { + "cached 0.52.0": { "name": "cached", - "version": "0.49.2", + "version": "0.52.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.49.2/download", - "sha256": "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" + "url": "https://static.crates.io/crates/cached/0.52.0/download", + "sha256": "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" } }, "targets": [ @@ -9590,8 +9677,18 @@ "compile_data_glob": [ "**" ], + "crate_features": { + "common": [ + "ahash" + ], + "selects": {} + }, "deps": { "common": [ + { + "id": "ahash 0.8.11", + "target": "ahash" + }, { "id": "hashbrown 0.14.5", "target": "hashbrown" @@ -9612,7 +9709,7 @@ "selects": {} }, "edition": "2018", - "version": "0.49.2" + "version": "0.52.0" }, "license": "MIT", "license_ids": [ @@ -9620,14 +9717,14 @@ ], "license_file": "LICENSE" }, - "cached 0.52.0": { + "cached 0.54.0": { "name": "cached", - "version": "0.52.0", + "version": "0.54.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached/0.52.0/download", - "sha256": "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" + "url": "https://static.crates.io/crates/cached/0.54.0/download", + "sha256": "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" } }, "targets": [ @@ -9651,7 +9748,11 @@ ], "crate_features": { "common": [ - "ahash" + "ahash", + "cached_proc_macro", + "cached_proc_macro_types", + "default", + "proc_macro" ], "selects": {} }, @@ -9662,12 +9763,12 @@ "target": "ahash" }, { - "id": "hashbrown 0.14.5", - "target": "hashbrown" + "id": "cached_proc_macro_types 0.1.1", + "target": "cached_proc_macro_types" }, { - "id": "instant 0.1.12", - "target": "instant" + "id": "hashbrown 0.14.5", + "target": "hashbrown" }, { "id": "once_cell 1.19.0", @@ -9676,12 +9777,25 @@ { "id": "thiserror 1.0.68", "target": "thiserror" + }, + { + "id": "web-time 1.1.0", + "target": "web_time" } ], "selects": {} }, "edition": "2018", - "version": "0.52.0" + "proc_macro_deps": { + "common": [ + { + "id": "cached_proc_macro 0.23.0", + "target": "cached_proc_macro" + } + ], + "selects": {} + }, + "version": "0.54.0" }, "license": "MIT", "license_ids": [ @@ -9689,14 +9803,14 @@ ], "license_file": "LICENSE" }, - "cached_proc_macro 0.18.1": { + "cached_proc_macro 0.23.0": { "name": "cached_proc_macro", - "version": "0.18.1", + "version": "0.23.0", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached_proc_macro/0.18.1/download", - "sha256": "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" + "url": "https://static.crates.io/crates/cached_proc_macro/0.23.0/download", + "sha256": "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" } }, "targets": [ @@ -9721,7 +9835,7 @@ "deps": { "common": [ { - "id": "darling 0.14.4", + "id": "darling 0.20.10", "target": "darling" }, { @@ -9733,29 +9847,29 @@ "target": "quote" }, { - "id": "syn 1.0.109", + "id": "syn 2.0.87", "target": "syn" } ], "selects": {} }, "edition": "2018", - "version": "0.18.1" + "version": "0.23.0" }, "license": "MIT", "license_ids": [ "MIT" ], - "license_file": null + "license_file": "LICENSE" }, - "cached_proc_macro_types 0.1.0": { + "cached_proc_macro_types 0.1.1": { "name": "cached_proc_macro_types", - "version": "0.1.0", + "version": "0.1.1", "package_url": "https://github.com/jaemk/cached", "repository": { "Http": { - "url": "https://static.crates.io/crates/cached_proc_macro_types/0.1.0/download", - "sha256": "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" + "url": "https://static.crates.io/crates/cached_proc_macro_types/0.1.1/download", + "sha256": "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" } }, "targets": [ @@ -9778,13 +9892,13 @@ "**" ], "edition": "2018", - "version": "0.1.0" + "version": "0.1.1" }, "license": "MIT", "license_ids": [ "MIT" ], - "license_file": null + "license_file": "LICENSE" }, "camino 1.1.6": { "name": "camino", @@ -9841,7 +9955,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -9945,7 +10059,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10016,7 +10130,7 @@ "target": "ic_cdk" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -10174,7 +10288,7 @@ "target": "pretty" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10424,7 +10538,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -10490,7 +10604,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10548,20 +10662,14 @@ ], "license_file": "LICENSE-APACHE" }, - "cc 1.0.83": { + "cc 1.1.37": { "name": "cc", - "version": "1.0.83", + "version": "1.1.37", "package_url": "https://github.com/rust-lang/cc-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/cc/1.0.83/download", - "sha256": "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0", - "patch_args": [ - "-p1" - ], - "patches": [ - "@@//bazel:cc_rs.patch" - ] + "url": "https://static.crates.io/crates/cc/1.1.37/download", + "sha256": "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" } }, "targets": [ @@ -10587,97 +10695,98 @@ "common": [], "selects": { "aarch64-apple-darwin": [ - "jobserver", "parallel" ], "aarch64-pc-windows-msvc": [ - "jobserver", "parallel" ], "aarch64-unknown-linux-gnu": [ - "jobserver", "parallel" ], "aarch64-unknown-nixos-gnu": [ - "jobserver", "parallel" ], "arm-unknown-linux-gnueabi": [ - "jobserver", "parallel" ], "i686-pc-windows-msvc": [ - "jobserver", "parallel" ], "i686-unknown-linux-gnu": [ - "jobserver", "parallel" ], "powerpc-unknown-linux-gnu": [ - "jobserver", "parallel" ], "s390x-unknown-linux-gnu": [ - "jobserver", "parallel" ], "x86_64-apple-darwin": [ - "jobserver", "parallel" ], "x86_64-pc-windows-msvc": [ - "jobserver", "parallel" ], "x86_64-unknown-freebsd": [ - "jobserver", "parallel" ], "x86_64-unknown-linux-gnu": [ - "jobserver", "parallel" ], "x86_64-unknown-nixos-gnu": [ - "jobserver", "parallel" ] } }, "deps": { - "common": [], + "common": [ + { + "id": "shlex 1.3.0", + "target": "shlex" + } + ], "selects": { "aarch64-apple-darwin": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-pc-windows-msvc": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "aarch64-unknown-linux-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-unknown-nixos-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "arm-unknown-linux-gnueabi": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" - } - ], - "cfg(unix)": [ + }, { "id": "libc 0.2.158", "target": "libc" @@ -10685,62 +10794,90 @@ ], "i686-pc-windows-msvc": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "i686-unknown-linux-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "powerpc-unknown-linux-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "s390x-unknown-linux-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-apple-darwin": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-pc-windows-msvc": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" } ], "x86_64-unknown-freebsd": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-unknown-linux-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "x86_64-unknown-nixos-gnu": [ { - "id": "jobserver 0.1.26", + "id": "jobserver 0.1.32", "target": "jobserver" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ] } }, "edition": "2018", - "version": "1.0.83" + "version": "1.1.37" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -10869,7 +11006,7 @@ "target": "regex_syntax" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -10904,19 +11041,19 @@ "target": "crossterm" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "crossterm 0.27.0", "target": "crossterm" @@ -11040,7 +11177,7 @@ "target": "wasm_bindgen" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "serde-wasm-bindgen 0.5.0", "target": "serde_wasm_bindgen" @@ -11062,25 +11199,25 @@ "target": "crossterm" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "crossterm 0.27.0", "target": "crossterm" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "crossterm 0.27.0", "target": "crossterm" @@ -11520,7 +11657,7 @@ "target": "num_traits" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -11543,12 +11680,6 @@ "target": "iana_time_zone" } ], - "aarch64-fuchsia": [ - { - "id": "iana-time-zone 0.1.59", - "target": "iana_time_zone" - } - ], "aarch64-linux-android": [ { "id": "android-tzdata 0.1.1", @@ -11565,6 +11696,12 @@ "target": "windows_targets" } ], + "aarch64-unknown-fuchsia": [ + { + "id": "iana-time-zone 0.1.59", + "target": "iana_time_zone" + } + ], "aarch64-unknown-linux-gnu": [ { "id": "iana-time-zone 0.1.59", @@ -11673,12 +11810,6 @@ "target": "iana_time_zone" } ], - "x86_64-fuchsia": [ - { - "id": "iana-time-zone 0.1.59", - "target": "iana_time_zone" - } - ], "x86_64-linux-android": [ { "id": "android-tzdata 0.1.1", @@ -11701,6 +11832,12 @@ "target": "iana_time_zone" } ], + "x86_64-unknown-fuchsia": [ + { + "id": "iana-time-zone 0.1.59", + "target": "iana_time_zone" + } + ], "x86_64-unknown-linux-gnu": [ { "id": "iana-time-zone 0.1.59", @@ -11772,7 +11909,7 @@ "target": "ciborium_ll" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -12718,7 +12855,7 @@ "target": "reqwest" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -13047,7 +13184,7 @@ "target": "pretty_assertions" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -13861,7 +13998,7 @@ "target": "log" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -13920,7 +14057,7 @@ "target": "bitcoin_private" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -14056,14 +14193,14 @@ ], "license_file": "LICENSE-APACHE" }, - "cranelift-bforest 0.114.0": { + "cranelift-bforest 0.115.0": { "name": "cranelift-bforest", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-bforest/0.114.0/download", - "sha256": "2ba4f80548f22dc9c43911907b5e322c5555544ee85f785115701e6a28c9abe1" + "url": "https://static.crates.io/crates/cranelift-bforest/0.115.0/download", + "sha256": "ac89549be94911dd0e839b4a7db99e9ed29c17517e1c026f61066884c168aa3c" } }, "targets": [ @@ -14088,14 +14225,14 @@ "deps": { "common": [ { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14103,14 +14240,14 @@ ], "license_file": "LICENSE" }, - "cranelift-bitset 0.114.0": { + "cranelift-bitset 0.115.0": { "name": "cranelift-bitset", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-bitset/0.114.0/download", - "sha256": "005884e3649c3e5ff2dc79e8a94b138f11569cc08a91244a292714d2a86e9156" + "url": "https://static.crates.io/crates/cranelift-bitset/0.115.0/download", + "sha256": "b9bd49369f76c77e34e641af85d0956869237832c118964d08bf5f51f210875a" } }, "targets": [ @@ -14141,7 +14278,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -14151,13 +14288,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14165,14 +14302,14 @@ ], "license_file": null }, - "cranelift-codegen 0.114.0": { + "cranelift-codegen 0.115.0": { "name": "cranelift-codegen", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen/0.114.0/download", - "sha256": "fe4036255ec33ce9a37495dfbcfc4e1118fd34e693eff9a1e106336b7cd16a9b" + "url": "https://static.crates.io/crates/cranelift-codegen/0.115.0/download", + "sha256": "fd96ce9cf8efebd7f5ab8ced5a0ce44250280bbae9f593d74a6d7effc3582a35" } }, "targets": [ @@ -14223,27 +14360,27 @@ "target": "bumpalo" }, { - "id": "cranelift-bforest 0.114.0", + "id": "cranelift-bforest 0.115.0", "target": "cranelift_bforest" }, { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "build_script_build" }, { - "id": "cranelift-codegen-shared 0.114.0", + "id": "cranelift-codegen-shared 0.115.0", "target": "cranelift_codegen_shared" }, { - "id": "cranelift-control 0.114.0", + "id": "cranelift-control 0.115.0", "target": "cranelift_control" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { @@ -14259,7 +14396,7 @@ "target": "log" }, { - "id": "regalloc2 0.10.2", + "id": "regalloc2 0.11.1", "target": "regalloc2" }, { @@ -14278,7 +14415,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -14290,11 +14427,11 @@ "deps": { "common": [ { - "id": "cranelift-codegen-meta 0.114.0", + "id": "cranelift-codegen-meta 0.115.0", "target": "cranelift_codegen_meta" }, { - "id": "cranelift-isle 0.114.0", + "id": "cranelift-isle 0.115.0", "target": "cranelift_isle" } ], @@ -14307,14 +14444,14 @@ ], "license_file": "LICENSE" }, - "cranelift-codegen-meta 0.114.0": { + "cranelift-codegen-meta 0.115.0": { "name": "cranelift-codegen-meta", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen-meta/0.114.0/download", - "sha256": "f7ca74f4b68319da11d39e894437cb6e20ec7c2e11fbbda823c3bf207beedff7", + "url": "https://static.crates.io/crates/cranelift-codegen-meta/0.115.0/download", + "sha256": "5a68e358827afe4bfb6239fcbf6fbd5ac56206ece8a99c8f5f9bbd518773281a", "patch_args": [ "-p4" ], @@ -14345,14 +14482,14 @@ "deps": { "common": [ { - "id": "cranelift-codegen-shared 0.114.0", + "id": "cranelift-codegen-shared 0.115.0", "target": "cranelift_codegen_shared" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14360,14 +14497,14 @@ ], "license_file": "LICENSE" }, - "cranelift-codegen-shared 0.114.0": { + "cranelift-codegen-shared 0.115.0": { "name": "cranelift-codegen-shared", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-codegen-shared/0.114.0/download", - "sha256": "897e54f433a0269c4187871aa06d452214d5515d228d5bdc22219585e9eef895" + "url": "https://static.crates.io/crates/cranelift-codegen-shared/0.115.0/download", + "sha256": "e184c9767afbe73d50c55ec29abcf4c32f9baf0d9d22b86d58c4d55e06dee181" } }, "targets": [ @@ -14390,7 +14527,7 @@ "**" ], "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14398,14 +14535,14 @@ ], "license_file": "LICENSE" }, - "cranelift-control 0.114.0": { + "cranelift-control 0.115.0": { "name": "cranelift-control", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-control/0.114.0/download", - "sha256": "29cb4018f5bf59fb53f515fa9d80e6f8c5ce19f198dc538984ebd23ecf8965ec" + "url": "https://static.crates.io/crates/cranelift-control/0.115.0/download", + "sha256": "5cc7664f2a66f053e33f149e952bb5971d138e3af637f5097727ed6dc0ed95dd" } }, "targets": [ @@ -14444,7 +14581,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14452,14 +14589,14 @@ ], "license_file": "LICENSE" }, - "cranelift-entity 0.114.0": { + "cranelift-entity 0.115.0": { "name": "cranelift-entity", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-entity/0.114.0/download", - "sha256": "305399fd781a2953ac78c1396f02ff53144f39c33eb7fc7789cf4e8936d13a96" + "url": "https://static.crates.io/crates/cranelift-entity/0.115.0/download", + "sha256": "118597e3a9cf86c3556fa579a7a23b955fa18231651a52a77a2475d305a9cf84" } }, "targets": [ @@ -14492,11 +14629,11 @@ "deps": { "common": [ { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -14506,13 +14643,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14520,14 +14657,14 @@ ], "license_file": "LICENSE" }, - "cranelift-frontend 0.114.0": { + "cranelift-frontend 0.115.0": { "name": "cranelift-frontend", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-frontend/0.114.0/download", - "sha256": "9230b460a128d53653456137751d27baf567947a3ab8c0c4d6e31fd08036d81e" + "url": "https://static.crates.io/crates/cranelift-frontend/0.115.0/download", + "sha256": "7638ea1efb069a0aa18d8ee67401b6b0d19f6bfe5de5e9ede348bfc80bb0d8c7" } }, "targets": [ @@ -14559,7 +14696,7 @@ "deps": { "common": [ { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { @@ -14578,7 +14715,7 @@ "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14586,14 +14723,14 @@ ], "license_file": "LICENSE" }, - "cranelift-isle 0.114.0": { + "cranelift-isle 0.115.0": { "name": "cranelift-isle", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime/tree/main/cranelift/isle", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-isle/0.114.0/download", - "sha256": "b961e24ae3ec9813a24a15ae64bbd2a42e4de4d79a7f3225a412e3b94e78d1c8", + "url": "https://static.crates.io/crates/cranelift-isle/0.115.0/download", + "sha256": "15c53e1152a0b01c4ed2b1e0535602b8e86458777dd9d18b28732b16325c7dc0", "patch_args": [ "-p4" ], @@ -14642,14 +14779,14 @@ "deps": { "common": [ { - "id": "cranelift-isle 0.114.0", + "id": "cranelift-isle 0.115.0", "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -14665,14 +14802,14 @@ ], "license_file": null }, - "cranelift-native 0.114.0": { + "cranelift-native 0.115.0": { "name": "cranelift-native", - "version": "0.114.0", + "version": "0.115.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/cranelift-native/0.114.0/download", - "sha256": "4d5bd76df6c9151188dfa428c863b33da5b34561b67f43c0cf3f24a794f9fa1f" + "url": "https://static.crates.io/crates/cranelift-native/0.115.0/download", + "sha256": "7b7d8f895444fa52dd7bdd0bed11bf007a7fb43af65a6deac8fcc4094c6372f7" } }, "targets": [ @@ -14704,7 +14841,7 @@ "deps": { "common": [ { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { @@ -14722,7 +14859,7 @@ } }, "edition": "2021", - "version": "0.114.0" + "version": "0.115.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -14911,7 +15048,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -14937,7 +15074,7 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], @@ -15472,7 +15609,7 @@ "target": "signal_hook_mio" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "mio 0.8.10", "target": "mio" @@ -15486,7 +15623,17 @@ "target": "signal_hook_mio" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ + { + "id": "crossterm_winapi 0.9.1", + "target": "crossterm_winapi" + }, + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ], + "aarch64-unknown-fuchsia": [ { "id": "mio 0.8.10", "target": "mio" @@ -15500,16 +15647,6 @@ "target": "signal_hook_mio" } ], - "aarch64-pc-windows-msvc": [ - { - "id": "crossterm_winapi 0.9.1", - "target": "crossterm_winapi" - }, - { - "id": "winapi 0.3.9", - "target": "winapi" - } - ], "aarch64-unknown-linux-gnu": [ { "id": "mio 0.8.10", @@ -15722,7 +15859,7 @@ "target": "signal_hook_mio" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "mio 0.8.10", "target": "mio" @@ -15736,7 +15873,17 @@ "target": "signal_hook_mio" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ + { + "id": "crossterm_winapi 0.9.1", + "target": "crossterm_winapi" + }, + { + "id": "winapi 0.3.9", + "target": "winapi" + } + ], + "x86_64-unknown-freebsd": [ { "id": "mio 0.8.10", "target": "mio" @@ -15750,17 +15897,7 @@ "target": "signal_hook_mio" } ], - "x86_64-pc-windows-msvc": [ - { - "id": "crossterm_winapi 0.9.1", - "target": "crossterm_winapi" - }, - { - "id": "winapi 0.3.9", - "target": "winapi" - } - ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "mio 0.8.10", "target": "mio" @@ -16233,7 +16370,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -16745,77 +16882,14 @@ ], "license_file": "LICENSE" }, - "darling 0.14.4": { - "name": "darling", - "version": "0.14.4", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling/0.14.4/download", - "sha256": "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" - } - }, - "targets": [ - { - "Library": { - "crate_name": "darling", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "default", - "suggestions" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "darling_core 0.14.4", - "target": "darling_core" - } - ], - "selects": {} - }, - "edition": "2018", - "proc_macro_deps": { - "common": [ - { - "id": "darling_macro 0.14.4", - "target": "darling_macro" - } - ], - "selects": {} - }, - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling 0.20.3": { + "darling 0.20.10": { "name": "darling", - "version": "0.20.3", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling/0.20.3/download", - "sha256": "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" + "url": "https://static.crates.io/crates/darling/0.20.10/download", + "sha256": "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" } }, "targets": [ @@ -16847,23 +16921,23 @@ "deps": { "common": [ { - "id": "darling_core 0.20.3", + "id": "darling_core 0.20.10", "target": "darling_core" } ], "selects": {} }, - "edition": "2018", + "edition": "2021", "proc_macro_deps": { "common": [ { - "id": "darling_macro 0.20.3", + "id": "darling_macro 0.20.10", "target": "darling_macro" } ], "selects": {} }, - "version": "0.20.3" + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -16945,14 +17019,14 @@ ], "license_file": "LICENSE" }, - "darling_core 0.14.4": { + "darling_core 0.20.10": { "name": "darling_core", - "version": "0.14.4", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling_core/0.14.4/download", - "sha256": "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" + "url": "https://static.crates.io/crates/darling_core/0.20.10/download", + "sha256": "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" } }, "targets": [ @@ -17000,81 +17074,7 @@ "target": "quote" }, { - "id": "strsim 0.10.0", - "target": "strsim" - }, - { - "id": "syn 1.0.109", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling_core 0.20.3": { - "name": "darling_core", - "version": "0.20.3", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling_core/0.20.3/download", - "sha256": "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" - } - }, - "targets": [ - { - "Library": { - "crate_name": "darling_core", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling_core", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "strsim", - "suggestions" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "fnv 1.0.7", - "target": "fnv" - }, - { - "id": "ident_case 1.0.1", - "target": "ident_case" - }, - { - "id": "proc-macro2 1.0.89", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "strsim 0.10.0", + "id": "strsim 0.11.1", "target": "strsim" }, { @@ -17084,8 +17084,8 @@ ], "selects": {} }, - "edition": "2018", - "version": "0.20.3" + "edition": "2021", + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -17148,69 +17148,14 @@ ], "license_file": "LICENSE" }, - "darling_macro 0.14.4": { - "name": "darling_macro", - "version": "0.14.4", - "package_url": "https://github.com/TedDriggs/darling", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/darling_macro/0.14.4/download", - "sha256": "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" - } - }, - "targets": [ - { - "ProcMacro": { - "crate_name": "darling_macro", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "darling_macro", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "darling_core 0.14.4", - "target": "darling_core" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "syn 1.0.109", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.14.4" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "darling_macro 0.20.3": { + "darling_macro 0.20.10": { "name": "darling_macro", - "version": "0.20.3", + "version": "0.20.10", "package_url": "https://github.com/TedDriggs/darling", "repository": { "Http": { - "url": "https://static.crates.io/crates/darling_macro/0.20.3/download", - "sha256": "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" + "url": "https://static.crates.io/crates/darling_macro/0.20.10/download", + "sha256": "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" } }, "targets": [ @@ -17235,7 +17180,7 @@ "deps": { "common": [ { - "id": "darling_core 0.20.3", + "id": "darling_core 0.20.10", "target": "darling_core" }, { @@ -17249,8 +17194,8 @@ ], "selects": {} }, - "edition": "2018", - "version": "0.20.3" + "edition": "2021", + "version": "0.20.10" }, "license": "MIT", "license_ids": [ @@ -18413,7 +18358,7 @@ "target": "cargo_metadata" }, { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -18637,7 +18582,7 @@ "target": "hyper_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { @@ -18653,11 +18598,11 @@ "target": "ic_canister_log" }, { - "id": "ic-canister-sig-creation 1.0.1", + "id": "ic-canister-sig-creation 1.1.0", "target": "ic_canister_sig_creation" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { @@ -18669,11 +18614,11 @@ "target": "ic_cdk_timers" }, { - "id": "ic-certificate-verification 2.6.0", + "id": "ic-certificate-verification 3.0.2", "target": "ic_certificate_verification" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -18681,11 +18626,11 @@ "target": "ic_certified_map" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-http-gateway 0.0.0", + "id": "ic-http-gateway 0.1.0", "target": "ic_http_gateway" }, { @@ -18693,7 +18638,7 @@ "target": "ic_metrics_encoder" }, { - "id": "ic-response-verification 2.6.0", + "id": "ic-response-verification 3.0.2", "target": "ic_response_verification" }, { @@ -18709,11 +18654,11 @@ "target": "ic_test_state_machine_client" }, { - "id": "ic-transport-types 0.37.1", + "id": "ic-transport-types 0.39.2", "target": "ic_transport_types" }, { - "id": "ic-utils 0.37.0", + "id": "ic-utils 0.39.0", "target": "ic_utils" }, { @@ -18777,7 +18722,7 @@ "target": "intmap" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -18946,7 +18891,7 @@ "target": "opentelemetry_prometheus" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -19187,7 +19132,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -19294,6 +19239,10 @@ "id": "syn 1.0.109", "target": "syn" }, + { + "id": "syscalls 0.6.18", + "target": "syscalls" + }, { "id": "tar 0.4.39", "target": "tar" @@ -19362,6 +19311,10 @@ "id": "tokio-socks 0.5.2", "target": "tokio_socks" }, + { + "id": "tokio-stream 0.1.17", + "target": "tokio_stream" + }, { "id": "tokio-test 0.4.4", "target": "tokio_test" @@ -19479,11 +19432,11 @@ "target": "wasmprinter" }, { - "id": "wasmtime 27.0.0", + "id": "wasmtime 28.0.0", "target": "wasmtime" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" }, { @@ -20172,7 +20125,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -20257,6 +20210,7 @@ "common": [ "alloc", "arithmetic", + "default", "der", "digest", "hazmat", @@ -20424,7 +20378,7 @@ "target": "rand_core" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -20743,6 +20697,7 @@ "common": [ "alloc", "arithmetic", + "default", "digest", "ff", "group", @@ -21633,7 +21588,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -21879,7 +21834,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -21954,7 +21909,7 @@ "target": "once_cell" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22044,7 +21999,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22332,7 +22287,7 @@ "target": "rlp" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -22413,7 +22368,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -22429,6 +22384,45 @@ ], "license_file": "LICENSE-APACHE" }, + "event-listener 2.5.3": { + "name": "event-listener", + "version": "2.5.3", + "package_url": "https://github.com/smol-rs/event-listener", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/event-listener/2.5.3/download", + "sha256": "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + } + }, + "targets": [ + { + "Library": { + "crate_name": "event_listener", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "event_listener", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "2.5.3" + }, + "license": "Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "event-listener 4.0.3": { "name": "event-listener", "version": "4.0.3", @@ -22495,19 +22489,19 @@ "target": "parking" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "parking 2.1.0", "target": "parking" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "parking 2.1.0", "target": "parking" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "parking 2.1.0", "target": "parking" @@ -22627,25 +22621,25 @@ "target": "parking" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "parking 2.1.0", "target": "parking" @@ -22748,19 +22742,19 @@ "target": "parking" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "parking 2.1.0", "target": "parking" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "parking 2.1.0", "target": "parking" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "parking 2.1.0", "target": "parking" @@ -22880,25 +22874,25 @@ "target": "parking" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "parking 2.1.0", "target": "parking" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "parking 2.1.0", "target": "parking" @@ -23098,7 +23092,7 @@ "target": "num_bigint" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -23824,7 +23818,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -24146,6 +24140,44 @@ ], "license_file": "LICENSE-APACHE" }, + "foldhash 0.1.4": { + "name": "foldhash", + "version": "0.1.4", + "package_url": "https://github.com/orlp/foldhash", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/foldhash/0.1.4/download", + "sha256": "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "foldhash", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "foldhash", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2021", + "version": "0.1.4" + }, + "license": "Zlib", + "license_ids": [ + "Zlib" + ], + "license_file": "LICENSE" + }, "form_urlencoded 1.2.1": { "name": "form_urlencoded", "version": "1.2.1", @@ -26415,11 +26447,11 @@ "target": "ahash" }, { - "id": "allocator-api2 0.2.16", + "id": "allocator-api2 0.2.21", "target": "allocator_api2" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -26435,6 +26467,60 @@ ], "license_file": "LICENSE-APACHE" }, + "hashbrown 0.15.2": { + "name": "hashbrown", + "version": "0.15.2", + "package_url": "https://github.com/rust-lang/hashbrown", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/hashbrown/0.15.2/download", + "sha256": "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + } + }, + "targets": [ + { + "Library": { + "crate_name": "hashbrown", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "hashbrown", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default-hasher" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "foldhash 0.1.4", + "target": "foldhash" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "0.15.2" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "hashlink 0.8.3": { "name": "hashlink", "version": "0.8.3", @@ -27074,7 +27160,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -27377,7 +27463,7 @@ "target": "idna" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -28137,62 +28223,6 @@ ], "license_file": "LICENSE" }, - "http-body-to-bytes 0.2.0": { - "name": "http-body-to-bytes", - "version": "0.2.0", - "package_url": "https://github.com/bk-rs/http-body-ext", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/http-body-to-bytes/0.2.0/download", - "sha256": "17a08236c6f51c2ee95d840f45acf8fa9e339390e00b4ef640857b2f2a534d70" - } - }, - "targets": [ - { - "Library": { - "crate_name": "http_body_to_bytes", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "http_body_to_bytes", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "bytes 1.9.0", - "target": "bytes" - }, - { - "id": "http-body 1.0.1", - "target": "http_body" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.2.0" - }, - "license": "Apache-2.0 OR MIT", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, "http-body-util 0.1.2": { "name": "http-body-util", "version": "0.1.2", @@ -28493,7 +28523,7 @@ "target": "humantime" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -28961,15 +28991,15 @@ "webpki-roots", "webpki-tokio" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "webpki-roots", "webpki-tokio" ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ "webpki-roots", "webpki-tokio" ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ "webpki-roots", "webpki-tokio" ], @@ -29049,10 +29079,6 @@ "webpki-roots", "webpki-tokio" ], - "x86_64-fuchsia": [ - "webpki-roots", - "webpki-tokio" - ], "x86_64-linux-android": [ "webpki-roots", "webpki-tokio" @@ -29065,6 +29091,10 @@ "webpki-roots", "webpki-tokio" ], + "x86_64-unknown-fuchsia": [ + "webpki-roots", + "webpki-tokio" + ], "x86_64-unknown-linux-gnu": [ "webpki-roots", "webpki-tokio" @@ -29146,19 +29176,19 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" @@ -29278,25 +29308,25 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "webpki-roots 0.26.1", "target": "webpki_roots" @@ -29719,7 +29749,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -29733,14 +29763,14 @@ ], "license_file": "LICENSE-APACHE" }, - "ic-agent 0.37.1": { + "ic-agent 0.39.2": { "name": "ic-agent", - "version": "0.37.1", + "version": "0.39.2", "package_url": "https://github.com/dfinity/agent-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-agent/0.37.1/download", - "sha256": "3fd3fdf5e5c4f4a9fe5ca612f0febd22dcb161d2f2b75b0142326732be5e4978" + "url": "https://static.crates.io/crates/ic-agent/0.39.2/download", + "sha256": "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" } }, "targets": [ @@ -29765,19 +29795,29 @@ "crate_features": { "common": [ "default", - "experimental_sync_call", - "hyper", "pem", - "reqwest" + "ring" ], "selects": {} }, "deps": { "common": [ + { + "id": "arc-swap 1.7.1", + "target": "arc_swap" + }, + { + "id": "async-channel 1.9.0", + "target": "async_channel" + }, { "id": "async-lock 3.3.0", "target": "async_lock" }, + { + "id": "async-watch 0.3.1", + "target": "async_watch" + }, { "id": "backoff 0.4.0", "target": "backoff" @@ -29790,10 +29830,22 @@ "id": "candid 0.10.10", "target": "candid" }, + { + "id": "der 0.7.7", + "target": "der" + }, + { + "id": "ecdsa 0.16.9", + "target": "ecdsa" + }, { "id": "ed25519-consensus 2.1.0", "target": "ed25519_consensus" }, + { + "id": "elliptic-curve 0.13.8", + "target": "elliptic_curve" + }, { "id": "futures-util 0.3.31", "target": "futures_util" @@ -29811,15 +29863,11 @@ "target": "http_body" }, { - "id": "hyper 1.5.1", - "target": "hyper" - }, - { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-transport-types 0.37.1", + "id": "ic-transport-types 0.39.2", "target": "ic_transport_types" }, { @@ -29867,7 +29915,7 @@ "target": "sec1" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -29887,732 +29935,32 @@ "target": "simple_asn1" }, { - "id": "thiserror 1.0.68", + "id": "stop-token 0.7.0", + "target": "stop_token" + }, + { + "id": "thiserror 2.0.3", "target": "thiserror" }, { "id": "time 0.3.36", "target": "time" }, + { + "id": "tower-service 0.3.3", + "target": "tower_service" + }, { "id": "url 2.5.3", "target": "url" } ], "selects": { - "aarch64-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-apple-ios": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-fuchsia": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "armv7-linux-androideabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], "cfg(not(target_family = \"wasm\"))": [ - { - "id": "rustls-webpki 0.102.8", - "target": "webpki" - }, { "id": "tokio 1.42.0", "target": "tokio" } - ], - "i686-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-unknown-freebsd": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "riscv32imc-unknown-none-elf": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "riscv64gc-unknown-none-elf": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "thumbv7em-none-eabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "thumbv8m.main-none-eabi": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-apple-darwin": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-apple-ios": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-fuchsia": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-linux-android": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-pc-windows-msvc": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-linux-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-nixos-gnu": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } - ], - "x86_64-unknown-none": [ - { - "id": "http-body-to-bytes 0.2.0", - "target": "http_body_to_bytes" - }, - { - "id": "http-body-util 0.1.2", - "target": "http_body_util" - }, - { - "id": "hyper-rustls 0.27.3", - "target": "hyper_rustls" - }, - { - "id": "hyper-util 0.1.10", - "target": "hyper_util" - }, - { - "id": "tower 0.4.13", - "target": "tower" - } ] } }, @@ -30620,13 +29968,17 @@ "proc_macro_deps": { "common": [ { - "id": "serde_repr 0.1.14", + "id": "async-trait 0.1.83", + "target": "async_trait" + }, + { + "id": "serde_repr 0.1.19", "target": "serde_repr" } ], "selects": {} }, - "version": "0.37.1" + "version": "0.39.2" }, "license": "Apache-2.0", "license_ids": [ @@ -30808,7 +30160,7 @@ "target": "scopeguard" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -30950,7 +30302,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31001,7 +30353,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -31016,14 +30368,16 @@ ], "license_file": "LICENSE" }, - "ic-canister-sig-creation 1.0.1": { + "ic-canister-sig-creation 1.1.0": { "name": "ic-canister-sig-creation", - "version": "1.0.1", + "version": "1.1.0", "package_url": "https://github.com/dfinity/ic-canister-sig-creation", "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-canister-sig-creation/1.0.1/download", - "sha256": "5d1fc58d747480967a25810d8a90d460e7e9ea4c669ab0286541a148736513f9" + "Git": { + "remote": "https://github.com/dfinity/ic-canister-sig-creation", + "commitish": { + "Rev": "7f9e931954637526295269155881207f6c832d6d" + } } }, "targets": [ @@ -31056,15 +30410,15 @@ "target": "hex" }, { - "id": "ic-cdk 0.14.1", + "id": "ic-cdk 0.17.0", "target": "ic_cdk" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { @@ -31072,7 +30426,7 @@ "target": "lazy_static" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31088,14 +30442,14 @@ "target": "sha2" }, { - "id": "thiserror 1.0.68", + "id": "thiserror 2.0.3", "target": "thiserror" } ], "selects": {} }, "edition": "2021", - "version": "1.0.1" + "version": "1.1.0" }, "license": "Apache-2.0", "license_ids": [ @@ -31103,14 +30457,14 @@ ], "license_file": "LICENSE" }, - "ic-cbor 2.6.0": { + "ic-cbor 3.0.2": { "name": "ic-cbor", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-cbor/2.6.0/download", - "sha256": "02b0e48b4166c891e79d624f3a184b4a7c145d307576872d9a46dedb8c73ea8f" + "url": "https://static.crates.io/crates/ic-cbor/3.0.2/download", + "sha256": "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" } }, "targets": [ @@ -31139,7 +30493,7 @@ "target": "candid" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -31158,7 +30512,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -31206,7 +30560,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31234,74 +30588,6 @@ ], "license_file": "LICENSE" }, - "ic-cdk 0.14.1": { - "name": "ic-cdk", - "version": "0.14.1", - "package_url": "https://github.com/dfinity/cdk-rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk/0.14.1/download", - "sha256": "9cff1a3c3db565e3384c9c9d6d676b0a3f89a0886f4f787294d9c946d844369f" - } - }, - "targets": [ - { - "Library": { - "crate_name": "ic_cdk", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ic_cdk", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "candid 0.10.10", - "target": "candid" - }, - { - "id": "ic0 0.23.0", - "target": "ic0" - }, - { - "id": "serde 1.0.214", - "target": "serde" - }, - { - "id": "serde_bytes 0.11.15", - "target": "serde_bytes" - } - ], - "selects": {} - }, - "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "ic-cdk-macros 0.14.0", - "target": "ic_cdk_macros" - } - ], - "selects": {} - }, - "version": "0.14.1" - }, - "license": "Apache-2.0", - "license_ids": [ - "Apache-2.0" - ], - "license_file": "LICENSE" - }, "ic-cdk 0.16.0": { "name": "ic-cdk", "version": "0.16.0", @@ -31342,7 +30628,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31410,7 +30696,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31482,7 +30768,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31549,89 +30835,22 @@ "target": "quote" }, { - "id": "serde 1.0.214", - "target": "serde" - }, - { - "id": "serde_tokenstream 0.1.7", - "target": "serde_tokenstream" - }, - { - "id": "syn 1.0.109", - "target": "syn" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.9.0" - }, - "license": "Apache-2.0", - "license_ids": [ - "Apache-2.0" - ], - "license_file": "LICENSE" - }, - "ic-cdk-macros 0.14.0": { - "name": "ic-cdk-macros", - "version": "0.14.0", - "package_url": "https://github.com/dfinity/cdk-rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ic-cdk-macros/0.14.0/download", - "sha256": "01dc6bc425ec048d6ac4137c7c0f2cfbd6f8b0be8efc568feae2b265f566117c" - } - }, - "targets": [ - { - "ProcMacro": { - "crate_name": "ic_cdk_macros", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ic_cdk_macros", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "candid 0.10.10", - "target": "candid" - }, - { - "id": "proc-macro2 1.0.89", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.37", - "target": "quote" - }, - { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { - "id": "serde_tokenstream 0.2.1", + "id": "serde_tokenstream 0.1.7", "target": "serde_tokenstream" }, { - "id": "syn 2.0.87", + "id": "syn 1.0.109", "target": "syn" } ], "selects": {} }, "edition": "2021", - "version": "0.14.0" + "version": "0.9.0" }, "license": "Apache-2.0", "license_ids": [ @@ -31683,7 +30902,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31750,7 +30969,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31817,7 +31036,7 @@ "target": "ic0" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31840,14 +31059,14 @@ ], "license_file": "LICENSE" }, - "ic-certificate-verification 2.6.0": { + "ic-certificate-verification 3.0.2": { "name": "ic-certificate-verification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-certificate-verification/2.6.0/download", - "sha256": "586e09b06a93d930f6a33f5f909bb11d2e4a06be3635dd5da1eb0e6554b7dae4" + "url": "https://static.crates.io/crates/ic-certificate-verification/3.0.2/download", + "sha256": "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" } }, "targets": [ @@ -31872,7 +31091,7 @@ "deps": { "common": [ { - "id": "cached 0.47.0", + "id": "cached 0.54.0", "target": "cached" }, { @@ -31880,11 +31099,11 @@ "target": "candid" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { @@ -31919,7 +31138,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -31971,7 +31190,7 @@ "target": "hex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -31994,6 +31213,72 @@ ], "license_file": "LICENSE" }, + "ic-certification 3.0.2": { + "name": "ic-certification", + "version": "3.0.2", + "package_url": "https://github.com/dfinity/response-verification", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/ic-certification/3.0.2/download", + "sha256": "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ic_certification", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "ic_certification", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "serde" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "hex 0.4.3", + "target": "hex" + }, + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "serde_bytes 0.11.15", + "target": "serde_bytes" + }, + { + "id": "sha2 0.10.8", + "target": "sha2" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "3.0.2" + }, + "license": "Apache-2.0", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, "ic-certified-map 0.3.4": { "name": "ic-certified-map", "version": "0.3.4", @@ -32026,7 +31311,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32049,14 +31334,14 @@ ], "license_file": "LICENSE" }, - "ic-http-certification 2.6.0": { + "ic-http-certification 3.0.2": { "name": "ic-http-certification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-http-certification/2.6.0/download", - "sha256": "ff0b97e949845039149dc5e7ea6a7c12ee4333bb402e37bc507904643c7b3e41" + "url": "https://static.crates.io/crates/ic-http-certification/3.0.2/download", + "sha256": "479941fca8e68c2267cddf686d34ed6fb491168667ff259c08a3d65d28bd26d2" } }, "targets": [ @@ -32080,26 +31365,34 @@ ], "deps": { "common": [ + { + "id": "base64 0.22.1", + "target": "base64" + }, { "id": "candid 0.10.10", "target": "candid" }, { - "id": "http 0.2.12", + "id": "http 1.2.0", "target": "http" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, + { + "id": "serde_cbor 0.11.2", + "target": "serde_cbor" + }, { "id": "thiserror 1.0.68", "target": "thiserror" @@ -32112,7 +31405,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32120,17 +31413,14 @@ ], "license_file": "LICENSE" }, - "ic-http-gateway 0.0.0": { + "ic-http-gateway 0.1.0": { "name": "ic-http-gateway", - "version": "0.0.0", + "version": "0.1.0", "package_url": "https://github.com/dfinity/http-gateway", "repository": { - "Git": { - "remote": "https://github.com/dfinity/http-gateway", - "commitish": { - "Rev": "3be26b5a2c71bf56e05b910951c1935a1ac550c4" - }, - "strip_prefix": "packages/ic-http-gateway" + "Http": { + "url": "https://static.crates.io/crates/ic-http-gateway/0.1.0/download", + "sha256": "8e8b30a8ff19af1a7dc64b1dbe1a38f1b60c7eea566e2049f755ce3bace0e630" } }, "targets": [ @@ -32179,19 +31469,19 @@ "target": "http_body_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-response-verification 2.6.0", + "id": "ic-response-verification 3.0.2", "target": "ic_response_verification" }, { - "id": "ic-utils 0.37.0", + "id": "ic-utils 0.39.0", "target": "ic_utils" }, { @@ -32202,7 +31492,7 @@ "selects": {} }, "edition": "2021", - "version": "0.0.0" + "version": "0.1.0" }, "license": "Apache-2.0", "license_ids": [ @@ -32248,14 +31538,14 @@ ], "license_file": "LICENSE" }, - "ic-representation-independent-hash 2.6.0": { + "ic-representation-independent-hash 3.0.2": { "name": "ic-representation-independent-hash", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-representation-independent-hash/2.6.0/download", - "sha256": "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" + "url": "https://static.crates.io/crates/ic-representation-independent-hash/3.0.2/download", + "sha256": "3643f12824280580d31e47d380f1be23abee29944a1430c3ed22b164ac8e68db" } }, "targets": [ @@ -32291,7 +31581,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32299,14 +31589,14 @@ ], "license_file": null }, - "ic-response-verification 2.6.0": { + "ic-response-verification 3.0.2": { "name": "ic-response-verification", - "version": "2.6.0", + "version": "3.0.2", "package_url": "https://github.com/dfinity/response-verification", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-response-verification/2.6.0/download", - "sha256": "2bef02ef84189d61a7d39889b7e9a3ae212d45c3df293513f7b2568027fd08a8" + "url": "https://static.crates.io/crates/ic-response-verification/3.0.2/download", + "sha256": "2b97514fada84797baf61a6a29f1c71695798c2628cb6013d97a5dd6ecc26df7" } }, "targets": [ @@ -32331,7 +31621,7 @@ "deps": { "common": [ { - "id": "base64 0.21.6", + "id": "base64 0.22.1", "target": "base64" }, { @@ -32347,27 +31637,27 @@ "target": "hex" }, { - "id": "http 0.2.12", + "id": "http 1.2.0", "target": "http" }, { - "id": "ic-cbor 2.6.0", + "id": "ic-cbor 3.0.2", "target": "ic_cbor" }, { - "id": "ic-certificate-verification 2.6.0", + "id": "ic-certificate-verification 3.0.2", "target": "ic_certificate_verification" }, { - "id": "ic-certification 2.6.0", + "id": "ic-certification 3.0.2", "target": "ic_certification" }, { - "id": "ic-http-certification 2.6.0", + "id": "ic-http-certification 3.0.2", "target": "ic_http_certification" }, { - "id": "ic-representation-independent-hash 2.6.0", + "id": "ic-representation-independent-hash 3.0.2", "target": "ic_representation_independent_hash" }, { @@ -32398,7 +31688,7 @@ "selects": {} }, "edition": "2021", - "version": "2.6.0" + "version": "3.0.2" }, "license": "Apache-2.0", "license_ids": [ @@ -32540,7 +31830,7 @@ "target": "ciborium" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32607,7 +31897,7 @@ "target": "leb128" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32629,7 +31919,7 @@ "proc_macro_deps": { "common": [ { - "id": "serde_repr 0.1.14", + "id": "serde_repr 0.1.19", "target": "serde_repr" } ], @@ -32643,14 +31933,102 @@ ], "license_file": null }, - "ic-utils 0.37.0": { + "ic-transport-types 0.39.2": { + "name": "ic-transport-types", + "version": "0.39.2", + "package_url": "https://github.com/dfinity/agent-rs", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/ic-transport-types/0.39.2/download", + "sha256": "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ic_transport_types", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "ic_transport_types", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "candid 0.10.10", + "target": "candid" + }, + { + "id": "hex 0.4.3", + "target": "hex" + }, + { + "id": "ic-certification 3.0.2", + "target": "ic_certification" + }, + { + "id": "leb128 0.2.5", + "target": "leb128" + }, + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "serde_bytes 0.11.15", + "target": "serde_bytes" + }, + { + "id": "serde_cbor 0.11.2", + "target": "serde_cbor" + }, + { + "id": "sha2 0.10.8", + "target": "sha2" + }, + { + "id": "thiserror 2.0.3", + "target": "thiserror" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "serde_repr 0.1.19", + "target": "serde_repr" + } + ], + "selects": {} + }, + "version": "0.39.2" + }, + "license": "Apache-2.0", + "license_ids": [ + "Apache-2.0" + ], + "license_file": null + }, + "ic-utils 0.39.0": { "name": "ic-utils", - "version": "0.37.0", + "version": "0.39.0", "package_url": "https://github.com/dfinity/agent-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/ic-utils/0.37.0/download", - "sha256": "2fa832296800758c9c921dd1704985ded6b3e6fbc3aee409727eb1f00d69a595" + "url": "https://static.crates.io/crates/ic-utils/0.39.0/download", + "sha256": "bb1da4a68c45146018b8496c157ad94126b9c202ab4400c6c0a9030c1ef0f0ba" } }, "targets": [ @@ -32689,7 +32067,7 @@ "target": "futures_util" }, { - "id": "ic-agent 0.37.1", + "id": "ic-agent 0.39.2", "target": "ic_agent" }, { @@ -32701,7 +32079,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -32745,7 +32123,7 @@ ], "selects": {} }, - "version": "0.37.0" + "version": "0.39.0" }, "license": "Apache-2.0", "license_ids": [ @@ -32975,7 +32353,7 @@ "target": "rustc_demangle" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33038,7 +32416,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -33313,7 +32691,7 @@ "target": "data_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33379,7 +32757,7 @@ "target": "candid" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -33528,79 +32906,83 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], - "license_file": "LICENSE" - }, - "icu_locid 1.5.0": { - "name": "icu_locid", - "version": "1.5.0", - "package_url": "https://github.com/unicode-org/icu4x", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/icu_locid/1.5.0/download", - "sha256": "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" - } - }, - "targets": [ - { - "Library": { - "crate_name": "icu_locid", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } + "license_ids": [ + "Unicode-3.0" + ], + "license_file": "LICENSE" + }, + "icu_locid 1.5.0": { + "name": "icu_locid", + "version": "1.5.0", + "package_url": "https://github.com/unicode-org/icu4x", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/icu_locid/1.5.0/download", + "sha256": "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" + } + }, + "targets": [ + { + "Library": { + "crate_name": "icu_locid", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "icu_locid", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "zerovec" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "litemap 0.7.3", + "target": "litemap" + }, + { + "id": "tinystr 0.7.6", + "target": "tinystr" + }, + { + "id": "writeable 0.5.5", + "target": "writeable" + }, + { + "id": "zerovec 0.10.4", + "target": "zerovec" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "displaydoc 0.2.4", + "target": "displaydoc" + } + ], + "selects": {} + }, + "version": "1.5.0" + }, + "license": "Unicode-3.0", + "license_ids": [ + "Unicode-3.0" ], - "library_target_name": "icu_locid", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "zerovec" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "litemap 0.7.3", - "target": "litemap" - }, - { - "id": "tinystr 0.7.6", - "target": "tinystr" - }, - { - "id": "writeable 0.5.5", - "target": "writeable" - }, - { - "id": "zerovec 0.10.4", - "target": "zerovec" - } - ], - "selects": {} - }, - "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "displaydoc 0.2.4", - "target": "displaydoc" - } - ], - "selects": {} - }, - "version": "1.5.0" - }, - "license": "Unicode-3.0", - "license_ids": [], "license_file": "LICENSE" }, "icu_locid_transform 1.5.0": { @@ -33676,7 +33058,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_locid_transform_data 1.5.0": { @@ -33712,7 +33096,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_normalizer 1.5.0": { @@ -33805,7 +33191,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_normalizer_data 1.5.0": { @@ -33841,7 +33229,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_properties 1.5.1": { @@ -33922,7 +33312,9 @@ "version": "1.5.1" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_properties_data 1.5.0": { @@ -33958,7 +33350,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_provider 1.5.0": { @@ -34046,7 +33440,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "icu_provider_macros 1.5.0": { @@ -34099,7 +33495,9 @@ "version": "1.5.0" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "id-arena 2.2.1": { @@ -34651,7 +34049,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -34903,7 +34301,7 @@ "target": "hashbrown" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35481,7 +34879,7 @@ "target": "rustls_pki_types" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -35551,7 +34949,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35661,14 +35059,14 @@ ], "license_file": "LICENSE-APACHE" }, - "ipnet 2.8.0": { + "ipnet 2.10.1": { "name": "ipnet", - "version": "2.8.0", + "version": "2.10.1", "package_url": "https://github.com/krisprice/ipnet", "repository": { "Http": { - "url": "https://static.crates.io/crates/ipnet/2.8.0/download", - "sha256": "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + "url": "https://static.crates.io/crates/ipnet/2.10.1/download", + "sha256": "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" } }, "targets": [ @@ -35693,12 +35091,22 @@ "crate_features": { "common": [ "default", + "serde", "std" ], "selects": {} }, + "deps": { + "common": [ + { + "id": "serde 1.0.217", + "target": "serde" + } + ], + "selects": {} + }, "edition": "2018", - "version": "2.8.0" + "version": "2.10.1" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -35746,7 +35154,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -35900,7 +35308,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36262,14 +35670,14 @@ ], "license_file": "LICENSE-APACHE" }, - "jobserver 0.1.26": { + "jobserver 0.1.32": { "name": "jobserver", - "version": "0.1.26", - "package_url": "https://github.com/alexcrichton/jobserver-rs", + "version": "0.1.32", + "package_url": "https://github.com/rust-lang/jobserver-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/jobserver/0.1.26/download", - "sha256": "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" + "url": "https://static.crates.io/crates/jobserver/0.1.32/download", + "sha256": "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" } }, "targets": [ @@ -36302,10 +35710,10 @@ ] } }, - "edition": "2018", - "version": "0.1.26" + "edition": "2021", + "version": "0.1.32" }, - "license": "MIT/Apache-2.0", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" @@ -36400,7 +35808,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36460,7 +35868,7 @@ "target": "pest" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -36605,7 +36013,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36669,7 +36077,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -36846,7 +36254,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -37136,7 +36544,7 @@ "target": "secrecy" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -37231,7 +36639,7 @@ "target": "k8s_openapi" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -38693,7 +38101,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -38975,7 +38383,7 @@ "target": "bindgen" }, { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39076,7 +38484,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39182,7 +38590,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39291,7 +38699,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39389,7 +38797,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -39587,7 +38995,9 @@ "version": "0.7.3" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "little-loadshedder 0.2.0": { @@ -39798,7 +39208,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -40107,8 +39517,6 @@ ], "crate_features": { "common": [ - "max_level_off", - "release_max_level_off", "std" ], "selects": {} @@ -40574,7 +39982,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -41096,7 +40504,7 @@ "target": "memchr" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -41732,7 +41140,7 @@ "target": "rustls_pemfile" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -42194,10 +41602,10 @@ "aarch64-apple-ios-sim": [ "os-ext" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "os-ext" ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ "os-ext" ], "aarch64-unknown-linux-gnu": [ @@ -42242,15 +41650,15 @@ "x86_64-apple-ios": [ "os-ext" ], - "x86_64-fuchsia": [ - "os-ext" - ], "x86_64-linux-android": [ "os-ext" ], "x86_64-unknown-freebsd": [ "os-ext" ], + "x86_64-unknown-fuchsia": [ + "os-ext" + ], "x86_64-unknown-linux-gnu": [ "os-ext" ], @@ -43261,7 +42669,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -43350,7 +42758,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -44133,7 +43541,7 @@ "target": "num_traits" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -44238,7 +43646,7 @@ "target": "rand" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -44992,14 +44400,14 @@ ], "license_file": "LICENSE-APACHE" }, - "object 0.36.1": { + "object 0.36.7": { "name": "object", - "version": "0.36.1", + "version": "0.36.7", "package_url": "https://github.com/gimli-rs/object", "repository": { "Http": { - "url": "https://static.crates.io/crates/object/0.36.1/download", - "sha256": "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" + "url": "https://static.crates.io/crates/object/0.36.7/download", + "sha256": "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" } }, "targets": [ @@ -45014,6 +44422,18 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } } ], "library_target_name": "object", @@ -45043,7 +44463,7 @@ "target": "crc32fast" }, { - "id": "hashbrown 0.14.5", + "id": "hashbrown 0.15.2", "target": "hashbrown" }, { @@ -45053,12 +44473,24 @@ { "id": "memchr 2.7.4", "target": "memchr" + }, + { + "id": "object 0.36.7", + "target": "build_script_build" } ], "selects": {} }, "edition": "2018", - "version": "0.36.1" + "version": "0.36.7" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] }, "license": "Apache-2.0 OR MIT", "license_ids": [ @@ -45588,7 +45020,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -45957,7 +45389,7 @@ "target": "opentelemetry_proto" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -46181,7 +45613,7 @@ "target": "opentelemetry" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -46724,7 +46156,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -46748,14 +46180,14 @@ ], "license_file": "LICENSE" }, - "opentelemetry_sdk 0.27.0": { + "opentelemetry_sdk 0.27.1": { "name": "opentelemetry_sdk", - "version": "0.27.0", + "version": "0.27.1", "package_url": "https://github.com/open-telemetry/opentelemetry-rust", "repository": { "Http": { - "url": "https://static.crates.io/crates/opentelemetry_sdk/0.27.0/download", - "sha256": "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" + "url": "https://static.crates.io/crates/opentelemetry_sdk/0.27.1/download", + "sha256": "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" } }, "targets": [ @@ -46814,10 +46246,6 @@ "id": "glob 0.3.1", "target": "glob" }, - { - "id": "once_cell 1.19.0", - "target": "once_cell" - }, { "id": "opentelemetry 0.27.0", "target": "opentelemetry" @@ -46843,7 +46271,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -46863,7 +46291,7 @@ ], "selects": {} }, - "version": "0.27.0" + "version": "0.27.1" }, "license": "Apache-2.0", "license_ids": [ @@ -47299,7 +46727,7 @@ "target": "byte_slice_cast" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -48038,7 +47466,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -49813,7 +49241,7 @@ "target": "schemars" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -50149,7 +49577,7 @@ "target": "embedded_io" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -51129,7 +50557,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -52928,7 +52356,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -53104,14 +52532,14 @@ ], "license_file": "LICENSE" }, - "pulley-interpreter 27.0.0": { + "pulley-interpreter 28.0.0": { "name": "pulley-interpreter", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime/tree/main/pulley", "repository": { "Http": { - "url": "https://static.crates.io/crates/pulley-interpreter/27.0.0/download", - "sha256": "a3b8d81cf799e20564931e9867ca32de545188c6ee4c2e0f6e41d32f0c7dc6fb" + "url": "https://static.crates.io/crates/pulley-interpreter/28.0.0/download", + "sha256": "403a1a95f4c18a45c86c7bff13df00347afd0abcbf2e54af273c837339ffcf77" } }, "targets": [ @@ -53136,7 +52564,7 @@ "deps": { "common": [ { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { @@ -53151,7 +52579,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -54142,13 +53570,13 @@ "target": "libc" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -54238,19 +53666,19 @@ "target": "libc" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -55690,14 +55118,14 @@ ], "license_file": "LICENSE" }, - "regalloc2 0.10.2": { + "regalloc2 0.11.1": { "name": "regalloc2", - "version": "0.10.2", + "version": "0.11.1", "package_url": "https://github.com/bytecodealliance/regalloc2", "repository": { "Http": { - "url": "https://static.crates.io/crates/regalloc2/0.10.2/download", - "sha256": "12908dbeb234370af84d0579b9f68258a0f67e201412dd9a2814e6f45b2fc0f0" + "url": "https://static.crates.io/crates/regalloc2/0.11.1/download", + "sha256": "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3" } }, "targets": [ @@ -55730,7 +55158,15 @@ "deps": { "common": [ { - "id": "hashbrown 0.14.5", + "id": "allocator-api2 0.2.21", + "target": "allocator_api2" + }, + { + "id": "bumpalo 3.16.0", + "target": "bumpalo" + }, + { + "id": "hashbrown 0.15.2", "target": "hashbrown" }, { @@ -55741,10 +55177,6 @@ "id": "rustc-hash 2.0.0", "target": "rustc_hash" }, - { - "id": "slice-group-by 0.3.1", - "target": "slice_group_by" - }, { "id": "smallvec 1.13.2", "target": "smallvec" @@ -55753,7 +55185,7 @@ "selects": {} }, "edition": "2018", - "version": "0.10.2" + "version": "0.11.1" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -56420,7 +55852,7 @@ "target": "http" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -56535,7 +55967,7 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -56565,7 +55997,7 @@ "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -56595,7 +56027,7 @@ "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -56823,7 +56255,7 @@ "target": "hyper" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -57271,7 +56703,7 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -57301,7 +56733,7 @@ "target": "webpki_roots" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -57331,7 +56763,7 @@ "target": "webpki_roots" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -57361,7 +56793,7 @@ "target": "webpki_roots" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "async-compression 0.4.3", "target": "async_compression" @@ -57570,7 +57002,7 @@ "target": "mime_guess" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -57745,7 +57177,7 @@ "target": "webpki_roots" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -57795,7 +57227,7 @@ "target": "webpki_roots" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -57845,7 +57277,7 @@ "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -58213,7 +57645,7 @@ "target": "hyper_util" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -58821,7 +58253,7 @@ "target": "wasm_streams" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "wasm-streams 0.4.0", "target": "wasm_streams" @@ -58927,7 +58359,7 @@ "target": "webpki_roots" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -58977,7 +58409,7 @@ "target": "webpki_roots" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59027,7 +58459,7 @@ "target": "webpki_roots" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59077,7 +58509,7 @@ "target": "webpki_roots" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "futures-channel 0.3.31", "target": "futures_channel" @@ -59653,7 +59085,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -59770,7 +59202,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -60758,7 +60190,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -61195,7 +60627,7 @@ "time", "use-libc-auxv" ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ "default", "event", "mm", @@ -61205,7 +60637,7 @@ "time", "use-libc-auxv" ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ "default", "event", "mm", @@ -61376,7 +60808,7 @@ "termios", "use-libc-auxv" ], - "wasm32-wasi": [ + "wasm32-wasip1": [ "default", "termios", "use-libc-auxv" @@ -61401,7 +60833,7 @@ "time", "use-libc-auxv" ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ "default", "event", "mm", @@ -61411,7 +60843,7 @@ "time", "use-libc-auxv" ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ "default", "event", "mm", @@ -61421,7 +60853,7 @@ "time", "use-libc-auxv" ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ "default", "event", "mm", @@ -61509,7 +60941,7 @@ "target": "libc" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "errno 0.3.8", "target": "errno", @@ -61520,22 +60952,22 @@ "target": "libc" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" - }, - { - "id": "libc 0.2.158", - "target": "libc" } ], - "aarch64-pc-windows-msvc": [ + "aarch64-unknown-fuchsia": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], "aarch64-unknown-nto-qnx710": [ @@ -61711,7 +61143,7 @@ "target": "libc" } ], - "wasm32-wasi": [ + "wasm32-wasip1": [ { "id": "errno 0.3.8", "target": "errno", @@ -61744,7 +61176,7 @@ "target": "libc" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "errno 0.3.8", "target": "errno", @@ -61755,25 +61187,25 @@ "target": "libc" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" - }, - { - "id": "libc 0.2.158", - "target": "libc" } ], - "x86_64-pc-windows-msvc": [ + "x86_64-unknown-freebsd": [ { "id": "errno 0.3.8", "target": "errno", "alias": "libc_errno" + }, + { + "id": "libc 0.2.158", + "target": "libc" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "errno 0.3.8", "target": "errno", @@ -62244,7 +61676,7 @@ "target": "ring" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -62900,104 +62332,7 @@ "ring", "std" ], - "selects": { - "aarch64-apple-darwin": [ - "default" - ], - "aarch64-apple-ios": [ - "default" - ], - "aarch64-apple-ios-sim": [ - "default" - ], - "aarch64-fuchsia": [ - "default" - ], - "aarch64-linux-android": [ - "default" - ], - "aarch64-pc-windows-msvc": [ - "default" - ], - "aarch64-unknown-linux-gnu": [ - "default" - ], - "aarch64-unknown-nixos-gnu": [ - "default" - ], - "aarch64-unknown-nto-qnx710": [ - "default" - ], - "arm-unknown-linux-gnueabi": [ - "default" - ], - "armv7-linux-androideabi": [ - "default" - ], - "armv7-unknown-linux-gnueabi": [ - "default" - ], - "i686-apple-darwin": [ - "default" - ], - "i686-linux-android": [ - "default" - ], - "i686-pc-windows-msvc": [ - "default" - ], - "i686-unknown-freebsd": [ - "default" - ], - "i686-unknown-linux-gnu": [ - "default" - ], - "powerpc-unknown-linux-gnu": [ - "default" - ], - "riscv32imc-unknown-none-elf": [ - "default" - ], - "riscv64gc-unknown-none-elf": [ - "default" - ], - "s390x-unknown-linux-gnu": [ - "default" - ], - "thumbv7em-none-eabi": [ - "default" - ], - "thumbv8m.main-none-eabi": [ - "default" - ], - "x86_64-apple-darwin": [ - "default" - ], - "x86_64-apple-ios": [ - "default" - ], - "x86_64-fuchsia": [ - "default" - ], - "x86_64-linux-android": [ - "default" - ], - "x86_64-pc-windows-msvc": [ - "default" - ], - "x86_64-unknown-freebsd": [ - "default" - ], - "x86_64-unknown-linux-gnu": [ - "default" - ], - "x86_64-unknown-nixos-gnu": [ - "default" - ], - "x86_64-unknown-none": [ - "default" - ] - } + "selects": {} }, "deps": { "common": [ @@ -63496,7 +62831,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -64027,7 +63362,7 @@ "target": "secp256k1_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64098,7 +63433,7 @@ "target": "secp256k1_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64242,7 +63577,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64327,7 +63662,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64416,7 +63751,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -64470,7 +63805,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -64814,7 +64149,7 @@ "target": "build_script_build" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -64838,14 +64173,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde 1.0.214": { + "serde 1.0.217": { "name": "serde", - "version": "1.0.214", + "version": "1.0.217", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde/1.0.214/download", - "sha256": "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" + "url": "https://static.crates.io/crates/serde/1.0.217/download", + "sha256": "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" } }, "targets": [ @@ -64893,7 +64228,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "build_script_build" } ], @@ -64903,13 +64238,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "1.0.214" + "version": "1.0.217" }, "build_script_attrs": { "compile_data_glob": [ @@ -64966,7 +64301,7 @@ "target": "hex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65017,7 +64352,7 @@ "target": "ordered_float" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65068,7 +64403,7 @@ "target": "js_sys" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65126,7 +64461,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65185,7 +64520,7 @@ "target": "half" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65201,14 +64536,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde_derive 1.0.214": { + "serde_derive 1.0.217": { "name": "serde_derive", - "version": "1.0.214", + "version": "1.0.217", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_derive/1.0.214/download", - "sha256": "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" + "url": "https://static.crates.io/crates/serde_derive/1.0.217/download", + "sha256": "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" } }, "targets": [ @@ -65254,7 +64589,7 @@ "selects": {} }, "edition": "2015", - "version": "1.0.214" + "version": "1.0.217" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -65386,7 +64721,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65450,7 +64785,7 @@ "target": "itoa" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65502,7 +64837,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65558,7 +64893,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65574,14 +64909,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde_repr 0.1.14": { + "serde_repr 0.1.19": { "name": "serde_repr", - "version": "0.1.14", + "version": "0.1.19", "package_url": "https://github.com/dtolnay/serde-repr", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_repr/0.1.14/download", - "sha256": "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" + "url": "https://static.crates.io/crates/serde_repr/0.1.19/download", + "sha256": "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" } }, "targets": [ @@ -65620,8 +64955,8 @@ ], "selects": {} }, - "edition": "2018", - "version": "0.1.14" + "edition": "2021", + "version": "0.1.19" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -65666,7 +65001,7 @@ "target": "proc_macro2" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65725,7 +65060,7 @@ "target": "quote" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -65788,7 +65123,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65844,7 +65179,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -65915,7 +65250,7 @@ "target": "base64" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -66032,7 +65367,7 @@ "deps": { "common": [ { - "id": "darling 0.20.3", + "id": "darling 0.20.10", "target": "darling" }, { @@ -66100,7 +65435,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -66164,7 +65499,7 @@ "target": "ryu" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -67395,44 +66730,6 @@ ], "license_file": "LICENSE" }, - "slice-group-by 0.3.1": { - "name": "slice-group-by", - "version": "0.3.1", - "package_url": "https://github.com/Kerollmops/slice-group-by", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/slice-group-by/0.3.1/download", - "sha256": "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - } - }, - "targets": [ - { - "Library": { - "crate_name": "slice_group_by", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": true, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "slice_group_by", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "edition": "2018", - "version": "0.3.1" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, "slog 2.7.0": { "name": "slog", "version": "2.7.0", @@ -67732,7 +67029,7 @@ "target": "erased_serde" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -68071,7 +67368,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -68416,15 +67713,15 @@ "aarch64-apple-ios-sim": [ "once" ], - "aarch64-fuchsia": [ - "once" - ], "aarch64-linux-android": [ "once" ], "aarch64-pc-windows-msvc": [ "once" ], + "aarch64-unknown-fuchsia": [ + "once" + ], "aarch64-unknown-linux-gnu": [ "once" ], @@ -68470,9 +67767,6 @@ "x86_64-apple-ios": [ "once" ], - "x86_64-fuchsia": [ - "once" - ], "x86_64-linux-android": [ "once" ], @@ -68482,6 +67776,9 @@ "x86_64-unknown-freebsd": [ "once" ], + "x86_64-unknown-fuchsia": [ + "once" + ], "x86_64-unknown-linux-gnu": [ "once" ], @@ -68792,7 +68089,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -68845,6 +68142,66 @@ ], "license_file": "LICENSE-APACHE" }, + "stop-token 0.7.0": { + "name": "stop-token", + "version": "0.7.0", + "package_url": "https://github.com/async-rs/stop-token", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/stop-token/0.7.0/download", + "sha256": "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "stop_token", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "stop_token", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "async-channel 1.9.0", + "target": "async_channel" + }, + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "futures-core 0.3.31", + "target": "futures_core" + }, + { + "id": "pin-project-lite 0.2.13", + "target": "pin_project_lite" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": null + }, "str_stack 0.1.0": { "name": "str_stack", "version": "0.1.0", @@ -68944,7 +68301,7 @@ "target": "precomputed_hash" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -70191,6 +69548,95 @@ ], "license_file": "LICENSE" }, + "syscalls 0.6.18": { + "name": "syscalls", + "version": "0.6.18", + "package_url": "https://github.com/jasonwhite/syscalls", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/syscalls/0.6.18/download", + "sha256": "43d0e35dc7d73976a53c7e6d7d177ef804a0c0ee774ec77bcc520c2216fd7cbe" + } + }, + "targets": [ + { + "Library": { + "crate_name": "syscalls", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "syscalls", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "serde", + "serde_repr", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "serde 1.0.217", + "target": "serde" + }, + { + "id": "syscalls 0.6.18", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "serde_repr 0.1.19", + "target": "serde_repr" + } + ], + "selects": {} + }, + "version": "0.6.18" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] + }, + "license": "BSD-2-Clause", + "license_ids": [ + "BSD-2-Clause" + ], + "license_file": "LICENSE" + }, "system-configuration 0.5.1": { "name": "system-configuration", "version": "0.5.1", @@ -70572,13 +70018,13 @@ "target": "xattr" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "xattr 0.2.3", "target": "xattr" @@ -70674,19 +70120,19 @@ "target": "xattr" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "xattr 0.2.3", "target": "xattr" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "xattr 0.2.3", "target": "xattr" @@ -70865,7 +70311,7 @@ "target": "rand" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -72193,7 +71639,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -72370,7 +71816,7 @@ "target": "num_threads" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -72380,7 +71826,7 @@ "target": "num_threads" } ], - "aarch64-linux-android": [ + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -72530,7 +71976,7 @@ "target": "num_threads" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -72540,7 +71986,7 @@ "target": "num_threads" } ], - "x86_64-linux-android": [ + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" @@ -72550,7 +71996,7 @@ "target": "num_threads" } ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -72878,7 +72324,9 @@ "version": "0.7.6" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "tinytemplate 1.2.1": { @@ -72913,7 +72361,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -73261,7 +72709,7 @@ "target": "socket2" } ], - "aarch64-fuchsia": [ + "aarch64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -73275,7 +72723,17 @@ "target": "socket2" } ], - "aarch64-linux-android": [ + "aarch64-pc-windows-msvc": [ + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ], + "aarch64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -73289,16 +72747,6 @@ "target": "socket2" } ], - "aarch64-pc-windows-msvc": [ - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], "aarch64-unknown-linux-gnu": [ { "id": "libc 0.2.158", @@ -73535,7 +72983,7 @@ "target": "socket2" } ], - "x86_64-fuchsia": [ + "x86_64-linux-android": [ { "id": "libc 0.2.158", "target": "libc" @@ -73549,7 +72997,17 @@ "target": "socket2" } ], - "x86_64-linux-android": [ + "x86_64-pc-windows-msvc": [ + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ], + "x86_64-unknown-freebsd": [ { "id": "libc 0.2.158", "target": "libc" @@ -73563,17 +73021,7 @@ "target": "socket2" } ], - "x86_64-pc-windows-msvc": [ - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], - "x86_64-unknown-freebsd": [ + "x86_64-unknown-fuchsia": [ { "id": "libc 0.2.158", "target": "libc" @@ -73800,7 +73248,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -74071,7 +73519,7 @@ "target": "pin_project" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -74166,14 +73614,14 @@ ], "license_file": "LICENSE" }, - "tokio-stream 0.1.16": { + "tokio-stream 0.1.17": { "name": "tokio-stream", - "version": "0.1.16", + "version": "0.1.17", "package_url": "https://github.com/tokio-rs/tokio", "repository": { "Http": { - "url": "https://static.crates.io/crates/tokio-stream/0.1.16/download", - "sha256": "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" + "url": "https://static.crates.io/crates/tokio-stream/0.1.17/download", + "sha256": "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" } }, "targets": [ @@ -74221,7 +73669,7 @@ "selects": {} }, "edition": "2021", - "version": "0.1.16" + "version": "0.1.17" }, "license": "MIT", "license_ids": [ @@ -74277,7 +73725,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" } ], @@ -74491,7 +73939,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -74780,7 +74228,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -76136,7 +75584,7 @@ "target": "opentelemetry" }, { - "id": "opentelemetry_sdk 0.27.0", + "id": "opentelemetry_sdk 0.27.1", "target": "opentelemetry_sdk" }, { @@ -76214,7 +75662,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76265,7 +75713,7 @@ "deps": { "common": [ { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76420,7 +75868,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -76628,7 +76076,7 @@ "target": "idna" }, { - "id": "ipnet 2.8.0", + "id": "ipnet 2.10.1", "target": "ipnet" }, { @@ -77010,7 +76458,7 @@ "target": "tokio" }, { - "id": "tokio-stream 0.1.16", + "id": "tokio-stream 0.1.17", "target": "tokio_stream" }, { @@ -77982,7 +77430,7 @@ "target": "percent_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -78283,7 +77731,7 @@ "target": "getrandom" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -78519,7 +77967,7 @@ "target": "regex" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -79051,7 +78499,7 @@ "target": "scoped_tls" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -79690,14 +79138,14 @@ ], "license_file": null }, - "wasm-encoder 0.219.1": { + "wasm-encoder 0.221.2": { "name": "wasm-encoder", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasm-encoder", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasm-encoder/0.219.1/download", - "sha256": "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" + "url": "https://static.crates.io/crates/wasm-encoder/0.221.2/download", + "sha256": "c17a3bd88f2155da63a1f2fcb8a56377a24f0b6dfed12733bb5f544e86f690c5" } }, "targets": [ @@ -79736,7 +79184,7 @@ "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80002,7 +79450,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -80079,7 +79527,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" } ], @@ -80095,14 +79543,14 @@ ], "license_file": null }, - "wasmparser 0.219.1": { + "wasmparser 0.221.2": { "name": "wasmparser", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasmparser", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmparser/0.219.1/download", - "sha256": "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" + "url": "https://static.crates.io/crates/wasmparser/0.221.2/download", + "sha256": "9845c470a2e10b61dd42c385839cdd6496363ed63b5c9e420b5488b77bd22083" } }, "targets": [ @@ -80117,6 +79565,18 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } } ], "library_target_name": "wasmparser", @@ -80129,6 +79589,7 @@ "component-model", "features", "serde", + "simd", "std", "validate" ], @@ -80136,35 +79597,35 @@ }, "deps": { "common": [ - { - "id": "ahash 0.8.11", - "target": "ahash" - }, { "id": "bitflags 2.6.0", "target": "bitflags" }, - { - "id": "hashbrown 0.14.5", - "target": "hashbrown" - }, - { - "id": "indexmap 2.2.6", - "target": "indexmap" - }, { "id": "semver 1.0.22", "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" + }, + { + "id": "wasmparser 0.221.2", + "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80229,14 +79690,14 @@ ], "license_file": null }, - "wasmprinter 0.219.1": { + "wasmprinter 0.221.2": { "name": "wasmprinter", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wasmprinter", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmprinter/0.219.1/download", - "sha256": "228cdc1f30c27816da225d239ce4231f28941147d34713dee8f1fff7cb330e54" + "url": "https://static.crates.io/crates/wasmprinter/0.221.2/download", + "sha256": "a80742ff1b9e6d8c231ac7c7247782c6fc5bce503af760bca071811e5fc9ee56" } }, "targets": [ @@ -80276,14 +79737,14 @@ "target": "termcolor" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" } ], "selects": {} }, "edition": "2021", - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -80292,14 +79753,14 @@ ], "license_file": null }, - "wasmtime 27.0.0": { + "wasmtime 28.0.0": { "name": "wasmtime", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime/27.0.0/download", - "sha256": "5b79302e3e084713249cc5622e8608e7410afdeeea8c8026d04f491d1fab0b4b" + "url": "https://static.crates.io/crates/wasmtime/28.0.0/download", + "sha256": "f639ecae347b9a2227e453a7b7671e84370a0b61f47a15e0390fe9b7725e47b3" } }, "targets": [ @@ -80341,6 +79802,7 @@ "once_cell", "parallel-compilation", "runtime", + "signals-based-traps", "std" ], "selects": {} @@ -80384,7 +79846,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -80400,7 +79862,7 @@ "target": "rayon" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -80416,31 +79878,31 @@ "target": "target_lexicon" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmtime 27.0.0", + "id": "wasmtime 28.0.0", "target": "build_script_build" }, { - "id": "wasmtime-asm-macros 27.0.0", + "id": "wasmtime-asm-macros 28.0.0", "target": "wasmtime_asm_macros" }, { - "id": "wasmtime-cranelift 27.0.0", + "id": "wasmtime-cranelift 28.0.0", "target": "wasmtime_cranelift" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" }, { - "id": "wasmtime-jit-icache-coherence 27.0.0", + "id": "wasmtime-jit-icache-coherence 28.0.0", "target": "wasmtime_jit_icache_coherence" }, { - "id": "wasmtime-slab 27.0.0", + "id": "wasmtime-slab 28.0.0", "target": "wasmtime_slab" } ], @@ -80467,12 +79929,6 @@ "target": "rustix" } ], - "aarch64-fuchsia": [ - { - "id": "rustix 0.38.32", - "target": "rustix" - } - ], "aarch64-linux-android": [ { "id": "rustix 0.38.32", @@ -80485,6 +79941,12 @@ "target": "windows_sys" } ], + "aarch64-unknown-fuchsia": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], "aarch64-unknown-linux-gnu": [ { "id": "memfd 0.6.4", @@ -80615,12 +80077,6 @@ "target": "rustix" } ], - "x86_64-fuchsia": [ - { - "id": "rustix 0.38.32", - "target": "rustix" - } - ], "x86_64-linux-android": [ { "id": "rustix 0.38.32", @@ -80639,6 +80095,12 @@ "target": "rustix" } ], + "x86_64-unknown-fuchsia": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], "x86_64-unknown-linux-gnu": [ { "id": "memfd 0.6.4", @@ -80669,17 +80131,17 @@ "target": "paste" }, { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" }, { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -80691,7 +80153,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" } ], @@ -80700,7 +80162,7 @@ "proc_macro_deps": { "common": [ { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], @@ -80713,14 +80175,14 @@ ], "license_file": "LICENSE" }, - "wasmtime-asm-macros 27.0.0": { + "wasmtime-asm-macros 28.0.0": { "name": "wasmtime-asm-macros", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-asm-macros/27.0.0/download", - "sha256": "fe53a24e7016a5222875d8ca3ad6024b464465985693c42098cd0bb710002c28" + "url": "https://static.crates.io/crates/wasmtime-asm-macros/28.0.0/download", + "sha256": "882a18800471cfc063c8b3ccf75723784acc3fd534009ac09421f2fac2fcdcec" } }, "targets": [ @@ -80752,7 +80214,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -80760,14 +80222,14 @@ ], "license_file": null }, - "wasmtime-component-macro 27.0.0": { + "wasmtime-component-macro 28.0.0": { "name": "wasmtime-component-macro", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-component-macro/27.0.0/download", - "sha256": "e118acbd2bc09b32ad8606bc7cef793bf5019c1b107772e64dc6c76b5055d40b" + "url": "https://static.crates.io/crates/wasmtime-component-macro/28.0.0/download", + "sha256": "eb5c0a77c9e1927c3d471f53cc13767c3d3438e5d5ffd394e3eb31c86445fd60" } }, "targets": [ @@ -80820,26 +80282,26 @@ "target": "syn" }, { - "id": "wasmtime-component-macro 27.0.0", + "id": "wasmtime-component-macro 28.0.0", "target": "build_script_build" }, { - "id": "wasmtime-component-util 27.0.0", + "id": "wasmtime-component-util 28.0.0", "target": "wasmtime_component_util" }, { - "id": "wasmtime-wit-bindgen 27.0.0", + "id": "wasmtime-wit-bindgen 28.0.0", "target": "wasmtime_wit_bindgen" }, { - "id": "wit-parser 0.219.1", + "id": "wit-parser 0.221.2", "target": "wit_parser" } ], "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "build_script_attrs": { "compile_data_glob": [ @@ -80855,14 +80317,14 @@ ], "license_file": null }, - "wasmtime-component-util 27.0.0": { + "wasmtime-component-util 28.0.0": { "name": "wasmtime-component-util", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-component-util/27.0.0/download", - "sha256": "4a6db4f3ee18c699629eabb9c64e77efe5a93a5137f098db7cab295037ba41c2" + "url": "https://static.crates.io/crates/wasmtime-component-util/28.0.0/download", + "sha256": "43702ca98bf5162eca0573db691ed9ecd36d716f8c6688410fe26ec16b6f9bcb" } }, "targets": [ @@ -80885,7 +80347,7 @@ "**" ], "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -80893,14 +80355,14 @@ ], "license_file": null }, - "wasmtime-cranelift 27.0.0": { + "wasmtime-cranelift 28.0.0": { "name": "wasmtime-cranelift", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-cranelift/27.0.0/download", - "sha256": "8b87e6c78f562b50aff1afd87ff32a57e241424c846c1c8f3c5fd352d2d62906" + "url": "https://static.crates.io/crates/wasmtime-cranelift/28.0.0/download", + "sha256": "20070aa5b75080a8932ec328419faf841df2bc6ceb16b55b0df2b952098392a2" } }, "targets": [ @@ -80940,23 +80402,23 @@ "target": "cfg_if" }, { - "id": "cranelift-codegen 0.114.0", + "id": "cranelift-codegen 0.115.0", "target": "cranelift_codegen" }, { - "id": "cranelift-control 0.114.0", + "id": "cranelift-control 0.115.0", "target": "cranelift_control" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { - "id": "cranelift-frontend 0.114.0", + "id": "cranelift-frontend 0.115.0", "target": "cranelift_frontend" }, { - "id": "cranelift-native 0.114.0", + "id": "cranelift-native 0.115.0", "target": "cranelift_native" }, { @@ -80972,7 +80434,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -80988,11 +80450,11 @@ "target": "thiserror" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmtime-environ 27.0.0", + "id": "wasmtime-environ 28.0.0", "target": "wasmtime_environ" } ], @@ -81002,13 +80464,13 @@ "proc_macro_deps": { "common": [ { - "id": "wasmtime-versioned-export-macros 27.0.0", + "id": "wasmtime-versioned-export-macros 28.0.0", "target": "wasmtime_versioned_export_macros" } ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81016,14 +80478,14 @@ ], "license_file": "LICENSE" }, - "wasmtime-environ 27.0.0": { + "wasmtime-environ 28.0.0": { "name": "wasmtime-environ", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-environ/27.0.0/download", - "sha256": "c25bfeaa16432d59a0706e2463d315ef4c9ebcfaf5605670b99d46373bdf9f27" + "url": "https://static.crates.io/crates/wasmtime-environ/28.0.0/download", + "sha256": "2604ddb24879d4dc1dedcb7081d7a8e017259bce916fdae097a97db52cbaab80" } }, "targets": [ @@ -81061,11 +80523,11 @@ "target": "anyhow" }, { - "id": "cranelift-bitset 0.114.0", + "id": "cranelift-bitset 0.115.0", "target": "cranelift_bitset" }, { - "id": "cranelift-entity 0.114.0", + "id": "cranelift-entity 0.115.0", "target": "cranelift_entity" }, { @@ -81081,7 +80543,7 @@ "target": "log" }, { - "id": "object 0.36.1", + "id": "object 0.36.7", "target": "object" }, { @@ -81089,7 +80551,7 @@ "target": "postcard" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -81101,15 +80563,15 @@ "target": "target_lexicon" }, { - "id": "wasm-encoder 0.219.1", + "id": "wasm-encoder 0.221.2", "target": "wasm_encoder" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" }, { - "id": "wasmprinter 0.219.1", + "id": "wasmprinter 0.221.2", "target": "wasmprinter" } ], @@ -81119,13 +80581,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81133,14 +80595,133 @@ ], "license_file": "LICENSE" }, - "wasmtime-jit-icache-coherence 27.0.0": { + "wasmtime-fiber 28.0.0": { + "name": "wasmtime-fiber", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/wasmtime-fiber/28.0.0/download", + "sha256": "98593412d2b167ebe2b59d4a17a184978a72f976b53b3a0ec05629451079ac1d" + } + }, + "targets": [ + { + "Library": { + "crate_name": "wasmtime_fiber", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "wasmtime_fiber", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "wasmtime-asm-macros 28.0.0", + "target": "wasmtime_asm_macros" + }, + { + "id": "wasmtime-fiber 28.0.0", + "target": "build_script_build" + } + ], + "selects": { + "cfg(unix)": [ + { + "id": "rustix 0.38.32", + "target": "rustix" + } + ], + "cfg(windows)": [ + { + "id": "windows-sys 0.59.0", + "target": "windows_sys" + } + ] + } + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "wasmtime-versioned-export-macros 28.0.0", + "target": "wasmtime_versioned_export_macros" + } + ], + "selects": {} + }, + "version": "28.0.0" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.1.37", + "target": "cc" + } + ], + "selects": {} + }, + "proc_macro_deps": { + "common": [ + { + "id": "wasmtime-versioned-export-macros 28.0.0", + "target": "wasmtime_versioned_export_macros" + } + ], + "selects": {} + } + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, + "wasmtime-jit-icache-coherence 28.0.0": { "name": "wasmtime-jit-icache-coherence", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-jit-icache-coherence/27.0.0/download", - "sha256": "91b218a92866f74f35162f5d03a4e0f62cd0e1cc624285b1014275e5d4575fad" + "url": "https://static.crates.io/crates/wasmtime-jit-icache-coherence/28.0.0/download", + "sha256": "d40d7722b9e1fbeae135715710a8a2570b1e6cf72b74dd653962d89831c6c70d" } }, "targets": [ @@ -81189,7 +80770,7 @@ } }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81197,14 +80778,14 @@ ], "license_file": null }, - "wasmtime-slab 27.0.0": { + "wasmtime-slab 28.0.0": { "name": "wasmtime-slab", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-slab/27.0.0/download", - "sha256": "4d5f8acf677ee6b3b8ba400dd9753ea4769e56a95c4b30b045ac6d2d54b2f8ea" + "url": "https://static.crates.io/crates/wasmtime-slab/28.0.0/download", + "sha256": "8579c335220b4ece9aa490a0e8b46de78cd342b195ab21ff981d095e14b52383" } }, "targets": [ @@ -81227,7 +80808,7 @@ "**" ], "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81235,14 +80816,14 @@ ], "license_file": null }, - "wasmtime-versioned-export-macros 27.0.0": { + "wasmtime-versioned-export-macros 28.0.0": { "name": "wasmtime-versioned-export-macros", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-versioned-export-macros/27.0.0/download", - "sha256": "df09be00c38f49172ca9936998938476e3f2df782673a39ae2ef9fb0838341b6" + "url": "https://static.crates.io/crates/wasmtime-versioned-export-macros/28.0.0/download", + "sha256": "d7de0a56fb0a69b185968f2d7a9ba54750920a806470dff7ad8de91ac06d277e" } }, "targets": [ @@ -81282,7 +80863,7 @@ "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -81290,14 +80871,93 @@ ], "license_file": null }, - "wasmtime-wit-bindgen 27.0.0": { + "wasmtime-winch 28.0.0": { + "name": "wasmtime-winch", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/wasmtime-winch/28.0.0/download", + "sha256": "abd309943c443f5590d12f9aba9ba63c481091c955a0a14de0c2a9e0e3aaeca9" + } + }, + "targets": [ + { + "Library": { + "crate_name": "wasmtime_winch", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "wasmtime_winch", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cranelift-codegen 0.115.0", + "target": "cranelift_codegen" + }, + { + "id": "gimli 0.31.1", + "target": "gimli" + }, + { + "id": "object 0.36.7", + "target": "object" + }, + { + "id": "target-lexicon 0.12.16", + "target": "target_lexicon" + }, + { + "id": "wasmparser 0.221.2", + "target": "wasmparser" + }, + { + "id": "wasmtime-cranelift 28.0.0", + "target": "wasmtime_cranelift" + }, + { + "id": "wasmtime-environ 28.0.0", + "target": "wasmtime_environ" + }, + { + "id": "winch-codegen 28.0.0", + "target": "winch_codegen" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "28.0.0" + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, + "wasmtime-wit-bindgen 28.0.0": { "name": "wasmtime-wit-bindgen", - "version": "27.0.0", + "version": "28.0.0", "package_url": "https://github.com/bytecodealliance/wasmtime", "repository": { "Http": { - "url": "https://static.crates.io/crates/wasmtime-wit-bindgen/27.0.0/download", - "sha256": "bf3963c9c29df91564d8bd181eb00d0dbaeafa1b2a01e15952bb7391166b704e" + "url": "https://static.crates.io/crates/wasmtime-wit-bindgen/28.0.0/download", + "sha256": "969f83022dac3435d6469edb582ceed04cfe32aa44dc3ef16e5cb55574633df8" } }, "targets": [ @@ -81334,14 +80994,14 @@ "target": "indexmap" }, { - "id": "wit-parser 0.219.1", + "id": "wit-parser 0.221.2", "target": "wit_parser" } ], "selects": {} }, "edition": "2021", - "version": "27.0.0" + "version": "28.0.0" }, "license": "Apache-2.0 WITH LLVM-exception", "license_ids": [ @@ -82304,6 +81964,109 @@ ], "license_file": null }, + "winch-codegen 28.0.0": { + "name": "winch-codegen", + "version": "28.0.0", + "package_url": "https://github.com/bytecodealliance/wasmtime", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/winch-codegen/28.0.0/download", + "sha256": "9110decc2983ed94de904804dcd979ba59cbabc78a94fec6b1d8468ec513d0f6" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winch_codegen", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": true, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "winch_codegen", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "anyhow 1.0.93", + "target": "anyhow" + }, + { + "id": "cranelift-codegen 0.115.0", + "target": "cranelift_codegen" + }, + { + "id": "gimli 0.31.1", + "target": "gimli" + }, + { + "id": "regalloc2 0.11.1", + "target": "regalloc2" + }, + { + "id": "smallvec 1.13.2", + "target": "smallvec" + }, + { + "id": "target-lexicon 0.12.16", + "target": "target_lexicon" + }, + { + "id": "wasmparser 0.221.2", + "target": "wasmparser" + }, + { + "id": "wasmtime-cranelift 28.0.0", + "target": "wasmtime_cranelift" + }, + { + "id": "wasmtime-environ 28.0.0", + "target": "wasmtime_environ" + }, + { + "id": "winch-codegen 28.0.0", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "28.0.0" + }, + "build_script_attrs": { + "compile_data_glob": [ + "**" + ], + "data_glob": [ + "**" + ] + }, + "license": "Apache-2.0 WITH LLVM-exception", + "license_ids": [ + "Apache-2.0" + ], + "license_file": "LICENSE" + }, "windows-core 0.52.0": { "name": "windows-core", "version": "0.52.0", @@ -84759,14 +84522,14 @@ ], "license_file": "LICENSE" }, - "wit-parser 0.219.1": { + "wit-parser 0.221.2": { "name": "wit-parser", - "version": "0.219.1", + "version": "0.221.2", "package_url": "https://github.com/bytecodealliance/wasm-tools/tree/main/crates/wit-parser", "repository": { "Http": { - "url": "https://static.crates.io/crates/wit-parser/0.219.1/download", - "sha256": "4a86f669283257e8e424b9a4fc3518e3ade0b95deb9fbc0f93a1876be3eda598" + "url": "https://static.crates.io/crates/wit-parser/0.221.2/download", + "sha256": "fbe1538eea6ea5ddbe5defd0dc82539ad7ba751e1631e9185d24a931f0a5adc8" } }, "targets": [ @@ -84820,7 +84583,7 @@ "target": "semver" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -84832,7 +84595,7 @@ "target": "unicode_xid" }, { - "id": "wasmparser 0.219.1", + "id": "wasmparser 0.221.2", "target": "wasmparser" } ], @@ -84842,13 +84605,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.214", + "id": "serde_derive 1.0.217", "target": "serde_derive" } ], "selects": {} }, - "version": "0.219.1" + "version": "0.221.2" }, "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ @@ -84935,7 +84698,9 @@ "version": "0.5.5" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "wsl 0.1.0": { @@ -85060,7 +84825,7 @@ "target": "data_encoding" }, { - "id": "serde 1.0.214", + "id": "serde 1.0.217", "target": "serde" }, { @@ -85598,7 +85363,9 @@ "version": "0.7.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "yoke-derive 0.7.4": { @@ -85655,7 +85422,9 @@ "version": "0.7.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerocopy 0.7.32": { @@ -85821,7 +85590,9 @@ "version": "0.1.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerofrom-derive 0.1.4": { @@ -85878,7 +85649,9 @@ "version": "0.1.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zeroize 1.8.1": { @@ -86056,7 +85829,9 @@ "version": "0.10.4" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zerovec-derive 0.10.3": { @@ -86109,7 +85884,9 @@ "version": "0.10.3" }, "license": "Unicode-3.0", - "license_ids": [], + "license_ids": [ + "Unicode-3.0" + ], "license_file": "LICENSE" }, "zstd 0.12.4": { @@ -86467,7 +86244,7 @@ "deps": { "common": [ { - "id": "cc 1.0.83", + "id": "cc 1.1.37", "target": "cc" }, { @@ -86505,9 +86282,6 @@ "aarch64-apple-ios-sim": [ "aarch64-apple-ios-sim" ], - "aarch64-fuchsia": [ - "aarch64-fuchsia" - ], "aarch64-linux-android": [ "aarch64-linux-android" ], @@ -86515,6 +86289,9 @@ "aarch64-pc-windows-msvc": [ "aarch64-pc-windows-msvc" ], + "aarch64-unknown-fuchsia": [ + "aarch64-unknown-fuchsia" + ], "aarch64-unknown-linux-gnu": [ "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu" @@ -86557,10 +86334,10 @@ "cfg(all(not(curve25519_dalek_backend = \"fiat\"), not(curve25519_dalek_backend = \"serial\"), target_arch = \"x86_64\"))": [ "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86578,8 +86355,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-nto-qnx710", "armv7-linux-androideabi", "i686-apple-darwin", @@ -86592,12 +86369,12 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-none" ], "cfg(all(target_arch = \"aarch64\", target_env = \"msvc\", not(windows_raw_dylib)))": [ @@ -86622,7 +86399,7 @@ "wasm32-unknown-unknown" ], "cfg(all(target_arch = \"wasm32\", target_os = \"wasi\"))": [ - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(all(target_arch = \"wasm32\", target_vendor = \"unknown\", target_os = \"unknown\", target_env = \"\"))": [ "wasm32-unknown-unknown" @@ -86650,8 +86427,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86666,14 +86443,14 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], "cfg(all(unix, not(target_os = \"android\"), not(target_vendor = \"apple\"), not(target_arch = \"wasm32\")))": [ - "aarch64-fuchsia", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86683,16 +86460,16 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "x86_64-fuchsia", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], "cfg(all(unix, not(target_os = \"macos\")))": [ "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86705,9 +86482,9 @@ "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -86716,9 +86493,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86734,10 +86511,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86746,9 +86523,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86759,10 +86536,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86771,9 +86548,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86784,10 +86561,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86797,8 +86574,8 @@ "s390x-unknown-linux-gnu" ], "cfg(any(target_arch = \"x86\", target_arch = \"x86_64\", all(any(target_arch = \"aarch64\", target_arch = \"arm\"), any(target_os = \"android\", target_os = \"fuchsia\", target_os = \"linux\"))))": [ - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "arm-unknown-linux-gnueabi", @@ -86811,10 +86588,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86827,10 +86604,10 @@ "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -86873,9 +86650,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "arm-unknown-linux-gnueabi", @@ -86888,13 +86665,13 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -86948,8 +86725,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86964,9 +86741,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -86974,8 +86751,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -86990,9 +86767,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87000,8 +86777,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87014,12 +86791,12 @@ "i686-unknown-linux-gnu", "powerpc-unknown-linux-gnu", "s390x-unknown-linux-gnu", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87028,9 +86805,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87047,20 +86824,20 @@ "riscv64gc-unknown-none-elf", "s390x-unknown-linux-gnu", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" ], "cfg(not(any(target_os = \"macos\", target_os = \"ios\", target_os = \"windows\", target_arch = \"wasm32\")))": [ - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87076,9 +86853,9 @@ "s390x-unknown-linux-gnu", "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87087,8 +86864,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87107,9 +86884,9 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87118,8 +86895,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87136,12 +86913,12 @@ "s390x-unknown-linux-gnu", "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87150,9 +86927,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87172,10 +86949,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87184,9 +86961,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87206,10 +86983,10 @@ "thumbv8m.main-none-eabi", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87218,8 +86995,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87237,12 +87014,12 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87251,9 +87028,9 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87272,13 +87049,13 @@ "thumbv7em-none-eabi", "thumbv8m.main-none-eabi", "wasm32-unknown-unknown", - "wasm32-wasi", + "wasm32-wasip1", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87288,16 +87065,16 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710" ], "cfg(target_arch = \"wasm32\")": [ "wasm32-unknown-unknown", - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(target_arch = \"x86\")": [ "i686-apple-darwin", @@ -87309,10 +87086,10 @@ "cfg(target_arch = \"x86_64\")": [ "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" @@ -87333,8 +87110,8 @@ "cfg(target_os = \"cloudabi\")": [], "cfg(target_os = \"dragonfly\")": [], "cfg(target_os = \"fuchsia\")": [ - "aarch64-fuchsia", - "x86_64-fuchsia" + "aarch64-unknown-fuchsia", + "x86_64-unknown-fuchsia" ], "cfg(target_os = \"haiku\")": [], "cfg(target_os = \"hermit\")": [], @@ -87361,7 +87138,7 @@ ], "cfg(target_os = \"redox\")": [], "cfg(target_os = \"wasi\")": [ - "wasm32-wasi" + "wasm32-wasip1" ], "cfg(target_os = \"windows\")": [ "aarch64-pc-windows-msvc", @@ -87373,8 +87150,8 @@ "aarch64-apple-darwin", "aarch64-apple-ios", "aarch64-apple-ios-sim", - "aarch64-fuchsia", "aarch64-linux-android", + "aarch64-unknown-fuchsia", "aarch64-unknown-linux-gnu", "aarch64-unknown-nixos-gnu", "aarch64-unknown-nto-qnx710", @@ -87389,9 +87166,9 @@ "s390x-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-apple-ios", - "x86_64-fuchsia", "x86_64-linux-android", "x86_64-unknown-freebsd", + "x86_64-unknown-fuchsia", "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], @@ -87440,8 +87217,8 @@ "wasm32-unknown-unknown": [ "wasm32-unknown-unknown" ], - "wasm32-wasi": [ - "wasm32-wasi" + "wasm32-wasip1": [ + "wasm32-wasip1" ], "x86_64-apple-darwin": [ "x86_64-apple-darwin" @@ -87449,9 +87226,6 @@ "x86_64-apple-ios": [ "x86_64-apple-ios" ], - "x86_64-fuchsia": [ - "x86_64-fuchsia" - ], "x86_64-linux-android": [ "x86_64-linux-android" ], @@ -87463,6 +87237,9 @@ "x86_64-unknown-freebsd": [ "x86_64-unknown-freebsd" ], + "x86_64-unknown-fuchsia": [ + "x86_64-unknown-fuchsia" + ], "x86_64-unknown-linux-gnu": [ "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" @@ -87523,7 +87300,7 @@ "candid 0.10.10", "candid_parser 0.1.2", "cargo_metadata 0.14.2", - "cc 1.0.83", + "cc 1.1.37", "cddl 0.9.4", "cfg-if 1.0.0", "chacha20poly1305 0.10.1", @@ -87580,27 +87357,27 @@ "hyper-rustls 0.27.3", "hyper-socks2 0.9.1", "hyper-util 0.1.10", - "ic-agent 0.37.1", + "ic-agent 0.39.2", "ic-bn-lib 0.1.0", "ic-btc-interface 0.2.2", "ic-canister-log 0.2.0", - "ic-canister-sig-creation 1.0.1", - "ic-cbor 2.6.0", + "ic-canister-sig-creation 1.1.0", + "ic-cbor 3.0.2", "ic-cdk 0.16.0", "ic-cdk-macros 0.9.0", "ic-cdk-timers 0.11.0", - "ic-certificate-verification 2.6.0", - "ic-certification 2.6.0", + "ic-certificate-verification 3.0.2", + "ic-certification 3.0.2", "ic-certified-map 0.3.4", - "ic-http-certification 2.6.0", - "ic-http-gateway 0.0.0", + "ic-http-certification 3.0.2", + "ic-http-gateway 0.1.0", "ic-metrics-encoder 1.1.1", - "ic-response-verification 2.6.0", + "ic-response-verification 3.0.2", "ic-sha3 1.0.0", "ic-stable-structures 0.6.5", "ic-test-state-machine-client 3.0.1", - "ic-transport-types 0.37.1", - "ic-utils 0.37.0", + "ic-transport-types 0.39.2", + "ic-utils 0.39.0", "ic-verify-bls-signature 0.6.0", "ic-wasm 0.8.4", "ic-xrc-types 1.2.0", @@ -87617,7 +87394,7 @@ "insta 1.31.0", "instant-acme 0.7.2", "intmap 1.1.0", - "ipnet 2.8.0", + "ipnet 2.10.1", "isocountry 0.3.2", "itertools 0.12.0", "json-patch 0.2.7", @@ -87660,7 +87437,7 @@ "opentelemetry 0.27.0", "opentelemetry-otlp 0.27.0", "opentelemetry-prometheus 0.13.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "p256 0.13.2", "pairing 0.23.0", "parking_lot 0.12.1", @@ -87724,7 +87501,7 @@ "scraper 0.17.1", "secp256k1 0.22.2", "semver 1.0.22", - "serde 1.0.214", + "serde 1.0.217", "serde-bytes-repr 0.1.5", "serde_bytes 0.11.15", "serde_cbor 0.11.2", @@ -87752,6 +87529,7 @@ "stubborn-io 0.3.2", "subtle 2.6.1", "syn 1.0.109", + "syscalls 0.6.18", "tar 0.4.39", "tarpc 0.34.0", "tempfile 3.12.0", @@ -87770,6 +87548,7 @@ "tokio-rustls 0.26.0", "tokio-serde 0.8.0", "tokio-socks 0.5.2", + "tokio-stream 0.1.17", "tokio-test 0.4.4", "tokio-util 0.7.13", "toml 0.5.11", @@ -87799,8 +87578,8 @@ "wasm-smith 0.212.0", "wasmparser 0.217.0", "wasmprinter 0.217.0", - "wasmtime 27.0.0", - "wasmtime-environ 27.0.0", + "wasmtime 28.0.0", + "wasmtime-environ 28.0.0", "wast 212.0.0", "wat 1.212.0", "wee_alloc 0.4.5", @@ -87813,5 +87592,6 @@ "zeroize 1.8.1", "zstd 0.13.2" ], - "direct_dev_deps": [] + "direct_dev_deps": [], + "unused_patches": [] } diff --git a/Cargo.Bazel.toml.lock b/Cargo.Bazel.toml.lock index ffbbf5c0153..a81cc6d2d52 100644 --- a/Cargo.Bazel.toml.lock +++ b/Cargo.Bazel.toml.lock @@ -338,9 +338,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -571,6 +571,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -724,6 +735,15 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "async-watch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-web-client" version = "0.6.2" @@ -1343,7 +1363,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite", @@ -1511,6 +1531,9 @@ name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] [[package]] name = "by_address" @@ -1611,13 +1634,10 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "cached" -version = "0.47.0" +version = "0.49.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b0116662497bc24e4b177c90eaf8870e39e2714c3fcfa296327a93f593fc21" +checksum = "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" dependencies = [ - "ahash 0.8.11", - "cached_proc_macro", - "cached_proc_macro_types", "hashbrown 0.14.5", "instant", "once_cell", @@ -1626,10 +1646,11 @@ dependencies = [ [[package]] name = "cached" -version = "0.49.2" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96" +checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" dependencies = [ + "ahash 0.8.11", "hashbrown 0.14.5", "instant", "once_cell", @@ -1638,34 +1659,36 @@ dependencies = [ [[package]] name = "cached" -version = "0.52.0" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" +checksum = "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" dependencies = [ "ahash 0.8.11", + "cached_proc_macro", + "cached_proc_macro_types", "hashbrown 0.14.5", - "instant", "once_cell", "thiserror 1.0.68", + "web-time", ] [[package]] name = "cached_proc_macro" -version = "0.18.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" +checksum = "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" dependencies = [ - "darling 0.14.4", + "darling 0.20.10", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "cached_proc_macro_types" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "camino" @@ -1805,12 +1828,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.83" +version = "1.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -2330,18 +2354,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba4f80548f22dc9c43911907b5e322c5555544ee85f785115701e6a28c9abe1" +checksum = "ac89549be94911dd0e839b4a7db99e9ed29c17517e1c026f61066884c168aa3c" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-bitset" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005884e3649c3e5ff2dc79e8a94b138f11569cc08a91244a292714d2a86e9156" +checksum = "b9bd49369f76c77e34e641af85d0956869237832c118964d08bf5f51f210875a" dependencies = [ "serde", "serde_derive", @@ -2349,9 +2373,9 @@ dependencies = [ [[package]] name = "cranelift-codegen" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4036255ec33ce9a37495dfbcfc4e1118fd34e693eff9a1e106336b7cd16a9b" +checksum = "fd96ce9cf8efebd7f5ab8ced5a0ce44250280bbae9f593d74a6d7effc3582a35" dependencies = [ "bumpalo", "cranelift-bforest", @@ -2373,33 +2397,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ca74f4b68319da11d39e894437cb6e20ec7c2e11fbbda823c3bf207beedff7" +checksum = "5a68e358827afe4bfb6239fcbf6fbd5ac56206ece8a99c8f5f9bbd518773281a" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e54f433a0269c4187871aa06d452214d5515d228d5bdc22219585e9eef895" +checksum = "e184c9767afbe73d50c55ec29abcf4c32f9baf0d9d22b86d58c4d55e06dee181" [[package]] name = "cranelift-control" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cb4018f5bf59fb53f515fa9d80e6f8c5ce19f198dc538984ebd23ecf8965ec" +checksum = "5cc7664f2a66f053e33f149e952bb5971d138e3af637f5097727ed6dc0ed95dd" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305399fd781a2953ac78c1396f02ff53144f39c33eb7fc7789cf4e8936d13a96" +checksum = "118597e3a9cf86c3556fa579a7a23b955fa18231651a52a77a2475d305a9cf84" dependencies = [ "cranelift-bitset", "serde", @@ -2408,9 +2432,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9230b460a128d53653456137751d27baf567947a3ab8c0c4d6e31fd08036d81e" +checksum = "7638ea1efb069a0aa18d8ee67401b6b0d19f6bfe5de5e9ede348bfc80bb0d8c7" dependencies = [ "cranelift-codegen", "log", @@ -2420,15 +2444,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b961e24ae3ec9813a24a15ae64bbd2a42e4de4d79a7f3225a412e3b94e78d1c8" +checksum = "15c53e1152a0b01c4ed2b1e0535602b8e86458777dd9d18b28732b16325c7dc0" [[package]] name = "cranelift-native" -version = "0.114.0" +version = "0.115.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5bd76df6c9151188dfa428c863b33da5b34561b67f43c0cf3f24a794f9fa1f" +checksum = "7b7d8f895444fa52dd7bdd0bed11bf007a7fb43af65a6deac8fcc4094c6372f7" dependencies = [ "cranelift-codegen", "libc", @@ -2709,22 +2733,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" -dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -2743,29 +2757,15 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", + "strsim 0.11.1", "syn 2.0.87", ] @@ -2782,22 +2782,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" -dependencies = [ - "darling_core 0.20.3", + "darling_core 0.20.10", "quote", "syn 2.0.87", ] @@ -3083,7 +3072,7 @@ dependencies = [ "ic-cdk-macros 0.9.0", "ic-cdk-timers", "ic-certificate-verification", - "ic-certification", + "ic-certification 3.0.2", "ic-certified-map", "ic-http-certification", "ic-http-gateway", @@ -3092,7 +3081,7 @@ dependencies = [ "ic-sha3", "ic-stable-structures", "ic-test-state-machine-client", - "ic-transport-types", + "ic-transport-types 0.39.2", "ic-utils", "ic-verify-bls-signature 0.6.0", "ic-wasm", @@ -3153,7 +3142,7 @@ dependencies = [ "opentelemetry 0.27.0", "opentelemetry-otlp", "opentelemetry-prometheus 0.13.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "p256", "pairing", "parking_lot 0.12.1", @@ -3245,6 +3234,7 @@ dependencies = [ "stubborn-io", "subtle", "syn 1.0.109", + "syscalls", "tar", "tarpc", "tempfile", @@ -3263,6 +3253,7 @@ dependencies = [ "tokio-rustls 0.26.0", "tokio-serde", "tokio-socks", + "tokio-stream", "tokio-test", "tokio-util", "toml", @@ -3781,6 +3772,12 @@ dependencies = [ "serde", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + [[package]] name = "event-listener" version = "4.0.3" @@ -3997,6 +3994,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -4378,6 +4381,16 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", + "serde", +] + [[package]] name = "hashlink" version = "0.8.3" @@ -4675,17 +4688,6 @@ dependencies = [ "http 1.2.0", ] -[[package]] -name = "http-body-to-bytes" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17a08236c6f51c2ee95d840f45acf8fa9e339390e00b4ef640857b2f2a534d70" -dependencies = [ - "bytes", - "http-body 1.0.1", - "http-body-util", -] - [[package]] name = "http-body-util" version = "0.1.2" @@ -4909,26 +4911,28 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.37.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd3fdf5e5c4f4a9fe5ca612f0febd22dcb161d2f2b75b0142326732be5e4978" +checksum = "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" dependencies = [ + "arc-swap", + "async-channel 1.9.0", "async-lock", + "async-trait", + "async-watch", "backoff", "cached 0.52.0", "candid", + "der", + "ecdsa", "ed25519-consensus", + "elliptic-curve", "futures-util", "hex", "http 1.2.0", "http-body 1.0.1", - "http-body-to-bytes", - "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", - "hyper-util", - "ic-certification", - "ic-transport-types", + "ic-certification 3.0.2", + "ic-transport-types 0.39.2", "ic-verify-bls-signature 0.5.0", "k256", "leb128", @@ -4939,7 +4943,6 @@ dependencies = [ "rangemap", "reqwest 0.12.9", "ring 0.17.7", - "rustls-webpki 0.102.8", "sec1", "serde", "serde_bytes", @@ -4947,10 +4950,11 @@ dependencies = [ "serde_repr", "sha2 0.10.8", "simple_asn1", - "thiserror 1.0.68", + "stop-token", + "thiserror 2.0.3", "time", "tokio", - "tower 0.4.13", + "tower-service", "url", ] @@ -5041,31 +5045,30 @@ dependencies = [ [[package]] name = "ic-canister-sig-creation" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1fc58d747480967a25810d8a90d460e7e9ea4c669ab0286541a148736513f9" +version = "1.1.0" +source = "git+https://github.com/dfinity/ic-canister-sig-creation?rev=7f9e931954637526295269155881207f6c832d6d#7f9e931954637526295269155881207f6c832d6d" dependencies = [ "candid", "hex", - "ic-cdk 0.14.1", - "ic-certification", + "ic-cdk 0.17.0", + "ic-certification 3.0.2", "ic-representation-independent-hash", "lazy_static", "serde", "serde_bytes", "serde_cbor", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 2.0.3", ] [[package]] name = "ic-cbor" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b0e48b4166c891e79d624f3a184b4a7c145d307576872d9a46dedb8c73ea8f" +checksum = "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" dependencies = [ "candid", - "ic-certification", + "ic-certification 3.0.2", "leb128", "nom", "thiserror 1.0.68", @@ -5084,19 +5087,6 @@ dependencies = [ "serde_bytes", ] -[[package]] -name = "ic-cdk" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cff1a3c3db565e3384c9c9d6d676b0a3f89a0886f4f787294d9c946d844369f" -dependencies = [ - "candid", - "ic-cdk-macros 0.14.0", - "ic0 0.23.0", - "serde", - "serde_bytes", -] - [[package]] name = "ic-cdk" version = "0.16.0" @@ -5151,20 +5141,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ic-cdk-macros" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01dc6bc425ec048d6ac4137c7c0f2cfbd6f8b0be8efc568feae2b265f566117c" -dependencies = [ - "candid", - "proc-macro2", - "quote", - "serde", - "serde_tokenstream 0.2.1", - "syn 2.0.87", -] - [[package]] name = "ic-cdk-macros" version = "0.16.0" @@ -5209,14 +5185,14 @@ dependencies = [ [[package]] name = "ic-certificate-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "586e09b06a93d930f6a33f5f909bb11d2e4a06be3635dd5da1eb0e6554b7dae4" +checksum = "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" dependencies = [ - "cached 0.47.0", + "cached 0.54.0", "candid", "ic-cbor", - "ic-certification", + "ic-certification 3.0.2", "lazy_static", "leb128", "miracl_core_bls12381", @@ -5238,6 +5214,18 @@ dependencies = [ "sha2 0.10.8", ] +[[package]] +name = "ic-certification" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" +dependencies = [ + "hex", + "serde", + "serde_bytes", + "sha2 0.10.8", +] + [[package]] name = "ic-certified-map" version = "0.3.4" @@ -5251,23 +5239,26 @@ dependencies = [ [[package]] name = "ic-http-certification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0b97e949845039149dc5e7ea6a7c12ee4333bb402e37bc507904643c7b3e41" +checksum = "479941fca8e68c2267cddf686d34ed6fb491168667ff259c08a3d65d28bd26d2" dependencies = [ + "base64 0.22.1", "candid", - "http 0.2.12", - "ic-certification", + "http 1.2.0", + "ic-certification 3.0.2", "ic-representation-independent-hash", "serde", + "serde_cbor", "thiserror 1.0.68", "urlencoding", ] [[package]] name = "ic-http-gateway" -version = "0.0.0" -source = "git+https://github.com/dfinity/http-gateway?tag=0.1.0-b0#3be26b5a2c71bf56e05b910951c1935a1ac550c4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8b30a8ff19af1a7dc64b1dbe1a38f1b60c7eea566e2049f755ce3bace0e630" dependencies = [ "bytes", "candid", @@ -5290,9 +5281,9 @@ checksum = "8b5c7628eac357aecda461130f8074468be5aa4d258a002032d82d817f79f1f8" [[package]] name = "ic-representation-independent-hash" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" +checksum = "3643f12824280580d31e47d380f1be23abee29944a1430c3ed22b164ac8e68db" dependencies = [ "leb128", "sha2 0.10.8", @@ -5300,18 +5291,18 @@ dependencies = [ [[package]] name = "ic-response-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef02ef84189d61a7d39889b7e9a3ae212d45c3df293513f7b2568027fd08a8" +checksum = "2b97514fada84797baf61a6a29f1c71695798c2628cb6013d97a5dd6ecc26df7" dependencies = [ - "base64 0.21.6", + "base64 0.22.1", "candid", "flate2", "hex", - "http 0.2.12", + "http 1.2.0", "ic-cbor", "ic-certificate-verification", - "ic-certification", + "ic-certification 3.0.2", "ic-http-certification", "ic-representation-independent-hash", "leb128", @@ -5360,7 +5351,7 @@ checksum = "875dc4704780383112e8e8b5063a1b98de114321d0c7d3e7f635dcf360a57fba" dependencies = [ "candid", "hex", - "ic-certification", + "ic-certification 2.6.0", "leb128", "serde", "serde_bytes", @@ -5369,11 +5360,29 @@ dependencies = [ "thiserror 1.0.68", ] +[[package]] +name = "ic-transport-types" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" +dependencies = [ + "candid", + "hex", + "ic-certification 3.0.2", + "leb128", + "serde", + "serde_bytes", + "serde_cbor", + "serde_repr", + "sha2 0.10.8", + "thiserror 2.0.3", +] + [[package]] name = "ic-utils" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa832296800758c9c921dd1704985ded6b3e6fbc3aee409727eb1f00d69a595" +checksum = "bb1da4a68c45146018b8496c157ad94126b9c202ab4400c6c0a9030c1ef0f0ba" dependencies = [ "async-trait", "candid", @@ -5904,9 +5913,12 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.8.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +dependencies = [ + "serde", +] [[package]] name = "ipnetwork" @@ -5999,9 +6011,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -7313,12 +7325,12 @@ dependencies = [ [[package]] name = "object" -version = "0.36.1" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "indexmap 2.2.6", "memchr", ] @@ -7467,7 +7479,7 @@ dependencies = [ "http 1.2.0", "opentelemetry 0.27.0", "opentelemetry-proto", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "prost 0.13.3", "thiserror 1.0.68", "tokio", @@ -7508,7 +7520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "prost 0.13.3", "tonic", ] @@ -7615,16 +7627,15 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" +checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" dependencies = [ "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", - "once_cell", "opentelemetry 0.27.0", "percent-encoding", "rand 0.8.5", @@ -8127,8 +8138,8 @@ dependencies = [ "base64 0.13.1", "candid", "hex", - "ic-certification", - "ic-transport-types", + "ic-certification 2.6.0", + "ic-transport-types 0.37.1", "reqwest 0.12.9", "schemars", "serde", @@ -8667,9 +8678,9 @@ dependencies = [ [[package]] name = "pulley-interpreter" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b8d81cf799e20564931e9867ca32de545188c6ee4c2e0f6e41d32f0c7dc6fb" +checksum = "403a1a95f4c18a45c86c7bff13df00347afd0abcbf2e54af273c837339ffcf77" dependencies = [ "cranelift-bitset", "log", @@ -9078,14 +9089,15 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.10.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12908dbeb234370af84d0579b9f68258a0f67e201412dd9a2814e6f45b2fc0f0" +checksum = "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3" dependencies = [ - "hashbrown 0.14.5", + "allocator-api2", + "bumpalo", + "hashbrown 0.15.2", "log", "rustc-hash 2.0.0", - "slice-group-by", "smallvec", ] @@ -10015,9 +10027,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.214" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -10075,9 +10087,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.214" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", @@ -10142,9 +10154,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.14" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", @@ -10230,7 +10242,7 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.3", + "darling 0.20.10", "proc-macro2", "quote", "syn 2.0.87", @@ -10454,12 +10466,6 @@ dependencies = [ "autocfg 1.1.0", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "slog" version = "2.7.0" @@ -10668,6 +10674,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stop-token" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" +dependencies = [ + "async-channel 1.9.0", + "cfg-if 1.0.0", + "futures-core", + "pin-project-lite", +] + [[package]] name = "str_stack" version = "0.1.0" @@ -10872,6 +10890,16 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "syscalls" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d0e35dc7d73976a53c7e6d7d177ef804a0c0ee774ec77bcc520c2216fd7cbe" +dependencies = [ + "serde", + "serde_repr", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -11402,9 +11430,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -11760,7 +11788,7 @@ dependencies = [ "js-sys", "once_cell", "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "smallvec", "tracing", "tracing-core", @@ -12351,12 +12379,12 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" +checksum = "c17a3bd88f2155da63a1f2fcb8a56377a24f0b6dfed12733bb5f544e86f690c5" dependencies = [ "leb128", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] @@ -12428,13 +12456,12 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" +checksum = "9845c470a2e10b61dd42c385839cdd6496363ed63b5c9e420b5488b77bd22083" dependencies = [ - "ahash 0.8.11", "bitflags 2.6.0", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "indexmap 2.2.6", "semver", "serde", @@ -12453,20 +12480,20 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228cdc1f30c27816da225d239ce4231f28941147d34713dee8f1fff7cb330e54" +checksum = "a80742ff1b9e6d8c231ac7c7247782c6fc5bce503af760bca071811e5fc9ee56" dependencies = [ "anyhow", "termcolor", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] name = "wasmtime" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b79302e3e084713249cc5622e8608e7410afdeeea8c8026d04f491d1fab0b4b" +checksum = "f639ecae347b9a2227e453a7b7671e84370a0b61f47a15e0390fe9b7725e47b3" dependencies = [ "anyhow", "bitflags 2.6.0", @@ -12480,7 +12507,7 @@ dependencies = [ "log", "mach2", "memfd", - "object 0.36.1", + "object 0.36.7", "once_cell", "paste", "postcard", @@ -12493,31 +12520,33 @@ dependencies = [ "smallvec", "sptr", "target-lexicon", - "wasmparser 0.219.1", + "wasmparser 0.221.2", "wasmtime-asm-macros", "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", + "wasmtime-fiber", "wasmtime-jit-icache-coherence", "wasmtime-slab", "wasmtime-versioned-export-macros", + "wasmtime-winch", "windows-sys 0.59.0", ] [[package]] name = "wasmtime-asm-macros" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe53a24e7016a5222875d8ca3ad6024b464465985693c42098cd0bb710002c28" +checksum = "882a18800471cfc063c8b3ccf75723784acc3fd534009ac09421f2fac2fcdcec" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-component-macro" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e118acbd2bc09b32ad8606bc7cef793bf5019c1b107772e64dc6c76b5055d40b" +checksum = "eb5c0a77c9e1927c3d471f53cc13767c3d3438e5d5ffd394e3eb31c86445fd60" dependencies = [ "anyhow", "proc-macro2", @@ -12530,15 +12559,15 @@ dependencies = [ [[package]] name = "wasmtime-component-util" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6db4f3ee18c699629eabb9c64e77efe5a93a5137f098db7cab295037ba41c2" +checksum = "43702ca98bf5162eca0573db691ed9ecd36d716f8c6688410fe26ec16b6f9bcb" [[package]] name = "wasmtime-cranelift" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b87e6c78f562b50aff1afd87ff32a57e241424c846c1c8f3c5fd352d2d62906" +checksum = "20070aa5b75080a8932ec328419faf841df2bc6ceb16b55b0df2b952098392a2" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -12550,20 +12579,20 @@ dependencies = [ "gimli 0.31.1", "itertools 0.12.0", "log", - "object 0.36.1", + "object 0.36.7", "smallvec", "target-lexicon", "thiserror 1.0.68", - "wasmparser 0.219.1", + "wasmparser 0.221.2", "wasmtime-environ", "wasmtime-versioned-export-macros", ] [[package]] name = "wasmtime-environ" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25bfeaa16432d59a0706e2463d315ef4c9ebcfaf5605670b99d46373bdf9f27" +checksum = "2604ddb24879d4dc1dedcb7081d7a8e017259bce916fdae097a97db52cbaab80" dependencies = [ "anyhow", "cranelift-bitset", @@ -12571,22 +12600,37 @@ dependencies = [ "gimli 0.31.1", "indexmap 2.2.6", "log", - "object 0.36.1", + "object 0.36.7", "postcard", "serde", "serde_derive", "smallvec", "target-lexicon", - "wasm-encoder 0.219.1", - "wasmparser 0.219.1", - "wasmprinter 0.219.1", + "wasm-encoder 0.221.2", + "wasmparser 0.221.2", + "wasmprinter 0.221.2", +] + +[[package]] +name = "wasmtime-fiber" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98593412d2b167ebe2b59d4a17a184978a72f976b53b3a0ec05629451079ac1d" +dependencies = [ + "anyhow", + "cc", + "cfg-if 1.0.0", + "rustix", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys 0.59.0", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b218a92866f74f35162f5d03a4e0f62cd0e1cc624285b1014275e5d4575fad" +checksum = "d40d7722b9e1fbeae135715710a8a2570b1e6cf72b74dd653962d89831c6c70d" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -12596,26 +12640,43 @@ dependencies = [ [[package]] name = "wasmtime-slab" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5f8acf677ee6b3b8ba400dd9753ea4769e56a95c4b30b045ac6d2d54b2f8ea" +checksum = "8579c335220b4ece9aa490a0e8b46de78cd342b195ab21ff981d095e14b52383" [[package]] name = "wasmtime-versioned-export-macros" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df09be00c38f49172ca9936998938476e3f2df782673a39ae2ef9fb0838341b6" +checksum = "d7de0a56fb0a69b185968f2d7a9ba54750920a806470dff7ad8de91ac06d277e" dependencies = [ "proc-macro2", "quote", "syn 2.0.87", ] +[[package]] +name = "wasmtime-winch" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abd309943c443f5590d12f9aba9ba63c481091c955a0a14de0c2a9e0e3aaeca9" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "object 0.36.7", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", + "winch-codegen", +] + [[package]] name = "wasmtime-wit-bindgen" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3963c9c29df91564d8bd181eb00d0dbaeafa1b2a01e15952bb7391166b704e" +checksum = "969f83022dac3435d6469edb582ceed04cfe32aa44dc3ef16e5cb55574633df8" dependencies = [ "anyhow", "heck 0.5.0", @@ -12755,6 +12816,23 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winch-codegen" +version = "28.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9110decc2983ed94de904804dcd979ba59cbabc78a94fec6b1d8468ec513d0f6" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "regalloc2", + "smallvec", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -13038,9 +13116,9 @@ dependencies = [ [[package]] name = "wit-parser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a86f669283257e8e424b9a4fc3518e3ade0b95deb9fbc0f93a1876be3eda598" +checksum = "fbe1538eea6ea5ddbe5defd0dc82539ad7ba751e1631e9185d24a931f0a5adc8" dependencies = [ "anyhow", "id-arena", @@ -13051,7 +13129,7 @@ dependencies = [ "serde_derive", "serde_json", "unicode-xid", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] diff --git a/Cargo.lock b/Cargo.lock index 5d86f8deb54..66492550925 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,7 +39,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "futures-core", "futures-sink", @@ -62,7 +62,7 @@ dependencies = [ "actix-utils", "ahash 0.8.11", "base64 0.22.1", - "bitflags 2.6.0", + "bitflags 2.8.0", "brotli 6.0.0", "bytes", "bytestring", @@ -96,7 +96,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -136,8 +136,8 @@ dependencies = [ "actix-utils", "futures-core", "futures-util", - "mio 1.0.2", - "socket2 0.5.7", + "mio 1.0.3", + "socket2 0.5.8", "tokio", "tracing", ] @@ -200,7 +200,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "smallvec", - "socket2 0.5.7", + "socket2 0.5.8", "time", "url", ] @@ -214,7 +214,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -292,20 +292,20 @@ dependencies = [ [[package]] name = "aide" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0e3b97a21e41ec5c19bfd9b4fc1f7086be104f8b988681230247ffc91cc8ed" +checksum = "5678d2978845ddb4bd736a026f467dd652d831e9e6254b0e41b07f7ee7523309" dependencies = [ "axum", "bytes", "cfg-if 1.0.0", "http 1.2.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "schemars", "serde", "serde_json", "serde_qs", - "thiserror 1.0.68", + "thiserror 1.0.69", "tower-layer", "tower-service", "tracing", @@ -337,9 +337,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -375,7 +375,7 @@ dependencies = [ "prometheus", "rand 0.8.5", "rsa", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -403,14 +403,14 @@ dependencies = [ "lazy_static", "prometheus", "serde", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -423,49 +423,50 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -525,7 +526,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -555,7 +556,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror 1.0.68", + "thiserror 1.0.69", "time", ] @@ -567,7 +568,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "synstructure", ] @@ -579,7 +580,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -614,6 +615,17 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-channel" version = "2.3.1" @@ -628,9 +640,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.17" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" dependencies = [ "brotli 7.0.0", "flate2", @@ -657,9 +669,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock", "cfg-if 1.0.0", @@ -680,7 +692,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", "pin-project-lite", ] @@ -713,7 +725,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da2537846e16b96d2972ee52a3b355663872a1a687ce6d57a3b6f6b6a181c89" dependencies = [ - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] @@ -736,7 +748,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -747,13 +759,22 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", +] + +[[package]] +name = "async-watch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a078faf4e27c0c6cc0efb20e5da59dcccc04968ebf2801d8e0b2195124cdcdb2" +dependencies = [ + "event-listener 2.5.3", ] [[package]] @@ -770,8 +791,8 @@ dependencies = [ "lazy_static", "log", "rustls-pki-types", - "thiserror 1.0.68", - "webpki-roots 0.26.6", + "thiserror 1.0.69", + "webpki-roots 0.26.7", ] [[package]] @@ -793,13 +814,13 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -830,7 +851,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "itoa", "matchit", @@ -843,9 +864,9 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -866,7 +887,7 @@ dependencies = [ "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tower-layer", "tower-service", "tracing", @@ -874,25 +895,26 @@ dependencies = [ [[package]] name = "axum-extra" -version = "0.9.4" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73c3220b188aea709cf1b6c5f9b01c3bd936bb08bd2b5184a12b35ac8131b1f9" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" dependencies = [ "axum", "axum-core", "bytes", + "fastrand", "futures-util", "headers 0.4.0", "http 1.2.0", "http-body 1.0.1", "http-body-util", "mime", + "multer 3.1.0", "pin-project-lite", "serde", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", - "tracing", ] [[package]] @@ -907,7 +929,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "rustls 0.21.12", @@ -1087,7 +1109,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cexpr", "clang-sys", "itertools 0.12.1", @@ -1098,7 +1120,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -1148,7 +1170,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", ] [[package]] @@ -1157,6 +1188,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitcoin" version = "0.28.2" @@ -1185,9 +1222,9 @@ dependencies = [ [[package]] name = "bitcoin" -version = "0.32.3" +version = "0.32.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0032b0e8ead7074cda7fc4f034409607e3f03a6f71d66ade8a307f79b4d99e73" +checksum = "ce6bc65742dea50536e35ad42492b234c27904a27f0abdcbce605015cb4ea026" dependencies = [ "base58ck", "bech32 0.11.0", @@ -1208,9 +1245,9 @@ checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2" [[package]] name = "bitcoin-io" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "340e09e8399c7bd8912f495af6aa58bea0c9214773417ffaa8f6460f93aaee56" +checksum = "0b47c4ab7a93edb0c7198c5535ed9b52b63095f4e9b45279c6736cec4b856baf" [[package]] name = "bitcoin-private" @@ -1301,9 +1338,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitvec" @@ -1341,7 +1378,7 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel", + "async-channel 2.3.1", "async-task", "futures-io", "futures-lite", @@ -1350,9 +1387,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "9fb65153674e51d3a42c8f27b05b9508cea85edfaade8aa46bc8fc18cecdfef3" dependencies = [ "borsh-derive", "cfg_aliases", @@ -1360,16 +1397,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "a396e17ad94059c650db3d253bb6e25927f1eb462eede7e7a153bb6e75dce0a7" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", - "syn_derive", + "syn 2.0.96", ] [[package]] @@ -1416,12 +1452,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "serde", ] @@ -1489,6 +1525,9 @@ name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] [[package]] name = "by_address" @@ -1536,9 +1575,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -1563,9 +1602,9 @@ checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" [[package]] name = "bytestring" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" dependencies = [ "bytes", ] @@ -1589,54 +1628,54 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "cached" -version = "0.47.0" +version = "0.49.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b0116662497bc24e4b177c90eaf8870e39e2714c3fcfa296327a93f593fc21" +checksum = "8e8e463fceca5674287f32d252fb1d94083758b8709c160efae66d263e5f4eba" dependencies = [ - "ahash 0.8.11", - "cached_proc_macro", - "cached_proc_macro_types", "hashbrown 0.14.5", "instant", "once_cell", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "cached" -version = "0.49.3" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8e463fceca5674287f32d252fb1d94083758b8709c160efae66d263e5f4eba" +checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" dependencies = [ + "ahash 0.8.11", "hashbrown 0.14.5", "instant", "once_cell", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "cached" -version = "0.52.0" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8466736fe5dbcaf8b8ee24f9bbefe43c884dc3e9ff7178da70f55bffca1133c" +checksum = "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" dependencies = [ "ahash 0.8.11", + "cached_proc_macro", + "cached_proc_macro_types", "hashbrown 0.14.5", - "instant", "once_cell", - "thiserror 1.0.68", + "thiserror 1.0.69", + "web-time", ] [[package]] name = "cached_proc_macro" -version = "0.18.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" +checksum = "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" dependencies = [ - "darling 0.14.4", + "darling 0.20.10", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.96", ] [[package]] @@ -1672,12 +1711,12 @@ version = "0.1.0" dependencies = [ "anyhow", "bytes", - "clap 4.5.20", + "clap 4.5.26", "futures-util", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "once_cell", "pin-project-lite", "regex", @@ -1689,9 +1728,9 @@ dependencies = [ [[package]] name = "canbench-rs" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85a8f1ee95044a770b3d5166a12f55814283cb3aed71b81439dc59960ab76c1" +checksum = "497d900e11ab1891dd9743dd45dbeaada540ce323aa1adc7fc0ce1da2c6e86ff" dependencies = [ "canbench-rs-macros", "candid", @@ -1701,9 +1740,9 @@ dependencies = [ [[package]] name = "canbench-rs-macros" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37aa9dbb190b03569ab14aadf669884a331712d54462c5a6c5b86c9867fe4e65" +checksum = "5a5509bcfe6eeb86f057d46fbf20a2ba6b6bf9a1099b053a8f491cd7a909dfa6" dependencies = [ "proc-macro2", "quote", @@ -1712,9 +1751,9 @@ dependencies = [ [[package]] name = "candid" -version = "0.10.10" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c30ee7f886f296b6422c0ff017e89dd4f831521dfdcc76f3f71aae1ce817222" +checksum = "51e129c4051c57daf943586e01ef72faae48b04a8f692d5f646febf17a264c38" dependencies = [ "anyhow", "binread", @@ -1730,7 +1769,15 @@ dependencies = [ "serde", "serde_bytes", "stacker", - "thiserror 1.0.68", + "thiserror 1.0.69", +] + +[[package]] +name = "candid-utils" +version = "0.9.0" +dependencies = [ + "candid", + "candid_parser", ] [[package]] @@ -1742,7 +1789,7 @@ dependencies = [ "lazy_static", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -1761,7 +1808,7 @@ dependencies = [ "logos 0.13.0", "num-bigint 0.4.6", "pretty 0.12.3", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -1822,9 +1869,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" dependencies = [ "serde", ] @@ -1850,9 +1897,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" dependencies = [ "jobserver", "libc", @@ -1902,15 +1949,15 @@ dependencies = [ "candid", "certificate_orchestrator_interface", "chacha20poly1305", - "clap 4.5.20", + "clap 4.5.26", "cloudflare 0.12.0 (git+https://github.com/dfinity/cloudflare-rs.git?rev=a6538a036926bd756986c9c0a5de356daef48881)", "flate2", "futures", "http 1.2.0", - "ic-agent 0.37.1", + "ic-agent", "ic-http-certification", "ic-response-verification", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "idna 1.0.3", "instant-acme", "leb128", @@ -1920,14 +1967,14 @@ dependencies = [ "pem 1.1.1", "prometheus", "rcgen", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_cbor", "serde_json", "sha2 0.10.8", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tracing", "tracing-subscriber", "trust-dns-resolver", @@ -1957,7 +2004,7 @@ dependencies = [ "serde", "serde_cbor", "sha2 0.10.8", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -1969,7 +2016,7 @@ dependencies = [ "ic-stable-structures", "serde", "serde_bytes", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -2031,9 +2078,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -2112,23 +2159,23 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.20" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", - "clap_derive 4.5.18", + "clap_derive 4.5.24", ] [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", - "clap_lex 0.7.2", + "clap_lex 0.7.4", "strsim 0.11.1", ] @@ -2147,14 +2194,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -2168,9 +2215,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clocksource" @@ -2215,7 +2262,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "serde_with 2.3.3", - "thiserror 1.0.68", + "thiserror 1.0.69", "url", "uuid", ] @@ -2233,7 +2280,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "serde_with 2.3.3", - "thiserror 1.0.68", + "thiserror 1.0.69", "url", "uuid", ] @@ -2251,23 +2298,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "colored" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -2282,9 +2329,9 @@ dependencies = [ [[package]] name = "comparable" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb513ee8037bf08c5270ecefa48da249f4c58e57a71ccfce0a5b0877d2a20eb2" +checksum = "8606f9aa5b5a2df738584b139c79413d0c1545ed0ffd16e76e0944d1de7388c0" dependencies = [ "comparable_derive", "comparable_helper", @@ -2294,9 +2341,9 @@ dependencies = [ [[package]] name = "comparable_derive" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a54b9c40054eb8999c5d1d36fdc90e4e5f7ff0d1d9621706f360b3cbc8beb828" +checksum = "41f36ea7383b9a2a9ae0a4e225d8a9c1c3aeadde78c59cdc35bad5c02b4dad01" dependencies = [ "convert_case 0.4.0", "proc-macro2", @@ -2306,9 +2353,9 @@ dependencies = [ [[package]] name = "comparable_helper" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5437e327e861081c91270becff184859f706e3e50f5301a9d4dc8eb50752c3" +checksum = "71c9b60259084f32c14d32476f3a299b4997e3c186e1473bd972ff8a8c83d1b4" dependencies = [ "convert_case 0.6.0", "proc-macro2", @@ -2330,7 +2377,7 @@ name = "config" version = "1.0.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config_types", "ic-types", "macaddr", @@ -2357,7 +2404,7 @@ dependencies = [ "serde_json", "serde_with 1.14.0", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "url", ] @@ -2387,7 +2434,7 @@ version = "0.9.0" dependencies = [ "anyhow", "canister-test", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-interfaces-registry", "ic-nns-common", @@ -2419,7 +2466,7 @@ dependencies = [ "candid", "canister-test", "canister_http", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-client", "ic-management-canister-types", @@ -2432,7 +2479,7 @@ dependencies = [ "ic-types", "ic_consensus_system_test_utils", "ic_consensus_threshold_sig_system_test_utils", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_json", "slog", @@ -2447,7 +2494,7 @@ dependencies = [ "canister-test", "chrono", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-config", "ic-limits", @@ -2466,7 +2513,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_json", "slog", "tokio", @@ -2480,7 +2527,7 @@ dependencies = [ "anyhow", "candid", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-canister-client", "ic-management-canister-types", "ic-nervous-system-common-test-keys", @@ -2496,34 +2543,51 @@ dependencies = [ "tokio", ] +[[package]] +name = "consensus-vetkd-system-tests" +version = "0.9.0" +dependencies = [ + "anyhow", + "canister-test", + "ic-management-canister-types", + "ic-nns-constants", + "ic-registry-subnet-type", + "ic-system-test-driver", + "ic-types", + "ic_consensus_system_test_utils", + "ic_consensus_threshold_sig_system_test_utils", + "slog", + "tokio", +] + [[package]] name = "console" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c0994e656bba7b922d8dd1245db90672ffb701e684e45be58f20719d69abc5a" dependencies = [ - "encode_unicode", + "encode_unicode 0.3.6", "lazy_static", "libc", "regex", "terminal_size", "termios", - "unicode-width", + "unicode-width 0.1.14", "winapi 0.3.9", "winapi-util", ] [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ - "encode_unicode", - "lazy_static", + "encode_unicode 1.0.0", "libc", - "unicode-width", - "windows-sys 0.52.0", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -2538,9 +2602,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -2591,6 +2655,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -2634,27 +2708,27 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] [[package]] name = "cranelift-bforest" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba4f80548f22dc9c43911907b5e322c5555544ee85f785115701e6a28c9abe1" +checksum = "88c1d02b72b6c411c0a2e92b25ed791ad5d071184193c08a34aa0fdcdf000b72" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-bitset" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005884e3649c3e5ff2dc79e8a94b138f11569cc08a91244a292714d2a86e9156" +checksum = "720b93bd86ebbb23ebfb2db1ed44d54b2ecbdbb2d034d485bc64aa605ee787ab" dependencies = [ "serde", "serde_derive", @@ -2662,9 +2736,9 @@ dependencies = [ [[package]] name = "cranelift-codegen" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4036255ec33ce9a37495dfbcfc4e1118fd34e693eff9a1e106336b7cd16a9b" +checksum = "aed3d2d9914d30b460eedd7fd507720203023997bef71452ce84873f9c93537c" dependencies = [ "bumpalo", "cranelift-bforest", @@ -2678,7 +2752,7 @@ dependencies = [ "hashbrown 0.14.5", "log", "regalloc2", - "rustc-hash 2.0.0", + "rustc-hash 2.1.0", "serde", "smallvec", "target-lexicon", @@ -2686,33 +2760,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ca74f4b68319da11d39e894437cb6e20ec7c2e11fbbda823c3bf207beedff7" +checksum = "888c188d32263ec9e048873ff0b68c700933600d553f4412417916828be25f8e" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897e54f433a0269c4187871aa06d452214d5515d228d5bdc22219585e9eef895" +checksum = "4ddd5f4114d04ce7e073dd74e2ad16541fc61970726fcc8b2d5644a154ee4127" [[package]] name = "cranelift-control" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cb4018f5bf59fb53f515fa9d80e6f8c5ce19f198dc538984ebd23ecf8965ec" +checksum = "92cc4c98d6a4256a1600d93ccd3536f3e77da9b4ca2c279de786ac22876e67d6" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305399fd781a2953ac78c1396f02ff53144f39c33eb7fc7789cf4e8936d13a96" +checksum = "760af4b5e051b5f82097a27274b917e3751736369fa73660513488248d27f23d" dependencies = [ "cranelift-bitset", "serde", @@ -2721,9 +2795,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9230b460a128d53653456137751d27baf567947a3ab8c0c4d6e31fd08036d81e" +checksum = "c0bf77ec0f470621655ec7539860b5c620d4f91326654ab21b075b83900f8831" dependencies = [ "cranelift-codegen", "log", @@ -2733,15 +2807,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b961e24ae3ec9813a24a15ae64bbd2a42e4de4d79a7f3225a412e3b94e78d1c8" +checksum = "4b665d0a6932c421620be184f9fc7f7adaf1b0bc2fa77bb7ac5177c49abf645b" [[package]] name = "cranelift-native" -version = "0.114.0" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5bd76df6c9151188dfa428c863b33da5b34561b67f43c0cf3f24a794f9fa1f" +checksum = "bb2e75d1bd43dfec10924798f15e6474f1dbf63b0024506551aa19394dbe72ab" dependencies = [ "cranelift-codegen", "libc", @@ -2766,7 +2840,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.5.20", + "clap 4.5.26", "criterion-plot", "futures", "is-terminal", @@ -2818,18 +2892,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -2846,18 +2920,18 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crossterm" @@ -2865,7 +2939,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "crossterm_winapi", "libc", "mio 0.8.11", @@ -2922,7 +2996,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa", - "phf 0.11.2", + "phf 0.11.3", "smallvec", ] @@ -2933,14 +3007,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "csv" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" dependencies = [ "csv-core", "itoa", @@ -2993,7 +3067,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3053,9 +3127,10 @@ dependencies = [ "icrc-ledger-types", "lazy_static", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", + "serde_bytes", "serde_cbor", "sha2 0.10.8", "yansi 0.5.1", @@ -3094,16 +3169,6 @@ dependencies = [ "darling_macro 0.13.4", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.10" @@ -3128,20 +3193,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - [[package]] name = "darling_core" version = "0.20.10" @@ -3153,7 +3204,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3167,17 +3218,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.10" @@ -3186,7 +3226,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3224,9 +3264,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" [[package]] name = "debugid" @@ -3279,7 +3319,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3300,18 +3340,18 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3324,7 +3364,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3344,7 +3384,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3352,11 +3392,11 @@ name = "deterministic_ips" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config_types", "ic-crypto-sha2", "macaddr", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -3364,7 +3404,7 @@ name = "dflate" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "libc", "tar", ] @@ -3438,7 +3478,7 @@ name = "dfn_protobuf" version = "0.9.0" dependencies = [ "on_wire", - "prost 0.13.3", + "prost 0.13.4", ] [[package]] @@ -3479,7 +3519,7 @@ name = "diroid" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "walkdir", ] @@ -3512,7 +3552,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3617,7 +3657,7 @@ dependencies = [ "rand_core 0.6.4", "serde", "sha2 0.9.9", - "thiserror 1.0.68", + "thiserror 1.0.69", "zeroize", ] @@ -3721,11 +3761,17 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if 1.0.0", ] @@ -3751,7 +3797,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3764,7 +3810,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3780,18 +3826,18 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", ] [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "env_filter", "log", @@ -3814,7 +3860,7 @@ checksum = "3bf679796c0322556351f287a51b49e48f7c4986e727b5dd78c972d30e2e16cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -3845,12 +3891,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3865,9 +3911,9 @@ dependencies = [ [[package]] name = "escargot" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c000f23e9d459aef148b7267e02b03b94a0aaacf4ec64c65612f67e02f525fb6" +checksum = "05a3ac187a16b5382fef8c69fd1bad123c67b7cf3932240a2d43dcdd32cded88" dependencies = [ "log", "once_cell", @@ -3888,7 +3934,7 @@ dependencies = [ "serde", "serde_json", "sha3", - "thiserror 1.0.68", + "thiserror 1.0.69", "uint", ] @@ -3945,7 +3991,7 @@ dependencies = [ "serde_json", "strum", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", "tiny-keccak", "unicode-xid", ] @@ -3961,9 +4007,15 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.3.1" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" dependencies = [ "concurrent-queue", "parking", @@ -3972,11 +4024,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ - "event-listener", + "event-listener 5.4.0", "pin-project-lite", ] @@ -3991,7 +4043,7 @@ dependencies = [ "ic-cdk 0.16.0", "mockall", "serde", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -4007,7 +4059,7 @@ dependencies = [ "num-bigint 0.4.6", "serde", "strum", - "thiserror 1.0.68", + "thiserror 1.0.69", "url", ] @@ -4059,7 +4111,7 @@ dependencies = [ "bitcoincore-rpc", "candid", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-cdk 0.16.0", "ic-config", @@ -4074,11 +4126,11 @@ dependencies = [ "ic-types", "ic-types-test-utils", "ic-universal-canister", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "lazy_static", "rand 0.8.5", "rand_chacha 0.3.1", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_cbor", "slog", "tokio", @@ -4115,9 +4167,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fe-derive" @@ -4218,9 +4270,9 @@ checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -4228,9 +4280,9 @@ dependencies = [ [[package]] name = "float-cmp" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" dependencies = [ "num-traits", ] @@ -4243,9 +4295,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" [[package]] name = "form_urlencoded" @@ -4263,7 +4315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" dependencies = [ "nonempty", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -4274,9 +4326,9 @@ checksum = "eb540cf7bc4fe6df9d8f7f0c974cfd0dce8ed4e9e8884e73433b503ee78b4e7d" [[package]] name = "fqdn" -version = "0.4.1" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eeee501d87b436020fcd3065cc981b5e4d22f2066735268b36b9d513d23e553" +checksum = "8f66e93156d144bd3a9a970033d04c6fbfb4b641275d8eaa3ff83f5b9c232496" [[package]] name = "fragile" @@ -4362,9 +4414,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.3.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -4381,7 +4433,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -4391,7 +4443,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.23.19", + "rustls 0.23.21", "rustls-pki-types", ] @@ -4446,6 +4498,19 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "generator" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "log", + "rustversion", + "windows", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -4485,7 +4550,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -4519,15 +4584,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator 0.3.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "stable_deref_trait", ] [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "governor" @@ -4565,7 +4630,7 @@ name = "guestos_tool" version = "1.0.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config", "indoc", "itertools 0.12.1", @@ -4586,7 +4651,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -4595,9 +4660,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" dependencies = [ "atomic-waker", "bytes", @@ -4605,7 +4670,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.2.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -4650,11 +4715,12 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ "foldhash", + "serde", ] [[package]] @@ -4804,9 +4870,9 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "hickory-proto" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +checksum = "447afdcdb8afb9d0a852af6dc65d9b285ce720ed7a59e42a8bf2e931c67bc1b5" dependencies = [ "async-trait", "bytes", @@ -4818,14 +4884,14 @@ dependencies = [ "futures-util", "h2 0.3.26", "http 0.2.12", - "idna 0.4.0", + "idna 1.0.3", "ipnet", "once_cell", "rand 0.8.5", "ring 0.16.20", "rustls 0.21.12", "rustls-pemfile 1.0.4", - "thiserror 1.0.68", + "thiserror 1.0.69", "tinyvec", "tokio", "tokio-rustls 0.24.1", @@ -4836,9 +4902,9 @@ dependencies = [ [[package]] name = "hickory-resolver" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +checksum = "0a2e2aba9c389ce5267d31cf1e4dace82390ae276b0b364ea55630b1fa1b44b4" dependencies = [ "cfg-if 1.0.0", "futures-util", @@ -4851,7 +4917,7 @@ dependencies = [ "resolv-conf", "rustls 0.21.12", "smallvec", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-rustls 0.24.1", "tracing", @@ -4878,11 +4944,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4901,7 +4967,7 @@ name = "hostos_tool" version = "1.0.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config", "config_types", "deterministic_ips", @@ -4966,17 +5032,6 @@ dependencies = [ "http 1.2.0", ] -[[package]] -name = "http-body-to-bytes" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17a08236c6f51c2ee95d840f45acf8fa9e339390e00b4ef640857b2f2a534d70" -dependencies = [ - "bytes", - "http-body 1.0.1", - "http-body-util", -] - [[package]] name = "http-body-util" version = "0.1.2" @@ -5012,15 +5067,15 @@ name = "httpbin-rs" version = "0.9.0" dependencies = [ "axum", - "clap 4.5.20", - "hyper 1.5.1", + "clap 4.5.26", + "hyper 1.5.2", "hyper-util", - "rustls 0.23.19", + "rustls 0.23.21", "rustls-pemfile 2.2.0", "serde_json", "tokio", - "tokio-rustls 0.26.0", - "tower 0.5.1", + "tokio-rustls 0.26.1", + "tower 0.5.2", ] [[package]] @@ -5056,9 +5111,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -5071,7 +5126,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -5080,14 +5135,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.6", + "h2 0.4.7", "http 1.2.0", "http-body 1.0.1", "httparse", @@ -5109,13 +5164,13 @@ dependencies = [ "futures-util", "headers 0.4.0", "http 1.2.0", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "pin-project-lite", "rustls-native-certs 0.7.3", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", ] @@ -5127,7 +5182,7 @@ checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", "http 0.2.12", - "hyper 0.14.31", + "hyper 0.14.32", "rustls 0.21.12", "tokio", "tokio-rustls 0.24.1", @@ -5135,22 +5190,22 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "log", - "rustls 0.23.19", - "rustls-native-certs 0.8.0", + "rustls 0.23.21", + "rustls-native-certs 0.8.1", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tower-service", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", ] [[package]] @@ -5161,20 +5216,20 @@ checksum = "51c227614c208f7e7c2e040526912604a1a957fe467c9c2f5b06c5d032337dab" dependencies = [ "async-socks5", "http 1.2.0", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tower-service", ] [[package]] name = "hyper-timeout" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -5192,9 +5247,9 @@ dependencies = [ "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.1", + "hyper 1.5.2", "pin-project-lite", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -5211,7 +5266,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -5235,7 +5290,7 @@ dependencies = [ "slog", "tokio", "tonic", - "tower 0.5.1", + "tower 0.5.2", ] [[package]] @@ -5256,8 +5311,8 @@ dependencies = [ name = "ic-adapter-metrics-service" version = "0.9.0" dependencies = [ - "prost 0.13.3", - "prost-build 0.13.3", + "prost 0.13.4", + "prost-build 0.13.4", "tonic", "tonic-build", ] @@ -5272,7 +5327,7 @@ dependencies = [ "base64 0.13.1", "candid", "chrono", - "clap 4.5.20", + "clap 4.5.26", "cycles-minting-canister", "futures", "hex", @@ -5316,12 +5371,12 @@ dependencies = [ "ic-sns-swap", "ic-sns-wasm", "ic-types", - "indexmap 2.6.0", + "indexmap 2.7.0", "itertools 0.12.1", "maplit", "pocket-ic", "pretty_assertions", - "prost 0.13.3", + "prost 0.13.4", "registry-canister", "serde", "serde_json", @@ -5342,59 +5397,15 @@ dependencies = [ [[package]] name = "ic-agent" -version = "0.37.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd3fdf5e5c4f4a9fe5ca612f0febd22dcb161d2f2b75b0142326732be5e4978" -dependencies = [ - "async-lock", - "backoff", - "cached 0.52.0", - "candid", - "ed25519-consensus", - "futures-util", - "hex", - "http 1.2.0", - "http-body 1.0.1", - "http-body-to-bytes", - "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", - "hyper-util", - "ic-certification 2.6.0", - "ic-transport-types 0.37.1", - "ic-verify-bls-signature 0.5.0", - "k256", - "leb128", - "p256", - "pem 3.0.4", - "pkcs8", - "rand 0.8.5", - "rangemap", - "reqwest 0.12.9", - "ring 0.17.8", - "rustls-webpki 0.102.8", - "sec1", - "serde", - "serde_bytes", - "serde_cbor", - "serde_repr", - "sha2 0.10.8", - "simple_asn1", - "thiserror 1.0.68", - "time", - "tokio", - "tower 0.4.13", - "url", -] - -[[package]] -name = "ic-agent" -version = "0.39.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158138fcb769fe6288e63d5db221c904e472cfb7d376aba13a38c060f2984e63" +checksum = "1ba408987ca48fc3eee6a613e760d076a9046cccbbb5ba29efbada339ab28ed9" dependencies = [ + "arc-swap", + "async-channel 1.9.0", "async-lock", "async-trait", + "async-watch", "backoff", "cached 0.52.0", "candid", @@ -5406,8 +5417,8 @@ dependencies = [ "hex", "http 1.2.0", "http-body 1.0.1", - "ic-certification 2.6.0", - "ic-transport-types 0.39.1", + "ic-certification 3.0.2", + "ic-transport-types", "ic-verify-bls-signature 0.5.0", "k256", "leb128", @@ -5416,7 +5427,8 @@ dependencies = [ "pkcs8", "rand 0.8.5", "rangemap", - "reqwest 0.12.9", + "reqwest 0.12.12", + "ring 0.17.8", "sec1", "serde", "serde_bytes", @@ -5424,7 +5436,8 @@ dependencies = [ "serde_repr", "sha2 0.10.8", "simple_asn1", - "thiserror 1.0.68", + "stop-token", + "thiserror 2.0.11", "time", "tokio", "tower-service", @@ -5442,6 +5455,7 @@ dependencies = [ "futures", "http-body-util", "ic-base-types", + "ic-canister-client-sender", "ic-consensus-manager", "ic-interfaces", "ic-logger", @@ -5457,12 +5471,12 @@ dependencies = [ "mockall", "phantom_newtype", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "slog", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tracing", ] @@ -5471,6 +5485,7 @@ name = "ic-artifact-manager" version = "0.9.0" dependencies = [ "assert_matches", + "futures", "ic-artifact-pool", "ic-config", "ic-interfaces", @@ -5480,6 +5495,7 @@ dependencies = [ "ic-types", "prometheus", "tokio", + "tokio-stream", "tracing", ] @@ -5489,7 +5505,7 @@ version = "0.9.0" dependencies = [ "bincode", "byteorder", - "clap 4.5.20", + "clap 4.5.26", "criterion", "ic-config", "ic-crypto-test-utils-canister-threshold-sigs", @@ -5512,7 +5528,7 @@ dependencies = [ "lmdb-rkv-sys", "nix 0.24.3", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rocksdb", "serde", @@ -5532,7 +5548,7 @@ version = "0.9.0" dependencies = [ "anyhow", "chrono", - "clap 4.5.20", + "clap 4.5.26", "ic-config", "ic-crypto-utils-threshold-sig-der", "ic-logger", @@ -5544,7 +5560,7 @@ dependencies = [ "ic-test-utilities-tmpdir", "ic-types", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "slog", @@ -5572,7 +5588,7 @@ dependencies = [ "phantom_newtype", "proptest", "proptest-derive", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_cbor", "strum", @@ -5585,7 +5601,7 @@ name = "ic-base-types-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -5626,11 +5642,11 @@ dependencies = [ "base64 0.22.1", "bytes", "chacha20poly1305", - "clap 4.5.20", - "clap_derive 4.5.18", + "clap 4.5.26", + "clap_derive 4.5.24", "cloudflare 0.12.0 (git+https://github.com/cloudflare/cloudflare-rs.git?rev=f14720e42184ee176a97676e85ef2d2d85bc3aae)", "derive-new", - "fqdn 0.4.1", + "fqdn 0.4.4", "futures", "futures-util", "hickory-proto", @@ -5639,18 +5655,18 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "humantime", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "instant-acme", "moka", "parse-size", "prometheus", - "prost 0.13.3", - "prost-types 0.13.3", + "prost 0.13.4", + "prost-types 0.13.4", "rand 0.8.5", "rcgen", - "reqwest 0.12.9", - "rustls 0.23.19", + "reqwest 0.12.12", + "rustls 0.23.21", "rustls-acme", "rustls-pemfile 2.2.0", "rustls-platform-verifier", @@ -5661,12 +5677,12 @@ dependencies = [ "strum", "strum_macros", "systemstat", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tokio-io-timeout", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tower-service", "tracing", "url", @@ -5690,7 +5706,7 @@ dependencies = [ "axum-extra", "bytes", "candid", - "clap 4.5.20", + "clap 4.5.26", "criterion", "dashmap 6.1.0", "ethnum", @@ -5700,7 +5716,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "humantime", - "ic-agent 0.39.1", + "ic-agent", "ic-base-types", "ic-bn-lib", "ic-canister-client", @@ -5729,6 +5745,7 @@ dependencies = [ "ic-registry-subnet-type", "ic-types", "indoc", + "ipnet", "lazy_static", "maxminddb", "mockall", @@ -5741,8 +5758,8 @@ dependencies = [ "ratelimit", "rcgen", "regex", - "reqwest 0.12.9", - "rustls 0.23.19", + "reqwest 0.12.12", + "rustls 0.23.21", "rustls-pemfile 2.2.0", "serde", "serde_bytes", @@ -5754,12 +5771,12 @@ dependencies = [ "slog", "strum", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tikv-jemalloc-ctl", "tikv-jemallocator", "tokio", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tower-http 0.6.2", "tower_governor", "tracing", @@ -5778,7 +5795,7 @@ dependencies = [ "candid", "certificate_orchestrator_interface", "chacha20poly1305", - "ic-agent 0.37.1", + "ic-agent", "ic-interfaces-registry", "ic-protobuf", "ic-registry-keys", @@ -5791,7 +5808,7 @@ dependencies = [ "pem 1.1.1", "rand 0.8.5", "rand_chacha 0.3.1", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_json", "slog", "tokio", @@ -5803,12 +5820,12 @@ version = "0.9.0" dependencies = [ "anyhow", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-boundary-nodes-system-test-utils", "ic-crypto-tree-hash", "ic-system-test-driver", "ic-types", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_cbor", "slog", @@ -5822,7 +5839,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-boundary-nodes-system-test-utils", "ic-protobuf", "ic-registry-keys", @@ -5830,9 +5847,9 @@ dependencies = [ "ic-registry-routing-table", "ic-registry-subnet-type", "ic-system-test-driver", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", "tokio", ] @@ -5843,7 +5860,7 @@ version = "0.9.0" dependencies = [ "anyhow", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-interfaces-registry", "ic-protobuf", @@ -5853,7 +5870,7 @@ dependencies = [ "ic-registry-subnet-type", "ic-system-test-driver", "ic-types", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "slog", "url", ] @@ -5865,7 +5882,7 @@ dependencies = [ "bitcoin 0.28.2", "bitcoincore-rpc", "bitcoind", - "clap 4.5.20", + "clap 4.5.26", "criterion", "futures", "hashlink", @@ -5887,18 +5904,18 @@ dependencies = [ "ic-test-utilities-logger", "parking_lot 0.12.3", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "serde_json", "slog", "slog-async", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tokio-socks", "tonic", - "tower 0.5.1", + "tower 0.5.2", ] [[package]] @@ -5920,7 +5937,7 @@ dependencies = [ "slog", "tokio", "tonic", - "tower 0.5.1", + "tower 0.5.2", "tracing", ] @@ -5942,7 +5959,7 @@ version = "0.9.0" dependencies = [ "askama", "base64 0.13.1", - "bitcoin 0.32.3", + "bitcoin 0.32.5", "candid", "candid_parser", "ciborium", @@ -5953,12 +5970,12 @@ dependencies = [ "ic-canister-log 0.2.0", "ic-canisters-http-types", "ic-cdk 0.16.0", + "ic-metrics-assert", "ic-metrics-encoder", "ic-stable-structures", "ic-test-utilities-load-wasm", "ic-types", "ic-universal-canister", - "num-traits", "pocket-ic", "proptest", "scraper", @@ -5998,9 +6015,9 @@ dependencies = [ "mockall", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "slog", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -6030,7 +6047,7 @@ dependencies = [ name = "ic-btc-service" version = "0.9.0" dependencies = [ - "prost 0.13.3", + "prost 0.13.4", "tonic", "tonic-build", ] @@ -6051,8 +6068,8 @@ dependencies = [ "futures-util", "hex", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "ic-canister-client-sender", "ic-canonical-state", @@ -6071,15 +6088,15 @@ dependencies = [ "ic-types", "ic-validator", "itertools 0.12.1", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", - "rustls 0.23.19", + "rustls 0.23.21", "serde", "serde_cbor", "tokio", "tokio-test", - "tower 0.5.1", + "tower 0.5.2", "tree-deserializer", "url", ] @@ -6188,20 +6205,19 @@ dependencies = [ [[package]] name = "ic-canister-sig-creation" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db33deb06e0edb366d8d86ef67d7bc1e1759bc7046b0323a33b85b21b8d8d87" +source = "git+https://github.com/dfinity/ic-canister-sig-creation?rev=7f9e931954637526295269155881207f6c832d6d#7f9e931954637526295269155881207f6c832d6d" dependencies = [ "candid", "hex", - "ic-cdk 0.14.1", - "ic-certification 2.6.0", + "ic-cdk 0.17.1", + "ic-certification 3.0.2", "ic-representation-independent-hash", "lazy_static", "serde", "serde_bytes", "serde_cbor", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 2.0.11", ] [[package]] @@ -6268,7 +6284,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "scoped_threadpool", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -6283,15 +6299,15 @@ dependencies = [ [[package]] name = "ic-cbor" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b0e48b4166c891e79d624f3a184b4a7c145d307576872d9a46dedb8c73ea8f" +checksum = "5500d6e85bc2ca8ea8aaed16cb84811882589244831a2fd8eefe02e90b3006c6" dependencies = [ "candid", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "leb128", "nom", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -6322,12 +6338,12 @@ dependencies = [ [[package]] name = "ic-cdk" -version = "0.14.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cff1a3c3db565e3384c9c9d6d676b0a3f89a0886f4f787294d9c946d844369f" +checksum = "dd8ecacd682fa05a985253592963306cb9799622d7b1cce4b1edb89c6ec85be1" dependencies = [ "candid", - "ic-cdk-macros 0.14.0", + "ic-cdk-macros 0.16.0", "ic0 0.23.0", "serde", "serde_bytes", @@ -6335,12 +6351,12 @@ dependencies = [ [[package]] name = "ic-cdk" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8ecacd682fa05a985253592963306cb9799622d7b1cce4b1edb89c6ec85be1" +checksum = "122efbcb0af5280d408a75a57b7dc6e9d92893bf6ed9cc98fe4dcff51f18b67c" dependencies = [ "candid", - "ic-cdk-macros 0.16.0", + "ic-cdk-macros 0.17.1", "ic0 0.23.0", "serde", "serde_bytes", @@ -6390,30 +6406,30 @@ dependencies = [ [[package]] name = "ic-cdk-macros" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01dc6bc425ec048d6ac4137c7c0f2cfbd6f8b0be8efc568feae2b265f566117c" +checksum = "0d4d857135deef20cc7ea8f3869a30cd9cfeb1392b3a81043790b2cd82adc3e0" dependencies = [ "candid", "proc-macro2", "quote", "serde", "serde_tokenstream 0.2.2", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "ic-cdk-macros" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d4d857135deef20cc7ea8f3869a30cd9cfeb1392b3a81043790b2cd82adc3e0" +checksum = "c792bf0d1621c893ccf2bcdeac4ee70121103a03030a1827031a6b3c60488944" dependencies = [ "candid", "proc-macro2", "quote", "serde", "serde_tokenstream 0.2.2", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -6432,21 +6448,21 @@ dependencies = [ [[package]] name = "ic-certificate-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "586e09b06a93d930f6a33f5f909bb11d2e4a06be3635dd5da1eb0e6554b7dae4" +checksum = "2daec653eb7895b5549cdf58d871985711c03cf5e389f7800a970f4f42dc0897" dependencies = [ - "cached 0.47.0", + "cached 0.54.0", "candid", "ic-cbor", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "lazy_static", "leb128", "miracl_core_bls12381", "nom", "parking_lot 0.12.3", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -6473,9 +6489,9 @@ dependencies = [ [[package]] name = "ic-certification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64ee3d8b6e81b51f245716d3e0badb63c283c00f3c9fb5d5219afc30b5bf821" +checksum = "9eae40f26fcac9c141cad54d9aa5f423efffde78ac371057c53d275ebbcad443" dependencies = [ "hex", "serde", @@ -6523,7 +6539,7 @@ name = "ic-ckbtc-agent" version = "0.9.0" dependencies = [ "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-canisters-http-types", "ic-ckbtc-minter", "ic-icrc1", @@ -6571,7 +6587,7 @@ dependencies = [ "ciborium", "flate2", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-bitcoin-canister-mock", "ic-btc-checker", @@ -6588,6 +6604,7 @@ dependencies = [ "ic-icrc1-ledger", "ic-ledger-core", "ic-management-canister-types", + "ic-metrics-assert", "ic-metrics-encoder", "ic-stable-structures", "ic-state-machine-tests", @@ -6604,7 +6621,6 @@ dependencies = [ "mockall", "num-traits", "proptest", - "regex", "ripemd", "scopeguard", "serde", @@ -6629,7 +6645,7 @@ dependencies = [ "futures", "hex", "hex-literal", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-log 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "ic-canisters-http-types", @@ -6668,7 +6684,7 @@ dependencies = [ "strum", "strum_macros", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "thousands", "time", "tokio", @@ -6731,6 +6747,7 @@ dependencies = [ "ic-btc-replica-types", "ic-config", "ic-consensus", + "ic-consensus-dkg", "ic-consensus-mocks", "ic-consensus-utils", "ic-crypto", @@ -6780,10 +6797,9 @@ dependencies = [ "phantom_newtype", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", - "rayon", "rstest", "serde_cbor", "slog", @@ -6796,6 +6812,35 @@ dependencies = [ "tokio", ] +[[package]] +name = "ic-consensus-dkg" +version = "0.9.0" +dependencies = [ + "ic-artifact-pool", + "ic-consensus-mocks", + "ic-consensus-utils", + "ic-crypto-test-utils-ni-dkg", + "ic-interfaces", + "ic-interfaces-registry", + "ic-interfaces-state-manager", + "ic-logger", + "ic-metrics", + "ic-protobuf", + "ic-registry-client-helpers", + "ic-replicated-state", + "ic-test-artifact-pool", + "ic-test-utilities", + "ic-test-utilities-consensus", + "ic-test-utilities-logger", + "ic-test-utilities-registry", + "ic-test-utilities-state", + "ic-test-utilities-types", + "ic-types", + "prometheus", + "rayon", + "slog", +] + [[package]] name = "ic-consensus-manager" version = "0.9.0" @@ -6818,12 +6863,12 @@ dependencies = [ "mockall", "phantom_newtype", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "slog", "tokio", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tracing", "turmoil", ] @@ -6866,6 +6911,7 @@ dependencies = [ "ic-interfaces-registry", "ic-logger", "ic-management-canister-types", + "ic-metrics", "ic-protobuf", "ic-registry-client-helpers", "ic-replicated-state", @@ -6875,6 +6921,7 @@ dependencies = [ "ic-test-utilities-time", "ic-test-utilities-types", "ic-types", + "prometheus", "rand 0.8.5", "slog", ] @@ -6886,7 +6933,7 @@ dependencies = [ "assert_matches", "async-trait", "bincode", - "clap 4.5.20", + "clap 4.5.26", "criterion", "hex", "ic-adapter-metrics-server", @@ -6961,11 +7008,11 @@ dependencies = [ "parking_lot 0.12.3", "proptest", "proptest-derive", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rsa", - "rustls 0.23.19", + "rustls 0.23.21", "serde", "sha2 0.10.8", "simple_asn1", @@ -7009,7 +7056,7 @@ dependencies = [ "pem 1.1.1", "rand 0.8.5", "rand_chacha 0.3.1", - "thiserror 2.0.3", + "thiserror 2.0.11", "wycheproof", "zeroize", ] @@ -7300,7 +7347,7 @@ dependencies = [ "parking_lot 0.12.3", "proptest", "proptest-derive", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", @@ -7315,7 +7362,7 @@ dependencies = [ "stubborn-io", "tarpc", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "time", "tokio", "tokio-serde", @@ -7351,7 +7398,7 @@ name = "ic-crypto-internal-csp-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -7557,7 +7604,7 @@ dependencies = [ "serde_cbor", "strum", "strum_macros", - "thiserror 2.0.3", + "thiserror 2.0.11", "zeroize", ] @@ -7726,7 +7773,7 @@ dependencies = [ "ic-types-test-utils", "rand 0.8.5", "rand_chacha 0.3.1", - "rustls 0.23.19", + "rustls 0.23.21", "tempfile", "tokio", ] @@ -7905,7 +7952,7 @@ version = "0.9.0" dependencies = [ "ic-types", "mockall", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -7926,11 +7973,11 @@ dependencies = [ "ic-types", "pkcs8", "rand 0.8.5", - "rustls 0.23.19", + "rustls 0.23.21", "signature", "time", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "x509-cert", ] @@ -7962,9 +8009,9 @@ dependencies = [ "ic-types", "json5", "maplit", - "rustls 0.23.19", + "rustls 0.23.21", "serde", - "thiserror 2.0.3", + "thiserror 2.0.11", "x509-parser", ] @@ -7975,7 +8022,7 @@ dependencies = [ "ic-base-types", "ic-crypto-tls-interfaces", "mockall", - "rustls 0.23.19", + "rustls 0.23.21", ] [[package]] @@ -7991,12 +8038,12 @@ dependencies = [ "ic-protobuf", "maplit", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "serde_bytes", "serde_cbor", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -8008,7 +8055,7 @@ dependencies = [ "ic-crypto-tree-hash", "proptest", "rand 0.8.5", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -8075,7 +8122,7 @@ name = "ic-crypto-utils-tls" version = "0.9.0" dependencies = [ "ic-base-types", - "thiserror 2.0.3", + "thiserror 2.0.11", "x509-parser", ] @@ -8089,8 +8136,8 @@ dependencies = [ "ic-registry-keys", "ic-registry-nns-data-provider", "ic-types", - "prost 0.13.3", - "reqwest 0.12.9", + "prost 0.13.4", + "reqwest 0.12.12", "tokio", ] @@ -8160,7 +8207,7 @@ dependencies = [ name = "ic-drun" version = "0.9.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "futures", "hex", "ic-canister-sandbox-backend-lib", @@ -8192,7 +8239,7 @@ dependencies = [ "slog", "slog-term", "tokio", - "tower 0.5.1", + "tower 0.5.2", "wasmparser 0.217.0", ] @@ -8205,7 +8252,7 @@ dependencies = [ "bincode", "candid", "canister-test", - "clap 4.5.20", + "clap 4.5.26", "criterion", "embedders_bench", "ic-base-types", @@ -8336,6 +8383,7 @@ dependencies = [ "ic-universal-canister", "ic-utils 0.9.0", "ic-utils-lru-cache", + "ic-utils-thread", "ic-wasm-transform", "ic-wasm-types", "itertools 0.12.1", @@ -8350,6 +8398,7 @@ dependencies = [ "prometheus", "proptest", "rand 0.8.5", + "regex", "scoped_threadpool", "serde", "serde_bytes", @@ -8360,7 +8409,7 @@ dependencies = [ "test-strategy 0.3.1", "threadpool", "tokio", - "tower 0.5.1", + "tower 0.5.2", "tracing", "wasmparser 0.217.0", "wat", @@ -8382,27 +8431,30 @@ dependencies = [ "anyhow", "assert_cmd", "assert_matches", - "clap 4.5.20", + "clap 4.5.26", "ic-crypto-test-utils-reproducible-rng", "ic-sys", "maplit", "predicates", "rand 0.8.5", + "regex", "tempfile", ] [[package]] name = "ic-http-certification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0b97e949845039149dc5e7ea6a7c12ee4333bb402e37bc507904643c7b3e41" +checksum = "479941fca8e68c2267cddf686d34ed6fb491168667ff259c08a3d65d28bd26d2" dependencies = [ + "base64 0.22.1", "candid", - "http 0.2.12", - "ic-certification 2.6.0", + "http 1.2.0", + "ic-certification 3.0.2", "ic-representation-independent-hash", "serde", - "thiserror 1.0.68", + "serde_cbor", + "thiserror 1.0.69", "urlencoding", ] @@ -8416,7 +8468,7 @@ dependencies = [ "bytes", "futures", "futures-util", - "hyper 1.5.1", + "hyper 1.5.2", "rand 0.8.5", "slog", "tokio", @@ -8433,12 +8485,12 @@ dependencies = [ "ic-metrics", "ic-test-utilities-logger", "prometheus", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tokio-io-timeout", - "tower 0.5.1", + "tower 0.5.2", ] [[package]] @@ -8458,7 +8510,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "ic-canister-client", "ic-canister-client-sender", @@ -8498,17 +8550,17 @@ dependencies = [ "ic-tracing", "ic-types", "ic-validator", - "inferno 0.12.0", + "inferno 0.12.1", "maplit", "mockall", "pretty_assertions", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "rstest", - "rustls 0.23.19", + "rustls 0.23.21", "serde", "serde_bytes", "serde_cbor", @@ -8516,9 +8568,9 @@ dependencies = [ "tempfile", "tokio", "tokio-io-timeout", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tower-http 0.6.2", "tower-test", "tracing-flame", @@ -8532,7 +8584,7 @@ dependencies = [ "axum", "bytes", "crossbeam-channel", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "ic-config", "ic-crypto-tls-interfaces", @@ -8554,21 +8606,22 @@ dependencies = [ "ic-types", "maplit", "prometheus", - "prost 0.13.3", - "reqwest 0.12.9", + "prost 0.13.4", + "reqwest 0.12.12", "serde", "serde_json", "slog", "tokio", - "tokio-rustls 0.26.0", - "tower 0.5.1", + "tokio-rustls 0.26.1", + "tower 0.5.2", "url", ] [[package]] name = "ic-http-gateway" -version = "0.0.0" -source = "git+https://github.com/dfinity/http-gateway?tag=0.1.0-b0#3be26b5a2c71bf56e05b910951c1935a1ac550c4" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e8b30a8ff19af1a7dc64b1dbe1a38f1b60c7eea566e2049f755ce3bace0e630" dependencies = [ "bytes", "candid", @@ -8576,11 +8629,11 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "ic-agent 0.37.1", + "ic-agent", "ic-http-certification", "ic-response-verification", - "ic-utils 0.37.0", - "thiserror 1.0.68", + "ic-utils 0.39.2", + "thiserror 1.0.69", ] [[package]] @@ -8595,7 +8648,7 @@ dependencies = [ "ic-logger", "ic-test-utilities-in-memory-logger", "mockito", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", "tar", "tempfile", @@ -8610,12 +8663,12 @@ dependencies = [ "async-stream", "byte-unit", "bytes", - "clap 4.5.20", + "clap 4.5.26", "futures", "http 1.2.0", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-socks2", "hyper-util", "ic-adapter-metrics-server", @@ -8628,17 +8681,17 @@ dependencies = [ "prometheus", "rand 0.8.5", "rstest", - "rustls 0.23.19", + "rustls 0.23.21", "rustls-pemfile 2.2.0", "serde", "serde_json", "slog", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tonic", - "tower 0.5.1", + "tower 0.5.2", "uuid", "warp", ] @@ -8668,7 +8721,7 @@ dependencies = [ "slog", "tokio", "tonic", - "tower 0.5.1", + "tower 0.5.2", "tower-test", "tracing", ] @@ -8712,7 +8765,7 @@ dependencies = [ name = "ic-https-outcalls-service" version = "0.9.0" dependencies = [ - "prost 0.13.3", + "prost 0.13.4", "tonic", "tonic-build", ] @@ -8768,7 +8821,7 @@ dependencies = [ "icrc-ledger-types", "num-bigint 0.4.6", "pocket-ic", - "reqwest 0.12.9", + "reqwest 0.12.12", "rosetta-core", "serde", "tempfile", @@ -8785,7 +8838,7 @@ dependencies = [ "ic-rosetta-test-utils", "icp-ledger", "pocket-ic", - "reqwest 0.12.9", + "reqwest 0.12.12", "tempfile", "tokio", ] @@ -8798,10 +8851,10 @@ dependencies = [ "axum", "candid", "ciborium", - "clap 4.5.20", + "clap 4.5.26", "futures", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-icrc-rosetta-client", "ic-icrc-rosetta-runner", @@ -8818,7 +8871,7 @@ dependencies = [ "ic-rosetta-test-utils", "ic-sys", "ic-test-utilities-load-wasm", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "icrc-ledger-agent", "icrc-ledger-types", "indicatif", @@ -8829,7 +8882,7 @@ dependencies = [ "pocket-ic", "proptest", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "rolling-file", "rosetta-core", "rusqlite", @@ -8855,9 +8908,9 @@ version = "0.1.0" dependencies = [ "anyhow", "candid", - "clap 4.5.20", + "clap 4.5.26", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-crypto-ed25519", "ic-crypto-secp256k1", "ic-icrc-rosetta", @@ -8866,7 +8919,7 @@ dependencies = [ "icrc-ledger-types", "num-bigint 0.4.6", "pocket-ic", - "reqwest 0.12.9", + "reqwest 0.12.12", "rosetta-core", "serde", "tokio", @@ -8879,159 +8932,72 @@ version = "0.1.0" dependencies = [ "anyhow", "candid", - "icrc-ledger-types", - "pocket-ic", - "reqwest 0.12.9", - "tempfile", - "tokio", -] - -[[package]] -name = "ic-icrc1" -version = "0.9.0" -dependencies = [ - "candid", - "canister-test", - "ciborium", - "hex", - "ic-base-types", - "ic-crypto-sha2", - "ic-icrc1-index-ng", - "ic-icrc1-ledger", - "ic-icrc1-test-utils", - "ic-icrc1-tokens-u256", - "ic-icrc1-tokens-u64", - "ic-ledger-canister-core", - "ic-ledger-core", - "ic-ledger-hash-of", - "ic-ledger-suite-state-machine-tests", - "ic-nns-test-utils-golden-nns-state", - "ic-registry-subnet-type", - "ic-state-machine-tests", - "ic-test-utilities-load-wasm", - "ic-types", - "icrc-ledger-types", - "lazy_static", - "leb128", - "num-bigint 0.4.6", - "num-traits", - "proptest", - "rand 0.8.5", - "serde", - "serde_bytes", - "thiserror 2.0.3", -] - -[[package]] -name = "ic-icrc1-archive" -version = "0.9.0" -dependencies = [ - "candid", - "candid_parser", - "ciborium", - "ic-base-types", - "ic-canisters-http-types", - "ic-cdk 0.16.0", - "ic-cdk-macros 0.9.0", - "ic-icrc1", - "ic-icrc1-tokens-u256", - "ic-icrc1-tokens-u64", - "ic-ledger-canister-core", - "ic-ledger-core", - "ic-metrics-encoder", - "ic-rosetta-test-utils", - "ic-stable-structures", - "ic-state-machine-tests", - "ic-test-utilities-load-wasm", - "icrc-ledger-types", - "serde", -] - -[[package]] -name = "ic-icrc1-benchmark-generator" -version = "0.9.0" -dependencies = [ - "async-trait", - "candid", - "dfn_http_metrics", - "futures", - "getrandom", - "ic-base-types", - "ic-cdk 0.16.0", - "ic-cdk-macros 0.9.0", - "ic-icrc1-benchmark-worker", - "ic-icrc1-index", - "ic-ledger-core", - "ic-metrics-encoder", - "icrc-ledger-client-cdk", - "icrc-ledger-types", - "rand 0.8.5", - "rand_chacha 0.3.1", - "serde", - "serde_bytes", + "icrc-ledger-types", + "pocket-ic", + "reqwest 0.12.12", + "tempfile", + "tokio", ] [[package]] -name = "ic-icrc1-benchmark-worker" +name = "ic-icrc1" version = "0.9.0" dependencies = [ - "async-trait", "candid", + "canister-test", "ciborium", - "dfn_http_metrics", - "futures", - "getrandom", "hex", "ic-base-types", - "ic-cdk 0.16.0", - "ic-cdk-macros 0.9.0", - "ic-crypto-tree-hash", - "ic-icrc1", + "ic-crypto-sha2", + "ic-icrc1-index-ng", + "ic-icrc1-ledger", + "ic-icrc1-test-utils", + "ic-icrc1-tokens-u256", + "ic-icrc1-tokens-u64", "ic-ledger-canister-core", "ic-ledger-core", - "ic-metrics-encoder", - "icrc-ledger-client", - "icrc-ledger-client-cdk", + "ic-ledger-hash-of", + "ic-ledger-suite-state-machine-tests", + "ic-nns-test-utils-golden-nns-state", + "ic-registry-subnet-type", + "ic-state-machine-tests", + "ic-test-utilities-load-wasm", + "ic-types", "icrc-ledger-types", + "lazy_static", + "leb128", + "num-bigint 0.4.6", "num-traits", + "proptest", "rand 0.8.5", - "rand_chacha 0.3.1", "serde", "serde_bytes", + "thiserror 2.0.11", ] [[package]] -name = "ic-icrc1-index" +name = "ic-icrc1-archive" version = "0.9.0" dependencies = [ - "assert_matches", - "async-trait", "candid", "candid_parser", "ciborium", "ic-base-types", - "ic-canister-profiler", "ic-canisters-http-types", "ic-cdk 0.16.0", "ic-cdk-macros 0.9.0", - "ic-cdk-timers", "ic-icrc1", - "ic-icrc1-ledger", + "ic-icrc1-tokens-u256", "ic-icrc1-tokens-u64", "ic-ledger-canister-core", "ic-ledger-core", - "ic-ledger-hash-of", - "ic-ledger-suite-state-machine-tests", "ic-metrics-encoder", "ic-rosetta-test-utils", + "ic-stable-structures", "ic-state-machine-tests", "ic-test-utilities-load-wasm", "icrc-ledger-types", - "num-traits", - "proptest", - "scopeguard", "serde", - "serde_json", ] [[package]] @@ -9041,7 +9007,7 @@ dependencies = [ "candid", "candid_parser", "ciborium", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-log 0.2.0", "ic-canister-profiler", @@ -9051,7 +9017,6 @@ dependencies = [ "ic-cdk-timers", "ic-crypto-sha2", "ic-icrc1", - "ic-icrc1-index", "ic-icrc1-ledger", "ic-icrc1-test-utils", "ic-icrc1-tokens-u256", @@ -9087,14 +9052,14 @@ dependencies = [ "cddl", "ciborium", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-log 0.2.0", "ic-canisters-http-types", "ic-cdk 0.16.0", "ic-cdk-macros 0.9.0", "ic-cdk-timers", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "ic-crypto-tree-hash", "ic-icrc1", "ic-icrc1-test-utils", @@ -9123,7 +9088,7 @@ name = "ic-icrc1-test-utils" version = "0.9.0" dependencies = [ "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-crypto-ed25519", "ic-crypto-secp256k1", "ic-crypto-test-utils-reproducible-rng", @@ -9243,12 +9208,12 @@ dependencies = [ "ic-wasm-types", "phantom_newtype", "proptest", - "prost 0.13.3", + "prost 0.13.4", "serde", "strum", "strum_macros", - "thiserror 2.0.3", - "tower 0.5.1", + "thiserror 2.0.11", + "tower 0.5.2", ] [[package]] @@ -9256,7 +9221,7 @@ name = "ic-interfaces-adapter-client" version = "0.9.0" dependencies = [ "strum_macros", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -9290,7 +9255,7 @@ name = "ic-interfaces-registry" version = "0.9.0" dependencies = [ "ic-types", - "prost 0.13.3", + "prost 0.13.4", "serde", ] @@ -9311,7 +9276,7 @@ dependencies = [ "ic-crypto-tree-hash", "ic-types", "phantom_newtype", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -9335,7 +9300,7 @@ dependencies = [ "chrono", "ciborium", "dfn_protobuf", - "ic-agent 0.37.1", + "ic-agent", "ic-certification 0.9.0", "ic-crypto-sha2", "ic-ledger-canister-blocks-synchronizer-test-utils", @@ -9346,6 +9311,7 @@ dependencies = [ "icp-ledger", "on_wire", "proptest", + "reqwest 0.12.12", "rusqlite", "serde", "tokio", @@ -9461,6 +9427,7 @@ dependencies = [ "ic-icrc1-ledger", "ic-ledger-suite-orchestrator", "ic-management-canister-types", + "ic-metrics-assert", "ic-state-machine-tests", "ic-test-utilities-load-wasm", "ic-types", @@ -9481,7 +9448,7 @@ dependencies = [ "cddl", "futures", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canisters-http-types", "ic-config", @@ -9570,7 +9537,7 @@ dependencies = [ "ic-types", "ic_consensus_system_test_utils", "icp-ledger", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "slog", "url", @@ -9584,11 +9551,11 @@ dependencies = [ "assert_matches", "candid", "candid_parser", - "clap 4.5.20", + "clap 4.5.26", "futures", "hex", "maplit", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "sha2 0.10.8", @@ -9629,7 +9596,7 @@ dependencies = [ "ic-quic-transport", "ic-types", "tokio", - "tower 0.5.1", + "tower 0.5.2", ] [[package]] @@ -9728,6 +9695,17 @@ dependencies = [ "tokio-metrics", ] +[[package]] +name = "ic-metrics-assert" +version = "0.1.0" +dependencies = [ + "candid", + "pocket-ic", + "regex", + "serde", + "serde_bytes", +] + [[package]] name = "ic-metrics-encoder" version = "1.1.1" @@ -9739,7 +9717,7 @@ name = "ic-metrics-tool" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", ] [[package]] @@ -9748,7 +9726,7 @@ version = "0.0.1" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-nervous-system-clients", "ic-nns-common", @@ -9761,7 +9739,7 @@ dependencies = [ "pocket-ic", "serde", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -9844,7 +9822,7 @@ dependencies = [ "num-traits", "priority-queue", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rust_decimal", "serde", "serde_bytes", @@ -9991,6 +9969,7 @@ dependencies = [ "ic-nervous-system-clients", "ic-nervous-system-common", "ic-nervous-system-common-test-keys", + "ic-nervous-system-common-test-utils", "ic-nervous-system-proto", "ic-nervous-system-root", "ic-nervous-system-runtime", @@ -10026,7 +10005,7 @@ dependencies = [ "maplit", "num-traits", "pocket-ic", - "prost 0.13.3", + "prost 0.13.4", "registry-canister", "rust_decimal", "rust_decimal_macros", @@ -10077,7 +10056,7 @@ dependencies = [ "ic-base-types", "ic-nervous-system-proto-protobuf-generator", "ic-test-utilities-compare-dirs", - "prost 0.13.3", + "prost 0.13.4", "rust_decimal", "serde", "tempfile", @@ -10088,7 +10067,7 @@ name = "ic-nervous-system-proto-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10151,7 +10130,7 @@ name = "ic-networking-subnet-update-workload" version = "0.9.0" dependencies = [ "anyhow", - "ic-agent 0.37.1", + "ic-agent", "ic-interfaces-registry", "ic-protobuf", "ic-registry-canister-api", @@ -10190,7 +10169,7 @@ version = "0.9.0" dependencies = [ "candid", "colored", - "ic-agent 0.37.1", + "ic-agent", "ic-neurons-fund", "ic-sns-governance", "ic-sns-swap", @@ -10222,7 +10201,7 @@ dependencies = [ "lazy_static", "num-traits", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_bytes", "sha2 0.10.8", @@ -10234,7 +10213,7 @@ name = "ic-nns-common-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10317,7 +10296,7 @@ dependencies = [ "pretty_assertions", "prometheus-parse", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "registry-canister", @@ -10356,7 +10335,7 @@ dependencies = [ "ic-utils 0.9.0", "icp-ledger", "itertools 0.12.1", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_bytes", "strum", @@ -10384,7 +10363,7 @@ name = "ic-nns-governance-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10416,7 +10395,7 @@ dependencies = [ "ic-test-utilities-compare-dirs", "icp-ledger", "lazy_static", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "sha3", @@ -10432,7 +10411,7 @@ name = "ic-nns-gtc-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10455,11 +10434,11 @@ dependencies = [ "candid_parser", "canister-test", "dfn_candid", - "dfn_core", - "dfn_macro", "hex", "ic-base-types", "ic-canisters-http-types", + "ic-cdk 0.16.0", + "ic-cdk-macros 0.9.0", "ic-crypto-sha2", "ic-management-canister-types", "ic-metrics-encoder", @@ -10486,7 +10465,7 @@ dependencies = [ "maplit", "on_wire", "pretty_assertions", - "prost 0.13.3", + "prost 0.13.4", "registry-canister", "serde", "serde_bytes", @@ -10500,9 +10479,8 @@ version = "0.1.0" dependencies = [ "async-trait", "candid", - "dfn_candid", - "dfn_core", "ic-base-types", + "ic-cdk 0.16.0", "ic-nervous-system-clients", "ic-nns-constants", "serde", @@ -10513,7 +10491,7 @@ name = "ic-nns-handler-root-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10522,7 +10500,7 @@ version = "0.9.0" dependencies = [ "candid", "canister-test", - "clap 4.5.20", + "clap 4.5.26", "ic-base-types", "ic-canister-client", "ic-interfaces-registry", @@ -10536,7 +10514,7 @@ dependencies = [ "ic-sys", "ic-test-identity", "icp-ledger", - "prost 0.13.3", + "prost 0.13.4", "tempfile", "tokio", "url", @@ -10546,7 +10524,7 @@ dependencies = [ name = "ic-nns-inspector" version = "0.1.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "csv", "hex", "ic-base-types", @@ -10556,7 +10534,7 @@ dependencies = [ "ic-nns-gtc", "icp-ledger", "ledger-canister", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_cbor", "stable_reader", @@ -10587,7 +10565,7 @@ dependencies = [ "ic-cdk-macros 0.9.0", "ic-cdk-timers", "ic-certificate-verification", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "ic-config", "ic-crypto", "ic-crypto-sha2", @@ -10638,7 +10616,7 @@ dependencies = [ "pocket-ic", "pretty_assertions", "prometheus-parse", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "registry-canister", "rustc-hash 1.1.0", @@ -10714,7 +10692,7 @@ dependencies = [ "num-traits", "on_wire", "prometheus-parse", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "registry-canister", "serde", @@ -10781,11 +10759,12 @@ dependencies = [ "quinn", "quinn-udp", "rcgen", - "rustls 0.23.19", + "rustls 0.23.21", "serde", "slog", "tempfile", "tokio", + "tokio-stream", "turmoil", ] @@ -10818,7 +10797,7 @@ dependencies = [ "pprof", "prost 0.12.6", "regex", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -10829,7 +10808,7 @@ dependencies = [ "anyhow", "assert_matches", "base64 0.13.1", - "clap 4.5.20", + "clap 4.5.26", "fs_extra", "ic-config", "ic-crypto-node-key-generation", @@ -10858,14 +10837,14 @@ dependencies = [ "json5", "maplit", "pretty_assertions", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "slog", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "url", "x509-cert", ] @@ -10881,7 +10860,7 @@ dependencies = [ "ic-protobuf-generator", "ic-test-utilities-compare-dirs", "maplit", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_json", "slog", @@ -10893,7 +10872,7 @@ name = "ic-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -10942,18 +10921,18 @@ dependencies = [ "ic-types-test-utils", "phantom_newtype", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "quinn", "rstest", - "rustls 0.23.19", + "rustls 0.23.21", "slog", - "socket2 0.5.7", + "socket2 0.5.8", "static_assertions", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tokio-metrics", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tracing", "turmoil", ] @@ -10977,7 +10956,7 @@ name = "ic-recovery" version = "0.9.0" dependencies = [ "base64 0.13.1", - "clap 4.5.20", + "clap 4.5.26", "futures", "hex", "ic-artifact-pool", @@ -11006,8 +10985,8 @@ dependencies = [ "ic-test-utilities-tmpdir", "ic-test-utilities-types", "ic-types", - "prost 0.13.3", - "reqwest 0.12.9", + "prost 0.13.4", + "reqwest 0.12.12", "serde", "serde_cbor", "serde_json", @@ -11027,7 +11006,7 @@ version = "0.9.0" dependencies = [ "anyhow", "base64 0.13.1", - "clap 4.5.20", + "clap 4.5.26", "ic-base-types", "ic-crypto-sha2", "ic-crypto-utils-threshold-sig-der", @@ -11041,11 +11020,11 @@ dependencies = [ "ic-registry-provisional-whitelist", "ic-registry-subnet-type", "ic-types", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_json", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "url", ] @@ -11057,7 +11036,7 @@ dependencies = [ "candid", "ic-base-types", "serde", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -11070,6 +11049,23 @@ dependencies = [ "ic-types", ] +[[package]] +name = "ic-registry-canister-data-provider" +version = "0.9.0" +dependencies = [ + "anyhow", + "candid", + "ic-cdk 0.16.0", + "ic-interfaces-registry", + "ic-nns-common", + "ic-nns-constants", + "ic-registry-canister-client", + "ic-registry-transport", + "ic-stable-structures", + "ic-types", + "itertools 0.12.1", +] + [[package]] name = "ic-registry-client" version = "0.9.0" @@ -11115,7 +11111,7 @@ dependencies = [ "ic-registry-subnet-features", "ic-types", "serde_cbor", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -11124,7 +11120,7 @@ version = "0.9.0" dependencies = [ "ic-registry-common-proto-generator", "ic-test-utilities-compare-dirs", - "prost 0.13.3", + "prost 0.13.4", "tempfile", ] @@ -11133,7 +11129,7 @@ name = "ic-registry-common-proto-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -11164,7 +11160,7 @@ dependencies = [ "ic-registry-transport", "ic-types", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "url", ] @@ -11178,7 +11174,7 @@ dependencies = [ "ic-registry-local-store-artifacts", "ic-sys", "ic-types", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "tempfile", ] @@ -11201,7 +11197,7 @@ dependencies = [ "ic-registry-transport", "ic-types", "leb128", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "tree-deserializer", @@ -11237,7 +11233,7 @@ dependencies = [ "ic-registry-transport", "ic-sys", "ic-types", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -11252,7 +11248,7 @@ dependencies = [ name = "ic-registry-replicator" version = "0.9.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "ic-config", "ic-crypto-utils-threshold-sig-der", "ic-http-endpoints-metrics", @@ -11268,7 +11264,7 @@ dependencies = [ "ic-registry-routing-table", "ic-types", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "slog", "tempfile", "tokio", @@ -11319,7 +11315,7 @@ dependencies = [ "ic-registry-keys", "ic-registry-transport-protobuf-generator", "ic-test-utilities-compare-dirs", - "prost 0.13.3", + "prost 0.13.4", "serde", "tempfile", ] @@ -11329,7 +11325,7 @@ name = "ic-registry-transport-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -11337,13 +11333,14 @@ name = "ic-replay" version = "0.9.0" dependencies = [ "candid", - "clap 4.5.20", + "clap 4.5.26", "hex", "ic-artifact-pool", "ic-canister-client", "ic-canister-sandbox-backend-lib", "ic-config", "ic-consensus", + "ic-consensus-dkg", "ic-consensus-utils", "ic-crypto-for-verification-only", "ic-cycles-account-manager", @@ -11372,7 +11369,7 @@ dependencies = [ "ic-test-utilities-types", "ic-types", "icp-ledger", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "serde_json", @@ -11380,7 +11377,7 @@ dependencies = [ "slog-async", "tempfile", "tokio", - "tower 0.5.1", + "tower 0.5.2", "url", ] @@ -11390,7 +11387,7 @@ version = "0.9.0" dependencies = [ "assert_cmd", "canister-test", - "clap 4.5.20", + "clap 4.5.26", "criterion", "hex", "ic-artifact-pool", @@ -11398,6 +11395,7 @@ dependencies = [ "ic-btc-consensus", "ic-config", "ic-consensus", + "ic-consensus-dkg", "ic-crypto", "ic-crypto-sha2", "ic-cycles-account-manager", @@ -11459,6 +11457,7 @@ dependencies = [ "ic-artifact-pool", "ic-config", "ic-consensus", + "ic-consensus-dkg", "ic-consensus-manager", "ic-consensus-utils", "ic-crypto-interfaces-sig-verification", @@ -11525,14 +11524,14 @@ dependencies = [ "ic-types", "ic-utils 0.9.0", "maplit", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "slog", "slog-scope", "tempfile", "tokio", "tonic", - "tower 0.5.1", + "tower 0.5.2", "tracing-subscriber", "wat", ] @@ -11543,7 +11542,7 @@ version = "0.9.0" dependencies = [ "arbitrary", "assert_matches", - "bit-vec", + "bit-vec 0.6.3", "criterion", "criterion-time", "cvt", @@ -11584,7 +11583,7 @@ dependencies = [ "phantom_newtype", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", @@ -11602,9 +11601,9 @@ dependencies = [ [[package]] name = "ic-representation-independent-hash" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ae59483e377cd9aad94ec339ed1d2583b0d5929cab989328dac2d853b2f570" +checksum = "3643f12824280580d31e47d380f1be23abee29944a1430c3ed22b164ac8e68db" dependencies = [ "leb128", "sha2 0.10.8", @@ -11612,25 +11611,25 @@ dependencies = [ [[package]] name = "ic-response-verification" -version = "2.6.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef02ef84189d61a7d39889b7e9a3ae212d45c3df293513f7b2568027fd08a8" +checksum = "2b97514fada84797baf61a6a29f1c71695798c2628cb6013d97a5dd6ecc26df7" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "candid", "flate2", "hex", - "http 0.2.12", + "http 1.2.0", "ic-cbor", "ic-certificate-verification", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "ic-http-certification", "ic-representation-independent-hash", "leb128", "log", "nom", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 1.0.69", "urlencoding", ] @@ -11644,12 +11643,12 @@ dependencies = [ "async-trait", "base64 0.13.1", "candid", - "clap 4.5.20", + "clap 4.5.26", "dfn_candid", "dfn_protobuf", "futures", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-crypto-ed25519", "ic-crypto-sha2", @@ -11669,7 +11668,6 @@ dependencies = [ "ic-limits", "ic-nns-common", "ic-nns-constants", - "ic-nns-governance", "ic-nns-governance-api", "ic-nns-governance-init", "ic-nns-handler-root", @@ -11687,11 +11685,11 @@ dependencies = [ "pocket-ic", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "rolling-file", "rosetta-core", "rusqlite", @@ -11724,7 +11722,7 @@ dependencies = [ "icp-ledger", "nix 0.24.3", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "rosetta-core", "serde", "serde_bytes", @@ -11770,7 +11768,7 @@ dependencies = [ "assert_matches", "hex", "ic-canister-sig-creation", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "ic-crypto-internal-types", "ic-crypto-test-utils-canister-sigs", "ic-crypto-test-utils-reproducible-rng", @@ -11791,7 +11789,7 @@ dependencies = [ "candid", "colored", "csv", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-nervous-system-agent", "ic-nervous-system-common-test-keys", @@ -11805,7 +11803,7 @@ dependencies = [ "serde", "serde_json", "textplots", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -11816,10 +11814,10 @@ dependencies = [ "anyhow", "base64 0.13.1", "candid", - "clap 4.5.20", + "clap 4.5.26", "futures", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-crypto-sha2", "ic-nervous-system-agent", @@ -11842,7 +11840,7 @@ dependencies = [ "serde_json", "serde_yaml", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", ] @@ -11858,7 +11856,7 @@ dependencies = [ "canbench-rs", "candid", "candid_parser", - "clap 4.5.20", + "clap 4.5.26", "comparable", "futures", "hex", @@ -11911,14 +11909,15 @@ dependencies = [ "num-traits", "pretty_assertions", "proptest", - "prost 0.13.3", - "prost-build 0.13.3", + "prost 0.13.4", + "prost-build 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rust_decimal", "rust_decimal_macros", "serde", "serde_bytes", + "serde_json", "strum", "strum_macros", "tempfile", @@ -11932,7 +11931,7 @@ version = "0.9.0" dependencies = [ "bytes", "candid", - "clap 4.5.20", + "clap 4.5.26", "comparable", "ic-base-types", "ic-nervous-system-proto", @@ -11942,7 +11941,7 @@ dependencies = [ "ic-utils 0.9.0", "icp-ledger", "itertools 0.12.1", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_bytes", "strum", @@ -11976,7 +11975,7 @@ name = "ic-sns-governance-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -12029,7 +12028,7 @@ dependencies = [ "lazy_static", "maplit", "num-traits", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_yaml", "tempfile", @@ -12040,7 +12039,7 @@ name = "ic-sns-init-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -12096,7 +12095,7 @@ dependencies = [ "pretty-bytes", "pretty_assertions", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rust_decimal", "rust_decimal_macros", @@ -12136,7 +12135,7 @@ dependencies = [ "ic-test-utilities-compare-dirs", "icrc-ledger-types", "maplit", - "prost 0.13.3", + "prost 0.13.4", "serde", "tempfile", "tokio", @@ -12147,7 +12146,7 @@ name = "ic-sns-root-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -12191,7 +12190,7 @@ dependencies = [ "maplit", "pretty_assertions", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rust_decimal", "rust_decimal_macros", "serde", @@ -12210,7 +12209,7 @@ dependencies = [ "ic-base-types", "ic-nervous-system-proto", "ic-utils 0.9.0", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_bytes", ] @@ -12220,7 +12219,7 @@ name = "ic-sns-swap-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -12265,7 +12264,7 @@ dependencies = [ "maplit", "num-traits", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "tokio", ] @@ -12316,7 +12315,7 @@ dependencies = [ "icrc-ledger-types", "maplit", "pretty_assertions", - "prost 0.13.3", + "prost 0.13.4", "registry-canister", "serde", "serde_bytes", @@ -12330,14 +12329,14 @@ name = "ic-sns-wasm-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] name = "ic-stable-structures" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03f3044466a69802de74e710dc0300b706a05696a0531c942ca856751a13b0db" +checksum = "b492c5a16455ae78623eaa12ead96dda6c69a83c535b1b00789f19b381c8a24c" dependencies = [ "ic_principal", ] @@ -12347,7 +12346,7 @@ name = "ic-starter" version = "0.9.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "ic-config", "ic-logger", "ic-management-canister-types", @@ -12388,7 +12387,7 @@ dependencies = [ "libc", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "scoped_threadpool", "slog", ] @@ -12399,7 +12398,7 @@ version = "0.9.0" dependencies = [ "candid", "ciborium", - "clap 4.5.20", + "clap 4.5.26", "hex", "ic-artifact-pool", "ic-base-types", @@ -12465,7 +12464,7 @@ dependencies = [ "tempfile", "tokio", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "wat", ] @@ -12474,7 +12473,7 @@ name = "ic-state-manager" version = "0.9.0" dependencies = [ "assert_matches", - "bit-vec", + "bit-vec 0.6.3", "criterion", "criterion-time", "crossbeam-channel", @@ -12520,7 +12519,7 @@ dependencies = [ "parking_lot 0.12.3", "prometheus", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "scoped_threadpool", @@ -12556,10 +12555,10 @@ dependencies = [ "ic-types-test-utils", "mockall", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "slog", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tokio-metrics", "tokio-util", @@ -12571,7 +12570,7 @@ dependencies = [ name = "ic-state-tool" version = "0.9.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "hex", "ic-config", "ic-logger", @@ -12581,11 +12580,12 @@ dependencies = [ "ic-registry-subnet-type", "ic-replicated-state", "ic-state-layout", + "ic-state-machine-tests", "ic-state-manager", "ic-sys", "ic-types", "ic-utils 0.9.0", - "prost 0.13.3", + "prost 0.13.4", "slog", "slog-term", "tempfile", @@ -12595,9 +12595,9 @@ dependencies = [ name = "ic-subnet-splitting" version = "0.9.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-crypto-utils-threshold-sig", "ic-crypto-utils-threshold-sig-der", @@ -12631,10 +12631,10 @@ dependencies = [ "libc", "nix 0.24.3", "phantom_newtype", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "wsl", ] @@ -12691,7 +12691,7 @@ dependencies = [ "candid", "canister-test", "chrono", - "clap 4.5.20", + "clap 4.5.26", "config_types", "crossbeam-channel", "cycles-minting-canister", @@ -12704,8 +12704,8 @@ dependencies = [ "http 1.2.0", "humantime", "humantime-serde", - "hyper 1.5.1", - "ic-agent 0.37.1", + "hyper 1.5.2", + "ic-agent", "ic-artifact-pool", "ic-base-types", "ic-btc-interface", @@ -12769,7 +12769,7 @@ dependencies = [ "ic-types", "ic-types-test-utils", "ic-universal-canister", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "ic-wasm-types", "icp-ledger", "icrc-ledger-types", @@ -12790,14 +12790,14 @@ dependencies = [ "pem 1.1.1", "phantom_newtype", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "rcgen", "regex", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "ring 0.17.8", "rosetta-core", "rsa", @@ -12815,7 +12815,7 @@ dependencies = [ "strum", "strum_macros", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "time", "tokio", "tokio-util", @@ -12835,6 +12835,7 @@ dependencies = [ "ic-artifact-pool", "ic-config", "ic-consensus", + "ic-consensus-dkg", "ic-consensus-utils", "ic-interfaces", "ic-interfaces-registry", @@ -12916,10 +12917,10 @@ dependencies = [ "serde", "serde_cbor", "slog", - "socket2 0.5.7", + "socket2 0.5.8", "tempfile", "tokio", - "tower 0.5.1", + "tower 0.5.2", "wasmprinter 0.217.0", "wat", ] @@ -12941,7 +12942,7 @@ dependencies = [ "ic-types", "mockall", "phantom_newtype", - "prost 0.13.3", + "prost 0.13.4", "serde", ] @@ -13070,7 +13071,7 @@ version = "0.9.0" dependencies = [ "assert_matches", "ic-protobuf", - "prost 0.13.3", + "prost 0.13.4", "serde", "serde_cbor", "serde_json", @@ -13117,7 +13118,6 @@ dependencies = [ name = "ic-test-utilities-types" version = "0.9.0" dependencies = [ - "assert_matches", "bincode", "ic-canister-client-sender", "ic-crypto-ed25519", @@ -13137,7 +13137,7 @@ dependencies = [ "candid", "canister-test", "dfn_candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-btc-checker", "ic-btc-interface", @@ -13172,6 +13172,43 @@ dependencies = [ "tokio", ] +[[package]] +name = "ic-tests-cross-chain" +version = "0.9.0" +dependencies = [ + "anyhow", + "candid", + "canister-test", + "dfn_candid", + "futures", + "hex-literal", + "ic-base-types", + "ic-canister-client", + "ic-cketh-minter", + "ic-ethereum-types", + "ic-icrc1-index-ng", + "ic-icrc1-ledger", + "ic-ledger-suite-orchestrator", + "ic-management-canister-types", + "ic-nervous-system-clients", + "ic-nervous-system-common-test-keys", + "ic-nervous-system-root", + "ic-nns-common", + "ic-nns-constants", + "ic-nns-governance-api", + "ic-nns-test-utils", + "ic-registry-subnet-type", + "ic-system-test-driver", + "ic-types", + "ic-wasm-types", + "ic_consensus_system_test_utils", + "ic_consensus_threshold_sig_system_test_utils", + "icrc-ledger-types", + "reqwest 0.12.12", + "serde_json", + "slog", +] + [[package]] name = "ic-tracing" version = "0.9.0" @@ -13185,9 +13222,9 @@ name = "ic-tracing-jaeger-exporter" version = "0.9.0" dependencies = [ "anyhow", - "opentelemetry 0.27.0", + "opentelemetry 0.27.1", "opentelemetry-otlp", - "opentelemetry_sdk 0.27.0", + "opentelemetry_sdk 0.27.1", "tokio", "tracing-opentelemetry 0.28.0", "tracing-subscriber", @@ -13207,37 +13244,20 @@ dependencies = [ [[package]] name = "ic-transport-types" -version = "0.37.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "875dc4704780383112e8e8b5063a1b98de114321d0c7d3e7f635dcf360a57fba" -dependencies = [ - "candid", - "hex", - "ic-certification 2.6.0", - "leb128", - "serde", - "serde_bytes", - "serde_repr", - "sha2 0.10.8", - "thiserror 1.0.68", -] - -[[package]] -name = "ic-transport-types" -version = "0.39.1" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8789a5c176bb1b925fa58ca97c651a3995d504e76101e93d2a17f558bdcf66" +checksum = "21e2418868dd5857d2a5bac3f1cb6de1aecf2316d380997ef842aec3d8a79d4e" dependencies = [ "candid", "hex", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "leb128", "serde", "serde_bytes", "serde_cbor", "serde_repr", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 2.0.11", ] [[package]] @@ -13273,7 +13293,7 @@ dependencies = [ "pretty_assertions", "proptest", "proptest-derive", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "rusty-fork", @@ -13284,7 +13304,7 @@ dependencies = [ "serde_with 1.14.0", "strum", "strum_macros", - "thiserror 2.0.3", + "thiserror 2.0.11", "thousands", ] @@ -13325,14 +13345,14 @@ dependencies = [ [[package]] name = "ic-utils" -version = "0.37.0" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fa832296800758c9c921dd1704985ded6b3e6fbc3aee409727eb1f00d69a595" +checksum = "e1fb9c35ef4976a71d37f3ebf73ee43bb52b360be60d91d3a77f74fbc875dda4" dependencies = [ "async-trait", "candid", "futures-util", - "ic-agent 0.37.1", + "ic-agent", "once_cell", "semver", "serde", @@ -13340,7 +13360,7 @@ dependencies = [ "sha2 0.10.8", "strum", "strum_macros", - "thiserror 1.0.68", + "thiserror 2.0.11", "time", "tokio", ] @@ -13355,6 +13375,7 @@ version = "0.9.0" dependencies = [ "ic-types", "lru", + "proptest", ] [[package]] @@ -13364,6 +13385,9 @@ version = "0.9.0" [[package]] name = "ic-utils-thread" version = "0.9.0" +dependencies = [ + "crossbeam-channel", +] [[package]] name = "ic-validate-eq" @@ -13400,7 +13424,7 @@ dependencies = [ "ic-types", "mockall", "rand 0.8.5", - "thiserror 2.0.3", + "thiserror 2.0.11", ] [[package]] @@ -13532,12 +13556,12 @@ checksum = "19fabaeecfe37f24b433c62489242fc54503d98d4cc8d0f9ef7544dfdfc0ddcb" dependencies = [ "anyhow", "candid", - "clap 4.5.20", + "clap 4.5.26", "libflate", "rustc-demangle", "serde", "serde_json", - "thiserror 1.0.68", + "thiserror 1.0.69", "walrus", ] @@ -13572,7 +13596,7 @@ dependencies = [ "byte-unit", "candid", "chrono", - "clap 4.5.20", + "clap 4.5.26", "console 0.11.3", "futures", "hex", @@ -13604,14 +13628,14 @@ dependencies = [ name = "ic-xnet-hyper" version = "0.9.0" dependencies = [ - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "ic-crypto-tls-interfaces", "ic-xnet-uri", "tokio", - "tokio-rustls 0.26.0", - "tower 0.5.1", + "tokio-rustls 0.26.1", + "tower 0.5.2", ] [[package]] @@ -13622,7 +13646,7 @@ dependencies = [ "async-trait", "axum", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "ic-base-types", "ic-canonical-state", @@ -13664,10 +13688,10 @@ dependencies = [ "prometheus", "proptest", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", "tempfile", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "url", ] @@ -13728,9 +13752,11 @@ name = "ic_boundary_node_system_tests" version = "0.9.0" dependencies = [ "anyhow", + "async-trait", "candid", + "canister-test", "certificate_orchestrator_interface", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-boundary-nodes-integration-test-common", "ic-boundary-nodes-performance-test-common", @@ -13774,7 +13800,7 @@ version = "0.9.0" dependencies = [ "anyhow", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-system-test-driver", "ic-types", @@ -13793,7 +13819,7 @@ dependencies = [ "canister-test", "chrono", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-client", "ic-config", @@ -13812,10 +13838,10 @@ dependencies = [ "ic_consensus_threshold_sig_system_test_utils", "leb128", "openssh-keys", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "rsa", "serde_json", "slog", @@ -13833,7 +13859,7 @@ dependencies = [ "candid", "canister-test", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-crypto-test-utils-reproducible-rng", "ic-management-canister-types", @@ -13854,7 +13880,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_cbor", "serde_json", "slog", @@ -13871,7 +13897,7 @@ dependencies = [ "candid", "canister-test", "ed25519-dalek", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-client", "ic-config", @@ -13902,7 +13928,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-crypto-test-utils-reproducible-rng", "ic-fstrim-tool", "ic-registry-subnet-type", @@ -13912,7 +13938,7 @@ dependencies = [ "ic_consensus_system_test_utils", "k256", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_bytes", "serde_cbor", "slog", @@ -13930,14 +13956,14 @@ dependencies = [ "data-encoding", "serde", "sha2 0.10.8", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "icp-config" version = "0.9.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "eyre", "ic-config", "ic-replicated-state", @@ -13983,7 +14009,7 @@ dependencies = [ "on_wire", "pocket-ic", "proptest", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_chacha 0.3.1", "serde", @@ -14000,7 +14026,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-icrc-rosetta", "ic-icrc-rosetta-client", "ic-ledger-test-utils", @@ -14038,9 +14064,9 @@ dependencies = [ "candid", "ciborium", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-cbor", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "icrc-ledger-types", "leb128", ] @@ -14067,7 +14093,7 @@ dependencies = [ [[package]] name = "icrc-ledger-types" -version = "0.1.6" +version = "0.1.8" dependencies = [ "assert_matches", "base32", @@ -14098,7 +14124,7 @@ dependencies = [ "async-trait", "candid", "serde", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -14227,7 +14253,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -14257,26 +14283,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.0.3" @@ -14309,9 +14315,9 @@ dependencies = [ [[package]] name = "impl-more" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0" +checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" [[package]] name = "impl-rlp" @@ -14333,13 +14339,13 @@ dependencies = [ [[package]] name = "impl-trait-for-tuples" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.96", ] [[package]] @@ -14361,26 +14367,26 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" dependencies = [ - "console 0.15.8", - "instant", + "console 0.15.10", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time", ] [[package]] @@ -14396,7 +14402,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88" dependencies = [ "ahash 0.8.11", - "indexmap 2.6.0", + "indexmap 2.7.0", "is-terminal", "itoa", "log", @@ -14409,22 +14415,22 @@ dependencies = [ [[package]] name = "inferno" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a5d75fee4d36809e6b021e4b96b686e763d365ffdb03af2bd00786353f84fe" +checksum = "692eda1cc790750b9f5a5e3921ef9c117fd5498b97cfacbc910693e5b29002dc" dependencies = [ "ahash 0.8.11", - "clap 4.5.20", + "clap 4.5.26", "crossbeam-channel", "crossbeam-utils", "dashmap 6.1.0", "env_logger", - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "log", "num-format", "once_cell", - "quick-xml 0.37.1", + "quick-xml 0.37.2", "rgb", "str_stack", ] @@ -14434,7 +14440,7 @@ name = "inject-files" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "partition_tools", "tempfile", "tokio", @@ -14451,13 +14457,13 @@ dependencies = [ [[package]] name = "insta" -version = "1.40.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" +checksum = "6513e4067e16e69ed1db5ab56048ed65db32d10ba5fc1217f5393f8f17d8b5a5" dependencies = [ - "console 0.15.8", - "lazy_static", + "console 0.15.10", "linked-hash-map", + "once_cell", "similar", ] @@ -14482,14 +14488,14 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "ring 0.17.8", "rustls-pki-types", "serde", "serde_json", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -14507,7 +14513,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.5.7", + "socket2 0.5.8", "widestring", "windows-sys 0.48.0", "winreg", @@ -14518,6 +14524,9 @@ name = "ipnet" version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +dependencies = [ + "serde", +] [[package]] name = "ipnetwork" @@ -14552,7 +14561,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ea1dc4bf0fb4904ba83ffdb98af3d9c325274e92e6e295e4151e86c96363e04" dependencies = [ "serde", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -14593,9 +14602,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jni" @@ -14607,7 +14616,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror 1.0.68", + "thiserror 1.0.69", "walkdir", ] @@ -14628,10 +14637,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -14669,7 +14679,7 @@ dependencies = [ "pest_derive", "regex", "serde_json", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -14755,22 +14765,22 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-http-proxy", - "hyper-rustls 0.27.3", + "hyper-rustls 0.27.5", "hyper-timeout", "hyper-util", "jsonpath-rust", "k8s-openapi", "kube-core", "pem 3.0.4", - "rustls 0.23.19", + "rustls 0.23.21", "rustls-pemfile 2.2.0", "secrecy", "serde", "serde_json", "serde_yaml", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-util", "tower 0.4.13", @@ -14790,7 +14800,7 @@ dependencies = [ "k8s-openapi", "serde", "serde_json", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -14815,7 +14825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" dependencies = [ "ascii-canvas", - "bit-set", + "bit-set 0.5.3", "diff", "ena", "is-terminal", @@ -14837,7 +14847,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" dependencies = [ "ascii-canvas", - "bit-set", + "bit-set 0.5.3", "ena", "itertools 0.11.0", "lalrpop-util 0.20.2", @@ -14867,7 +14877,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata 0.4.8", + "regex-automata 0.4.9", ] [[package]] @@ -14880,12 +14890,12 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" name = "launch-single-vm" version = "0.1.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "ic-prep", "ic-registry-subnet-type", "ic-system-test-driver", "ic-types", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "slog", "slog-async", @@ -14954,7 +14964,7 @@ dependencies = [ "dfn_http_metrics", "dfn_protobuf", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-log 0.2.0", "ic-cdk 0.16.0", @@ -14989,7 +14999,7 @@ name = "ledger-canister-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -15058,9 +15068,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.161" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libflate" @@ -15088,9 +15098,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if 1.0.0", "windows-targets 0.52.6", @@ -15098,9 +15108,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libnss" @@ -15119,9 +15129,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "libc", - "redox_syscall 0.5.7", + "redox_syscall 0.5.8", ] [[package]] @@ -15177,9 +15187,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "libc", @@ -15211,9 +15221,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux_kernel_command_line" @@ -15221,9 +15231,9 @@ version = "0.9.0" [[package]] name = "litemap" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" [[package]] name = "lmdb-rkv" @@ -15276,7 +15286,7 @@ checksum = "612ed4ea9ce5acfb5d26339302528a5e1e59dfed95e9e11af3c083236ff1d15d" dependencies = [ "libc", "neli", - "thiserror 1.0.68", + "thiserror 1.0.69", "windows-sys 0.48.0", ] @@ -15305,9 +15315,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "logos" @@ -15338,7 +15348,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax 0.6.29", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -15364,6 +15374,19 @@ dependencies = [ "logos-codegen", ] +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lru" version = "0.7.8" @@ -15542,7 +15565,7 @@ dependencies = [ name = "memory_tracker" version = "0.9.0" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", "criterion", "ic-logger", "ic-replicated-state", @@ -15582,13 +15605,13 @@ dependencies = [ "candid", "canister-test", "dfn_candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-cdk 0.16.0", "ic-registry-subnet-type", "ic-system-test-driver", "ic-types", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "itertools 0.12.1", "rand 0.8.5", "rand_chacha 0.3.1", @@ -15658,9 +15681,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ "adler2", ] @@ -15679,11 +15702,10 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "log", "wasi", @@ -15698,9 +15720,9 @@ checksum = "d07cbe42e2a8dd41df582fb8e00fc24d920b5561cc301fcb6d14e2e0434b500f" [[package]] name = "mockall" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" +checksum = "39a6bfcc6c8c7eed5ee98b9c3e33adc726054389233e201c95dab2d41a3839d2" dependencies = [ "cfg-if 1.0.0", "downcast", @@ -15712,21 +15734,21 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" +checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" dependencies = [ "cfg-if 1.0.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "mockito" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b34bd91b9e5c5b06338d392463e1318d683cf82ec3d3af4014609be6e2108d" +checksum = "652cd6d169a36eaf9d1e6bce1a221130439a966d7f27858af66a33a66e9c4ee2" dependencies = [ "assert-json-diff", "bytes", @@ -15735,7 +15757,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "log", "rand 0.8.5", @@ -15748,25 +15770,23 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.8" +version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" dependencies = [ "async-lock", - "async-trait", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", - "event-listener", + "event-listener 5.4.0", "futures-util", - "once_cell", + "loom", "parking_lot 0.12.3", - "quanta", + "portable-atomic", "rustc_version", "smallvec", "tagptr", - "thiserror 1.0.68", - "triomphe", + "thiserror 1.0.69", "uuid", ] @@ -15794,6 +15814,23 @@ dependencies = [ "version_check", ] +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.2.0", + "httparse", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + [[package]] name = "multimap" version = "0.10.0" @@ -15802,9 +15839,9 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "neli" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1100229e06604150b3becd61a4965d5c70f3be1759544ea7274166f4be41ef43" +checksum = "93062a0dce6da2517ea35f301dfc88184ce18d3601ec786a727a87bf535deca9" dependencies = [ "byteorder", "libc", @@ -15814,9 +15851,9 @@ dependencies = [ [[package]] name = "neli-proc-macros" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168194d373b1e134786274020dae7fc5513d565ea2ebb9bc9ff17ffb69106d4" +checksum = "0c8034b7fbb6f9455b2a96c19e6edf8dc9fc34c70449938d8ee3b4df363f61fe" dependencies = [ "either", "proc-macro2", @@ -15870,7 +15907,7 @@ dependencies = [ "canister_http", "cloner-canister-types", "dfn_candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-cdk 0.16.0", "ic-limits", @@ -15886,12 +15923,12 @@ dependencies = [ "ic-test-utilities", "ic-test-utilities-types", "ic-types", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "proxy_canister", "rand 0.8.5", "rand_chacha 0.3.1", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", "tokio", "url", @@ -15908,7 +15945,7 @@ name = "nft_exporter" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "serde", "serde_json", ] @@ -15924,7 +15961,7 @@ dependencies = [ "serde_path_to_error", "strum", "strum_macros", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -15956,7 +15993,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if 1.0.0", "libc", "memoffset 0.9.1", @@ -15968,7 +16005,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cfg-if 1.0.0", "cfg_aliases", "libc", @@ -15986,7 +16023,7 @@ dependencies = [ "cycles_minting", "dfn_candid", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-btc-interface", "ic-canister-client", @@ -16016,9 +16053,9 @@ dependencies = [ "nns_dapp", "num-traits", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_cbor", "slog", "tokio", @@ -16058,7 +16095,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-nns-constants", "ic-registry-canister-api", @@ -16247,7 +16284,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -16267,13 +16304,13 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "crc32fast", - "hashbrown 0.15.0", - "indexmap 2.6.0", + "hashbrown 0.15.2", + "indexmap 2.7.0", "memchr", ] @@ -16343,7 +16380,7 @@ dependencies = [ "byteorder", "md-5", "sha2 0.9.9", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -16386,16 +16423,16 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3cebff57f7dbd1255b44d8bddc2cebeb0ea677dbaa2e25a3070a91b318f660" +checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7" dependencies = [ "futures-core", "futures-sink", "js-sys", - "once_cell", "pin-project-lite", - "thiserror 1.0.68", + "thiserror 1.0.69", + "tracing", ] [[package]] @@ -16407,11 +16444,11 @@ dependencies = [ "async-trait", "futures-core", "http 1.2.0", - "opentelemetry 0.27.0", + "opentelemetry 0.27.1", "opentelemetry-proto", - "opentelemetry_sdk 0.27.0", - "prost 0.13.3", - "thiserror 1.0.68", + "opentelemetry_sdk 0.27.1", + "prost 0.13.4", + "thiserror 1.0.69", "tokio", "tonic", "tracing", @@ -16436,9 +16473,9 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ - "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", - "prost 0.13.3", + "opentelemetry 0.27.1", + "opentelemetry_sdk 0.27.1", + "prost 0.13.4", "tonic", ] @@ -16454,7 +16491,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -16469,7 +16506,7 @@ dependencies = [ "js-sys", "once_cell", "pin-project-lite", - "thiserror 1.0.68", + "thiserror 1.0.69", "urlencoding", ] @@ -16488,7 +16525,7 @@ dependencies = [ "opentelemetry_api 0.18.0", "percent-encoding", "rand 0.8.5", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -16508,26 +16545,25 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "regex", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "opentelemetry_sdk" -version = "0.27.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b742c1cae4693792cc564e58d75a2a0ba29421a34a85b50da92efa89ecb2bc" +checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" dependencies = [ "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", - "once_cell", - "opentelemetry 0.27.0", + "opentelemetry 0.27.1", "percent-encoding", "rand 0.8.5", "serde_json", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-stream", "tracing", @@ -16540,14 +16576,14 @@ dependencies = [ "async-trait", "backoff", "candid", - "clap 4.5.20", + "clap 4.5.26", "env-file-reader", "exec", "get_if_addrs", "hex", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "ic-canister-client", "ic-canister-client-sender", @@ -16594,7 +16630,7 @@ dependencies = [ "mockall", "nix 0.24.3", "prometheus", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "serde", "serde_cbor", @@ -16628,9 +16664,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "4.5.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c65ee1f9701bf938026630b455d5315f490640234259037edb259798b3bcf85e" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] @@ -16650,7 +16686,7 @@ dependencies = [ "ic-types", "ic_consensus_system_test_utils", "itertools 0.12.1", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "slog", "tokio", @@ -16766,7 +16802,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.5.7", + "redox_syscall 0.5.8", "smallvec", "windows-targets 0.52.6", ] @@ -16871,20 +16907,20 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 1.0.68", + "thiserror 2.0.11", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" dependencies = [ "pest", "pest_generator", @@ -16892,22 +16928,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "pest_meta" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" dependencies = [ "once_cell", "pest", @@ -16916,9 +16952,9 @@ dependencies = [ [[package]] name = "pest_vm" -version = "2.7.14" +version = "2.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5385573c124b12495734797b8b427832b6a4182ac313c50dd09fe360795840e2" +checksum = "a8151168a80801131f6e0e79d6c84fa337ccd2493c99e59de027354c3e6fca0b" dependencies = [ "pest", "pest_meta", @@ -16931,7 +16967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -16956,12 +16992,12 @@ dependencies = [ [[package]] name = "phf" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", - "phf_shared 0.11.2", + "phf_shared 0.11.3", ] [[package]] @@ -16986,25 +17022,25 @@ dependencies = [ [[package]] name = "phf_generator" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared 0.11.2", + "phf_shared 0.11.3", "rand 0.8.5", ] [[package]] name = "phf_macros" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", + "phf_generator 0.11.3", + "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -17013,16 +17049,16 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ - "siphasher", + "siphasher 0.3.11", ] [[package]] name = "phf_shared" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher", + "siphasher 1.0.1", ] [[package]] @@ -17033,29 +17069,29 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.6" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" +checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.6" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" +checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -17071,7 +17107,7 @@ checksum = "122ee1f5a6843bec84fcbd5c6ba3622115337a6b8965b93a61aad347648f4e8d" dependencies = [ "rand 0.8.5", "socket2 0.4.10", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -17157,18 +17193,19 @@ version = "6.0.0" dependencies = [ "backoff", "base64 0.13.1", + "bitcoin 0.28.2", "candid", "candid_parser", "ed25519-dalek", "flate2", "hex", "ic-cdk 0.16.0", - "ic-certification 2.6.0", + "ic-certification 3.0.2", "ic-error-types", - "ic-transport-types 0.37.1", + "ic-transport-types", "k256", "lazy_static", - "reqwest 0.12.9", + "reqwest 0.12.12", "schemars", "serde", "serde_bytes", @@ -17178,7 +17215,7 @@ dependencies = [ "slog", "strum", "strum_macros", - "thiserror 2.0.3", + "thiserror 2.0.11", "tokio", "tracing", "tracing-appender", @@ -17203,7 +17240,7 @@ dependencies = [ "bitcoincore-rpc", "bytes", "candid", - "clap 4.5.20", + "clap 4.5.26", "ctrlc", "flate2", "form_urlencoded", @@ -17212,9 +17249,9 @@ dependencies = [ "hex", "http 1.2.0", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", - "ic-agent 0.37.1", + "ic-agent", "ic-bn-lib", "ic-boundary", "ic-btc-adapter", @@ -17252,7 +17289,7 @@ dependencies = [ "ic-test-utilities", "ic-test-utilities-registry", "ic-types", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "ic-utils-thread", "ic-validator-ingress-message", "itertools 0.12.1", @@ -17261,7 +17298,7 @@ dependencies = [ "rand 0.8.5", "rcgen", "registry-canister", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_cbor", "serde_json", @@ -17272,7 +17309,7 @@ dependencies = [ "tokio", "tokio-util", "tonic", - "tower 0.5.1", + "tower 0.5.2", "tower-http 0.6.2", "tracing", "tracing-appender", @@ -17292,9 +17329,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if 1.0.0", "concurrent-queue", @@ -17318,15 +17355,15 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "postcard" -version = "1.0.10" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7f0a8d620d71c457dd1d47df76bb18960378da56af4527aaa10f515eee732e" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" dependencies = [ "cobs", "embedded-io 0.4.0", @@ -17364,7 +17401,7 @@ dependencies = [ "smallvec", "symbolic-demangle", "tempfile", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -17384,9 +17421,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "predicates" -version = "3.1.2" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" dependencies = [ "anstyle", "difflib", @@ -17398,15 +17435,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" [[package]] name = "predicates-tree" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" dependencies = [ "predicates-core", "termtree", @@ -17432,7 +17469,7 @@ checksum = "b55c4d17d994b637e2f4daf6e5dc5d660d209d5642377d675d7a1c3ab69fa579" dependencies = [ "arrayvec 0.5.2", "typed-arena", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -17457,12 +17494,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.24" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910d41a655dac3b764f1ade94821093d3610248694320cd072303a8eedcf221d" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -17540,9 +17577,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -17567,7 +17604,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "hex", "lazy_static", "procfs-core", @@ -17580,7 +17617,7 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "hex", ] @@ -17598,7 +17635,7 @@ dependencies = [ "parking_lot 0.12.3", "procfs 0.16.0", "protobuf", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -17615,13 +17652,13 @@ dependencies = [ [[package]] name = "proptest" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ - "bit-set", - "bit-vec", - "bitflags 2.6.0", + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.8.0", "lazy_static", "num-traits", "rand 0.8.5", @@ -17635,13 +17672,13 @@ dependencies = [ [[package]] name = "proptest-derive" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff7ff745a347b87471d859a377a9a404361e7efc2a971d73424a6d183c0fc77" +checksum = "4ee1c9ac207483d5e7db4940700de86a9aae46ef90c48b57f99fe7edb8345e49" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -17656,12 +17693,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", - "prost-derive 0.13.3", + "prost-derive 0.13.4", ] [[package]] @@ -17681,17 +17718,16 @@ dependencies = [ "prost 0.12.6", "prost-types 0.12.6", "regex", - "syn 2.0.87", + "syn 2.0.96", "tempfile", ] [[package]] name = "prost-build" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" +checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" dependencies = [ - "bytes", "heck 0.5.0", "itertools 0.13.0", "log", @@ -17699,10 +17735,10 @@ dependencies = [ "once_cell", "petgraph", "prettyplease", - "prost 0.13.3", - "prost-types 0.13.3", + "prost 0.13.4", + "prost-types 0.13.4", "regex", - "syn 2.0.87", + "syn 2.0.96", "tempfile", ] @@ -17716,20 +17752,20 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -17743,11 +17779,11 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" dependencies = [ - "prost 0.13.3", + "prost 0.13.4", ] [[package]] @@ -17775,9 +17811,9 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "psm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -17804,19 +17840,19 @@ dependencies = [ [[package]] name = "publicsuffix" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" dependencies = [ - "idna 0.3.0", + "idna 1.0.3", "psl-types", ] [[package]] name = "pulley-interpreter" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b8d81cf799e20564931e9867ca32de545188c6ee4c2e0f6e41d32f0c7dc6fb" +checksum = "8324e531de91a3c25021a30fb7862d39cc516b61fbb801176acb5ff279ea887b" dependencies = [ "cranelift-bitset", "log", @@ -17825,9 +17861,9 @@ dependencies = [ [[package]] name = "quanta" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" dependencies = [ "crossbeam-utils", "libc", @@ -17855,66 +17891,70 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.1" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f22f29bdff3987b4d8632ef95fd6424ec7e4e0a57e2f4fc63e489e75357f6a03" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ "memchr", ] [[package]] name = "quinn" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash 2.0.0", - "rustls 0.23.19", - "socket2 0.5.7", - "thiserror 1.0.68", + "rustc-hash 2.1.0", + "rustls 0.23.21", + "socket2 0.5.8", + "thiserror 2.0.11", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom", "rand 0.8.5", "ring 0.17.8", - "rustc-hash 2.0.0", - "rustls 0.23.19", + "rustc-hash 2.1.0", + "rustls 0.23.21", + "rustls-pki-types", "slab", - "thiserror 1.0.68", + "thiserror 2.0.11", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ + "cfg_aliases", "libc", "once_cell", - "socket2 0.5.7", + "socket2 0.5.8", "tracing", "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -18136,8 +18176,8 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "clap 4.5.20", - "ic-agent 0.37.1", + "clap 4.5.26", + "ic-agent", "k256", "rate-limits-api", "regex", @@ -18157,6 +18197,7 @@ dependencies = [ "humantime", "ic-bn-lib", "indoc", + "ipnet", "regex", "serde", "serde_bytes", @@ -18171,8 +18212,9 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", + "candid_parser", "getrandom", - "hex", + "ic-canister-log 0.2.0", "ic-canisters-http-types", "ic-cdk 0.16.0", "ic-cdk-macros 0.9.0", @@ -18188,7 +18230,7 @@ dependencies = [ "serde_cbor", "serde_json", "strum", - "thiserror 2.0.3", + "thiserror 2.0.11", "uuid", ] @@ -18200,16 +18242,16 @@ checksum = "6c1bb13e2dcfa2232ac6887157aad8d9b3fe4ca57f7c8d4938ff5ea9be742300" dependencies = [ "clocksource", "parking_lot 0.12.3", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "raw-cpuid" -version = "11.2.0" +version = "11.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -18234,9 +18276,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem 3.0.4", "ring 0.17.8", @@ -18266,11 +18308,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] @@ -18281,31 +18323,32 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] name = "regalloc2" -version = "0.10.2" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12908dbeb234370af84d0579b9f68258a0f67e201412dd9a2814e6f45b2fc0f0" +checksum = "145c1c267e14f20fb0f88aa76a1c5ffec42d592c1d28b3cd9148ae35916158d3" dependencies = [ - "hashbrown 0.14.5", + "allocator-api2", + "bumpalo", + "hashbrown 0.15.2", "log", - "rustc-hash 2.0.0", - "slice-group-by", + "rustc-hash 2.1.0", "smallvec", ] [[package]] name = "regex" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -18320,9 +18363,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -18367,6 +18410,7 @@ dependencies = [ "dfn_core", "dfn_http_metrics", "futures", + "getrandom", "ic-base-types", "ic-canister-client-sender", "ic-cdk 0.16.0", @@ -18416,7 +18460,7 @@ dependencies = [ "leb128", "maplit", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", "rand_distr", "registry-canister-protobuf-generator", @@ -18432,7 +18476,7 @@ name = "registry-canister-protobuf-generator" version = "0.9.0" dependencies = [ "ic-utils-rustfmt", - "prost-build 0.13.3", + "prost-build 0.13.4", ] [[package]] @@ -18455,6 +18499,28 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" +[[package]] +name = "release-runscript" +version = "0.9.0" +dependencies = [ + "anyhow", + "candid", + "colored", + "futures", + "ic-agent", + "ic-base-types", + "ic-nervous-system-agent", + "ic-nervous-system-clients", + "ic-nervous-system-common-test-keys", + "ic-nns-common", + "ic-nns-constants", + "rgb", + "serde", + "serde_json", + "tempfile", + "tokio", +] + [[package]] name = "rend" version = "0.4.2" @@ -18479,7 +18545,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-rustls 0.24.2", "ipnet", "js-sys", @@ -18509,22 +18575,22 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.4.6", + "h2 0.4.7", "hickory-resolver", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", - "hyper-rustls 0.27.3", + "hyper 1.5.2", + "hyper-rustls 0.27.5", "hyper-util", "ipnet", "js-sys", @@ -18535,25 +18601,26 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.19", - "rustls-native-certs 0.8.0", + "rustls 0.23.21", + "rustls-native-certs 0.8.1", "rustls-pemfile 2.2.0", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper 1.0.2", "tokio", - "tokio-rustls 0.26.0", + "tokio-rustls 0.26.1", "tokio-socks", "tokio-util", + "tower 0.5.2", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.26.6", + "webpki-roots 0.26.7", "windows-registry", ] @@ -18728,7 +18795,7 @@ dependencies = [ "anyhow", "candid", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-crypto-ed25519", "ic-crypto-secp256k1", "ic-types", @@ -18750,7 +18817,7 @@ dependencies = [ "assert-json-diff", "canister-test", "dfn_protobuf", - "ic-agent 0.37.1", + "ic-agent", "ic-canister-client", "ic-ledger-canister-blocks-synchronizer-test-utils", "ic-ledger-core", @@ -18783,7 +18850,7 @@ dependencies = [ "canister-test", "dfn_protobuf", "hex", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-client", "ic-canister-client-sender", @@ -18802,9 +18869,9 @@ dependencies = [ "icp-ledger", "lazy_static", "on_wire", - "prost 0.13.3", + "prost 0.13.4", "rand 0.8.5", - "reqwest 0.12.9", + "reqwest 0.12.12", "rosetta-core", "serde", "serde_json", @@ -18815,9 +18882,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest 0.10.7", @@ -18859,7 +18926,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.87", + "syn 2.0.96", "unicode-ident", ] @@ -18952,9 +19019,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" [[package]] name = "rustc-hex" @@ -18982,15 +19049,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.6.0", - "errno 0.3.9", + "bitflags 2.8.0", + "errno 0.3.10", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -19021,9 +19088,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.19" +version = "0.23.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8" dependencies = [ "brotli 7.0.0", "brotli-decompressor", @@ -19057,8 +19124,8 @@ dependencies = [ "ring 0.17.8", "serde", "serde_json", - "thiserror 2.0.3", - "webpki-roots 0.26.6", + "thiserror 2.0.11", + "webpki-roots 0.26.7", "x509-parser", ] @@ -19072,20 +19139,19 @@ dependencies = [ "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 2.11.1", ] [[package]] name = "rustls-native-certs" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", - "security-framework", + "security-framework 3.2.0", ] [[package]] @@ -19108,9 +19174,12 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" +dependencies = [ + "web-time", +] [[package]] name = "rustls-platform-verifier" @@ -19118,16 +19187,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c7dc240fec5517e6c4eab3310438636cfe6391dfc345ba013109909a90d136" dependencies = [ - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "jni", "log", "once_cell", - "rustls 0.23.19", + "rustls 0.23.21", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki 0.102.8", - "security-framework", + "security-framework 2.11.1", "security-framework-sys", "webpki-root-certs", "windows-sys 0.52.0", @@ -19162,9 +19231,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "rusty-fork" @@ -19195,9 +19264,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.11.4" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22760a375f81a31817aeaf6f5081e9ccb7ffd7f2da1809a6e3fc82b6656f10d5" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" dependencies = [ "cfg-if 1.0.0", "derive_more 1.0.0", @@ -19207,21 +19276,21 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.4" +version = "2.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abc61ebe25a5c410c0e245028fc9934bf8fa4817199ef5a24a68092edfd34614" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.96", ] [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -19233,7 +19302,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", - "indexmap 2.6.0", + "indexmap 2.7.0", "schemars_derive", "serde", "serde_json", @@ -19248,7 +19317,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -19307,7 +19376,7 @@ dependencies = [ "ic-system-test-driver", "ic_consensus_system_test_utils", "nns_dapp", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde_json", "slog", ] @@ -19408,19 +19477,32 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", - "core-foundation", + "bitflags 2.8.0", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "num-bigint 0.4.6", "security-framework-sys", ] +[[package]] +name = "security-framework" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" +dependencies = [ + "bitflags 2.8.0", + "core-foundation 0.10.0", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -19432,7 +19514,7 @@ version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "cssparser", "derive_more 0.99.18", "fxhash", @@ -19447,18 +19529,18 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -19516,13 +19598,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -19533,14 +19615,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", "memchr", @@ -19568,7 +19650,7 @@ dependencies = [ "futures", "percent-encoding", "serde", - "thiserror 1.0.68", + "thiserror 1.0.69", ] [[package]] @@ -19589,7 +19671,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -19612,7 +19694,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -19674,7 +19756,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -19683,7 +19765,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "ryu", "serde", @@ -19704,7 +19786,7 @@ name = "setupos-disable-checks" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "indoc", "linux_kernel_command_line", "partition_tools", @@ -19718,7 +19800,7 @@ name = "setupos-inject-configuration" version = "0.1.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config", "partition_tools", "serde", @@ -19734,7 +19816,7 @@ name = "setupos_tool" version = "1.0.0" dependencies = [ "anyhow", - "clap 4.5.20", + "clap 4.5.26", "config", "config_types", "deterministic_ips", @@ -19856,13 +19938,13 @@ checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" [[package]] name = "simple_asn1" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" dependencies = [ "num-bigint 0.4.6", "num-traits", - "thiserror 1.0.68", + "thiserror 2.0.11", "time", ] @@ -19892,6 +19974,12 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" @@ -19901,12 +19989,6 @@ dependencies = [ "autocfg 1.4.0", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "slog" version = "2.7.0" @@ -20027,7 +20109,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20036,7 +20118,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-canister-client", "ic-canister-client-sender", @@ -20055,7 +20137,7 @@ dependencies = [ "ic-system-test-driver", "ic-types", "ic-universal-canister", - "ic-utils 0.37.0", + "ic-utils 0.39.2", "ic_consensus_system_test_utils", "icp-ledger", "icrc-ledger-agent", @@ -20095,9 +20177,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -20113,7 +20195,7 @@ dependencies = [ "ic-registry-subnet-type", "ic-system-test-driver", "ic-types", - "reqwest 0.12.9", + "reqwest 0.12.12", "slog", ] @@ -20228,6 +20310,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stop-token" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b" +dependencies = [ + "async-channel 1.9.0", + "cfg-if 1.0.0", + "futures-core", + "pin-project-lite", +] + [[package]] name = "str_stack" version = "0.1.0" @@ -20281,7 +20375,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive 0.2.0", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20293,7 +20387,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive 0.3.0", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20304,7 +20398,7 @@ checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20315,7 +20409,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20337,7 +20431,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20365,9 +20459,9 @@ checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "symbolic-common" -version = "12.12.0" +version = "12.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "366f1b4c6baf6cfefc234bbd4899535fca0b06c74443039a73f6dfb2fad88d77" +checksum = "8150eae9699e3c73a3e6431dc1f80d87748797c0457336af23e94c1de619ed24" dependencies = [ "debugid", "memmap2", @@ -20377,9 +20471,9 @@ dependencies = [ [[package]] name = "symbolic-demangle" -version = "12.12.0" +version = "12.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba05ba5b9962ea5617baf556293720a8b2d0a282aa14ee4bf10e22efc7da8c8" +checksum = "95f4a9846f7a8933b6d198c022faa2c9bd89e1a970bed9d9a98d25708bf8de17" dependencies = [ "rustc-demangle", "symbolic-common", @@ -20398,27 +20492,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "sync-with-released-nervous-system-wasms" version = "0.9.0" @@ -20427,7 +20509,7 @@ dependencies = [ "candid", "colored", "futures", - "ic-agent 0.37.1", + "ic-agent", "ic-base-types", "ic-nervous-system-agent", "ic-nervous-system-clients", @@ -20449,9 +20531,9 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -20464,7 +20546,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20474,7 +20556,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -20495,20 +20577,20 @@ dependencies = [ "anyhow", "async-trait", "axum", - "clap 4.5.20", + "clap 4.5.26", "http 1.2.0", "itertools 0.12.1", - "reqwest 0.12.9", - "thiserror 2.0.3", + "reqwest 0.12.12", + "thiserror 2.0.11", "tokio", "url", ] [[package]] name = "systemstat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a24aec24a9312c83999a28e3ef9db7e2afd5c64bf47725b758cdc1cafd5b0bd2" +checksum = "668a4db78b439df482c238f559e4ea869017f9e62ef0a059c8bfcd841a4df544" dependencies = [ "bytesize", "lazy_static", @@ -20552,9 +20634,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" +checksum = "c65998313f8e17d0d553d28f91a0df93e4dbbbf770279c7bc21ca0f09ea1a1f6" dependencies = [ "filetime", "libc", @@ -20583,7 +20665,7 @@ dependencies = [ "serde", "static_assertions", "tarpc-plugins", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tokio-serde", "tokio-util", @@ -20604,12 +20686,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.13.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if 1.0.0", "fastrand", + "getrandom", "once_cell", "rustix", "windows-sys 0.59.0", @@ -20667,9 +20750,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "test-strategy" @@ -20680,7 +20763,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta 0.2.0", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20692,7 +20775,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta 0.3.0", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20701,7 +20784,7 @@ version = "0.9.0" dependencies = [ "anyhow", "candid", - "ic-agent 0.37.1", + "ic-agent", "ic-prep", "ic-regedit", "ic-registry-local-store", @@ -20732,7 +20815,7 @@ dependencies = [ "ic_consensus_system_test_utils", "nns_dapp", "os_qualification_utils", - "reqwest 0.12.9", + "reqwest 0.12.12", "serde", "serde_json", "slog", @@ -20758,42 +20841,42 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl 1.0.68", + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.11", ] [[package]] name = "thiserror-impl" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -20854,9 +20937,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -20877,9 +20960,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -20916,9 +20999,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -20933,6 +21016,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" name = "tla_instrumentation" version = "0.9.0" dependencies = [ + "async-trait", "candid", "local_key", "sha2 0.10.8", @@ -20968,23 +21052,23 @@ checksum = "8d9ef545650e79f30233c0003bcc2504d7efac6dad25fca40744de773fe2049c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "tokio" -version = "1.42.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.2", + "mio 1.0.3", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2 0.5.8", "tokio-macros", "windows-sys 0.52.0", ] @@ -21001,13 +21085,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -21045,12 +21129,11 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ - "rustls 0.23.19", - "rustls-pki-types", + "rustls 0.23.21", "tokio", ] @@ -21078,15 +21161,15 @@ checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -21147,7 +21230,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow", ] @@ -21163,17 +21246,17 @@ dependencies = [ "axum", "base64 0.22.1", "bytes", - "h2 0.4.6", + "h2 0.4.7", "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", - "prost 0.13.3", - "socket2 0.5.7", + "prost 0.13.4", + "socket2 0.5.8", "tokio", "tokio-stream", "tower 0.4.13", @@ -21190,10 +21273,10 @@ checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" dependencies = [ "prettyplease", "proc-macro2", - "prost-build 0.13.3", - "prost-types 0.13.3", + "prost-build 0.13.4", + "prost-types 0.13.4", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -21218,17 +21301,17 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "hdrhistogram", - "indexmap 2.6.0", + "indexmap 2.7.0", "pin-project-lite", "slab", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.2", "tokio", "tokio-util", "tower-layer", @@ -21243,7 +21326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "base64 0.21.7", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "http 1.2.0", "http-body 1.0.1", @@ -21262,7 +21345,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "async-compression", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "futures-core", "http 1.2.0", @@ -21271,7 +21354,7 @@ dependencies = [ "pin-project-lite", "tokio", "tokio-util", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", "tracing", @@ -21327,8 +21410,8 @@ dependencies = [ "governor", "http 1.2.0", "pin-project", - "thiserror 1.0.68", - "tower 0.5.1", + "thiserror 1.0.69", + "tower 0.5.2", "tracing", ] @@ -21351,7 +21434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", - "thiserror 1.0.68", + "thiserror 1.0.69", "time", "tracing-subscriber", ] @@ -21364,7 +21447,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -21420,8 +21503,8 @@ checksum = "97a971f6058498b5c0f1affa23e7ea202057a7301dbff68e968b2d578bcbd053" dependencies = [ "js-sys", "once_cell", - "opentelemetry 0.27.0", - "opentelemetry_sdk 0.27.0", + "opentelemetry 0.27.1", + "opentelemetry_sdk 0.27.1", "smallvec", "tracing", "tracing-core", @@ -21504,12 +21587,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "triomphe" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" - [[package]] name = "trust-dns-proto" version = "0.22.0" @@ -21528,7 +21605,7 @@ dependencies = [ "lazy_static", "rand 0.8.5", "smallvec", - "thiserror 1.0.68", + "thiserror 1.0.69", "tinyvec", "tokio", "tracing", @@ -21549,7 +21626,7 @@ dependencies = [ "parking_lot 0.12.3", "resolv-conf", "smallvec", - "thiserror 1.0.68", + "thiserror 1.0.69", "tokio", "tracing", "trust-dns-proto", @@ -21575,7 +21652,7 @@ dependencies = [ "log", "rand 0.8.5", "sha1", - "thiserror 1.0.68", + "thiserror 1.0.69", "url", "utf-8", ] @@ -21632,11 +21709,10 @@ dependencies = [ [[package]] name = "ulid" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" +checksum = "f294bff79170ed1c5633812aff1e565c35d993a36e757f9bc0accf5eec4e6045" dependencies = [ - "getrandom", "rand 0.8.5", "web-time", ] @@ -21649,21 +21725,21 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicase" -version = "2.8.0" +version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" +checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-normalization" @@ -21686,6 +21762,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -21742,9 +21824,9 @@ dependencies = [ [[package]] name = "url" -version = "2.5.3" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna 1.0.3", @@ -21797,9 +21879,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4" dependencies = [ "getrandom", "serde", @@ -21807,9 +21889,9 @@ dependencies = [ [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" @@ -21834,7 +21916,7 @@ dependencies = [ "chrono", "lalrpop 0.20.2", "once_cell", - "ordered-float 4.5.0", + "ordered-float 4.6.0", "regex", "serde", "serde_json", @@ -21856,7 +21938,7 @@ dependencies = [ name = "vsock_guest" version = "1.0.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.26", "vsock_lib", ] @@ -21873,7 +21955,7 @@ version = "1.0.0" dependencies = [ "anyhow", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "rusb", "serde", "serde_json", @@ -21957,11 +22039,11 @@ dependencies = [ "futures-util", "headers 0.3.9", "http 0.2.12", - "hyper 0.14.31", + "hyper 0.14.32", "log", "mime", "mime_guess", - "multer", + "multer 2.1.0", "percent-encoding", "pin-project", "rustls-pemfile 2.2.0", @@ -21985,47 +22067,48 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if 1.0.0", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if 1.0.0", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -22033,22 +22116,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-encoder" @@ -22071,19 +22157,29 @@ dependencies = [ [[package]] name = "wasm-encoder" -version = "0.219.1" +version = "0.221.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17a3bd88f2155da63a1f2fcb8a56377a24f0b6dfed12733bb5f544e86f690c5" +dependencies = [ + "leb128", + "wasmparser 0.221.2", +] + +[[package]] +name = "wasm-encoder" +version = "0.223.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" +checksum = "7e636076193fa68103e937ac951b5f2f587624097017d764b8984d9c0f149464" dependencies = [ "leb128", - "wasmparser 0.219.1", + "wasmparser 0.223.0", ] [[package]] name = "wasm-streams" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -22099,9 +22195,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d28bc49ba1e5c5b61ffa7a2eace10820443c4b7d1c0b144109261d14570fdf8" dependencies = [ "ahash 0.8.11", - "bitflags 2.6.0", + "bitflags 2.8.0", "hashbrown 0.14.5", - "indexmap 2.6.0", + "indexmap 2.7.0", "semver", "serde", ] @@ -22113,27 +22209,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca917a21307d3adf2b9857b94dd05ebf8496bdcff4437a9b9fb3899d3e6c74e7" dependencies = [ "ahash 0.8.11", - "bitflags 2.6.0", + "bitflags 2.8.0", "hashbrown 0.14.5", - "indexmap 2.6.0", + "indexmap 2.7.0", "semver", "serde", ] [[package]] name = "wasmparser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" +checksum = "9845c470a2e10b61dd42c385839cdd6496363ed63b5c9e420b5488b77bd22083" dependencies = [ - "ahash 0.8.11", - "bitflags 2.6.0", - "hashbrown 0.14.5", - "indexmap 2.6.0", + "bitflags 2.8.0", + "hashbrown 0.15.2", + "indexmap 2.7.0", "semver", "serde", ] +[[package]] +name = "wasmparser" +version = "0.223.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a99faceb1a5a84dd6084ec4bfa4b2ab153b5793b43fd8f58b89232634afc35" +dependencies = [ + "bitflags 2.8.0", + "indexmap 2.7.0", + "semver", +] + [[package]] name = "wasmprinter" version = "0.217.0" @@ -22147,28 +22253,28 @@ dependencies = [ [[package]] name = "wasmprinter" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228cdc1f30c27816da225d239ce4231f28941147d34713dee8f1fff7cb330e54" +checksum = "a80742ff1b9e6d8c231ac7c7247782c6fc5bce503af760bca071811e5fc9ee56" dependencies = [ "anyhow", "termcolor", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] name = "wasmtime" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b79302e3e084713249cc5622e8608e7410afdeeea8c8026d04f491d1fab0b4b" +checksum = "edd30973c65eceb0f37dfcc430d83abd5eb24015fdfcab6912f52949287e04f0" dependencies = [ "anyhow", - "bitflags 2.6.0", + "bitflags 2.8.0", "bumpalo", "cc", "cfg-if 1.0.0", "hashbrown 0.14.5", - "indexmap 2.6.0", + "indexmap 2.7.0", "libc", "libm", "log", @@ -22187,36 +22293,38 @@ dependencies = [ "smallvec", "sptr", "target-lexicon", - "wasmparser 0.219.1", + "wasmparser 0.221.2", "wasmtime-asm-macros", "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", + "wasmtime-fiber", "wasmtime-jit-icache-coherence", "wasmtime-slab", "wasmtime-versioned-export-macros", + "wasmtime-winch", "windows-sys 0.59.0", ] [[package]] name = "wasmtime-asm-macros" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe53a24e7016a5222875d8ca3ad6024b464465985693c42098cd0bb710002c28" +checksum = "c6c21dd30d1f3f93ee390ac1a7ec304ecdbfdab6390e1add41a1f52727b0992b" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "wasmtime-component-macro" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e118acbd2bc09b32ad8606bc7cef793bf5019c1b107772e64dc6c76b5055d40b" +checksum = "9f948a6ef3119d52c9f12936970de28ddf3f9bea04bc65571f4a92d2e5ab38f4" dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "wasmtime-component-util", "wasmtime-wit-bindgen", "wit-parser", @@ -22224,15 +22332,15 @@ dependencies = [ [[package]] name = "wasmtime-component-util" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6db4f3ee18c699629eabb9c64e77efe5a93a5137f098db7cab295037ba41c2" +checksum = "b9275aa01ceaaa2fa6c0ecaa5267518d80b9d6e9ae7c7ea42f4c6e073e6a69ef" [[package]] name = "wasmtime-cranelift" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b87e6c78f562b50aff1afd87ff32a57e241424c846c1c8f3c5fd352d2d62906" +checksum = "0701a44a323267aae4499672dae422b266cee3135a23b640972ec8c0e10a44a2" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -22247,23 +22355,23 @@ dependencies = [ "object", "smallvec", "target-lexicon", - "thiserror 1.0.68", - "wasmparser 0.219.1", + "thiserror 1.0.69", + "wasmparser 0.221.2", "wasmtime-environ", "wasmtime-versioned-export-macros", ] [[package]] name = "wasmtime-environ" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25bfeaa16432d59a0706e2463d315ef4c9ebcfaf5605670b99d46373bdf9f27" +checksum = "264c968c1b81d340355ece2be0bc31a10f567ccb6ce08512c3b7d10e26f3cbe5" dependencies = [ "anyhow", "cranelift-bitset", "cranelift-entity", "gimli 0.31.1", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "object", "postcard", @@ -22271,16 +22379,31 @@ dependencies = [ "serde_derive", "smallvec", "target-lexicon", - "wasm-encoder 0.219.1", - "wasmparser 0.219.1", - "wasmprinter 0.219.1", + "wasm-encoder 0.221.2", + "wasmparser 0.221.2", + "wasmprinter 0.221.2", +] + +[[package]] +name = "wasmtime-fiber" +version = "28.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78505221fd5bd7b07b4e1fa2804edea49dc231e626ad6861adc8f531812973e6" +dependencies = [ + "anyhow", + "cc", + "cfg-if 1.0.0", + "rustix", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys 0.59.0", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b218a92866f74f35162f5d03a4e0f62cd0e1cc624285b1014275e5d4575fad" +checksum = "9bedb677ca1b549d98f95e9e1f9251b460090d99a2c196a0614228c064bf2e59" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -22290,30 +22413,47 @@ dependencies = [ [[package]] name = "wasmtime-slab" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5f8acf677ee6b3b8ba400dd9753ea4769e56a95c4b30b045ac6d2d54b2f8ea" +checksum = "564905638c132c275d365c1fa074f0b499790568f43148d29de84ccecfb5cb31" [[package]] name = "wasmtime-versioned-export-macros" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df09be00c38f49172ca9936998938476e3f2df782673a39ae2ef9fb0838341b6" +checksum = "1e91092e6cf77390eeccee273846a9327f3e8f91c3c6280f60f37809f0e62d29" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", +] + +[[package]] +name = "wasmtime-winch" +version = "28.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b111d909dc604c741bd8ac2f4af373eaa5c68c34b5717271bcb687688212cef8" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "object", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", + "winch-codegen", ] [[package]] name = "wasmtime-wit-bindgen" -version = "27.0.0" +version = "28.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3963c9c29df91564d8bd181eb00d0dbaeafa1b2a01e15952bb7391166b704e" +checksum = "5f38f7a5eb2f06f53fe943e7fb8bf4197f7cf279f1bc52c0ce56e9d3ffd750a4" dependencies = [ "anyhow", "heck 0.5.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "wit-parser", ] @@ -22326,37 +22466,37 @@ dependencies = [ "bumpalo", "leb128", "memchr", - "unicode-width", + "unicode-width 0.1.14", "wasm-encoder 0.212.0", ] [[package]] name = "wast" -version = "219.0.1" +version = "223.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f79a9d9df79986a68689a6b40bcc8d5d40d807487b235bebc2ac69a242b54a1" +checksum = "d59b2ba8a2ff9f06194b7be9524f92e45e70149f4dacc0d0c7ad92b59ac875e4" dependencies = [ "bumpalo", "leb128", "memchr", - "unicode-width", - "wasm-encoder 0.219.1", + "unicode-width 0.2.0", + "wasm-encoder 0.223.0", ] [[package]] name = "wat" -version = "1.219.1" +version = "1.223.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bc3cf014fb336883a411cd662f987abf6a1d2a27f2f0008616a0070bbf6bd0d" +checksum = "662786915c427e4918ff01eabb3c4756d4d947cd8f635761526b4cc9da2eaaad" dependencies = [ - "wast 219.0.1", + "wast 223.0.0", ] [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -22374,9 +22514,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c6dfa3ac045bc517de14c7b1384298de1dbd229d38e08e169d9ae8c170937c" +checksum = "9cd5da49bdf1f30054cfe0b8ce2958b8fbeb67c4d82c8967a598af481bef255c" dependencies = [ "rustls-pki-types", ] @@ -22389,9 +22529,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.6" +version = "0.26.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" dependencies = [ "rustls-pki-types", ] @@ -22475,6 +22615,33 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "winch-codegen" +version = "28.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6232f40a795be2ce10fc761ed3b403825126a60d12491ac556ea104a932fd18a" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.31.1", + "regalloc2", + "smallvec", + "target-lexicon", + "wasmparser 0.221.2", + "wasmtime-cranelift", + "wasmtime-environ", +] + +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -22484,6 +22651,41 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.96", +] + [[package]] name = "windows-registry" version = "0.2.0" @@ -22664,9 +22866,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.20" +version = "0.6.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a" dependencies = [ "memchr", ] @@ -22689,20 +22891,20 @@ checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] name = "wit-parser" -version = "0.219.1" +version = "0.221.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a86f669283257e8e424b9a4fc3518e3ade0b95deb9fbc0f93a1876be3eda598" +checksum = "fbe1538eea6ea5ddbe5defd0dc82539ad7ba751e1631e9185d24a931f0a5adc8" dependencies = [ "anyhow", "id-arena", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "semver", "serde", "serde_derive", "serde_json", "unicode-xid", - "wasmparser 0.219.1", + "wasmparser 0.221.2", ] [[package]] @@ -22776,15 +22978,15 @@ dependencies = [ "nom", "oid-registry", "rusticata-macros", - "thiserror 1.0.68", + "thiserror 1.0.69", "time", ] [[package]] name = "xattr" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys", @@ -22863,9 +23065,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" dependencies = [ "serde", "stable_deref_trait", @@ -22875,13 +23077,13 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "synstructure", ] @@ -22903,27 +23105,27 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "zerofrom" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "synstructure", ] @@ -22944,7 +23146,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -22966,7 +23168,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 676d8a12099..2a2cc45c379 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ members = [ "packages/icrc-ledger-client-cdk", "packages/icrc-ledger-types", "packages/ic-ethereum-types", + "packages/ic-metrics-assert", "packages/ic-sha3", "packages/ic-ledger-hash-of", "packages/ic-signature-verification", @@ -172,6 +173,7 @@ members = [ "rs/monitoring/tracing/jaeger_exporter", "rs/monitoring/tracing/logging_layer", "rs/nervous_system/agent", + "rs/nervous_system/candid_utils", "rs/nervous_system/clients", "rs/nervous_system/collections/union_multi_map", "rs/nervous_system/common", @@ -197,6 +199,7 @@ members = [ "rs/nervous_system/runtime", "rs/nervous_system/string", "rs/nervous_system/temporary", + "rs/nervous_system/tools/release-runscript", "rs/nervous_system/tools/sync-with-released-nervous-system-wasms", "rs/nns/constants", "rs/nns/common", @@ -247,6 +250,7 @@ members = [ "rs/registry/canister", "rs/registry/canister/api", "rs/registry/canister/protobuf_generator", + "rs/registry/canister_data_provider", "rs/registry/client", "rs/registry/canister-client", "rs/registry/fake", @@ -287,9 +291,6 @@ members = [ "rs/rosetta-api/icp/ledger_canister_blocks_synchronizer", "rs/rosetta-api/icp/ledger_canister_blocks_synchronizer/test_utils", "rs/ledger_suite/icrc1", - "rs/ledger_suite/icrc1/benchmark/generator", - "rs/ledger_suite/icrc1/benchmark/worker", - "rs/ledger_suite/icrc1/index", "rs/ledger_suite/icrc1/index-ng", "rs/ledger_suite/icrc1/ledger", "rs/ledger_suite/tests/sm-tests", @@ -377,6 +378,8 @@ members = [ "rs/tests/consensus/tecdsa", "rs/tests/consensus/upgrade", "rs/tests/consensus/utils", + "rs/tests/consensus/vetkd", + "rs/tests/cross_chain", "rs/tests/crypto", "rs/tests/driver", "rs/tests/execution", @@ -559,26 +562,23 @@ hyper-rustls = { version = "0.27.3", default-features = false, features = [ ] } hyper-socks2 = { version = "0.9.1", default-features = false } hyper-util = { version = "0.1.10", features = ["full"] } -ic-agent = { version = "0.37.1", features = [ - "experimental_sync_call", - "hyper", - "reqwest", - "pem", -] } +ic-agent = { version = "0.39.2", features = ["pem", "ring"] } ic-bn-lib = { git = "https://github.com/dfinity/ic-bn-lib", rev = "d74a6527fbaf8a2c1a7076983cc84f5c5a727923" } ic-btc-interface = "0.2.2" -ic-cbor = "2.6.0" +ic-canister-sig-creation = { git = "https://github.com/dfinity/ic-canister-sig-creation", rev = "7f9e931954637526295269155881207f6c832d6d" } +ic-cbor = "3" ic-cdk = "0.16.0" ic-cdk-macros = "0.9.0" ic-cdk-timers = "0.7.0" -ic-certificate-verification = "2.6.0" -ic-certification = "2.6.0" -ic-http-certification = "2.6.0" -ic-response-verification = "2.6.0" +ic-certificate-verification = "3" +ic-certification = "3" +ic-http-certification = "3" +ic-http-gateway = "0.1" +ic-response-verification = "3" ic-sha3 = "1.0.0" ic-stable-structures = "0.6.5" -ic-transport-types = { version = "0.37.1" } -ic-utils = { version = "0.37.0", features = ["raw"] } +ic-transport-types = { version = "0.39.2" } +ic-utils = { version = "0.39", features = ["raw"] } ic_bls12_381 = { version = "0.10.0", default-features = false, features = [ "groups", "pairings", @@ -589,6 +589,7 @@ ic_bls12_381 = { version = "0.10.0", default-features = false, features = [ ic_principal = { version = "0.1.1", default-features = false } idna = "1.0.2" inferno = "0.12.0" +ipnet = { version = "2.10.1", features = ["serde"] } itertools = "0.12.0" k256 = { version = "0.13.4", default-features = false, features = [ "arithmetic", @@ -613,7 +614,7 @@ minicbor-derive = "0.13.0" mockall = "0.13.0" mockito = "1.2.0" nftables = "0.4" -nix = "0.24.3" +nix = { version = "0.24.3", features = ["ptrace"] } num_cpus = "1.16.0" num-bigint = "0.4.6" num-traits = { version = "0.2.12", features = ["libm"] } @@ -714,6 +715,7 @@ tokio-metrics = "0.4.0" tokio-rustls = { version = "0.26.0", default-features = false, features = [ "ring", ] } +tokio-stream = "0.1.17" tokio-test = "0.4.4" tokio-util = { version = "0.7.13", features = ["full"] } tonic = "0.12.3" diff --git a/MODULE.bazel b/MODULE.bazel index d0384918b72..d0e9fbe3a2d 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -174,6 +174,16 @@ oci.pull( ) use_repo(oci, "bitcoind", "bitcoind_linux_amd64") +# foundry container used in test +oci.pull( + name = "foundry", + image = "ghcr.io/foundry-rs/foundry@sha256:d2d6a8064db8659ab4d835bd36ee4ba19a781cbe62a9729a261d7cedf3774cdd", + platforms = [ + "linux/amd64", + ], +) +use_repo(oci, "foundry", "foundry_linux_amd64") + # nginx-proxy container used in test oci.pull( name = "nginx-proxy", @@ -508,6 +518,15 @@ http_file( url = "https://github.com/dfinity/sdk/raw/0.14.2/src/distributed/assetstorage.wasm.gz", ) +# Asset canister that certifies long assets chunk-wise + +http_file( + name = "long_asset_canister", + downloaded_file_path = "http_gateway_canister_custom_assets.wasm.gz", + sha256 = "eedcbf986c67fd4ebe3042094604a9a5703e825e56433e2509a6a4d0384ccf95", + url = "https://github.com/dfinity/http-gateway/raw/refs/heads/main/examples/http-gateway/canister/http_gateway_canister_custom_assets.wasm.gz", +) + # Old version of wallet canister http_file( @@ -844,8 +863,8 @@ http_file( http_file( name = "management_canister_did", downloaded_file_path = "ic.did", - sha256 = "31d4654d60b364420a2e52f546f06b2255dc78ac8c2d768271f004b8946e92cb", - url = "https://raw.githubusercontent.com/dfinity/portal/407ec5b92d06618c4df9f52e98514c5f4f44313e/docs/references/_attachments/ic.did", + sha256 = "0e92d8b9c2cf3d3fca166b76b2d3b8a2464d9b2b61117d8b2f63222b388d8dd1", + url = "https://raw.githubusercontent.com/dfinity/portal/78c93aa37ef17dc67484079d1a4bf58a10a63106/docs/references/_attachments/ic.did", ) # Mozilla CA certificate store in PEM format diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel index dd128089dd9..68e854535ad 100644 --- a/WORKSPACE.bazel +++ b/WORKSPACE.bazel @@ -26,9 +26,15 @@ canisters( "sns-wasm": "sns-wasm-canister.wasm.gz", "ck_btc_archive": "ic-icrc1-archive.wasm.gz", "ck_btc_ledger": "ic-icrc1-ledger.wasm.gz", + "ck_btc_ledger_v1": "ic-icrc1-ledger.wasm.gz", + "ck_btc_ledger_v2": "ic-icrc1-ledger.wasm.gz", + "ck_btc_ledger_v2_noledgerversion": "ic-icrc1-ledger.wasm.gz", "ck_btc_index": "ic-icrc1-index-ng.wasm.gz", "ck_eth_archive": "ic-icrc1-archive-u256.wasm.gz", "ck_eth_ledger": "ic-icrc1-ledger-u256.wasm.gz", + "ck_eth_ledger_v1": "ic-icrc1-ledger-u256.wasm.gz", + "ck_eth_ledger_v2": "ic-icrc1-ledger-u256.wasm.gz", + "ck_eth_ledger_v2_noledgerversion": "ic-icrc1-ledger-u256.wasm.gz", "ck_eth_index": "ic-icrc1-index-ng-u256.wasm.gz", "sns_root": "sns-root-canister.wasm.gz", "sns_governance": "sns-governance-canister.wasm.gz", @@ -52,9 +58,15 @@ canisters( "sns-wasm": "mainnet_nns_sns-wasm-canister", "ck_btc_archive": "mainnet_ckbtc_ic-icrc1-archive", "ck_btc_ledger": "mainnet_ckbtc_ic-icrc1-ledger", + "ck_btc_ledger_v1": "mainnet_ckbtc_ic-icrc1-ledger-v1", + "ck_btc_ledger_v2": "mainnet_ckbtc_ic-icrc1-ledger-v2", + "ck_btc_ledger_v2_noledgerversion": "mainnet_ckbtc_ic-icrc1-ledger-v2-noledgerversion", "ck_btc_index": "mainnet_ckbtc-index-ng", "ck_eth_archive": "mainnet_cketh_ic-icrc1-archive-u256", "ck_eth_ledger": "mainnet_cketh_ic-icrc1-ledger-u256", + "ck_eth_ledger_v1": "mainnet_cketh_ic-icrc1-ledger-u256-v1", + "ck_eth_ledger_v2": "mainnet_cketh_ic-icrc1-ledger-u256-v2", + "ck_eth_ledger_v2_noledgerversion": "mainnet_cketh_ic-icrc1-ledger-u256-v2-noledgerversion", "ck_eth_index": "mainnet_cketh-index-ng", "sns_root": "mainnet_sns-root-canister", "sns_governance": "mainnet_sns-governance-canister", @@ -88,11 +100,8 @@ sol_register_toolchains( http_archive( name = "rules_rust", - # Back-ported fix: https://github.com/bazelbuild/rules_rust/pull/2981 - patch_args = ["-p1"], - patches = ["//bazel:rules_rust.patch"], - sha256 = "85e2013727ab26fb22abdffe4b2ac0c27a2d5b6296167ba63d8f6e13140f51f9", - urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.53.0/rules_rust-v0.53.0.tar.gz"], + integrity = "sha256-8TBqrAsli3kN8BrZq8arsN8LZUFsdLTvJ/Sqsph4CmQ=", + urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.56.0/rules_rust-0.56.0.tar.gz"], ) load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains") @@ -107,12 +116,12 @@ rust_register_toolchains( # The nightly version is required to compile fuzz tests from Bazel. # The version below is chosen so that it is in sync with the non-nightly version. versions = [ - "1.82.0", + "1.84.0", # Use the nightly version from the day before the branch. # - # NB! Due to a regression in the compiler https://github.com/rust-lang/rust/issues/128895, that's # only back-ported to stable, we use a more recent version. - "nightly/2024-09-23", + "nightly/2024-11-21", ], ) diff --git a/bazel/canisters.bzl b/bazel/canisters.bzl index 8985effd90d..21d899fbb3e 100644 --- a/bazel/canisters.bzl +++ b/bazel/canisters.bzl @@ -25,6 +25,13 @@ def _wasm_rust_transition_impl(_settings, attr): "-C", "lto", "-C", + # If combined with -C lto, -C embed-bitcode=no will cause rustc to abort at start-up, + # because the combination is invalid. + # See: https://doc.rust-lang.org/rustc/codegen-options/index.html#embed-bitcode + # + # embed-bitcode is disabled by default by rules_rust. + "embed-bitcode=yes", + "-C", "target-feature=+bulk-memory", ], } @@ -128,12 +135,14 @@ def rust_canister(name, service_file, visibility = ["//visibility:public"], test native.alias( name = name, actual = name + ".wasm", + visibility = visibility, ) # DID service related targets native.alias( name = name + ".didfile", actual = service_file, + visibility = visibility, ) did_git_test( name = name + "_did_git_test", diff --git a/bazel/cc_rs.patch b/bazel/cc_rs.patch deleted file mode 100644 index 94e65f91142..00000000000 --- a/bazel/cc_rs.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/src/lib.rs b/src/lib.rs -index 2fe30b9..88cd566 100644 ---- a/src/lib.rs -+++ b/src/lib.rs -@@ -1121,6 +1121,13 @@ impl Build { - .ok_or_else(|| Error::new(ErrorKind::InvalidArgument, "parent() failure"))? - .to_string_lossy(); - let mut hasher = hash_map::DefaultHasher::new(); -+ let out_dir = self.get_out_dir().expect("Could not get out dir"); -+ -+ let prefix = out_dir.parent().expect("Could not get parent"); -+ let prefix: &str = &prefix.to_string_lossy(); -+ -+ let err = format!("could not strip prefix {prefix} from {dirname}"); -+ let dirname = dirname.strip_prefix(prefix).expect(&err); - hasher.write(dirname.to_string().as_bytes()); - dst.join(format!("{:016x}-{}", hasher.finish(), basename)) - .with_extension("o") diff --git a/bazel/external_crates.bzl b/bazel/external_crates.bzl index 41bfff7825b..f25afadc154 100644 --- a/bazel/external_crates.bzl +++ b/bazel/external_crates.bzl @@ -27,12 +27,6 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable "canbench": [crate.annotation( gen_binaries = True, )], - "cc": [crate.annotation( - # Patch for determinism issues - # https://github.com/rust-lang/cc-rs/issues/1271 - patch_args = ["-p1"], - patches = ["@@//bazel:cc_rs.patch"], - )], "libssh2-sys": [crate.annotation( # Patch for determinism issues patch_args = ["-p1"], @@ -349,7 +343,7 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^0.1.2", ), "cc": crate.spec( - version = "^1.0", + version = "=1.1.37", ), "cddl": crate.spec( version = "^0.9.4", @@ -569,13 +563,8 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^0.18.11", ), "ic-agent": crate.spec( - version = "^0.37.1", - features = [ - "experimental_sync_call", - "hyper", - "reqwest", - "pem", - ], + version = "^0.39.2", + features = ["pem", "ring"], ), "ic-bn-lib": crate.spec( git = "https://github.com/dfinity/ic-bn-lib", @@ -588,10 +577,11 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^0.2.0", ), "ic-canister-sig-creation": crate.spec( - version = "^1.0.1", + git = "https://github.com/dfinity/ic-canister-sig-creation", + rev = "7f9e931954637526295269155881207f6c832d6d", ), "ic-cbor": crate.spec( - version = "2.6.0", + version = "3.0.2", ), "ic-cdk": crate.spec( version = "^0.16.0", @@ -606,17 +596,16 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^0.3.1", ), "ic-certification": crate.spec( - version = "2.6.0", + version = "3.0.2", ), "ic-certificate-verification": crate.spec( - version = "2.6.0", + version = "3.0.2", ), "ic-http-certification": crate.spec( - version = "2.6.0", + version = "3.0.2", ), "ic-http-gateway": crate.spec( - git = "https://github.com/dfinity/http-gateway", - tag = "0.1.0-b0", + version = "0.1.0", ), "ic-metrics-encoder": crate.spec( version = "^1.1.1", @@ -626,7 +615,7 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable default_features = False, ), "ic-response-verification": crate.spec( - version = "2.6.0", + version = "3.0.2", ), "ic-sha3": crate.spec( version = "^1.0.0", @@ -646,10 +635,10 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^3.0.0", ), "ic-transport-types": crate.spec( - version = "^0.37.1", + version = "^0.39.2", ), "ic-utils": crate.spec( - version = "^0.37.0", + version = "^0.39.0", features = ["raw"], ), "ic-verify-bls-signature": crate.spec( @@ -695,7 +684,8 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable features = ["serde"], ), "ipnet": crate.spec( - version = "^2.5.0", + version = "^2.10.1", + features = ["serde"], ), "isocountry": crate.spec( version = "^0.3.2", @@ -829,6 +819,9 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable ), "nix": crate.spec( version = "^0.24.3", + features = [ + "ptrace", + ], ), "num-bigint": crate.spec( version = "^0.4.6", @@ -878,7 +871,7 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable ], ), "opentelemetry_sdk": crate.spec( - version = "^0.27.0", + version = "^0.27.1", features = [ "trace", "rt-tokio", @@ -1244,6 +1237,9 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable "full", ], ), + "syscalls": crate.spec( + version = "^0.6.18", + ), "tar": crate.spec( version = "^0.4.38", ), @@ -1300,6 +1296,9 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable "ring", ], ), + "tokio-stream": crate.spec( + version = "^0.1.17", + ), "tokio-serde": crate.spec( version = "^0.8", features = [ @@ -1434,7 +1433,7 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable version = "^0.217.0", ), "wasmtime": crate.spec( - version = "^27.0.0", + version = "^28.0.0", default_features = False, features = [ "cranelift", @@ -1445,7 +1444,7 @@ def external_crates_repository(name, cargo_lockfile, lockfile, sanitizers_enable ], ), "wasmtime-environ": crate.spec( - version = "^27.0.0", + version = "^28.0.0", ), "wast": crate.spec( version = "^212.0.0", diff --git a/bazel/rules_rust.patch b/bazel/rules_rust.patch deleted file mode 100644 index d9252428a0b..00000000000 --- a/bazel/rules_rust.patch +++ /dev/null @@ -1,45 +0,0 @@ -# Backports for https://github.com/bazelbuild/rules_rust/issues/2974 and https://github.com/bazelbuild/rules_rust/pull/2981 -diff --git a/cargo/cargo_build_script_runner/bin.rs b/cargo/cargo_build_script_runner/bin.rs -index 2dab3578..b5bb4fca 100644 ---- a/cargo/cargo_build_script_runner/bin.rs -+++ b/cargo/cargo_build_script_runner/bin.rs -@@ -187,9 +187,9 @@ fn run_buildrs() -> Result<(), String> { - .as_bytes(), - ) - .unwrap_or_else(|_| panic!("Unable to write file {:?}", output_dep_env_path)); -- write(&stdout_path, process_output.stdout) -+ write(&stdout_path, "") - .unwrap_or_else(|_| panic!("Unable to write file {:?}", stdout_path)); -- write(&stderr_path, process_output.stderr) -+ write(&stderr_path, "") - .unwrap_or_else(|_| panic!("Unable to write file {:?}", stderr_path)); - - let CompileAndLinkFlags { -diff --git a/crate_universe/private/crate.bzl b/crate_universe/private/crate.bzl -index c493e9a6..ad317abf 100644 ---- a/crate_universe/private/crate.bzl -+++ b/crate_universe/private/crate.bzl -@@ -230,7 +230,22 @@ def _stringify_label(value): - def _stringify_list(values): - if not values: - return values -- return [str(x) for x in values] -+ -+ if type(values) == "list": -+ return [str(x) for x in values] -+ -+ -+ -+ -+ if type(values) == "struct" and type(values.selects) != "NoneType": -+ new_selects = {} -+ -+ for k, v in values.selects.items(): -+ new_selects[k] = [str(x) for x in values.selects[k]] -+ -+ return struct(common = [str(x) for x in values.common], selects = new_selects) -+ -+ fail("Cannot stringify unknown type for list '{}'".format(values)) - - def _select(common, selects): - """A Starlark Select for `crate.annotation()`. diff --git a/bazel/sanitizers_enabled_env/defs.bzl b/bazel/sanitizers_enabled_env/defs.bzl index 091354e0076..a6e65bef9a2 100644 --- a/bazel/sanitizers_enabled_env/defs.bzl +++ b/bazel/sanitizers_enabled_env/defs.bzl @@ -8,7 +8,7 @@ def _impl(repository_ctx): ) repository_ctx.file( "defs.bzl", - content = "SANITIZERS_ENABLED=" + repository_ctx.os.environ.get("SANITIZERS_ENABLED", "0") + "\n", + content = "SANITIZERS_ENABLED=" + repository_ctx.getenv("SANITIZERS_ENABLED", "0") + "\n", executable = False, ) @@ -16,6 +16,5 @@ def sanitizers_enabled_env(name = None): rule = repository_rule( implementation = _impl, local = True, - environ = ["SANITIZERS_ENABLED"], ) rule(name = name) diff --git a/ci/container/README.md b/ci/container/README.md index eea758cd7e7..ebb11b1e490 100644 --- a/ci/container/README.md +++ b/ci/container/README.md @@ -86,7 +86,7 @@ sudo podman run --pids-limit=-1 -it --rm --privileged --network=host --cgroupns= --mount type=bind,source=/home/john/.local/share/fish,target=/home/ubuntu/.local/share/fish \ --mount type=bind,source=/home/john/.zsh_history,target=/home/ubuntu/.zsh_history \ -v /tmp/ssh-XXXXQAO7kF/agent.113731:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent -w /ic \ - docker.io/dfinity/ic-build:221b79c4f4a966eae67a3f9ef7f20f4c5583d5bc38df17c94128804687a84c29 /usr/bin/fish + ghcr.io/dfinity/ic-build:221b79c4f4a966eae67a3f9ef7f20f4c5583d5bc38df17c94128804687a84c29 /usr/bin/fish ``` ### How to use custom config diff --git a/ci/container/TAG b/ci/container/TAG index 1b88ba01cf3..510327d7002 100644 --- a/ci/container/TAG +++ b/ci/container/TAG @@ -1 +1 @@ -7beeb6e69346fd10ff4421688aec841d072ac4f8c4c80d3b089d64aa280c0894 +b3869ba20c4e9ba2915be302f5b5a4b23da0545af2f1cb896441055372950389 diff --git a/ci/container/build-image.sh b/ci/container/build-image.sh index 401fc422196..2e4b95803d8 100755 --- a/ci/container/build-image.sh +++ b/ci/container/build-image.sh @@ -38,9 +38,8 @@ fi DOCKER_BUILDKIT=1 docker "${ARGS[@]}" build "${BUILD_ARGS[@]}" \ -t ic-build:"$DOCKER_IMG_TAG" \ - -t docker.io/dfinity/ic-build:"$DOCKER_IMG_TAG" \ - -t docker.io/dfinity/ic-build:latest \ -t ghcr.io/dfinity/ic-build:"$DOCKER_IMG_TAG" \ + -t ghcr.io/dfinity/ic-build:latest \ --build-arg RUST_VERSION="$RUST_VERSION" \ -f ci/container/Dockerfile . diff --git a/ci/scripts/docker-login.sh b/ci/scripts/docker-login.sh deleted file mode 100755 index 5834e932887..00000000000 --- a/ci/scripts/docker-login.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -set -eEuo pipefail - -# login to docker hub to avoid rate limit disruptions -if which docker 2>/dev/null; then - docker login -u "$DOCKER_HUB_USER" -p "$DOCKER_HUB_PASSWORD_RO" -fi -# docker-bin used by container_pull in WORKSPACES.bazel -if which docker-bin 2>/dev/null; then - # save auth to user's .docker/config.json - docker-bin login -u "$DOCKER_HUB_USER" -p "$DOCKER_HUB_PASSWORD_RO" - # save auth to root's .docker/config.json - sudo docker-bin login -u "$DOCKER_HUB_USER" -p "$DOCKER_HUB_PASSWORD_RO" -fi diff --git a/ci/tools/repro-check.sh b/ci/tools/repro-check.sh index f348304cca7..06c78eb19cf 100755 --- a/ci/tools/repro-check.sh +++ b/ci/tools/repro-check.sh @@ -107,10 +107,11 @@ check_ic_repo() { git_remote="$(git config --get remote.origin.url)" log_debug "Check the repository is an IC repository" - # Possible values of `git_remote` are listed below - # git@github.com:dfinity/ic.git - # https://github.com/dfinity/ic.git - if [[ "$git_remote" == */ic.git ]] || [[ "$git_remote" == */ic ]]; then + # Some of the possible values of `git_remote` that should be matched: + # git@github.com:dfinity/ic.git, https://github.com/dfinity/ic.git + # git@github.com:dfinity/ic-private.git, https://github.com/dfinity/ic-private.git + # git@github.com:/ic.git, https://github.com//ic.git + if [[ "$git_remote" == */ic* ]]; then log_debug "Inside IC repository" else error "When not specifying any option please run this script inside an IC git repository" diff --git a/hs/spec_compliance/src/IC/Test/Spec.hs b/hs/spec_compliance/src/IC/Test/Spec.hs index 8512be18c94..8379bd5d8d2 100644 --- a/hs/spec_compliance/src/IC/Test/Spec.hs +++ b/hs/spec_compliance/src/IC/Test/Spec.hs @@ -754,7 +754,7 @@ icTests my_sub other_sub conf = ic_canister_status'' anonymousUser cid >>= isErrOrReject [3, 5] ic_canister_status'' secp256k1User cid >>= isErrOrReject [3, 5], simpleTestCase "> 10 controllers" ecid $ \cid -> do - ic_create_with_controllers' (ic00viaWithCycles cid 20_000_000_000_000) ecid (replicate 11 cid) >>= isReject [3, 5] + ic_create_with_controllers' (ic00viaWithCycles cid 20_000_000_000_000) ecid (replicate 11 cid) >>= isReject [4] ic_set_controllers' ic00 cid (replicate 11 cid) >>= isReject [4], simpleTestCase "No controller" ecid $ \cid -> do cid2 <- ic_create_with_controllers (ic00viaWithCycles cid 20_000_000_000_000) ecid [] diff --git a/hs/spec_compliance/src/IC/Test/Spec/CanisterVersion.hs b/hs/spec_compliance/src/IC/Test/Spec/CanisterVersion.hs index ec02cc52c20..96fda47f73a 100644 --- a/hs/spec_compliance/src/IC/Test/Spec/CanisterVersion.hs +++ b/hs/spec_compliance/src/IC/Test/Spec/CanisterVersion.hs @@ -44,9 +44,9 @@ canister_version_tests ecid = ctr <- callToQuery'' cid (replyData canister_version) >>= is2xx >>= isReply >>= asWord64 ctr @?= 1 ctr <- callToQuery'' cid (replyData canister_version) >>= is2xx >>= isReply >>= asWord64 - ctr @?= 1 + ctr @?= 2 ctr <- callToQuery'' cid (replyData canister_version) >>= is2xx >>= isReply >>= asWord64 - ctr @?= 1, + ctr @?= 3, simpleTestCase "in update" ecid $ \cid -> do ctr <- call cid (replyData canister_version) >>= asWord64 ctr @?= 1 diff --git a/ic-os/boundary-guestos/context/Dockerfile b/ic-os/boundary-guestos/context/Dockerfile index 57a95ec8e8f..af748384095 100644 --- a/ic-os/boundary-guestos/context/Dockerfile +++ b/ic-os/boundary-guestos/context/Dockerfile @@ -2,7 +2,7 @@ # # Build step for example: # - `docker build --pull -t dfinity/boundaryos-main --build-arg BUILD_TYPE=dev \ ` -# `--build-arg BASE_IMAGE=docker.io/dfinity/boundaryos-base@sha256:dc1a2892b0241131dd97ddd4dce560ab274d00a90110a4b5fc4cb2245ff1f0db -f Dockerfile .` +# `--build-arg BASE_IMAGE=ghcr.io/dfinity/boundaryos-base@sha256:dc1a2892b0241131dd97ddd4dce560ab274d00a90110a4b5fc4cb2245ff1f0db -f Dockerfile .` # # # The base images are defined in docker-base.prod and docker-base.dev. Update @@ -25,8 +25,8 @@ WORKDIR /tmp # Download and verify ic-gateway RUN \ - curl -L -O https://github.com/dfinity/ic-gateway/releases/download/v0.1.61/ic-gateway_0.1.61_amd64.deb && \ - echo "dcde4601c7e57372a9488265152ed71366cc710d31f9b1219a197ffa23680fdc ic-gateway_0.1.61_amd64.deb" | sha256sum -c + curl -L -O https://github.com/dfinity/ic-gateway/releases/download/v0.1.64/ic-gateway_0.1.64_amd64.deb && \ + echo "386ba2466454181fa4c3e8459945bcb86ee4e741ea69fb1ae11eb7a452366331 ic-gateway_0.1.64_amd64.deb" | sha256sum -c # # Second build stage: @@ -56,9 +56,9 @@ FROM image-${BUILD_TYPE} USER root:root -COPY --from=download /tmp/ic-gateway_0.1.61_amd64.deb /tmp/ic-gateway_0.1.61_amd64.deb -RUN dpkg -i --force-confold /tmp/ic-gateway_0.1.61_amd64.deb && \ - rm /tmp/ic-gateway_0.1.61_amd64.deb +COPY --from=download /tmp/ic-gateway_0.1.64_amd64.deb /tmp/ic-gateway_0.1.64_amd64.deb +RUN dpkg -i --force-confold /tmp/ic-gateway_0.1.64_amd64.deb && \ + rm /tmp/ic-gateway_0.1.64_amd64.deb RUN mkdir -p /boot/config \ /boot/efi \ diff --git a/ic-os/boundary-guestos/context/README.adoc b/ic-os/boundary-guestos/context/README.adoc index a235505e96c..6de8f7c3d5a 100644 --- a/ic-os/boundary-guestos/context/README.adoc +++ b/ic-os/boundary-guestos/context/README.adoc @@ -46,7 +46,7 @@ serve as a guide on how to add further actions. === ssh key generation -The `setup-ssh-keys` (and corresponding shell script) service performs one of +The `generate-host-ssh-keys` (and corresponding shell script) service performs one of two things: If this is the first boot ever (on a newly installed system), it generates ssh keys and stashes them away in a location that is preserved across reboots and in the future upgrades. diff --git a/ic-os/boundary-guestos/context/docker-base.prod b/ic-os/boundary-guestos/context/docker-base.prod index 9f5b493a1ea..22268b17839 100644 --- a/ic-os/boundary-guestos/context/docker-base.prod +++ b/ic-os/boundary-guestos/context/docker-base.prod @@ -1 +1 @@ -ghcr.io/dfinity/boundaryos-base@sha256:aa1aa1db151974aaa5128772d4707ee975d1d2d79d8f6be0b348bad997b417c3 +ghcr.io/dfinity/boundaryos-base@sha256:e3b2107bb66b692f841254e87730214bb0a4081a6dae00a122947c82b9f45af8 diff --git a/ic-os/boundary-guestos/docs/Boot.adoc b/ic-os/boundary-guestos/docs/Boot.adoc index 7080e087e8e..07e7d4cc5ff 100644 --- a/ic-os/boundary-guestos/docs/Boot.adoc +++ b/ic-os/boundary-guestos/docs/Boot.adoc @@ -20,7 +20,7 @@ service are started in the IC-OS boot sequence: - Config injection -- Set up ssh account keys +- Set up ssh user keys - Generate network configuration @@ -53,7 +53,7 @@ Relevant information can be found in the guestos link:../../guestos/docs/Boot.ad == Set up ssh host keys -Service: `setup-ssh-keys.service`, script: `/opt/ic/bin/setup-ssh-keys.sh`, +Service: `generate-host-ssh-keys.service`, script: `/opt/ic/bin/generate-host-ssh-keys.sh`, depends on `/boot/config` mount. This checks if ssh host keys for the system exist in the `config` partition @@ -83,9 +83,9 @@ USB stick" attached to the VM that contains a tar file with initial configuratio for parts of the system (see link:ConfigStore{outfilesuffix}[config store] for a description). Required files in the `config` partition as well as payload store are created. -== Set up ssh account keys +== Set up ssh user keys -Service: `setup-ssh-account-keys.services`, script `/opt/ic/bin/setup-ssh-account-keys.sh`. +Service: `setup-ssh-user-keys.services`, script `/opt/ic/bin/setup-ssh-user-keys.sh`. Depends on `bootstrap-ic-node.service`. The `authorized_keys` files for the role accounts are taken from the diff --git a/ic-os/components/boundary-guestos.bzl b/ic-os/components/boundary-guestos.bzl index c77f1564c62..3019d8fc082 100644 --- a/ic-os/components/boundary-guestos.bzl +++ b/ic-os/components/boundary-guestos.bzl @@ -56,8 +56,8 @@ component_files = { Label("boundary-guestos/etc/systemd/system/setup-ic-gateway.service"): "/etc/systemd/system/setup-ic-gateway.service", Label("boundary-guestos/etc/systemd/system/setup-lvs.service"): "/etc/systemd/system/setup-lvs.service", Label("boundary-guestos/etc/systemd/system/setup-nftables.service"): "/etc/systemd/system/setup-nftables.service", - Label("boundary-guestos/etc/systemd/system/setup-ssh-account-keys.service"): "/etc/systemd/system/setup-ssh-account-keys.service", - Label("boundary-guestos/etc/systemd/system/setup-ssh-keys.service"): "/etc/systemd/system/setup-ssh-keys.service", + Label("boundary-guestos/etc/systemd/system/setup-ssh-user-keys.service"): "/etc/systemd/system/setup-ssh-user-keys.service", + Label("boundary-guestos/etc/systemd/system/generate-host-ssh-keys.service"): "/etc/systemd/system/generate-host-ssh-keys.service", Label("boundary-guestos/etc/systemd/system/setup-var-log.service"): "/etc/systemd/system/setup-var-log.service", Label("boundary-guestos/etc/systemd/system/setup-vector.service"): "/etc/systemd/system/setup-vector.service", Label("boundary-guestos/etc/systemd/system/setup-version-metric.service"): "/etc/systemd/system/setup-version-metric.service", @@ -86,8 +86,8 @@ component_files = { Label("boundary-guestos/opt/ic/bin/setup-ic-gateway.sh"): "/opt/ic/bin/setup-ic-gateway.sh", Label("boundary-guestos/opt/ic/bin/setup-lvs.sh"): "/opt/ic/bin/setup-lvs.sh", Label("boundary-guestos/opt/ic/bin/setup-nftables.sh"): "/opt/ic/bin/setup-nftables.sh", - Label("boundary-guestos/opt/ic/bin/setup-ssh-account-keys.sh"): "/opt/ic/bin/setup-ssh-account-keys.sh", - Label("boundary-guestos/opt/ic/bin/setup-ssh-keys.sh"): "/opt/ic/bin/setup-ssh-keys.sh", + Label("boundary-guestos/opt/ic/bin/setup-ssh-user-keys.sh"): "/opt/ic/bin/setup-ssh-user-keys.sh", + Label("boundary-guestos/opt/ic/bin/generate-host-ssh-keys.sh"): "/opt/ic/bin/generate-host-ssh-keys.sh", Label("boundary-guestos/opt/ic/bin/setup-var-encryption.sh"): "/opt/ic/bin/setup-var-encryption.sh", Label("boundary-guestos/opt/ic/bin/setup-var-log.sh"): "/opt/ic/bin/setup-var-log.sh", Label("boundary-guestos/opt/ic/bin/setup-vector.sh"): "/opt/ic/bin/setup-vector.sh", diff --git a/ic-os/components/boundary-guestos/etc/systemd/system/bootstrap-ic-node.service b/ic-os/components/boundary-guestos/etc/systemd/system/bootstrap-ic-node.service index 83a8a65fa51..1cf204ffc21 100644 --- a/ic-os/components/boundary-guestos/etc/systemd/system/bootstrap-ic-node.service +++ b/ic-os/components/boundary-guestos/etc/systemd/system/bootstrap-ic-node.service @@ -2,11 +2,11 @@ Description=Bootstrap the IC node Requires=var-log.mount After=var-log.mount -Before=setup-ssh-account-keys.service +Before=setup-ssh-user-keys.service [Install] WantedBy=multi-user.target -RequiredBy=setup-ssh-account-keys.service +RequiredBy=setup-ssh-user-keys.service [Service] Type=oneshot diff --git a/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-keys.service b/ic-os/components/boundary-guestos/etc/systemd/system/generate-host-ssh-keys.service similarity index 84% rename from ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-keys.service rename to ic-os/components/boundary-guestos/etc/systemd/system/generate-host-ssh-keys.service index b96b685dee3..fc87e3faf42 100644 --- a/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-keys.service +++ b/ic-os/components/boundary-guestos/etc/systemd/system/generate-host-ssh-keys.service @@ -8,7 +8,7 @@ Before=ssh.service [Service] Type=oneshot RemainAfterExit=true -ExecStart=/opt/ic/bin/setup-ssh-keys.sh +ExecStart=/opt/ic/bin/generate-host-ssh-keys.sh [Install] WantedBy=multi-user.target diff --git a/ic-os/components/ssh/setup-ssh-account-keys/setup-ssh-account-keys.service b/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-user-keys.service similarity index 82% rename from ic-os/components/ssh/setup-ssh-account-keys/setup-ssh-account-keys.service rename to ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-user-keys.service index 2a862b3f2c4..3fdbbaa3db0 100644 --- a/ic-os/components/ssh/setup-ssh-account-keys/setup-ssh-account-keys.service +++ b/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-user-keys.service @@ -1,5 +1,5 @@ [Unit] -Description=Set up ssh account keys +Description=Set up ssh user keys Before=ssh.service # bootstrap-ic-node.service (if it exists) lists this service as a reverse dependency @@ -9,7 +9,7 @@ WantedBy=multi-user.target [Service] Type=oneshot RemainAfterExit=true -ExecStart=/opt/ic/bin/setup-ssh-account-keys.sh +ExecStart=/opt/ic/bin/setup-ssh-user-keys.sh # All services that networking depends on log their outputs to the console # and are piped to the host terminal if the verbose flag is enabled. diff --git a/ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-keys.sh b/ic-os/components/boundary-guestos/opt/ic/bin/generate-host-ssh-keys.sh similarity index 100% rename from ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-keys.sh rename to ic-os/components/boundary-guestos/opt/ic/bin/generate-host-ssh-keys.sh diff --git a/ic-os/components/boundary-guestos/opt/ic/bin/setup-ic-gateway.sh b/ic-os/components/boundary-guestos/opt/ic/bin/setup-ic-gateway.sh index a89ca3edd54..135b4657973 100755 --- a/ic-os/components/boundary-guestos/opt/ic/bin/setup-ic-gateway.sh +++ b/ic-os/components/boundary-guestos/opt/ic/bin/setup-ic-gateway.sh @@ -150,7 +150,7 @@ SHED_SYSTEM_CPU="0.95" SHED_SYSTEM_MEMORY="0.95" SHED_SHARDED_EWMA="0.6" SHED_SHARDED_PASSTHROUGH="20000" -SHED_SHARDED_LATENCY="query:1s,call:1s,sync_call:13s,read_state:1s,read_state_subnet:1s,status:100ms,health:100ms,registrations:5s,http:5s" +SHED_SHARDED_LATENCY="query:2s,call:2s,sync_call:13s,read_state:2s,read_state_subnet:2s,status:100ms,health:100ms,registrations:5s,http:5s" EOF if [ ! -z "${DENYLIST_URL:-}" ]; then diff --git a/ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-account-keys.sh b/ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-user-keys.sh similarity index 100% rename from ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-account-keys.sh rename to ic-os/components/boundary-guestos/opt/ic/bin/setup-ssh-user-keys.sh diff --git a/ic-os/components/guestos.bzl b/ic-os/components/guestos.bzl index a97124f7c3b..ee80623a666 100644 --- a/ic-os/components/guestos.bzl +++ b/ic-os/components/guestos.bzl @@ -63,6 +63,8 @@ component_files = { Label("misc/guestos/sysctl.d/privileged-ports.conf"): "/etc/sysctl.d/privileged-ports.conf", Label("misc/guestos/sysfs.d/hugepage.conf"): "/etc/sysfs.d/hugepage.conf", Label("misc/guestos/hsm/pcscd"): "/etc/default/pcscd", + Label("misc/log-config/log-config-guestos.service"): "/etc/systemd/system/log-config.service", + Label("misc/log-config/log-config.sh"): "/opt/ic/bin/log-config.sh", # monitoring Label("monitoring/filebeat/setup-filebeat-permissions.sh"): "/opt/ic/bin/setup-filebeat-permissions.sh", @@ -138,10 +140,10 @@ component_files = { # ssh Label("ssh/provision-ssh-keys.sh"): "/opt/ic/bin/provision-ssh-keys.sh", - Label("ssh/setup-ssh-keys/setup-ssh-keys.sh"): "/opt/ic/bin/setup-ssh-keys.sh", - Label("ssh/setup-ssh-keys/setup-ssh-keys.service"): "/etc/systemd/system/setup-ssh-keys.service", - Label("ssh/setup-ssh-account-keys/setup-ssh-account-keys.sh"): "/opt/ic/bin/setup-ssh-account-keys.sh", - Label("ssh/setup-ssh-account-keys/setup-ssh-account-keys.service"): "/etc/systemd/system/setup-ssh-account-keys.service", + Label("ssh/generate-host-ssh-keys/generate-host-ssh-keys.sh"): "/opt/ic/bin/generate-host-ssh-keys.sh", + Label("ssh/generate-host-ssh-keys/generate-host-ssh-keys.service"): "/etc/systemd/system/generate-host-ssh-keys.service", + Label("ssh/setup-ssh-user-keys/setup-ssh-user-keys.sh"): "/opt/ic/bin/setup-ssh-user-keys.sh", + Label("ssh/setup-ssh-user-keys/setup-ssh-user-keys.service"): "/etc/systemd/system/setup-ssh-user-keys.service", Label("ssh/read-ssh-keys.sh"): "/opt/ic/bin/read-ssh-keys.sh", # upgrade @@ -162,6 +164,6 @@ component_files = { # fstrim Label("fstrim/sync_fstrim.sh"): "/opt/ic/bin/sync_fstrim.sh", - # TODO(NODE-1519): delete update-config.service after switch to new icos config + # TODO(NODE-1518): delete update-config.service after switch to new icos config Label("misc/update-config/update-guestos-config.service"): "/etc/systemd/system/update-config.service", } diff --git a/ic-os/components/hostos.bzl b/ic-os/components/hostos.bzl index 3566742c219..7b9aa2f4a7f 100644 --- a/ic-os/components/hostos.bzl +++ b/ic-os/components/hostos.bzl @@ -29,8 +29,6 @@ component_files = { Label("hostos-scripts/verbose-logging/verbose-logging.sh"): "/opt/ic/bin/verbose-logging.sh", Label("hostos-scripts/verbose-logging/verbose-logging.service"): "/etc/systemd/system/verbose-logging.service", Label("hostos-scripts/verbose-logging/logrotate.d/verbose-logging"): "/etc/logrotate.d/verbose-logging", - Label("hostos-scripts/log-config/log-config.service"): "/etc/systemd/system/log-config.service", - Label("hostos-scripts/log-config/log-config.sh"): "/opt/ic/bin/log-config.sh", # early-boot Label("early-boot/relabel-machine-id/relabel-machine-id.sh"): "/opt/ic/bin/relabel-machine-id.sh", @@ -73,6 +71,8 @@ component_files = { Label("monitoring/metrics-proxy/metrics-proxy.service"): "/etc/systemd/system/metrics-proxy.service", Label("monitoring/journald.conf"): "/etc/systemd/journald.conf", Label("monitoring/logrotate/override.conf"): "/etc/systemd/system/logrotate.service.d/override.conf", + Label("misc/log-config/log-config-hostos.service"): "/etc/systemd/system/log-config.service", + Label("misc/log-config/log-config.sh"): "/opt/ic/bin/log-config.sh", # networking Label("networking/generate-network-config/hostos/generate-network-config.service"): "/etc/systemd/system/generate-network-config.service", @@ -85,12 +85,10 @@ component_files = { Label("networking/hosts"): "/etc/hosts", # ssh - Label("ssh/setup-ssh-keys/setup-ssh-keys.sh"): "/opt/ic/bin/setup-ssh-keys.sh", - Label("ssh/setup-ssh-keys/setup-ssh-keys.service"): "/etc/systemd/system/setup-ssh-keys.service", - Label("ssh/setup-ssh-account-keys/setup-ssh-account-keys.sh"): "/opt/ic/bin/setup-ssh-account-keys.sh", - Label("ssh/setup-ssh-account-keys/setup-ssh-account-keys.service"): "/etc/systemd/system/setup-ssh-account-keys.service", - Label("ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.sh"): "/opt/ic/bin/deploy-updated-ssh-account-keys.sh", - Label("ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.service"): "/etc/systemd/system/deploy-updated-ssh-account-keys.service", + Label("ssh/generate-host-ssh-keys/generate-host-ssh-keys.sh"): "/opt/ic/bin/generate-host-ssh-keys.sh", + Label("ssh/generate-host-ssh-keys/generate-host-ssh-keys.service"): "/etc/systemd/system/generate-host-ssh-keys.service", + Label("ssh/setup-ssh-user-keys/setup-ssh-user-keys.sh"): "/opt/ic/bin/setup-ssh-user-keys.sh", + Label("ssh/setup-ssh-user-keys/setup-ssh-user-keys.service"): "/etc/systemd/system/setup-ssh-user-keys.service", # upgrade Label("upgrade/manageboot/manageboot.sh"): "/opt/ic/bin/manageboot.sh", @@ -98,6 +96,6 @@ component_files = { Label("upgrade/systemd-generators/systemd-gpt-auto-generator"): "/etc/systemd/system-generators/systemd-gpt-auto-generator", Label("upgrade/install-upgrade.sh"): "/opt/ic/bin/install-upgrade.sh", - # TODO(NODE-1519): delete update-config.service after switch to new icos config + # TODO(NODE-1518): delete update-config.service after switch to new icos config Label("misc/update-config/update-hostos-config.service"): "/etc/systemd/system/update-config.service", } diff --git a/ic-os/components/ic/setup-permissions/erestorecon.sh b/ic-os/components/ic/setup-permissions/erestorecon.sh index 3cc9a4192e5..876c59f9af5 100755 --- a/ic-os/components/ic/setup-permissions/erestorecon.sh +++ b/ic-os/components/ic/setup-permissions/erestorecon.sh @@ -5,4 +5,4 @@ set -e # erestorecon (easy prestorecon) uses UNIX tools to parallelize restorecon, # instead of the cpp based prestorecon. -find $@ -print0 | xargs -0 -P 0 restorecon +find $@ -print0 | xargs -0 -P 0 restorecon -F diff --git a/ic-os/components/ic/setup-permissions/setup-permissions.sh b/ic-os/components/ic/setup-permissions/setup-permissions.sh index 8576d1e1e60..9b073af4954 100755 --- a/ic-os/components/ic/setup-permissions/setup-permissions.sh +++ b/ic-os/components/ic/setup-permissions/setup-permissions.sh @@ -24,8 +24,8 @@ function make_group_owned_and_sticky() { local GROUP="$3" mkdir -p "${TARGET_DIR}" - chown -R "${USER}:${GROUP}" "${TARGET_DIR}" - chmod u=rwX,g=rX,o= -R "${TARGET_DIR}" + find "${TARGET_DIR}" -print0 | xargs -0 -P 0 chown "${USER}:${GROUP}" + find "${TARGET_DIR}" -print0 | xargs -0 -P 0 chmod u=rwX,g=rX,o= find "${TARGET_DIR}" -type d | xargs chmod g+s } diff --git a/ic-os/components/ic/share/ic-boundary.env b/ic-os/components/ic/share/ic-boundary.env index 570be9bb8ae..52089c0d9df 100644 --- a/ic-os/components/ic/share/ic-boundary.env +++ b/ic-os/components/ic/share/ic-boundary.env @@ -6,6 +6,8 @@ HTTP_CLIENT_TIMEOUT_CONNECT="3s" REGISTRY_DISABLE_REPLICATOR="true" REGISTRY_LOCAL_STORE_PATH="/var/lib/ic/data/ic_registry_local_store" OBS_LOG_ANONYMIZATION_CANISTER_ID="uz2z3-qyaaa-aaaaq-qaacq-cai" +RATE_LIMIT_GENERIC_CANISTER_ID="u637p-5aaaa-aaaaq-qaaca-cai" +RATE_LIMIT_GENERIC_AUTOSCALE="true" OBS_LOG_JOURNALD="true" OBS_METRICS_ADDR="[::]:9324" RATE_LIMIT_PER_SECOND_PER_SUBNET="1000" diff --git a/ic-os/components/init/README.adoc b/ic-os/components/init/README.adoc index d7daa555fe6..5b79ee3587c 100644 --- a/ic-os/components/init/README.adoc +++ b/ic-os/components/init/README.adoc @@ -6,7 +6,7 @@ serve as a guide on how to add further actions. == ssh key generation -The +ssh/setup-ssh-keys+ (and corresponding shell script) service performs one of +The +ssh/generate-host-ssh-keys+ (and corresponding shell script) service performs one of two things: If this is the first boot ever (on a newly installed system), it generates ssh keys and stashes them away in a location that is preserved across upgrades. On first boot after an upgrade, it integrates the keys from their diff --git a/ic-os/components/init/bootstrap-ic-node/bootstrap-ic-node.service b/ic-os/components/init/bootstrap-ic-node/bootstrap-ic-node.service index 78c040b79ce..055d549b920 100644 --- a/ic-os/components/init/bootstrap-ic-node/bootstrap-ic-node.service +++ b/ic-os/components/init/bootstrap-ic-node/bootstrap-ic-node.service @@ -7,11 +7,11 @@ Requires=var-lib-ic-crypto.mount After=var-lib-ic-crypto.mount Requires=var-lib-ic-backup.mount After=var-lib-ic-backup.mount -Before=setup-ssh-account-keys.service +Before=setup-ssh-user-keys.service [Install] WantedBy=multi-user.target -RequiredBy=setup-ssh-account-keys.service +RequiredBy=setup-ssh-user-keys.service [Service] Type=oneshot diff --git a/ic-os/components/misc/config/setupos/config.sh b/ic-os/components/misc/config/setupos/config.sh new file mode 100644 index 00000000000..a16d9fcceba --- /dev/null +++ b/ic-os/components/misc/config/setupos/config.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Shared config utilities. + +# Retrieves a value from the config.json file using a JSON path. +# Arguments: +# $1 - JSON path to the desired value (e.g., '.icos_settings.nns_urls') +# Note: If the key is not found, this function will return null. +function get_config_value() { + local CONFIG_FILE="/var/ic/config/config.json" + local key=$1 + jq -r "${key}" "${CONFIG_FILE}" +} diff --git a/ic-os/components/misc/log-config/log-config-guestos.service b/ic-os/components/misc/log-config/log-config-guestos.service new file mode 100644 index 00000000000..705bdfb511c --- /dev/null +++ b/ic-os/components/misc/log-config/log-config-guestos.service @@ -0,0 +1,14 @@ +[Unit] +Description=Log config partition +After=bootstrap-ic-node.service +Requires=bootstrap-ic-node.service +After=update-config.service +Wants=update-config.service + +[Service] +Type=oneshot +ExecStart=/opt/ic/bin/log-config.sh +RemainAfterExit=true + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/ic-os/components/hostos-scripts/log-config/log-config.service b/ic-os/components/misc/log-config/log-config-hostos.service similarity index 58% rename from ic-os/components/hostos-scripts/log-config/log-config.service rename to ic-os/components/misc/log-config/log-config-hostos.service index b5e319f5a6f..90bb67bbe41 100644 --- a/ic-os/components/hostos-scripts/log-config/log-config.service +++ b/ic-os/components/misc/log-config/log-config-hostos.service @@ -1,5 +1,7 @@ [Unit] -Description=Log HostOS config partition +Description=Log config partition +After=update-config.service +Wants=update-config.service [Service] Type=oneshot diff --git a/ic-os/components/hostos-scripts/log-config/log-config.sh b/ic-os/components/misc/log-config/log-config.sh similarity index 82% rename from ic-os/components/hostos-scripts/log-config/log-config.sh rename to ic-os/components/misc/log-config/log-config.sh index 5f8399c90b4..afb4655e306 100644 --- a/ic-os/components/hostos-scripts/log-config/log-config.sh +++ b/ic-os/components/misc/log-config/log-config.sh @@ -1,8 +1,7 @@ #!/bin/bash CONFIG_DIR="/boot/config" -CONFIG="/boot/config/config.ini" -DEPLOYMENT="/boot/config/deployment.json" +CONFIG="/boot/config/config.json" log_directory_structure() { local dir=$1 @@ -28,7 +27,6 @@ log_file_contents() { fi } -echo "Logging HostOS config partition" +echo "Logging config partition" log_directory_structure "$CONFIG_DIR" log_file_contents "$CONFIG" -log_file_contents "$DEPLOYMENT" diff --git a/ic-os/components/networking/nftables/hostos/nftables.template b/ic-os/components/networking/nftables/hostos/nftables.template index 04d7acb4798..065ac59bbc0 100644 --- a/ic-os/components/networking/nftables/hostos/nftables.template +++ b/ic-os/components/networking/nftables/hostos/nftables.template @@ -92,7 +92,6 @@ table ip6 filter { 2001:920:401a:1710::/64, # BR1 2001:920:401a:1706::/64, # BR2 2a04:9dc0:0:108::/64, # BU1 - 2607:f6f0:3004::/48, # CH1-old 2602:fb2b:120::/48, # CH1 InfraDC prefix 2604:7e00:50::/64, # CH2 2607:ff70:3:2::/64, # CH3 @@ -101,7 +100,6 @@ table ip6 filter { 2604:6800:258:1::/64, # DM1 InfraDC annex 2600:3000:1300:1300::/64, # DN1 2001:470:1:c76::/64, # FM1 - 2001:4d78:40d::/48, # FR1-old 2602:fb2b:110::/48, # FR1 InfraDC prefix 2001:4d78:400:10a::/64, # FR2 2604:1380:4091:3000::/56, # FR2 Equinix boundary @@ -122,11 +120,11 @@ table ip6 filter { 2610:190:6000:1::/64, # PH1 2600:3004:1200:1200::/56, # PL1 2600:c00:2:100::/64, # SE1 InfraDC annex - 2602:fb2b:100::/48, # SF1 InfraDC prefix 2401:3f00:1000:24::/64, # SG1 2604:1380:40e1:4700::/56, # SG1 Equinix boundary 2401:3f00:1000:22::/64, # SG2 2401:3f00:1000:23::/64, # SG3 + 2001:4c08:2003:b09::/64, # SH1 2600:c02:b002:15::/64, # SJ1 2610:190:df01:5::/64, # ST1 2604:1380:45e1:a600::/56, # SV15 Equinix boundary diff --git a/ic-os/components/setupos-scripts/check-config.sh b/ic-os/components/setupos-scripts/check-config.sh new file mode 100644 index 00000000000..06a61de1ce5 --- /dev/null +++ b/ic-os/components/setupos-scripts/check-config.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +# check-config.sh verifies the existence of the configuration JSON file created by config.service, +# halting the installation if not found. + +set -o nounset +set -o pipefail + +SHELL="/bin/bash" +PATH="/sbin:/bin:/usr/sbin:/usr/bin" + +source /opt/ic/bin/functions.sh + +check_config_file() { + echo "* Checking Config..." + local CONFIG_FILE="/var/ic/config/config.json" + + if [ -f "${CONFIG_FILE}" ]; then + local config_contents=$(cat "${CONFIG_FILE}") + echo -e "Configuration file '${CONFIG_FILE}' exists.\n" + echo -e "File contents:\n${config_contents}" + else + local service_logs=$(journalctl -u config.service --no-pager) + local log_message="Error creating SetupOS configuration. Configuration file '${CONFIG_FILE}' does not exist.\n\nConfig.service logs:\n${service_logs}" + + log_and_halt_installation_on_error 1 "${log_message}" + fi +} + +# Establish run order +main() { + log_start "$(basename $0)" + check_config_file + log_end "$(basename $0)" +} + +main diff --git a/ic-os/components/setupos-scripts/check-hardware.sh b/ic-os/components/setupos-scripts/check-hardware.sh index 8bfd16a30e6..67261c63216 100644 --- a/ic-os/components/setupos-scripts/check-hardware.sh +++ b/ic-os/components/setupos-scripts/check-hardware.sh @@ -32,8 +32,6 @@ GEN2_MINIMUM_AGGREGATE_DISK_SIZE=32000000000000 GEN1_MINIMUM_DISK_SIZE=3200000000000 GEN1_MINIMUM_AGGREGATE_DISK_SIZE=32000000000000 -CONFIG_DIR="/var/ic/config" - function check_generation() { echo "* Checking Generation..." @@ -249,6 +247,7 @@ function verify_disks() { function verify_deployment_path() { echo "* Verifying deployment path..." + if [[ ${GENERATION} == 2 ]] && [[ ! -f "${CONFIG_DIR}/node_operator_private_key.pem" ]]; then echo -e "\n\n\n\n\n\n" echo -e "\033[1;31mWARNING: Gen2 hardware detected but no Node Operator Private Key found.\033[0m" @@ -261,33 +260,6 @@ function verify_deployment_path() { fi } -# TODO(NODE-1477): delete in configuration revamp integration -CONFIG="${CONFIG:=/var/ic/config/config.ini}" - -function read_variables() { - # Read limited set of keys. Be extra-careful quoting values as it could - # otherwise lead to executing arbitrary shell code! - while IFS="=" read -r key value; do - case "$key" in - "node_reward_type") node_reward_type="${value}" ;; - esac - done <"${CONFIG}" -} - -function validate_node_reward() { - read_variables - if [[ -z "$node_reward_type" ]]; then - echo "Node reward type is not set. Skipping validation." - return 0 - fi - - if [[ ! "$node_reward_type" =~ ^type[0-9]+(\.[0-9])?$ ]]; then - log_and_halt_installation_on_error 1 "Configuration error: node_reward_type is invalid: ${node_reward_type}" - fi - - echo "Valid node reward type: ${node_reward_type}" -} - # Establish run order main() { log_start "$(basename $0)" @@ -297,7 +269,6 @@ main() { verify_memory verify_disks verify_deployment_path - validate_node_reward else echo "* Hardware checks skipped by request via kernel command line" GENERATION=2 diff --git a/ic-os/components/setupos-scripts/check-network.sh b/ic-os/components/setupos-scripts/check-network.sh index 094cb5e6db4..22b752b5bdf 100755 --- a/ic-os/components/setupos-scripts/check-network.sh +++ b/ic-os/components/setupos-scripts/check-network.sh @@ -6,24 +6,16 @@ set -o pipefail SHELL="/bin/bash" PATH="/sbin:/bin:/usr/sbin:/usr/bin" +source /opt/ic/bin/config.sh source /opt/ic/bin/functions.sh -CONFIG="${CONFIG:=/var/ic/config/config.ini}" -DEPLOYMENT="${DEPLOYMENT:=/data/deployment.json}" - -function read_variables() { - # Read limited set of keys. Be extra-careful quoting values as it could - # otherwise lead to executing arbitrary shell code! - while IFS="=" read -r key value; do - case "$key" in - "ipv6_prefix") ipv6_prefix="${value}" ;; - "ipv6_gateway") ipv6_gateway="${value}" ;; - "ipv4_address") ipv4_address="${value}" ;; - "ipv4_prefix_length") ipv4_prefix_length="${value}" ;; - "ipv4_gateway") ipv4_gateway="${value}" ;; - "domain") domain="${value}" ;; - esac - done <"${CONFIG}" +function read_config_variables() { + ipv6_prefix=$(get_config_value '.network_settings.ipv6_config.Deterministic.prefix') + ipv6_gateway=$(get_config_value '.network_settings.ipv6_config.Deterministic.gateway') + ipv4_address=$(get_config_value '.network_settings.ipv4_config.address') + ipv4_prefix_length=$(get_config_value '.network_settings.ipv4_config.prefix_length') + ipv4_gateway=$(get_config_value '.network_settings.ipv4_config.gateway') + domain_name=$(get_config_value '.network_settings.domain_name') } # WARNING: Uses 'eval' for command execution. @@ -109,11 +101,15 @@ function print_network_settings() { echo "* Printing user defined network settings..." echo " IPv6 Prefix : ${ipv6_prefix}" echo " IPv6 Gateway: ${ipv6_gateway}" - if [[ -v ipv4_address && -n ${ipv4_address} && -v ipv4_prefix_length && -n ${ipv4_prefix_length} && -v ipv4_gateway && -n ${ipv4_gateway} && -v domain && -n ${domain} ]]; then + if [[ -n ${ipv4_address} && "${ipv4_address}" != "null" && + -n ${ipv4_prefix_length} && "${ipv4_prefix_length}" != "null" && + -n ${ipv4_gateway} && "${ipv4_gateway}" != "null" ]]; then echo " IPv4 Address: ${ipv4_address}" echo " IPv4 Prefix Length: ${ipv4_prefix_length}" echo " IPv4 Gateway: ${ipv4_gateway}" - echo " Domain name : ${domain}" + fi + if [[ -n ${domain_name} && "${domain_name}" != "null" ]]; then + echo " Domain name: ${domain_name}" fi echo " " @@ -134,10 +130,10 @@ function validate_domain_name() { local domain_part local -a domain_parts - IFS='.' read -ra domain_parts <<<"${domain}" + IFS='.' read -ra domain_parts <<<"${domain_name}" if [ ${#domain_parts[@]} -lt 2 ]; then - log_and_halt_installation_on_error 1 "Domain validation error: less than two domain parts in domain: ${domain}" + log_and_halt_installation_on_error 1 "Domain validation error: less than two domain parts in domain: ${domain_name}" fi for domain_part in "${domain_parts[@]}"; do @@ -184,17 +180,13 @@ function ping_ipv6_gateway() { echo " " } -function assemble_nns_nodes_list() { - NNS_URL_STRING=$(/opt/ic/bin/fetch-property.sh --key=.nns.url --config=${DEPLOYMENT}) - IFS=',' read -r -a NNS_URL_LIST <<<"$NNS_URL_STRING" -} - function query_nns_nodes() { echo "* Querying NNS nodes..." + local nns_url_list=($(get_config_value '.icos_settings.nns_urls' | jq -r '.[]')) local success=false - # At least one of the provided URLs needs to work. - for url in "${NNS_URL_LIST[@]}"; do + + for url in "${nns_url_list[@]}"; do # When running against testnets, we need to ignore self signed certs # with `--insecure`. This check is only meant to confirm from SetupOS # that NNS urls are reachable, so we do not mind that it is "weak". @@ -218,18 +210,22 @@ function query_nns_nodes() { main() { log_start "$(basename $0)" if kernel_cmdline_bool_default_true ic.setupos.check_network; then - read_variables + read_config_variables get_network_settings print_network_settings - if [[ -n ${ipv4_address} && -n ${ipv4_prefix_length} && -n ${ipv4_gateway} ]]; then + if [[ -n ${domain_name} && "${domain_name}" != "null" ]]; then validate_domain_name + fi + + if [[ -n ${ipv4_address} && "${ipv4_address}" != "null" && + -n ${ipv4_prefix_length} && "${ipv4_prefix_length}" != "null" && + -n ${ipv4_gateway} && "${ipv4_gateway}" != "null" ]]; then setup_ipv4_network ping_ipv4_gateway fi ping_ipv6_gateway - assemble_nns_nodes_list query_nns_nodes else echo "* Network checks skipped by request via kernel command line" diff --git a/ic-os/components/setupos-scripts/check-ntp.sh b/ic-os/components/setupos-scripts/check-ntp.sh new file mode 100644 index 00000000000..fa74d8632d7 --- /dev/null +++ b/ic-os/components/setupos-scripts/check-ntp.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +set -o nounset +set -o pipefail + +SHELL="/bin/bash" +PATH="/sbin:/bin:/usr/sbin:/usr/bin" + +source /opt/ic/bin/functions.sh + +function check_ntp() { + echo "* Checking Chrony status..." + + systemctl is-active --quiet chrony + log_and_halt_installation_on_error "$?" "Chrony service not running or not active." + + retries=0 + max_retries=30 + while [ "$(timedatectl show -p NTPSynchronized --value)" != "yes" ]; do + if [ $retries -ge $max_retries ]; then + local service_logs=$(journalctl -u chrony.service --no-pager) + local log_message="System clock is not synchronized.\n\nChrony service logs:\n${service_logs}" + log_and_halt_installation_on_error 1 "${log_message}" + fi + + echo "* Chrony not yet synchronized. Waiting 2 seconds before retry..." + sleep 2 + ((retries++)) + done + + echo "* Chrony is running and time is in sync." +} + +function set_hwclock_utc() { + echo "* Setting hardware clock to UTC..." + timedatectl set-local-rtc 0 +} + +main() { + log_start "$(basename $0)" + check_ntp + set_hwclock_utc + log_end "$(basename $0)" +} + +main diff --git a/ic-os/components/setupos-scripts/config.service b/ic-os/components/setupos-scripts/config.service index 2db6cdf7dc0..f35bbae5eb3 100644 --- a/ic-os/components/setupos-scripts/config.service +++ b/ic-os/components/setupos-scripts/config.service @@ -6,9 +6,9 @@ Before=setupos.service [Service] Type=oneshot RemainAfterExit=true -ExecStart=/opt/ic/bin/output-wrapper.sh /dev/ttyS0 /opt/ic/bin/config.sh -StandardOutput=tty -StandardError=tty +ExecStart=/opt/ic/bin/config create-setupos-config +StandardOutput=journal+console +StandardError=journal+console [Install] WantedBy=multi-user.target diff --git a/ic-os/components/setupos-scripts/config.sh b/ic-os/components/setupos-scripts/config.sh deleted file mode 100755 index d4219d95637..00000000000 --- a/ic-os/components/setupos-scripts/config.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env bash - -set -o nounset -set -o pipefail - -SHELL="/bin/bash" -PATH="/sbin:/bin:/usr/sbin:/usr/bin" - -CONFIG_DIR="/config" -CONFIG_TMP="/var/ic/config" -CONFIG_INI="${CONFIG_DIR}/config.ini" -CONFIG_INI_CLONE="${CONFIG_TMP}/config.ini" -SSH_AUTHORIZED_KEYS="${CONFIG_DIR}/ssh_authorized_keys" -SSH_AUTHORIZED_KEYS_CLONE="${CONFIG_TMP}/ssh_authorized_keys" - -source /opt/ic/bin/functions.sh - -# Define empty variables so they are not unset -ipv6_prefix="" -ipv6_gateway="" - -function print_config_file() { - if [ -e "${CONFIG_INI}" ]; then - echo "Found ${CONFIG_INI}. Contents:" - cat "${CONFIG_INI}" - else - log_and_halt_installation_on_error "1" "config.ini not found. Please copy a valid config.ini to the SetupOS installer config partition." - fi - -} - -function create_config_tmp() { - if [ ! -e "${CONFIG_TMP}" ]; then - # Create fresh config tmp directory - mkdir -p "${CONFIG_TMP}" - log_and_halt_installation_on_error "${?}" "Unable to create new '${CONFIG_TMP}' directory." - fi -} - -function clone_config() { - cp "${CONFIG_INI}" "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to copy 'config.ini' configuration file." - - if [ ! -f "${CONFIG_INI_CLONE}" ]; then - log_and_halt_installation_on_error "1" "Cloned 'config.ini' configuration file does not exist." - fi - - if [ -f "${CONFIG_DIR}/node_operator_private_key.pem" ]; then - cp ${CONFIG_DIR}/node_operator_private_key.pem ${CONFIG_TMP}/node_operator_private_key.pem - log_and_halt_installation_on_error "${?}" "Unable to copy 'node_operator_private_key.pem' configuration file." - fi - - if [ -d "${SSH_AUTHORIZED_KEYS}" ]; then - cp -r "${SSH_AUTHORIZED_KEYS}" "${CONFIG_TMP}" - log_and_halt_installation_on_error "${?}" "Unable to copy 'ssh_authorized_keys' directory." - else - log_and_halt_installation_on_error "1" "Unable to read 'ssh_authorized_keys' directory." - fi - - if [ ! -d "${SSH_AUTHORIZED_KEYS_CLONE}" ]; then - log_and_halt_installation_on_error "1" "Cloned 'ssh_authorized_keys' directory does not exist." - fi -} - -function normalize_config() { - CONFIG_VAR=$(cat "${CONFIG_INI_CLONE}" | tr '\r' '\n') - echo "${CONFIG_VAR}" >"${CONFIG_INI_CLONE}" - - sed -i 's/#.*$//g' "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to remove comments from 'config.ini'." - - sed -i 's/"//g' "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to replace double-quote characters in 'config.ini'." - - sed -i "s/'//g" "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to replace single-quote characters in 'config.ini'." - - sed -i 's/.*/\L&/' "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to convert upper- to lower-case in 'config.ini'." - - sed -i '/^$/d' "${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to remove empty lines in 'config.ini'." - - echo -e '\n' >>"${CONFIG_INI_CLONE}" - log_and_halt_installation_on_error "${?}" "Unable to inject extra new-line at the end of 'config.ini'." -} - -function read_variables() { - # Read limited set of keys. Be extra-careful quoting values as it could - # otherwise lead to executing arbitrary shell code! - while IFS="=" read -r key value; do - case "$key" in - "ipv6_prefix") ipv6_prefix="${value}" ;; - "ipv6_gateway") ipv6_gateway="${value}" ;; - esac - done <"${CONFIG_INI_CLONE}" -} - -function verify_variables() { - if [ -z "${ipv6_prefix}" ]; then - log_and_halt_installation_on_error "1" "Variable 'ipv6_prefix' is not defined in 'config.ini'." - fi - - if [ -z "${ipv6_gateway}" ]; then - log_and_halt_installation_on_error "1" "Variable 'ipv6_gateway' is not defined in 'config.ini'." - fi -} - -# Establish run order -main() { - log_start "$(basename $0)" - print_config_file - create_config_tmp - clone_config - normalize_config - read_variables - verify_variables - log_end "$(basename $0)" -} - -main diff --git a/ic-os/components/setupos-scripts/setup-hostos-config.sh b/ic-os/components/setupos-scripts/setup-hostos-config.sh index 0893a0c69aa..113e635e6cf 100755 --- a/ic-os/components/setupos-scripts/setup-hostos-config.sh +++ b/ic-os/components/setupos-scripts/setup-hostos-config.sh @@ -5,8 +5,9 @@ set -o pipefail SHELL="/bin/bash" PATH="/sbin:/bin:/usr/sbin:/usr/bin" -CONFIG_DIR="/var/ic/config" +CONFIG_DIR="/config" +source /opt/ic/bin/config.sh source /opt/ic/bin/functions.sh function mount_config_partition() { @@ -20,6 +21,7 @@ function mount_config_partition() { } function copy_config_files() { + # TODO(NODE-1518): delete config.ini copying after switch to new icos config echo "* Copying 'config.ini' to hostOS config partition..." if [ -f "${CONFIG_DIR}/config.ini" ]; then cp ${CONFIG_DIR}/config.ini /media/ @@ -28,29 +30,61 @@ function copy_config_files() { log_and_halt_installation_on_error "1" "Configuration file 'config.ini' does not exist." fi + # TODO(NODE-1518): delete deployment.json copying after switch to new icos config + echo "* Copying deployment.json to config partition..." + cp /data/deployment.json /media/ + log_and_halt_installation_on_error "${?}" "Unable to copy deployment.json to hostOS config partition." + echo "* Copying SSH authorized keys..." - if [ -d "${CONFIG_DIR}/ssh_authorized_keys" ]; then - cp -r ${CONFIG_DIR}/ssh_authorized_keys /media/ - log_and_halt_installation_on_error "${?}" "Unable to copy SSH authorized keys to hostOS config partition." + use_ssh_authorized_keys=$(get_config_value '.icos_settings.use_ssh_authorized_keys') + if [[ "${use_ssh_authorized_keys,,}" == "true" ]]; then + if [ -d "${CONFIG_DIR}/ssh_authorized_keys" ]; then + cp -a "${CONFIG_DIR}/ssh_authorized_keys" /media/ + log_and_halt_installation_on_error "${?}" "Unable to copy SSH authorized keys to hostOS config partition." + else + log_and_halt_installation_on_error "1" "use_ssh_authorized_keys set to true but not found" + fi else - log_and_halt_installation_on_error "1" "Directory 'ssh_authorized_keys' does not exist." + echo >&2 "SSH keys not in use." fi echo "* Copying node operator private key..." - if [ -f "${CONFIG_DIR}/node_operator_private_key.pem" ]; then - cp ${CONFIG_DIR}/node_operator_private_key.pem /media/ - log_and_halt_installation_on_error "${?}" "Unable to copy node operator private key to hostOS config partition." + use_node_operator_private_key=$(get_config_value '.icos_settings.use_node_operator_private_key') + if [[ "${use_node_operator_private_key,,}" == "true" ]]; then + if [ -f "${CONFIG_DIR}/node_operator_private_key.pem" ]; then + cp "${CONFIG_DIR}/node_operator_private_key.pem" /media/ + log_and_halt_installation_on_error "${?}" "Unable to copy node operator private key to hostOS config partition." + else + log_and_halt_installation_on_error "1" "use_node_operator_private_key set to true but not found" + fi else - echo "node_operator_private_key.pem does not exist, requiring HSM." + echo >&2 "Warning: node_operator_private_key.pem does not exist, requiring HSM." fi - echo "* Copying deployment.json to config partition..." - cp /data/deployment.json /media/ - log_and_halt_installation_on_error "${?}" "Unable to copy deployment.json to hostOS config partition." - echo "* Copying NNS public key to hostOS config partition..." - cp /data/nns_public_key.pem /media/ - log_and_halt_installation_on_error "${?}" "Unable to copy NNS public key to hostOS config partition." + use_nns_public_key=$(get_config_value '.icos_settings.use_nns_public_key') + if [[ "${use_nns_public_key,,}" == "true" ]]; then + if [ -f "/data/nns_public_key.pem" ]; then + cp /data/nns_public_key.pem /media/ + log_and_halt_installation_on_error "${?}" "Unable to copy NNS public key to hostOS config partition." + else + log_and_halt_installation_on_error "1" "use_nns_public_key set to true but not found." + fi + else + log_and_halt_installation_on_error "1" "use_nns_public_key must be set to true." + fi + + echo "* Converting 'config.json' to hostOS config file 'config-hostos.json'..." + /opt/ic/bin/config generate-hostos-config + log_and_halt_installation_on_error "${?}" "Unable to generate hostos configuration." + + echo "* Copying 'config-hostos.json' to hostOS config partition..." + if [ -f "/var/ic/config/config-hostos.json" ]; then + cp /var/ic/config/config-hostos.json /media/config.json + log_and_halt_installation_on_error "${?}" "Unable to copy 'config-hostos.json' to hostOS config partition." + else + log_and_halt_installation_on_error "1" "Configuration file 'config-hostos.json' does not exist." + fi } function insert_hsm_if_necessary() { diff --git a/ic-os/components/setupos-scripts/setupos.sh b/ic-os/components/setupos-scripts/setupos.sh index 70c860207bf..bc4065653ff 100755 --- a/ic-os/components/setupos-scripts/setupos.sh +++ b/ic-os/components/setupos-scripts/setupos.sh @@ -39,8 +39,10 @@ main() { log_start "$(basename $0)" start_setupos /opt/ic/bin/check-setupos-age.sh + /opt/ic/bin/check-config.sh /opt/ic/bin/check-hardware.sh /opt/ic/bin/check-network.sh + /opt/ic/bin/check-ntp.sh if kernel_cmdline_bool_default_true ic.setupos.perform_installation; then true else diff --git a/ic-os/components/setupos.bzl b/ic-os/components/setupos.bzl index f5bf1323bef..1b5606b6a53 100644 --- a/ic-os/components/setupos.bzl +++ b/ic-os/components/setupos.bzl @@ -8,7 +8,7 @@ component_files = { # setupos-scripts Label("//ic-os/components/setupos-scripts:check-setupos-age.sh"): "/opt/ic/bin/check-setupos-age.sh", - Label("//ic-os/components/setupos-scripts:config.sh"): "/opt/ic/bin/config.sh", + Label("//ic-os/components/setupos-scripts:check-config.sh"): "/opt/ic/bin/check-config.sh", Label("//ic-os/components/setupos-scripts:setup-hostos-config.sh"): "/opt/ic/bin/setup-hostos-config.sh", Label("//ic-os/components/setupos-scripts:setup-disk.sh"): "/opt/ic/bin/setup-disk.sh", Label("//ic-os/components/setupos-scripts:functions.sh"): "/opt/ic/bin/functions.sh", @@ -16,6 +16,7 @@ component_files = { Label("//ic-os/components/setupos-scripts:check-hardware.sh"): "/opt/ic/bin/check-hardware.sh", Label("//ic-os/components/setupos-scripts:install-hostos.sh"): "/opt/ic/bin/install-hostos.sh", Label("//ic-os/components/setupos-scripts:check-network.sh"): "/opt/ic/bin/check-network.sh", + Label("//ic-os/components/setupos-scripts:check-ntp.sh"): "/opt/ic/bin/check-ntp.sh", Label("//ic-os/components/setupos-scripts:output-wrapper.sh"): "/opt/ic/bin/output-wrapper.sh", Label("//ic-os/components/setupos-scripts:setupos.sh"): "/opt/ic/bin/setupos.sh", Label("//ic-os/components/setupos-scripts:config.service"): "/etc/systemd/system/config.service", @@ -31,9 +32,9 @@ component_files = { # misc Label("misc/logging.sh"): "/opt/ic/bin/logging.sh", + Label("misc/config/setupos/config.sh"): "/opt/ic/bin/config.sh", Label("misc/chrony/chrony.conf"): "/etc/chrony/chrony.conf", Label("misc/chrony/chrony-var.service"): "/etc/systemd/system/chrony-var.service", - Label("misc/fetch-property.sh"): "/opt/ic/bin/fetch-property.sh", Label("misc/serial-getty@/setupos/override.conf"): "/etc/systemd/system/serial-getty@.service.d/override.conf", Label("monitoring/journald.conf"): "/etc/systemd/journald.conf", diff --git a/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.service b/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.service deleted file mode 100644 index cc1b47ef93e..00000000000 --- a/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Update ssh account keys -Before=setup-ssh-account-keys.service - -[Service] -Type=oneshot -RemainAfterExit=true -ExecStart=/opt/ic/bin/deploy-updated-ssh-account-keys.sh - -[Install] -RequiredBy=setup-ssh-account-keys.service -WantedBy=multi-user.target diff --git a/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.sh b/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.sh deleted file mode 100755 index 6bf2b739bb5..00000000000 --- a/ic-os/components/ssh/deploy-updated-ssh-account-keys/deploy-updated-ssh-account-keys.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -set -e - -# Update configured ssh keys for the role accounts if a newer version -# is available. - -# Only update readonly and backup keys. -for ACCOUNT in backup readonly; do - echo "Checking authorized keys for ${ACCOUNT}" - ORIGIN="/opt/ic/share/authorized_keys/${ACCOUNT}" - if [ ! -r "${ORIGIN}" ]; then - continue - fi - TARGET="/boot/config/ssh_authorized_keys/${ACCOUNT}" - if [ ! -r "${TARGET}" ]; then - echo "${ORIGIN} keys exist, but no ${TARGET} keys are present, skipping" - continue - fi - ORIGIN_ENV=$(head -n 1 $ORIGIN) - TARGET_ENV=$(head -n 1 $TARGET) - if [ "${TARGET_ENV:0:1}" != "#" ]; then - echo "Authorized keys for ${ACCOUNT} have no environment header, updating" - cp "${ORIGIN}" "${TARGET}" - elif [ "${TARGET_ENV}" = "${ORIGIN_ENV}" ]; then - # Target's environment matches, check which is newer. - ORIGIN_TIME=$(head -n 2 $ORIGIN | tail -n 1 | cut -c 3- | date -f - +%s) - TARGET_TIME=$(head -n 2 $TARGET | tail -n 1 | cut -c 3- | date -f - +%s) - if [ $ORIGIN_TIME -gt $TARGET_TIME ]; then - echo "Authorized keys for ${ACCOUNT} are too old, updating: ${ORIGIN_TIME} vs ${TARGET_TIME}" - cp "${ORIGIN}" "${TARGET}" - fi - else - echo "The environments do not match, skipping: ${ORIGIN_ENV} vs ${TARGET_ENV}" - fi -done diff --git a/ic-os/components/ssh/setup-ssh-keys/setup-ssh-keys.service b/ic-os/components/ssh/generate-host-ssh-keys/generate-host-ssh-keys.service similarity index 84% rename from ic-os/components/ssh/setup-ssh-keys/setup-ssh-keys.service rename to ic-os/components/ssh/generate-host-ssh-keys/generate-host-ssh-keys.service index b96b685dee3..fc87e3faf42 100644 --- a/ic-os/components/ssh/setup-ssh-keys/setup-ssh-keys.service +++ b/ic-os/components/ssh/generate-host-ssh-keys/generate-host-ssh-keys.service @@ -8,7 +8,7 @@ Before=ssh.service [Service] Type=oneshot RemainAfterExit=true -ExecStart=/opt/ic/bin/setup-ssh-keys.sh +ExecStart=/opt/ic/bin/generate-host-ssh-keys.sh [Install] WantedBy=multi-user.target diff --git a/ic-os/components/ssh/setup-ssh-keys/setup-ssh-keys.sh b/ic-os/components/ssh/generate-host-ssh-keys/generate-host-ssh-keys.sh similarity index 100% rename from ic-os/components/ssh/setup-ssh-keys/setup-ssh-keys.sh rename to ic-os/components/ssh/generate-host-ssh-keys/generate-host-ssh-keys.sh diff --git a/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-account-keys.service b/ic-os/components/ssh/setup-ssh-user-keys/setup-ssh-user-keys.service similarity index 82% rename from ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-account-keys.service rename to ic-os/components/ssh/setup-ssh-user-keys/setup-ssh-user-keys.service index 2a862b3f2c4..3fdbbaa3db0 100644 --- a/ic-os/components/boundary-guestos/etc/systemd/system/setup-ssh-account-keys.service +++ b/ic-os/components/ssh/setup-ssh-user-keys/setup-ssh-user-keys.service @@ -1,5 +1,5 @@ [Unit] -Description=Set up ssh account keys +Description=Set up ssh user keys Before=ssh.service # bootstrap-ic-node.service (if it exists) lists this service as a reverse dependency @@ -9,7 +9,7 @@ WantedBy=multi-user.target [Service] Type=oneshot RemainAfterExit=true -ExecStart=/opt/ic/bin/setup-ssh-account-keys.sh +ExecStart=/opt/ic/bin/setup-ssh-user-keys.sh # All services that networking depends on log their outputs to the console # and are piped to the host terminal if the verbose flag is enabled. diff --git a/ic-os/components/ssh/setup-ssh-account-keys/setup-ssh-account-keys.sh b/ic-os/components/ssh/setup-ssh-user-keys/setup-ssh-user-keys.sh similarity index 100% rename from ic-os/components/ssh/setup-ssh-account-keys/setup-ssh-account-keys.sh rename to ic-os/components/ssh/setup-ssh-user-keys/setup-ssh-user-keys.sh diff --git a/ic-os/defs.bzl b/ic-os/defs.bzl index a7484c2d786..3160f022e7b 100644 --- a/ic-os/defs.bzl +++ b/ic-os/defs.bzl @@ -123,7 +123,7 @@ def icos_build( build_args = image_deps["build_args"], file_build_arg = image_deps["file_build_arg"], target_compatible_with = ["@platforms//os:linux"], - tags = ["manual"], + tags = ["manual", "no-cache"], ) # Extract SElinux file_contexts to use later when building ext4 filesystems @@ -192,7 +192,7 @@ def icos_build( k: v for k, v in (image_deps["rootfs"].items() + [(":version.txt", "/opt/ic/share/version.txt:0644")]) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) # Inherit tags for this test, to avoid triggering builds for local base images @@ -213,16 +213,16 @@ def icos_build( k: v for k, v in (image_deps["rootfs"].items() + [(":version-test.txt", "/opt/ic/share/version.txt:0644")]) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) # When boot_args are fixed, don't bother signing if "boot_args_template" not in image_deps: - native.alias(name = "partition-root.tzst", actual = ":partition-root-unsigned.tzst", tags = ["manual"]) + native.alias(name = "partition-root.tzst", actual = ":partition-root-unsigned.tzst", tags = ["manual", "no-cache"]) native.alias(name = "extra_boot_args", actual = image_deps["extra_boot_args"], tags = ["manual"]) if upgrades: - native.alias(name = "partition-root-test.tzst", actual = ":partition-root-test-unsigned.tzst", tags = ["manual"]) + native.alias(name = "partition-root-test.tzst", actual = ":partition-root-test-unsigned.tzst", tags = ["manual", "no-cache"]) native.alias(name = "extra_boot_test_args", actual = image_deps["extra_boot_args"], tags = ["manual"]) else: native.alias(name = "extra_boot_args_template", actual = image_deps["boot_args_template"], tags = ["manual"]) @@ -235,7 +235,7 @@ def icos_build( cmd = "$(location //toolchains/sysimage:proc_wrapper) $(location //toolchains/sysimage:verity_sign.py) -i $< -o $(location :partition-root.tzst) -r $(location partition-root-hash) --dflate $(location //rs/ic_os/build_tools/dflate)", executable = False, tools = ["//toolchains/sysimage:proc_wrapper", "//toolchains/sysimage:verity_sign.py", "//rs/ic_os/build_tools/dflate"], - tags = ["manual"], + tags = ["manual", "no-cache"], ) native.genrule( @@ -257,7 +257,7 @@ def icos_build( outs = ["partition-root-test.tzst", "partition-root-test-hash"], cmd = "$(location //toolchains/sysimage:proc_wrapper) $(location //toolchains/sysimage:verity_sign.py) -i $< -o $(location :partition-root-test.tzst) -r $(location partition-root-test-hash) --dflate $(location //rs/ic_os/build_tools/dflate)", tools = ["//toolchains/sysimage:proc_wrapper", "//toolchains/sysimage:verity_sign.py", "//rs/ic_os/build_tools/dflate"], - tags = ["manual"], + tags = ["manual", "no-cache"], ) native.genrule( @@ -285,7 +285,7 @@ def icos_build( ] ) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) if upgrades: @@ -303,7 +303,7 @@ def icos_build( ] ) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) # -------------------- Assemble disk partitions --------------- @@ -326,7 +326,7 @@ def icos_build( ":partition-root.tzst", ] + custom_partitions, expanded_size = image_deps.get("expanded_size", default = None), - tags = ["manual"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], @@ -343,7 +343,7 @@ def icos_build( ":partition-root.tzst", ] + custom_partitions, expanded_size = image_deps.get("expanded_size", default = None), - tags = ["manual", "no-remote-cache"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], @@ -363,7 +363,7 @@ def icos_build( name = "update-img.tar", boot_partition = ":partition-boot.tzst", root_partition = ":partition-root.tzst", - tags = ["manual"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], @@ -381,7 +381,7 @@ def icos_build( name = "update-img-test.tar", boot_partition = ":partition-boot-test.tzst", root_partition = ":partition-root-test.tzst", - tags = ["manual"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], @@ -671,7 +671,7 @@ def boundary_node_icos_build( build_args = image_deps["build_args"], file_build_arg = image_deps["file_build_arg"], target_compatible_with = ["@platforms//os:linux"], - tags = ["manual"], + tags = ["manual", "no-cache"], ) # Helpful tool to print a hash of all input component files @@ -740,7 +740,7 @@ EOF ] ) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) ext4_image( @@ -764,7 +764,7 @@ EOF k: v for k, v in (image_deps["rootfs"].items() + [(":version.txt", "/opt/ic/share/version.txt:0644")]) }, - tags = ["manual"], + tags = ["manual", "no-cache"], ) native.genrule( @@ -774,7 +774,7 @@ EOF cmd = "$(location //toolchains/sysimage:proc_wrapper) $(location //toolchains/sysimage:verity_sign.py) -i $< -o $(location :partition-root.tzst) -r $(location partition-root-hash) --dflate $(location //rs/ic_os/build_tools/dflate)", executable = False, tools = ["//toolchains/sysimage:proc_wrapper", "//toolchains/sysimage:verity_sign.py", "//rs/ic_os/build_tools/dflate"], - tags = ["manual"], + tags = ["manual", "no-cache"], ) native.genrule( @@ -799,7 +799,7 @@ EOF ":partition-root.tzst", ], expanded_size = "50G", - tags = ["manual"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], diff --git a/ic-os/guestos/context/docker-base.dev b/ic-os/guestos/context/docker-base.dev index 186bb872351..6ceaed7818a 100644 --- a/ic-os/guestos/context/docker-base.dev +++ b/ic-os/guestos/context/docker-base.dev @@ -1 +1 @@ -ghcr.io/dfinity/guestos-base-dev@sha256:02fb794026866e0c67636e6abb46bec04a3cd2b38990ae401c18bbcb6290dfbd +ghcr.io/dfinity/guestos-base-dev@sha256:0e1875141caa0fd2bc1337f23a64d9baf2edba16fdae16f914ad8dc86d993a3a diff --git a/ic-os/guestos/context/docker-base.prod b/ic-os/guestos/context/docker-base.prod index 0be051a0045..689d7cb52a0 100644 --- a/ic-os/guestos/context/docker-base.prod +++ b/ic-os/guestos/context/docker-base.prod @@ -1 +1 @@ -ghcr.io/dfinity/guestos-base@sha256:72bda2acd0ce517f9f6a6f3900fc6b0c07a0a0a26b34b718ad04cc61e1eef1ea +ghcr.io/dfinity/guestos-base@sha256:e7f9a61a9359ff2757253f53145d2423fc5173ee9203a235bfa0c6157fb4bead diff --git a/ic-os/guestos/defs.bzl b/ic-os/guestos/defs.bzl index 1d4f3c570c2..aa2c7e36260 100644 --- a/ic-os/guestos/defs.bzl +++ b/ic-os/guestos/defs.bzl @@ -40,6 +40,7 @@ def image_deps(mode, malicious = False): "//publish/binaries:ic-boundary-tls": "/opt/ic/bin/ic-boundary:0755", # API boundary node binary, required by the IC protocol. The same GuestOS is used both for the replica and API boundary nodes. "//publish/binaries:ic-consensus-pool-util": "/opt/ic/bin/ic-consensus-pool-util:0755", # May be used during recoveries to export/import consensus pool artifacts. "//publish/binaries:ic-recovery": "/opt/ic/bin/ic-recovery:0755", # Required for performing subnet recoveries on the node directly. + "//publish/binaries:ic-admin": "/opt/ic/bin/ic-admin:0755", # Required for issuing recovery proposals directly from the node (primarily used for system tests). "//publish/binaries:state-tool": "/opt/ic/bin/state-tool:0755", # May be used during recoveries for calculating the state hash and inspecting the state more generally. "//publish/binaries:ic-regedit": "/opt/ic/bin/ic-regedit:0755", # May be used for inspecting and recovering the registry. # Required by the GuestOS @@ -54,7 +55,7 @@ def image_deps(mode, malicious = False): # additional libraries to install "//rs/ic_os/release:nss_icos": "/usr/lib/x86_64-linux-gnu/libnss_icos.so.2:0644", # Allows referring to the guest IPv6 by name guestos from host, and host as hostos from guest. - # TODO(NODE-1519): delete config tool from guestos after switch to new icos config + # TODO(NODE-1518): delete config tool from guestos after switch to new icos config "//rs/ic_os/release:config": "/opt/ic/bin/config:0755", }, diff --git a/ic-os/guestos/docs/Boot.adoc b/ic-os/guestos/docs/Boot.adoc index 6c94e394e59..b68d8a39afa 100644 --- a/ic-os/guestos/docs/Boot.adoc +++ b/ic-os/guestos/docs/Boot.adoc @@ -30,7 +30,7 @@ service are started in the IC-OS boot sequence: - IC node config injection -- Set up ssh account keys +- Set up ssh user keys - Generate network configuration @@ -57,7 +57,7 @@ not held in +/etc/fstab+ but is generated by the shell script Afterwards, the first three partitions are mounted as +/boot/efi+, +/boot/grub+ and +/boot/config+, respectively. The +config+ partition is used as (small) store for data that is preserved across upgrades -and is available at early boot time already (see link:ConfigStore{outfilesuffix}[config store]). +and is available at early boot time already. == Save machine-id @@ -111,7 +111,7 @@ system will set up its own +/var+ filesystem correctly again. == Set up ssh host keys -Service: +setup-ssh-keys.service+, script: +/opt/ic/bin/setup-ssh-keys.sh+, +Service: +generate-host-ssh-keys.service+, script: +/opt/ic/bin/generate-host-ssh-keys.sh+, depends on +/boot/config+ mount. This checks if ssh host keys for the system exist in the +config+ partition @@ -167,21 +167,12 @@ depends on mount of all filesystems. This is only executed once on first boot after provisioning. It looks for a "virtual USB stick" attached to the VM that contains a tar file with initial configuration -for parts of the system (see link:ConfigStore{outfilesuffix}[config store] for a description). Required -files in the +config+ partition as well as payload store are created. +for parts of the system. Required files in the +config+ partition as well as +payload store are created. -== Deploy updated ssh account keys +== Set up ssh user keys -Service: +deploy-updated-ssh-account-keys.service+, +deploy-updated-ssh-account-keys.sh+. -Depends on +bootstrap-ic-node.service+, runs before +setup-ssh-account-keys.service+. - -Changes the keys held in the +config+ partition for the +backup+ and +readonly+ user. This -is a work-around due to not having a key management solution that updated keys are -deployed via system upgrades. - -== Set up ssh account keys - -Service: +setup-ssh-account-keys.services+, script +/opt/ic/bin/setup-ssh-account-keys.sh+. +Service: +setup-ssh-user-keys.services+, script +/opt/ic/bin/setup-ssh-user-keys.sh+. Depends on +bootstrap-ic-node.service+. The +authorized_keys+ files for the role accounts are taken from the diff --git a/ic-os/guestos/docs/DiskLayout.adoc b/ic-os/guestos/docs/DiskLayout.adoc index 8a690680b9d..13dbcbd99f5 100644 --- a/ic-os/guestos/docs/DiskLayout.adoc +++ b/ic-os/guestos/docs/DiskLayout.adoc @@ -41,8 +41,6 @@ tampering). == *config* System config store Contains the config store persisted across system upgrades. -See link:ConfigStore{outfilesuffix}[config store] for a -specification of its contents. == *A_boot* / *B_boot* Boot partition for system A/B diff --git a/ic-os/guestos/docs/README.adoc b/ic-os/guestos/docs/README.adoc index 4caa2719d2c..92e95a07169 100644 --- a/ic-os/guestos/docs/README.adoc +++ b/ic-os/guestos/docs/README.adoc @@ -3,7 +3,6 @@ Refer to detailed documentation on: * link:DiskLayout{outfilesuffix}[Disk layout] -* link:ConfigStore{outfilesuffix}[GuestOS config store] * link:Boot{outfilesuffix}[Boot sequence] * link:SELinux{outfilesuffix}[SELinux security policy] * link:Interface{outfilesuffix}[GuestOS input/output interface] \ No newline at end of file diff --git a/ic-os/guestos/envs/local-base-dev/BUILD.bazel b/ic-os/guestos/envs/local-base-dev/BUILD.bazel index ab0d2b6e912..983caaffd07 100644 --- a/ic-os/guestos/envs/local-base-dev/BUILD.bazel +++ b/ic-os/guestos/envs/local-base-dev/BUILD.bazel @@ -10,7 +10,10 @@ icos_build( build_local_base_image = True, ic_version = "//bazel:rc_only_version.txt", image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upload_prefix = None, # Do not upload locally built base images visibility = ["//rs:ic-os-pkg"], ) diff --git a/ic-os/guestos/envs/local-base-prod/BUILD.bazel b/ic-os/guestos/envs/local-base-prod/BUILD.bazel index 021e01ce1ed..eaf48fd86cb 100644 --- a/ic-os/guestos/envs/local-base-prod/BUILD.bazel +++ b/ic-os/guestos/envs/local-base-prod/BUILD.bazel @@ -9,7 +9,10 @@ icos_build( name = "local-base-prod", build_local_base_image = True, image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upload_prefix = None, # Do not upload locally built base images visibility = ["//rs:ic-os-pkg"], ) diff --git a/ic-os/hostos/context/docker-base.dev b/ic-os/hostos/context/docker-base.dev index 5b16144300a..3d62df45489 100644 --- a/ic-os/hostos/context/docker-base.dev +++ b/ic-os/hostos/context/docker-base.dev @@ -1 +1 @@ -ghcr.io/dfinity/hostos-base-dev@sha256:bdb7f1419c1621fbd283603d1b191120b56c9b489bc26e133b1a867b4ae05fbb +ghcr.io/dfinity/hostos-base-dev@sha256:353bea0b3bd70a93e93af4c1d9be6a625e92148f888d7bb355bfc9b125d3d2c0 diff --git a/ic-os/hostos/context/docker-base.prod b/ic-os/hostos/context/docker-base.prod index 2e4702ceeec..63520b37301 100644 --- a/ic-os/hostos/context/docker-base.prod +++ b/ic-os/hostos/context/docker-base.prod @@ -1 +1 @@ -ghcr.io/dfinity/hostos-base@sha256:4ec891f7e7fc0409c736520016a4d3f752c2557ea0b4cd62d517ff2113cfe3e6 +ghcr.io/dfinity/hostos-base@sha256:fc4297ac6792091b2e483b7187827e35c52f646d67ca8f0b0e776a3ca89c32d5 diff --git a/ic-os/hostos/defs.bzl b/ic-os/hostos/defs.bzl index 114e6cb361a..f60ab207c02 100644 --- a/ic-os/hostos/defs.bzl +++ b/ic-os/hostos/defs.bzl @@ -97,7 +97,7 @@ def _custom_partitions(): vg_name = "hostlvm", vg_uuid = "4c7GVZ-Df82-QEcJ-xXtV-JgRL-IjLE-hK0FgA", pv_uuid = "eu0VQE-HlTi-EyRc-GceP-xZtn-3j6t-iqEwyv", - tags = ["manual"], + tags = ["manual", "no-cache"], target_compatible_with = [ "@platforms//os:linux", ], diff --git a/ic-os/hostos/envs/local-base-dev/BUILD.bazel b/ic-os/hostos/envs/local-base-dev/BUILD.bazel index 9d5e2c98427..b179b8ce556 100644 --- a/ic-os/hostos/envs/local-base-dev/BUILD.bazel +++ b/ic-os/hostos/envs/local-base-dev/BUILD.bazel @@ -10,7 +10,10 @@ icos_build( build_local_base_image = True, ic_version = "//bazel:rc_only_version.txt", image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upload_prefix = None, # Do not upload locally built base images visibility = ["//rs:ic-os-pkg"], vuln_scan = False, diff --git a/ic-os/hostos/envs/local-base-prod/BUILD.bazel b/ic-os/hostos/envs/local-base-prod/BUILD.bazel index 34c7e5523a3..afb5e210401 100644 --- a/ic-os/hostos/envs/local-base-prod/BUILD.bazel +++ b/ic-os/hostos/envs/local-base-prod/BUILD.bazel @@ -9,7 +9,10 @@ icos_build( name = "local-base-prod", build_local_base_image = True, image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upload_prefix = None, # Do not upload locally built base images visibility = ["//rs:ic-os-pkg"], vuln_scan = False, diff --git a/ic-os/setupos/context/docker-base.dev b/ic-os/setupos/context/docker-base.dev index 81392bdce94..89f1308adda 100644 --- a/ic-os/setupos/context/docker-base.dev +++ b/ic-os/setupos/context/docker-base.dev @@ -1 +1 @@ -ghcr.io/dfinity/setupos-base-dev@sha256:47121f9cda6f228db91d50a0e736e815b88ed7707cf93ce267dd4fd9535ca103 +ghcr.io/dfinity/setupos-base-dev@sha256:1df926805803b2dc37df20dba927ecd8206583b934295de483407067df829047 diff --git a/ic-os/setupos/context/docker-base.prod b/ic-os/setupos/context/docker-base.prod index 03cbcd1b529..cb738d39f98 100644 --- a/ic-os/setupos/context/docker-base.prod +++ b/ic-os/setupos/context/docker-base.prod @@ -1 +1 @@ -ghcr.io/dfinity/setupos-base@sha256:e5b31b465ce413f4ec5e938bf310ef7bd0704f9bf41aaa49e4b4cdc6cc2ea212 +ghcr.io/dfinity/setupos-base@sha256:33f77f8b963360c12d47dbf6ed77bcb86c4b6e8e055935f361089e28d51d145e diff --git a/ic-os/setupos/defs.bzl b/ic-os/setupos/defs.bzl index 325ebb995fa..294c14cb3b6 100644 --- a/ic-os/setupos/defs.bzl +++ b/ic-os/setupos/defs.bzl @@ -31,6 +31,7 @@ def image_deps(mode, _malicious = False): "bootfs": {}, "rootfs": { "//rs/ic_os/release:setupos_tool": "/opt/ic/bin/setupos_tool:0755", + "//rs/ic_os/release:config": "/opt/ic/bin/config:0755", }, # Set various configuration values @@ -80,11 +81,11 @@ def _custom_partitions(mode): if mode == "dev": guest_image = Label("//ic-os/guestos/envs/dev:disk-img.tar.zst") host_image = Label("//ic-os/hostos/envs/dev:disk-img.tar.zst") - nns_url = "https://wiki.internetcomputer.org" + nns_url = "https://cloudflare.com/cdn-cgi/trace" elif mode == "local-base-dev": guest_image = Label("//ic-os/guestos/envs/local-base-dev:disk-img.tar.zst") host_image = Label("//ic-os/hostos/envs/local-base-dev:disk-img.tar.zst") - nns_url = "https://wiki.internetcomputer.org" + nns_url = "https://cloudflare.com/cdn-cgi/trace" elif mode == "local-base-prod": guest_image = Label("//ic-os/guestos/envs/local-base-prod:disk-img.tar.zst") host_image = Label("//ic-os/hostos/envs/local-base-prod:disk-img.tar.zst") @@ -101,7 +102,7 @@ def _custom_partitions(mode): src = guest_image, out = "guest-os.img.tar.zst", allow_symlink = True, - tags = ["manual"], + tags = ["manual", "no-cache"], ) copy_file( @@ -109,7 +110,7 @@ def _custom_partitions(mode): src = host_image, out = "host-os.img.tar.zst", allow_symlink = True, - tags = ["manual"], + tags = ["manual", "no-cache"], ) config_dict = { @@ -158,7 +159,7 @@ def _custom_partitions(mode): ], mode = "0644", package_dir = "data", - tags = ["manual"], + tags = ["manual", "no-cache"], ) ext4_image( @@ -169,7 +170,7 @@ def _custom_partitions(mode): target_compatible_with = [ "@platforms//os:linux", ], - tags = ["manual"], + tags = ["manual", "no-cache"], ) return [ diff --git a/ic-os/setupos/envs/local-base-dev/BUILD.bazel b/ic-os/setupos/envs/local-base-dev/BUILD.bazel index 12ca12c676f..66712587e07 100644 --- a/ic-os/setupos/envs/local-base-dev/BUILD.bazel +++ b/ic-os/setupos/envs/local-base-dev/BUILD.bazel @@ -11,7 +11,10 @@ icos_build( build_local_base_image = True, ic_version = "//bazel:rc_only_version.txt", image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upgrades = False, upload_prefix = None, # Do not upload locally built base images visibility = ["//rs:ic-os-pkg"], diff --git a/ic-os/setupos/envs/local-base-prod/BUILD.bazel b/ic-os/setupos/envs/local-base-prod/BUILD.bazel index 3b564fe8583..948df7e85c3 100644 --- a/ic-os/setupos/envs/local-base-prod/BUILD.bazel +++ b/ic-os/setupos/envs/local-base-prod/BUILD.bazel @@ -10,7 +10,10 @@ icos_build( name = "local-base-prod", build_local_base_image = True, image_deps_func = image_deps, - tags = ["manual"], + tags = [ + "manual", + "no-cache", + ], upgrades = False, upload_prefix = None, # Do not upload locally built base images vuln_scan = False, diff --git a/mainnet-canister-revisions.json b/mainnet-canister-revisions.json index f044f082ec7..15a6cacb2cc 100644 --- a/mainnet-canister-revisions.json +++ b/mainnet-canister-revisions.json @@ -15,6 +15,18 @@ "rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a", "sha256": "25071c2c55ad4571293e00d8e277f442aec7aed88109743ac52df3125209ff45" }, + "ck_btc_ledger_v1": { + "rev": "d4ee25b0865e89d3eaac13a60f0016d5e3296b31", + "sha256": "a170bfdce5d66e751a3cc03747cb0f06b450af500e75e15976ec08a3f5691f4c" + }, + "ck_btc_ledger_v2": { + "rev": "e54d3fa34ded227c885d04e64505fa4b5d564743", + "sha256": "3d808fa63a3d8ebd4510c0400aa078e99a31afaa0515f0b68778f929ce4b2a46" + }, + "ck_btc_ledger_v2_noledgerversion": { + "rev": "aba60ffbc46acfc8990bf4d5685c1360bd7026b9", + "sha256": "67cfcbabb79e683b6fc855450d9972c9efaa7a1cd28c6387965616fbead191ea" + }, "ck_eth_archive": { "rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a", "sha256": "2d25f7831894100d48aa9043c65e87c293487523f0958c15760027d004fbbda9" @@ -27,17 +39,29 @@ "rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a", "sha256": "9637743e1215a4db376a62ee807a0986faf20833be2b332df09b3d5dbdd7339e" }, + "ck_eth_ledger_v1": { + "rev": "d4ee25b0865e89d3eaac13a60f0016d5e3296b31", + "sha256": "e6072806ae22868ee09c07923d093b1b0b687dba540d22cfc1e1a5392bfcca46" + }, + "ck_eth_ledger_v2": { + "rev": "e54d3fa34ded227c885d04e64505fa4b5d564743", + "sha256": "98a7b7391608dc4a554d6964bad24157b6aaf890a05bbaad3fcc92033d9c7b02" + }, + "ck_eth_ledger_v2_noledgerversion": { + "rev": "aba60ffbc46acfc8990bf4d5685c1360bd7026b9", + "sha256": "73d0c5f057aaf33004218ce588780e1b454c717c702b1cf47532f32c23515f1e" + }, "cycles-minting": { - "rev": "ee52ab3056cf5f39b09b08de70bdd20485c8b2dc", - "sha256": "bbb8995cb749ba9e2c721ff507f5e5313f32e69b1adf3df20e3901ed56a70b42" + "rev": "b5192581ccd35b67fe5a1f795ead9cbcd25956d6", + "sha256": "11c8dedd11741f05990498c90f925e9e37ad60647a65ef47caa59cdba234be6f" }, "genesis-token": { "rev": "4bed17bfc82cddc5691743db6228992cdc2740f4", "sha256": "fd25a4e2e283b498c3be1aaf63cc9b2726264d78a12b12f43ad453ceeb575e7c" }, "governance": { - "rev": "ee52ab3056cf5f39b09b08de70bdd20485c8b2dc", - "sha256": "a23918c2c5d1302e5d1149f557b0fb913ab65931c1bce3ffc94a48e3d14ecbac" + "rev": "b5192581ccd35b67fe5a1f795ead9cbcd25956d6", + "sha256": "5b67e1d273afb691a74ff29e0a495fb2ce7ee31196af58d801a8ce86a7dc4320" }, "index": { "rev": "7c6309cb5bec7ab28ed657ac7672af08a59fc1ba", @@ -48,16 +72,16 @@ "sha256": "a9ed1cb9dda555e0fc1038825eb7b3a6b366f17aa4b88575184c7537e864e551" }, "lifeline": { - "rev": "a0207146be211cdff83321c99e9e70baa62733c7", - "sha256": "76978515223287ece643bc7ca087eb310412b737e2382a73b8ae55fcb458da5b" + "rev": "b5192581ccd35b67fe5a1f795ead9cbcd25956d6", + "sha256": "8c8eb285de53ca5609abd7dc41ba3ec8eeb67708b81469311fd670e6738d7d0a" }, "registry": { - "rev": "86229594d61b433c39fc5331ab818ccb6c6aa6a7", - "sha256": "b0b2a7f37e76fcbab20a861fdf65c34d7ac2ca84a5190d204dfe5e1c50fb383e" + "rev": "a5878586e47536d4cd47f0aadb66b73df8131d2b", + "sha256": "f0fb8fa545b2cc68f030b040e1182a8d004c4d4f4bb4341c9f1b432642c85bef" }, "root": { - "rev": "c494c2af8bfc70a6501448dc73bf806477388738", - "sha256": "657010591182ce758c86f020d1eade5f7a188072cf0de9c41e2f9d577849c964" + "rev": "b5192581ccd35b67fe5a1f795ead9cbcd25956d6", + "sha256": "d3c702648ca4fb232f349bad7533c400c474a528abf62c05d4b100b4cdb91ce2" }, "sns-wasm": { "rev": "25c1bb0227d9970f5673b908817d7c4962b29911", @@ -68,8 +92,8 @@ "sha256": "f94cf1db965b7042197e5894fef54f5f413bb2ebc607ff0fb59c9d4dfd3babea" }, "sns_governance": { - "rev": "25c1bb0227d9970f5673b908817d7c4962b29911", - "sha256": "51fd3d1a529f3f7bad808b19074e761ce3538282ac8189bd7067b4156360c279" + "rev": "a5878586e47536d4cd47f0aadb66b73df8131d2b", + "sha256": "5e0547725b033e689f6c7381ca9555fbf09e5ed884178c8286b72e6b2c09e863" }, "sns_index": { "rev": "2190613d3b5bcd9b74c382b22d151580b8ac271a", @@ -84,11 +108,11 @@ "sha256": "3d808fa63a3d8ebd4510c0400aa078e99a31afaa0515f0b68778f929ce4b2a46" }, "sns_root": { - "rev": "aa91ecacdf3824e193e21b70e0127e8d3edab51a", - "sha256": "431cb333feb3f762f742b0dea58745633a2a2ca41075e9933183d850b4ddb259" + "rev": "a5878586e47536d4cd47f0aadb66b73df8131d2b", + "sha256": "dc243135057d13c48f71d2f0a4b8f5fc43ed525d579d97dde23e052dca15bf96" }, "swap": { - "rev": "aa91ecacdf3824e193e21b70e0127e8d3edab51a", - "sha256": "8313ac22d2ef0a0c1290a85b47f235cfa24ca2c96d095b8dbed5502483b9cd18" + "rev": "a5878586e47536d4cd47f0aadb66b73df8131d2b", + "sha256": "45408ed654561dfb17c84b86948dda9498aa0ba8ee669ae774e5faca830c4c24" } } \ No newline at end of file diff --git a/mainnet-subnet-revisions.json b/mainnet-subnet-revisions.json index c9c2bc7fd77..40844a4c1c4 100644 --- a/mainnet-subnet-revisions.json +++ b/mainnet-subnet-revisions.json @@ -1,6 +1,6 @@ { "subnets": { - "tdb26-jop6k-aogll-7ltgs-eruif-6kk7m-qpktf-gdiqx-mxtrf-vb5e6-eqe": "d9fe2076f677a08734bed90c67b1c3f4056ed621", - "io67a-2jmkw-zup3h-snbwi-g6a5n-rm5dn-b6png-lvdpl-nqnto-yih6l-gqe": "3e24396441e4c7380928d4e8b4ccff7de77d0e7e" + "tdb26-jop6k-aogll-7ltgs-eruif-6kk7m-qpktf-gdiqx-mxtrf-vb5e6-eqe": "aa705aaa621c2e0d4f146f3a1de801edcb0fa0d5", + "io67a-2jmkw-zup3h-snbwi-g6a5n-rm5dn-b6png-lvdpl-nqnto-yih6l-gqe": "233c1ee2ef68c1c8800b8151b2b9f38e17b8440a" } } \ No newline at end of file diff --git a/packages/ic-ethereum-types/src/serde_data/mod.rs b/packages/ic-ethereum-types/src/serde_data/mod.rs index 59902e43923..50b13ef7977 100644 --- a/packages/ic-ethereum-types/src/serde_data/mod.rs +++ b/packages/ic-ethereum-types/src/serde_data/mod.rs @@ -30,7 +30,7 @@ where { struct HexStrVisitor(PhantomData); - impl<'de, T> Visitor<'de> for HexStrVisitor + impl Visitor<'_> for HexStrVisitor where T: FromHex, ::Error: fmt::Display, diff --git a/packages/ic-ledger-hash-of/src/lib.rs b/packages/ic-ledger-hash-of/src/lib.rs index 584a9830fad..03716b1577d 100644 --- a/packages/ic-ledger-hash-of/src/lib.rs +++ b/packages/ic-ledger-hash-of/src/lib.rs @@ -93,7 +93,7 @@ impl<'de, T> Deserialize<'de> for HashOf { phantom: PhantomData, } - impl<'de, T> Visitor<'de> for HashOfVisitor { + impl Visitor<'_> for HashOfVisitor { type Value = HashOf; fn expecting(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/packages/ic-metrics-assert/BUILD.bazel b/packages/ic-metrics-assert/BUILD.bazel new file mode 100644 index 00000000000..5ee574d5a81 --- /dev/null +++ b/packages/ic-metrics-assert/BUILD.bazel @@ -0,0 +1,41 @@ +load("@rules_rust//rust:defs.bzl", "rust_doc", "rust_doc_test", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +[ + rust_library( + name = "ic-metrics-assert" + name_suffix, + srcs = glob(["src/**/*.rs"]), + crate_features = features, + crate_name = "ic_metrics_assert", + deps = [ + # Keep sorted. + "@crate_index//:candid", + "@crate_index//:regex", + "@crate_index//:serde", + "@crate_index//:serde_bytes", + ] + extra_deps, + ) + for (name_suffix, features, extra_deps) in [ + [ + "", + [], + [], + ], + [ + "_pocket_ic", + ["pocket_ic"], + ["//packages/pocket-ic"], + ], + ] +] + +rust_doc( + name = "doc", + crate = ":ic-metrics-assert", +) + +rust_doc_test( + name = "doc_test", + crate = ":ic-metrics-assert_pocket_ic", +) diff --git a/packages/ic-metrics-assert/CHANGELOG.md b/packages/ic-metrics-assert/CHANGELOG.md new file mode 100644 index 00000000000..11bddf32c5b --- /dev/null +++ b/packages/ic-metrics-assert/CHANGELOG.md @@ -0,0 +1,8 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] diff --git a/packages/ic-metrics-assert/Cargo.toml b/packages/ic-metrics-assert/Cargo.toml new file mode 100644 index 00000000000..bcf398c76d1 --- /dev/null +++ b/packages/ic-metrics-assert/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "ic-metrics-assert" +version = "0.1.0" +description = "Fluent assertions for metrics" +license = "Apache-2.0" +readme = "README.md" +include = ["src", "Cargo.toml", "CHANGELOG.md", "LICENSE", "README.md"] +repository = "https://github.com/dfinity/ic" +authors.workspace = true +edition.workspace = true +documentation.workspace = true + +[dependencies] +candid = { workspace = true } +pocket-ic = { path = "../../packages/pocket-ic", optional = true } +regex = "1.11.0" +serde = { workspace = true } +serde_bytes = { workspace = true } + +[features] +pocket_ic = ["dep:pocket-ic"] diff --git a/packages/ic-metrics-assert/LICENSE b/packages/ic-metrics-assert/LICENSE new file mode 120000 index 00000000000..c87d0654aa6 --- /dev/null +++ b/packages/ic-metrics-assert/LICENSE @@ -0,0 +1 @@ +../../licenses/Apache-2.0.txt \ No newline at end of file diff --git a/packages/ic-metrics-assert/README.md b/packages/ic-metrics-assert/README.md new file mode 100644 index 00000000000..c8aa2c45cc8 --- /dev/null +++ b/packages/ic-metrics-assert/README.md @@ -0,0 +1,3 @@ +# IC Metrics Assert + +This package defines test utilities to perform assertions on canister metrics collected by Prometheus. diff --git a/packages/ic-metrics-assert/src/lib.rs b/packages/ic-metrics-assert/src/lib.rs new file mode 100644 index 00000000000..173fb85fbfb --- /dev/null +++ b/packages/ic-metrics-assert/src/lib.rs @@ -0,0 +1,180 @@ +//! Fluent assertions for metrics. + +#![forbid(missing_docs)] + +use candid::{CandidType, Decode, Deserialize, Encode}; +use regex::Regex; +use std::fmt::Debug; + +/// Provides fluent test assertions for metrics. +/// +/// # Examples +/// +/// ```rust +/// use ic_metrics_assert::{MetricsAssert, PocketIcHttpQuery}; +/// use pocket_ic::{management_canister::CanisterId, PocketIc}; +/// +/// struct Setup { +/// env: PocketIc, +/// canister_id : CanisterId, +/// } +/// +/// impl Setup { +/// pub fn check_metrics(self) -> MetricsAssert { +/// MetricsAssert::from_http_query(self) +/// } +/// } +/// +/// impl PocketIcHttpQuery for Setup { +/// fn get_pocket_ic(&self) -> &PocketIc { +/// &self.env +/// } +/// +/// fn get_canister_id(&self) -> CanisterId { +/// self.canister_id +/// } +/// } +/// +/// fn assert_metrics () { +/// use pocket_ic::PocketIcBuilder; +/// use candid::Principal; +/// +/// let env = PocketIcBuilder::new().build(); +/// let canister_id = Principal::from_text("7hfb6-caaaa-aaaar-qadga-cai").unwrap(); +/// let setup = Setup {env, canister_id}; +/// +/// setup +/// .check_metrics() +/// .assert_contains_metric_matching("started action \\d+") +/// .assert_contains_metric_matching("completed action 1") +/// .assert_does_not_contain_metric_matching(".*trap.*"); +/// } +pub struct MetricsAssert { + actual: T, + metrics: Vec, +} + +impl MetricsAssert { + /// Initializes an instance of [MetricsAssert] by querying the metrics from the `/metrics` + /// endpoint of a canister via the [CanisterHttpQuery::http_query] method. + pub fn from_http_query(actual: T) -> Self + where + T: CanisterHttpQuery, + E: Debug, + { + let request = http::HttpRequest { + method: "GET".to_string(), + url: "/metrics".to_string(), + headers: Default::default(), + body: Default::default(), + }; + let response = Decode!( + &actual + .http_query(Encode!(&request).expect("failed to encode HTTP request")) + .expect("failed to retrieve metrics"), + http::HttpResponse + ) + .unwrap(); + assert_eq!(response.status_code, 200_u16); + let metrics = String::from_utf8_lossy(response.body.as_slice()) + .trim() + .split('\n') + .map(|line| line.to_string()) + .collect::>(); + Self { metrics, actual } + } + + /// Returns the internal instance being tested. + pub fn into(self) -> T { + self.actual + } + + /// Asserts that the metrics contain at least one entry matching the given Regex pattern. + pub fn assert_contains_metric_matching(self, pattern: &str) -> Self { + assert!( + !self.find_metrics_matching(pattern).is_empty(), + "Expected to find metric matching '{}', but none matched in:\n{:?}", + pattern, + self.metrics + ); + self + } + + /// Asserts that the metrics do not contain any entries matching the given Regex pattern. + pub fn assert_does_not_contain_metric_matching(self, pattern: &str) -> Self { + let matches = self.find_metrics_matching(pattern); + assert!( + matches.is_empty(), + "Expected not to find any metric matching '{}', but found the following matches:\n{:?}", + pattern, + matches + ); + self + } + + fn find_metrics_matching(&self, pattern: &str) -> Vec { + let regex = Regex::new(pattern).unwrap_or_else(|_| panic!("Invalid regex: {}", pattern)); + self.metrics + .iter() + .filter(|line| regex.is_match(line)) + .cloned() + .collect() + } +} + +/// Trait providing the ability to perform an HTTP request to a canister. +pub trait CanisterHttpQuery { + /// Sends a serialized HTTP request to a canister and returns the serialized HTTP response. + fn http_query(&self, request: Vec) -> Result, E>; +} + +#[cfg(feature = "pocket_ic")] +pub use pocket_ic_query_call::PocketIcHttpQuery; + +#[cfg(feature = "pocket_ic")] +mod pocket_ic_query_call { + use super::*; + use candid::Principal; + use pocket_ic::{management_canister::CanisterId, PocketIc, RejectResponse}; + + /// Provides an implementation of the [CanisterHttpQuery] trait in the case where the canister + /// HTTP requests are made through an instance of [PocketIc]. + pub trait PocketIcHttpQuery { + /// Returns a reference to the instance of [PocketIc] through which the HTTP requests are made. + fn get_pocket_ic(&self) -> &PocketIc; + + /// Returns the ID of the canister to which HTTP requests will be made. + fn get_canister_id(&self) -> CanisterId; + } + + impl CanisterHttpQuery for T { + fn http_query(&self, request: Vec) -> Result, RejectResponse> { + self.get_pocket_ic().query_call( + self.get_canister_id(), + Principal::anonymous(), + "http_request", + request, + ) + } + } +} + +mod http { + use super::*; + use serde_bytes::ByteBuf; + + #[derive(Clone, Debug, CandidType, Deserialize)] + pub struct HttpRequest { + pub method: String, + pub url: String, + pub headers: Vec<(String, String)>, + pub body: ByteBuf, + } + + #[derive(Clone, Debug, CandidType, Deserialize)] + pub struct HttpResponse { + pub status_code: u16, + pub headers: Vec<(String, String)>, + pub body: ByteBuf, + } +} diff --git a/packages/ic-sha3/BUILD.bazel b/packages/ic-sha3/BUILD.bazel index 65f411d555a..641d0acc48d 100644 --- a/packages/ic-sha3/BUILD.bazel +++ b/packages/ic-sha3/BUILD.bazel @@ -28,7 +28,7 @@ rust_test_suite( srcs = glob( ["tests/*.rs"], ), - data = [ + compile_data = [ "test_resources/SHAKE256ShortMsg_subset.rsp", "test_resources/SHAKE256VariableOut_subset.rsp", ], diff --git a/packages/ic-signature-verification/Cargo.toml b/packages/ic-signature-verification/Cargo.toml index b0ef343ccee..d3a4d919490 100644 --- a/packages/ic-signature-verification/Cargo.toml +++ b/packages/ic-signature-verification/Cargo.toml @@ -13,7 +13,7 @@ documentation = "https://docs.rs/ic-signature-verification" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -ic-canister-sig-creation = "1.0" +ic-canister-sig-creation = { workspace = true } ic-certification = { workspace = true } ic-verify-bls-signature = { version = "0.6", default-features = false, features = [ "alloc", diff --git a/packages/icrc-cbor/CHANGELOG.md b/packages/icrc-cbor/CHANGELOG.md index 0d523739a83..35d42ec0e9a 100644 --- a/packages/icrc-cbor/CHANGELOG.md +++ b/packages/icrc-cbor/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## 0.1.0 + ### Added - Initial version of the library diff --git a/packages/icrc-ledger-types/CHANGELOG.md b/packages/icrc-ledger-types/CHANGELOG.md index 4d367351f7c..f434ae8fc19 100644 --- a/packages/icrc-ledger-types/CHANGELOG.md +++ b/packages/icrc-ledger-types/CHANGELOG.md @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## 0.1.8 + +### Added + +- Add default encoding and decoding of a Principal in a Subaccount. + +## 0.1.7 + +### Added + +- Rustdoc. + ## 0.1.6 ### Added diff --git a/packages/icrc-ledger-types/Cargo.toml b/packages/icrc-ledger-types/Cargo.toml index cac51dc29ab..3164c145c7f 100644 --- a/packages/icrc-ledger-types/Cargo.toml +++ b/packages/icrc-ledger-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icrc-ledger-types" -version = "0.1.6" +version = "0.1.8" description = "Types for interacting with DFINITY's implementation of the ICRC-1 fungible token standard." license = "Apache-2.0" readme = "README.md" @@ -16,7 +16,7 @@ candid = { workspace = true } crc32fast = "1.2.0" hex = { workspace = true } ic-stable-structures = { workspace = true } -icrc-cbor = { path = "../icrc-cbor" } +icrc-cbor = { path = "../icrc-cbor", version = "0.1.0" } itertools = { workspace = true } minicbor = { workspace = true } num-bigint = { workspace = true } diff --git a/packages/icrc-ledger-types/src/icrc/generic_metadata_value.rs b/packages/icrc-ledger-types/src/icrc/generic_metadata_value.rs index a46c9c33bc8..bb5f4d169cd 100644 --- a/packages/icrc-ledger-types/src/icrc/generic_metadata_value.rs +++ b/packages/icrc-ledger-types/src/icrc/generic_metadata_value.rs @@ -2,7 +2,12 @@ use candid::{CandidType, Deserialize, Int, Nat}; use serde::Serialize; use serde_bytes::ByteBuf; -/// Variant type for the `metadata` endpoint values. +/// Variant type for the `icrc1_metadata` endpoint values. The corresponding metadata keys are +/// arbitrary Unicode strings and must follow the pattern `:`, where `` +/// is a string not containing colons. The namespace `icrc1` is reserved for keys defined in the +/// ICRC-1 standard. For more information, see the +/// [documentation of Metadata in the ICRC-1 standard](https://github.com/dfinity/ICRC-1/tree/main/standards/ICRC-1#metadata). +/// Note that the `MetadataValue` type is a subset of the [`icrc_ledger_types::icrc::generic_value::ICRC3Value`] type. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub enum MetadataValue { Nat(Nat), @@ -12,6 +17,7 @@ pub enum MetadataValue { } impl MetadataValue { + /// Create a `(String, MetadataValue)` tuple for use in metadata maps. pub fn entry(key: impl ToString, val: impl Into) -> (String, Self) { (key.to_string(), val.into()) } diff --git a/packages/icrc-ledger-types/src/icrc/generic_value.rs b/packages/icrc-ledger-types/src/icrc/generic_value.rs index c7994cd193f..47b931e0037 100644 --- a/packages/icrc-ledger-types/src/icrc/generic_value.rs +++ b/packages/icrc-ledger-types/src/icrc/generic_value.rs @@ -15,6 +15,7 @@ pub type Map = BTreeMap; pub type ICRC3Map = BTreeMap; pub type Hash = [u8; 32]; +/// A value defined in [the ICRC-3 standard](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#value). #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum ICRC3Value { Blob(ByteBuf), @@ -33,6 +34,7 @@ impl std::fmt::Display for ICRC3Value { } impl ICRC3Value { + /// Compute [the hash of an ICRC-3 value](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#value). pub fn hash(self) -> Hash { // TODO(FI-1263): copy the value hash function to avoid cloning self Value::from(self).hash() diff --git a/packages/icrc-ledger-types/src/icrc/mod.rs b/packages/icrc-ledger-types/src/icrc/mod.rs index 299fac452e6..3ed31f22887 100644 --- a/packages/icrc-ledger-types/src/icrc/mod.rs +++ b/packages/icrc-ledger-types/src/icrc/mod.rs @@ -1,3 +1,5 @@ +//! Types for ICRC standards. + pub mod generic_metadata_value; pub mod generic_value; pub mod generic_value_predicate; diff --git a/packages/icrc-ledger-types/src/icrc1/account.rs b/packages/icrc-ledger-types/src/icrc1/account.rs index 96254ffbd17..6eacf6406a5 100644 --- a/packages/icrc-ledger-types/src/icrc1/account.rs +++ b/packages/icrc-ledger-types/src/icrc1/account.rs @@ -15,7 +15,8 @@ pub type Subaccount = [u8; 32]; pub const DEFAULT_SUBACCOUNT: &Subaccount = &[0; 32]; -// Account representation of ledgers supporting the ICRC1 standard +/// [Account](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#value) +/// representation of ledgers supporting the ICRC-1 standard. #[derive(Serialize, CandidType, Deserialize, Clone, Debug, Copy, Encode, Decode)] pub struct Account { #[cbor(n(0), with = "icrc_cbor::principal")] @@ -25,6 +26,8 @@ pub struct Account { } impl Account { + /// The effective subaccount of an account - the subaccount if it is set, otherwise the default + /// subaccount of all zeroes. #[inline] pub fn effective_subaccount(&self) -> &Subaccount { self.subaccount.as_ref().unwrap_or(DEFAULT_SUBACCOUNT) @@ -188,6 +191,23 @@ impl Storable for Account { const BOUND: Bound = Bound::Unbounded; } +/// Maps a `Principal` to a `Subaccount`. +/// Can be used to create a separate `Subaccount` for each `Principal`. +pub fn principal_to_subaccount(principal: Principal) -> Subaccount { + let mut subaccount = [0; 32]; + let principal = principal.as_slice(); + subaccount[0] = principal.len().try_into().unwrap(); + subaccount[1..1 + principal.len()].copy_from_slice(principal); + subaccount +} + +/// Maps a `Subaccount` to a `Principal`. +/// Reverse of `principal_to_subaccount` above. +pub fn subaccount_to_principal(subaccount: Subaccount) -> Principal { + let len = subaccount[0] as usize; + Principal::from_slice(&subaccount[1..len + 1]) +} + #[cfg(test)] mod tests { use assert_matches::assert_matches; @@ -199,7 +219,9 @@ mod tests { use candid::Principal; - use crate::icrc1::account::{Account, ICRC1TextReprError}; + use crate::icrc1::account::{ + principal_to_subaccount, subaccount_to_principal, Account, ICRC1TextReprError, + }; pub fn principal_strategy() -> impl Strategy { let bytes_strategy = prop::collection::vec(0..=255u8, 29); @@ -356,6 +378,15 @@ mod tests { }) } + #[test] + fn test_principal_to_subaccount() { + use proptest::{prop_assert_eq, proptest}; + proptest!(|(principal in principal_strategy())| { + let subaccount = principal_to_subaccount(principal); + prop_assert_eq!(subaccount_to_principal(subaccount), principal); + }) + } + #[test] fn test_account_serialization_stability() { let owner = diff --git a/packages/icrc-ledger-types/src/icrc1/mod.rs b/packages/icrc-ledger-types/src/icrc1/mod.rs index 365317be2b5..9e2517c5dd8 100644 --- a/packages/icrc-ledger-types/src/icrc1/mod.rs +++ b/packages/icrc-ledger-types/src/icrc1/mod.rs @@ -1,2 +1,5 @@ +//! The [ICRC-1](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-1/README.md) +//! token standard. + pub mod account; pub mod transfer; diff --git a/packages/icrc-ledger-types/src/icrc1/transfer.rs b/packages/icrc-ledger-types/src/icrc1/transfer.rs index ba1e3b62a2e..961d98f8199 100644 --- a/packages/icrc-ledger-types/src/icrc1/transfer.rs +++ b/packages/icrc-ledger-types/src/icrc1/transfer.rs @@ -7,6 +7,7 @@ use std::fmt; pub type NumTokens = Nat; pub type BlockIndex = Nat; +/// The arguments for the [ICRC-1 `transfer`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-1/README.md#icrc1_transfer-) endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct TransferArg { #[serde(default)] @@ -21,6 +22,9 @@ pub struct TransferArg { pub amount: NumTokens, } +/// The [`Memo`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-1/README.md#icrc1_transfer-) +/// is an arbitrary blob that has no meaning to the ledger. The ledger SHOULD allow memos of at +/// least 32 bytes in length. #[derive( Serialize, Deserialize, CandidType, Clone, Hash, Debug, PartialEq, Eq, PartialOrd, Ord, Default, )] @@ -51,6 +55,9 @@ impl From for ByteBuf { } } +/// Errors defined for the +/// [ICRC-1 `transfer`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-1/README.md#icrc1_transfer-) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub enum TransferError { BadFee { expected_fee: NumTokens }, diff --git a/packages/icrc-ledger-types/src/icrc2/allowance.rs b/packages/icrc-ledger-types/src/icrc2/allowance.rs index aebda165fbb..72f9f6a36d8 100644 --- a/packages/icrc-ledger-types/src/icrc2/allowance.rs +++ b/packages/icrc-ledger-types/src/icrc2/allowance.rs @@ -3,12 +3,18 @@ use serde::Serialize; use super::super::icrc1::account::Account; +/// The arguments for the +/// [ICRC-2 `allowance`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_allowance) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct AllowanceArgs { pub account: Account, pub spender: Account, } +/// The `Allowance` response type for the +/// [ICRC-2 `allowance`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_allowance) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct Allowance { pub allowance: Nat, diff --git a/packages/icrc-ledger-types/src/icrc2/approve.rs b/packages/icrc-ledger-types/src/icrc2/approve.rs index b85f625fbdf..b1d68f9bd56 100644 --- a/packages/icrc-ledger-types/src/icrc2/approve.rs +++ b/packages/icrc-ledger-types/src/icrc2/approve.rs @@ -5,6 +5,9 @@ use std::fmt; use super::super::icrc1::account::{Account, Subaccount}; use super::super::icrc1::transfer::Memo; +/// The arguments for the +/// [ICRC-2 `approve`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_approve) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct ApproveArgs { #[serde(default)] @@ -23,6 +26,9 @@ pub struct ApproveArgs { pub created_at_time: Option, } +/// The error return type for the +/// [ICRC-2 `approve`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_approve) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub enum ApproveError { BadFee { expected_fee: Nat }, diff --git a/packages/icrc-ledger-types/src/icrc2/mod.rs b/packages/icrc-ledger-types/src/icrc2/mod.rs index 29e6531d0d6..6d59e037dbd 100644 --- a/packages/icrc-ledger-types/src/icrc2/mod.rs +++ b/packages/icrc-ledger-types/src/icrc2/mod.rs @@ -1,3 +1,5 @@ +//! The [ICRC-2](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md) +//! Approve and Transfer From standard. pub mod allowance; pub mod approve; pub mod transfer_from; diff --git a/packages/icrc-ledger-types/src/icrc2/transfer_from.rs b/packages/icrc-ledger-types/src/icrc2/transfer_from.rs index 33d599fbbd0..f4136e1d216 100644 --- a/packages/icrc-ledger-types/src/icrc2/transfer_from.rs +++ b/packages/icrc-ledger-types/src/icrc2/transfer_from.rs @@ -5,6 +5,9 @@ use std::fmt; use super::super::icrc1::account::{Account, Subaccount}; use super::super::icrc1::transfer::Memo; +/// The arguments for the +/// [ICRC-2 `transfer_from`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_transfer_from) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct TransferFromArgs { #[serde(default)] @@ -20,6 +23,9 @@ pub struct TransferFromArgs { pub created_at_time: Option, } +/// The error return type for the +/// [ICRC-2 `transfer_from`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md#icrc2_transfer_from) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub enum TransferFromError { BadFee { expected_fee: Nat }, diff --git a/packages/icrc-ledger-types/src/icrc21/mod.rs b/packages/icrc-ledger-types/src/icrc21/mod.rs index 7017638351d..3b4af7afacc 100644 --- a/packages/icrc-ledger-types/src/icrc21/mod.rs +++ b/packages/icrc-ledger-types/src/icrc21/mod.rs @@ -1,3 +1,6 @@ +//! The [ICRC-21](https://github.com/dfinity/wg-identity-authentication/blob/main/topics/ICRC-21/icrc_21_consent_msg.md) +//! Canister Call Consent Messages standard. + pub mod errors; pub mod lib; pub mod requests; diff --git a/packages/icrc-ledger-types/src/icrc3/archive.rs b/packages/icrc-ledger-types/src/icrc3/archive.rs index ddc69ba4d57..91ad27c9799 100644 --- a/packages/icrc-ledger-types/src/icrc3/archive.rs +++ b/packages/icrc-ledger-types/src/icrc3/archive.rs @@ -8,6 +8,10 @@ use candid::{CandidType, Deserialize, Nat, Principal}; use serde::Serialize; use std::marker::PhantomData; +/// Deprecated. The information in the `ArchivedRange` struct is returned as part of the return value +/// of [`crate::icrc3::blocks::GetBlocksResult`] from the +/// [`icrc3_get_blocks`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct ArchivedRange { pub start: Nat, @@ -15,6 +19,10 @@ pub struct ArchivedRange { pub callback: Callback, } +/// Details on the callback function using which archived blocks can be retrieved. Returned as part +/// of [`crate::icrc3::blocks::GetBlocksResult`] from the +/// [`icrc3_get_blocks`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint. #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(try_from = "candid::types::reference::Func")] pub struct QueryArchiveFn { @@ -108,6 +116,7 @@ impl CandidType for QueryArchiveFn; pub type QueryTxArchiveFn = QueryArchiveFn; +/// The argument for the +/// [`icrc3_get_archives`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct GetArchivesArgs { // The last archive seen by the client. @@ -126,6 +138,9 @@ pub struct GetArchivesArgs { pub from: Option, } +/// The information returned as part of the return value for the +/// [`icrc3_get_archives`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct ICRC3ArchiveInfo { // The id of the archive @@ -138,4 +153,7 @@ pub struct ICRC3ArchiveInfo { pub end: Nat, } +/// The return value for the +/// [`icrc3_get_archives`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint. pub type GetArchivesResult = Vec; diff --git a/packages/icrc-ledger-types/src/icrc3/blocks.rs b/packages/icrc-ledger-types/src/icrc3/blocks.rs index 3d44dc263bf..fb4873e54d3 100644 --- a/packages/icrc-ledger-types/src/icrc3/blocks.rs +++ b/packages/icrc-ledger-types/src/icrc3/blocks.rs @@ -8,7 +8,7 @@ use serde_bytes::ByteBuf; use super::archive::QueryArchiveFn; -/// Deprecated, use `ICRC3GenericBlock` instead +/// Deprecated, use [`ICRC3GenericBlock`] instead pub type GenericBlock = Value; pub type ICRC3GenericBlock = ICRC3Value; @@ -22,18 +22,23 @@ pub struct GetBlocksResponse { pub archived_blocks: Vec>, } +/// A block with an ID. Returned as part of [`GetBlocksResult`]. #[derive(Debug, CandidType, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct BlockWithId { pub id: Nat, pub block: ICRC3GenericBlock, } +/// Information about where to find archived blocks. Returned as part of [`GetBlocksResult`]. #[derive(Debug, CandidType, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct ArchivedBlocks { pub args: Vec, pub callback: QueryArchiveFn, GetBlocksResult>, } +/// The result type for the +/// [ICRC-3 `icrc3_get_blocks`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#icrc3_get_blocks) +/// endpoint. #[derive(Debug, CandidType, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct GetBlocksResult { pub log_length: Nat, @@ -41,12 +46,16 @@ pub struct GetBlocksResult { pub archived_blocks: Vec, } +/// The arguments for the +/// [ICRC-3 `icrc3_get_blocks`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#icrc3_get_blocks) +/// endpoint. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct GetBlocksRequest { pub start: BlockIndex, pub length: Nat, } +/// The return type for the deprecated `get_blocks` endpoint of the archive canister. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct BlockRange { pub blocks: Vec, @@ -81,12 +90,18 @@ pub struct DataCertificate { pub hash_tree: serde_bytes::ByteBuf, } +/// The data certificate returned from the +/// [ICRC-3 `icrc3_get_tip_certificate`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#icrc3_get_tip_certificate) +/// endpoint. #[derive(Debug, CandidType, Serialize, Deserialize)] pub struct ICRC3DataCertificate { pub certificate: serde_bytes::ByteBuf, pub hash_tree: serde_bytes::ByteBuf, } +/// The return type of the +/// [ICRC-3 `icrc3_supported_block_types`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md#icrc3_supported_block_types) +/// endpoint. #[derive(Debug, CandidType, Serialize, Deserialize)] pub struct SupportedBlockType { pub block_type: String, diff --git a/packages/icrc-ledger-types/src/icrc3/mod.rs b/packages/icrc-ledger-types/src/icrc3/mod.rs index db50aef6ccf..fd1572dd8ed 100644 --- a/packages/icrc-ledger-types/src/icrc3/mod.rs +++ b/packages/icrc-ledger-types/src/icrc3/mod.rs @@ -1,3 +1,6 @@ +//! The [ICRC-3](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +//! Block Log standard. + pub mod archive; pub mod blocks; pub mod schema; diff --git a/packages/icrc-ledger-types/src/icrc3/schema.rs b/packages/icrc-ledger-types/src/icrc3/schema.rs index 95b1fa75b03..3ebd7453728 100644 --- a/packages/icrc-ledger-types/src/icrc3/schema.rs +++ b/packages/icrc-ledger-types/src/icrc3/schema.rs @@ -8,6 +8,7 @@ use crate::icrc::{ }, }; +/// Validate if a block is compatible with the ICRC-3 schema. // TODO(FI-1241): make it compatible with the final ICRC-3 schema pub fn validate(block: &Value) -> Result<(), ValuePredicateFailures> { use ItemRequirement::*; diff --git a/packages/icrc-ledger-types/src/icrc3/transactions.rs b/packages/icrc-ledger-types/src/icrc3/transactions.rs index ff6fd3575d7..e6f9f06141b 100644 --- a/packages/icrc-ledger-types/src/icrc3/transactions.rs +++ b/packages/icrc-ledger-types/src/icrc3/transactions.rs @@ -113,6 +113,9 @@ impl Transaction { } } +/// Deprecated. Use [`GetBlocksResponse`] returned from the +/// [`icrc3_get_blocks`](https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-3/README.md) +/// endpoint instead. #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct GetTransactionsResponse { pub log_length: Nat, @@ -121,6 +124,7 @@ pub struct GetTransactionsResponse { pub archived_transactions: Vec>, } +/// Deprecated. Use Vec<[`ICRC3GenericBlock`]> instead #[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] pub struct TransactionRange { pub transactions: Vec, diff --git a/packages/icrc-ledger-types/src/lib.rs b/packages/icrc-ledger-types/src/lib.rs index f532acb4880..454b5d6b2cb 100644 --- a/packages/icrc-ledger-types/src/lib.rs +++ b/packages/icrc-ledger-types/src/lib.rs @@ -1,3 +1,5 @@ +//! A library of types to communicate with a ledger canister that implements ICRC standards. + pub mod icrc; pub mod icrc1; pub mod icrc2; diff --git a/packages/pocket-ic/BUILD.bazel b/packages/pocket-ic/BUILD.bazel index 2368533d235..d1b13dae4ae 100644 --- a/packages/pocket-ic/BUILD.bazel +++ b/packages/pocket-ic/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test", "rust_test_suite") +load("@rules_rust//rust:defs.bzl", "rust_doc_test", "rust_library", "rust_test", "rust_test_suite") package(default_visibility = ["//visibility:public"]) @@ -33,6 +33,7 @@ MACRO_DEPENDENCIES = [ TEST_DEPENDENCIES = [ # Keep sorted. "//rs/types/error_types", + "@crate_index//:bitcoin", "@crate_index//:candid_parser", "@crate_index//:ed25519-dalek", "@crate_index//:flate2", @@ -50,6 +51,11 @@ rust_library( deps = DEPENDENCIES, ) +rust_doc_test( + name = "pocket-ic-doc-test", + crate = ":pocket-ic", +) + rust_test( name = "pocket-ic-test", srcs = glob(["src/**/*.rs"]), diff --git a/packages/pocket-ic/CHANGELOG.md b/packages/pocket-ic/CHANGELOG.md index 1bf0fe02b18..1818992860f 100644 --- a/packages/pocket-ic/CHANGELOG.md +++ b/packages/pocket-ic/CHANGELOG.md @@ -10,10 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - The function `PocketIcBuilder::with_bitcoind_addrs` to specify multiple addresses and ports at which `bitcoind` processes are listening. - The function `PocketIc::query_call_with_effective_principal` for making generic query calls (including management canister query calls). -- The function `PocketIc::ingress_status` to fetch the status of an update call submitted through an ingress message (`None` means that the status is unknown yet). +- The function `PocketIc::ingress_status` to fetch the status of an update call submitted through an ingress message. +- The function `PocketIc::ingress_status_as` to fetch the status of an update call submitted through an ingress message. + If the status of the update call is known, but the update call was submitted by a different caller, then an error is returned. - The function `PocketIc::await_call_no_ticks` to await the status of an update call (submitted through an ingress message) becoming known without triggering round execution (round execution must be triggered separarely, e.g., on a "live" instance or by separate PocketIC library calls). +### Changed +- The response types `pocket_ic::WasmResult`, `pocket_ic::UserError`, and `pocket_ic::CallError` are replaced by a single reject response type `pocket_ic::RejectResponse`. + ## 6.0.0 - 2024-11-13 diff --git a/packages/pocket-ic/Cargo.toml b/packages/pocket-ic/Cargo.toml index 01e3ad0f479..fbf1a1555bf 100644 --- a/packages/pocket-ic/Cargo.toml +++ b/packages/pocket-ic/Cargo.toml @@ -46,6 +46,7 @@ tracing-subscriber = { workspace = true } wslpath = "0.0.2" [dev-dependencies] +bitcoin = { workspace = true } candid_parser = { workspace = true } ed25519-dalek = { workspace = true } flate2 = { workspace = true } diff --git a/packages/pocket-ic/HOWTO.md b/packages/pocket-ic/HOWTO.md index bddf365a9eb..8023c654045 100644 --- a/packages/pocket-ic/HOWTO.md +++ b/packages/pocket-ic/HOWTO.md @@ -242,23 +242,22 @@ Here is a sketch of a test for a canister making canister HTTP outcalls: fn test_canister_http() { let pic = PocketIc::new(); - // Create a canister and charge it with 100T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, 100_000_000_000_000); + // Create a canister and charge it with 2T cycles. + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, 2_000_000_000_000); // Install the test canister wasm file on the canister. - let test_wasm = [...]; - pic.install_canister(can_id, test_wasm, vec![], None); + let test_wasm = todo!(); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // and mock a canister http outcall response. - let arg_bytes = Encode!(&()).unwrap(); let call_id = pic .submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http", - arg_bytes, + encode_one(()).unwrap(), ) .unwrap(); @@ -283,22 +282,16 @@ fn test_canister_http() { }; pic.mock_canister_http_response(mock_canister_http_response); - // Now the test canister will receive the http outcall response - // and reply to the ingress message from the test driver - // relaying the received http outcall response. - let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: Result = - decode_one(&data).unwrap(); - assert_eq!(http_response.unwrap().body, body); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), - }; - // There should be no more pending canister http outcalls. let canister_http_requests = pic.get_canister_http(); assert_eq!(canister_http_requests.len(), 0); + + // Now the test canister will receive the http outcall response + // and reply to the ingress message from the test driver. + let reply = pic.await_call(call_id).unwrap(); + let http_response: Result = + decode_one(&reply).unwrap(); + assert_eq!(http_response.unwrap().body, body); } ``` @@ -332,18 +325,12 @@ e.g., 13 for a regular application subnet. // and reply to the ingress message from the test driver // relaying the error. let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: Result = - decode_one(&data).unwrap(); - let (reject_code, err) = http_response.unwrap_err(); - assert_eq!(reject_code, RejectionCode::SysTransient); - assert!( - err.contains("No consensus could be reached. Replicas had different responses.") - ); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), - }; + let http_response: Result = + decode_one(&reply).unwrap(); + let (reject_code, err) = http_response.unwrap_err(); + assert!(matches!(reject_code, RejectionCode::SysTransient)); + let expected = "No consensus could be reached. Replicas had different responses. Details: request_id: 0, timeout: 1620328930000000005, hashes: [98387cc077af9cff2ef439132854e91cb074035bb76e2afb266960d8e3beaf11: 2], [6a2fa8e54fb4bbe62cde29f7531223d9fcf52c21c03500c1060a5f893ed32d2e: 2], [3e9ec98abf56ef680bebb14309858ede38f6fde771cd4c04cda8f066dc2810db: 2], [2c14e77f18cd990676ae6ce0d7eb89c0af9e1a66e17294b5f0efa68422bba4cb: 2], [2843e4133f673571ff919808d3ca542cc54aaf288c702944e291f0e4fafffc69: 2], [1c4ad84926c36f1fbc634a0dc0535709706f7c48f0c6ebd814fe514022b90671: 2], [7bf80e2f02011ab0a7836b526546e75203b94e856d767c9df4cb0c19baf34059: 1]"; + assert_eq!(err, expected); ``` In the live mode (see the section "Live Mode" for more details), the canister HTTP outcalls are processed @@ -598,9 +585,20 @@ To mine blocks with rewards credited to a given `bitcoin_address: String`, you c .unwrap(); let mut n = 101; // must be more than 100 (Coinbase maturity rule) - btc_rpc - .generate_to_address(n, &Address::from_str(&bitcoin_address).unwrap()) - .unwrap(); + // retry generating blocks until the bitcoind is up and running + let start = std::time::Instant::now(); + loop { + match btc_rpc.generate_to_address(n, &Address::from_str(&bitcoin_address).unwrap()) { + Ok(_) => break, + Err(bitcoincore_rpc::Error::JsonRpc(err)) => { + if start.elapsed() > std::time::Duration::from_secs(30) { + panic!("Timed out when waiting for bitcoind; last error: {}", err); + } + std::thread::sleep(std::time::Duration::from_millis(100)); + } + Err(err) => panic!("Unexpected error when talking to bitcoind: {}", err), + } + } ``` For an example of a test canister that can be deployed to an application subnet of the PocketIC instance, diff --git a/packages/pocket-ic/README.md b/packages/pocket-ic/README.md index 3bc229280c3..e09ef9cc0d2 100644 --- a/packages/pocket-ic/README.md +++ b/packages/pocket-ic/README.md @@ -7,28 +7,43 @@ With PocketIC Rust, testing canisters is as simple as calling Rust functions. Here is a simple example: ```rust -use candid::encode_one; +use candid::{Principal, encode_one}; use pocket_ic::PocketIc; - #[test] - fn test_counter_canister() { +// 2T cycles +const INIT_CYCLES: u128 = 2_000_000_000_000; + +#[test] +fn test_counter_canister() { let pic = PocketIc::new(); - // Create an empty canister as the anonymous principal and add cycles. + + // Create a canister and charge it with 2T cycles. let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, 2_000_000_000_000); - - let wasm_bytes = load_counter_wasm(...); - pic.install_canister(canister_id, wasm_bytes, vec![], None); - // 'inc' is a counter canister method. - call_counter_canister(&pic, canister_id, "inc"); - // Check if it had the desired effect. - let reply = call_counter_canister(&pic, canister_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 1])); - } - -fn call_counter_canister(pic: &PocketIc, canister_id: CanisterId, method: &str) -> WasmResult { - pic.update_call(canister_id, Principal::anonymous(), method, encode_one(()).unwrap()) - .expect("Failed to call counter canister") + pic.add_cycles(canister_id, INIT_CYCLES); + + // Install the counter canister wasm file on the canister. + let counter_wasm = todo!(); + pic.install_canister(canister_id, counter_wasm, vec![], None); + + // Make some calls to the canister. + let reply = call_counter_can(&pic, canister_id, "read"); + assert_eq!(reply, vec![0, 0, 0, 0]); + let reply = call_counter_can(&pic, canister_id, "write"); + assert_eq!(reply, vec![1, 0, 0, 0]); + let reply = call_counter_can(&pic, canister_id, "write"); + assert_eq!(reply, vec![2, 0, 0, 0]); + let reply = call_counter_can(&pic, canister_id, "read"); + assert_eq!(reply, vec![2, 0, 0, 0]); +} + +fn call_counter_can(pic: &PocketIc, canister_id: Principal, method: &str) -> Vec { + pic.update_call( + canister_id, + Principal::anonymous(), + method, + encode_one(()).unwrap(), + ) + .expect("Failed to call counter canister") } ``` diff --git a/packages/pocket-ic/src/common/rest.rs b/packages/pocket-ic/src/common/rest.rs index b33c5f54a6f..0413b7bb5ba 100644 --- a/packages/pocket-ic/src/common/rest.rs +++ b/packages/pocket-ic/src/common/rest.rs @@ -2,7 +2,7 @@ //! The types in this module are used to serialize and deserialize data //! from and to JSON, and are used by both crates. -use crate::UserError; +use crate::RejectResponse; use candid::Principal; use hex; use reqwest::Response; @@ -123,9 +123,9 @@ pub struct RawMessageId { } #[derive(Clone, Serialize, Deserialize, Debug, JsonSchema)] -pub enum RawSubmitIngressResult { - Ok(RawMessageId), - Err(UserError), +pub struct RawIngressStatusArgs { + pub raw_message_id: RawMessageId, + pub raw_caller: Option, } #[derive(Clone, Serialize, Deserialize, Debug, JsonSchema)] @@ -145,21 +145,30 @@ pub struct RawCanisterCall { #[derive(Clone, Serialize, Deserialize, Debug, JsonSchema)] pub enum RawCanisterResult { - Ok(RawWasmResult), - Err(UserError), -} - -#[derive(Clone, Serialize, Deserialize, Debug, JsonSchema)] -pub enum RawWasmResult { - /// Raw response, returned in a "happy" case - Reply( + Ok( #[serde(deserialize_with = "base64::deserialize")] #[serde(serialize_with = "base64::serialize")] Vec, ), - /// Returned with an error message when the canister decides to reject the - /// message - Reject(String), + Err(RejectResponse), +} + +impl From, RejectResponse>> for RawCanisterResult { + fn from(result: Result, RejectResponse>) -> Self { + match result { + Ok(data) => RawCanisterResult::Ok(data), + Err(reject_response) => RawCanisterResult::Err(reject_response), + } + } +} + +impl From for Result, RejectResponse> { + fn from(result: RawCanisterResult) -> Self { + match result { + RawCanisterResult::Ok(data) => Ok(data), + RawCanisterResult::Err(reject_response) => Err(reject_response), + } + } } #[derive(Clone, Serialize, Deserialize, Debug, JsonSchema)] diff --git a/packages/pocket-ic/src/lib.rs b/packages/pocket-ic/src/lib.rs index 5ed366b42c7..5088281ec74 100644 --- a/packages/pocket-ic/src/lib.rs +++ b/packages/pocket-ic/src/lib.rs @@ -1,39 +1,57 @@ #![allow(clippy::test_attr_in_doctest)] -//! # PocketIC: A Canister Testing Platform -//! -//! PocketIC is the local canister smart contract testing platform for the [Internet Computer](https://internetcomputer.org/). -//! -//! It consists of the PocketIC server, which can run many independent IC instances, and a client library (this crate), which provides an interface to your IC instances. -//! -//! With PocketIC, testing canisters is as simple as calling rust functions. Here is a minimal example: -//! -//! ```rust -//! use candid::{Principal, encode_one}; -//! use pocket_ic::{WasmResult, PocketIc}; -//! -//! #[test] -//! fn test_counter_canister() { -//! let pic = PocketIc::new(); -//! // Create an empty canister as the anonymous principal and add cycles. -//! let canister_id = pic.create_canister(); -//! pic.add_cycles(canister_id, 2_000_000_000_000); -//! -//! let wasm_bytes = todo!(); -//! pic.install_canister(canister_id, wasm_bytes, vec![], None); -//! // 'inc' is a counter canister method. -//! call_counter_canister(&pic, canister_id, "inc"); -//! // Check if it had the desired effect. -//! let reply = call_counter_canister(&pic, canister_id, "read"); -//! assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 1])); -//! } -//! -//! fn call_counter_canister(pic: &PocketIc, canister_id: Principal, method: &str) -> WasmResult { -//! pic.update_call(canister_id, Principal::anonymous(), method, encode_one(()).unwrap()) -//! .expect("Failed to call counter canister") -//! } -//! ``` -//! For more information, see the [README](https://crates.io/crates/pocket-ic). -//! +/// # PocketIC: A Canister Testing Platform +/// +/// PocketIC is the local canister smart contract testing platform for the [Internet Computer](https://internetcomputer.org/). +/// +/// It consists of the PocketIC server, which can run many independent IC instances, and a client library (this crate), which provides an interface to your IC instances. +/// +/// With PocketIC, testing canisters is as simple as calling rust functions. Here is a minimal example: +/// +/// ```rust +/// use candid::{Principal, encode_one}; +/// use pocket_ic::PocketIc; +/// +/// // 2T cycles +/// const INIT_CYCLES: u128 = 2_000_000_000_000; +/// +/// // Create a counter canister and charge it with 2T cycles. +/// fn deploy_counter_canister(pic: &PocketIc) -> Principal { +/// let canister_id = pic.create_canister(); +/// pic.add_cycles(canister_id, INIT_CYCLES); +/// let counter_wasm = todo!(); +/// pic.install_canister(canister_id, counter_wasm, vec![], None); +/// canister_id +/// } +/// +/// // Call a method on the counter canister as the anonymous principal. +/// fn call_counter_canister(pic: &PocketIc, canister_id: Principal, method: &str) -> Vec { +/// pic.update_call( +/// canister_id, +/// Principal::anonymous(), +/// method, +/// encode_one(()).unwrap(), +/// ) +/// .expect("Failed to call counter canister") +/// } +/// +/// #[test] +/// fn test_counter_canister() { +/// let pic = PocketIc::new(); +/// let canister_id = deploy_counter_canister(&pic); +/// +/// // Make some calls to the counter canister. +/// let reply = call_counter_canister(&pic, canister_id, "read"); +/// assert_eq!(reply, vec![0, 0, 0, 0]); +/// let reply = call_counter_canister(&pic, canister_id, "write"); +/// assert_eq!(reply, vec![1, 0, 0, 0]); +/// let reply = call_counter_canister(&pic, canister_id, "write"); +/// assert_eq!(reply, vec![2, 0, 0, 0]); +/// let reply = call_counter_canister(&pic, canister_id, "read"); +/// assert_eq!(reply, vec![2, 0, 0, 0]); +/// } +/// ``` +/// For more information, see the [README](https://crates.io/crates/pocket-ic). +/// use crate::{ common::rest::{ BlobCompression, BlobId, CanisterHttpRequest, ExtendedSubnetConfigSet, HttpsConfig, @@ -637,7 +655,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -654,7 +672,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -670,26 +688,39 @@ impl PocketIc { } /// Await an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. - pub fn await_call(&self, message_id: RawMessageId) -> Result { + pub fn await_call(&self, message_id: RawMessageId) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.await_call(message_id).await }) } /// Fetch the status of an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. /// Note that the status of the update call can only change if the PocketIC instance is in live mode - /// or a round has been executed due to a separate PocketIC library call. + /// or a round has been executed due to a separate PocketIC library call, e.g., `PocketIc::tick()`. pub fn ingress_status( &self, message_id: RawMessageId, - ) -> Option> { + ) -> Option, RejectResponse>> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.ingress_status(message_id).await }) } + /// Fetch the status of an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. + /// Note that the status of the update call can only change if the PocketIC instance is in live mode + /// or a round has been executed due to a separate PocketIC library call, e.g., `PocketIc::tick()`. + /// If the status of the update call is known, but the update call was submitted by a different caller, then an error is returned. + pub fn ingress_status_as( + &self, + message_id: RawMessageId, + caller: Principal, + ) -> IngressStatusResult { + let runtime = self.runtime.clone(); + runtime.block_on(async { self.pocket_ic.ingress_status_as(message_id, caller).await }) + } + /// Await an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. - /// This function does not execute rounds and thus should only be called on a "live" PocketIC instance - /// or if rounds are executed due to separate PocketIC library calls. - pub fn await_call_no_ticks(&self, message_id: RawMessageId) -> Result { + /// Note that the status of the update call can only change if the PocketIC instance is in live mode + /// or a round has been executed due to a separate PocketIC library call, e.g., `PocketIc::tick()`. + pub fn await_call_no_ticks(&self, message_id: RawMessageId) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.await_call_no_ticks(message_id).await }) } @@ -702,7 +733,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -719,7 +750,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -733,7 +764,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Principal, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -748,7 +779,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result { + ) -> Result { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.canister_status(canister_id, sender).await }) } @@ -821,7 +852,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, chunk: Vec, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -836,7 +867,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result>, CallError> { + ) -> Result>, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.stored_chunks(canister_id, sender).await }) } @@ -847,7 +878,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.clear_chunk_store(canister_id, sender).await }) } @@ -863,7 +894,7 @@ impl PocketIc { chunk_hashes_list: Vec>, wasm_module_hash: Vec, arg: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -905,7 +936,7 @@ impl PocketIc { wasm_module: Vec, arg: Vec, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -922,7 +953,7 @@ impl PocketIc { wasm_module: Vec, arg: Vec, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -937,7 +968,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.uninstall_canister(canister_id, sender).await }) } @@ -949,7 +980,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, replace_snapshot: Option>, - ) -> Result { + ) -> Result { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -965,7 +996,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, snapshot_id: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -980,7 +1011,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -996,7 +1027,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, snapshot_id: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -1012,7 +1043,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, settings: CanisterSettings, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -1028,7 +1059,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, new_controllers: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -1043,7 +1074,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.start_canister(canister_id, sender).await }) } @@ -1054,7 +1085,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.stop_canister(canister_id, sender).await }) } @@ -1065,7 +1096,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic.delete_canister(canister_id, sender).await }) } @@ -1098,7 +1129,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -1124,7 +1155,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let runtime = self.runtime.clone(); runtime.block_on(async { self.pocket_ic @@ -1198,7 +1229,7 @@ pub fn call_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1222,7 +1253,7 @@ pub fn call_candid( effective_principal: RawEffectivePrincipal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1243,7 +1274,7 @@ pub fn query_candid( canister_id: CanisterId, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1259,7 +1290,7 @@ pub fn query_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1275,7 +1306,7 @@ pub fn update_candid( canister_id: CanisterId, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1291,7 +1322,7 @@ pub fn update_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1305,15 +1336,15 @@ where /// [`query_candid`]. pub fn with_candid( input: Input, - f: impl FnOnce(Vec) -> Result, -) -> Result + f: impl FnOnce(Vec) -> Result, RejectResponse>, +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, { let in_bytes = encode_args(input).expect("failed to encode args"); - match f(in_bytes) { - Ok(WasmResult::Reply(out_bytes)) => Ok(decode_args(&out_bytes).unwrap_or_else(|e| { + f(in_bytes).map(|out_bytes| { + decode_args(&out_bytes).unwrap_or_else(|e| { panic!( "Failed to decode response as candid type {}:\nerror: {}\nbytes: {:?}\nutf8: {}", std::any::type_name::(), @@ -1321,10 +1352,8 @@ where out_bytes, String::from_utf8_lossy(&out_bytes), ) - })), - Ok(WasmResult::Reject(message)) => Err(CallError::Reject(message)), - Err(user_error) => Err(CallError::UserError(user_error)), - } + }) + }) } /// Error type for [`TryFrom`]. @@ -1498,42 +1527,74 @@ impl std::fmt::Display for ErrorCode { } } -/// The error that is sent back to users from the IC if something goes -/// wrong. It's designed to be copyable and serializable so that we -/// can persist it in the ingress history. +/// User-facing reject codes. +/// +/// They can be derived from the most significant digit of the +/// corresponding error code. #[derive( - PartialOrd, Ord, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema, + PartialOrd, + Ord, + Clone, + Copy, + Debug, + PartialEq, + Eq, + Hash, + Serialize, + Deserialize, + JsonSchema, + EnumIter, )] -pub struct UserError { - /// The error code. - pub code: ErrorCode, - /// A human-readable description of the error. - pub description: String, +pub enum RejectCode { + SysFatal = 1, + SysTransient = 2, + DestinationInvalid = 3, + CanisterReject = 4, + CanisterError = 5, + SysUnknown = 6, } -impl std::fmt::Display for UserError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - // E.g. "IC0301: Canister 42 not found" - write!(f, "{}: {}", self.code, self.description) +impl TryFrom for RejectCode { + type Error = TryFromError; + fn try_from(err: u64) -> Result { + match err { + 1 => Ok(RejectCode::SysFatal), + 2 => Ok(RejectCode::SysTransient), + 3 => Ok(RejectCode::DestinationInvalid), + 4 => Ok(RejectCode::CanisterReject), + 5 => Ok(RejectCode::CanisterError), + 6 => Ok(RejectCode::SysUnknown), + _ => Err(TryFromError::ValueOutOfRange(err)), + } } } -/// This enum describes the different error types when invoking a canister. -#[derive(Debug, Serialize, Deserialize)] -pub enum CallError { - Reject(String), - UserError(UserError), +/// User-facing type describing an unsuccessful (also called reject) call response. +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] +pub struct RejectResponse { + pub reject_code: RejectCode, + pub reject_message: String, + pub error_code: ErrorCode, + pub certified: bool, } -/// This struct describes the different types that executing a WASM function in -/// a canister can produce. -#[derive(PartialOrd, Ord, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub enum WasmResult { - /// Raw response, returned in a successful case. - Reply(#[serde(with = "serde_bytes")] Vec), - /// Returned with an error message when the canister decides to reject the - /// message. - Reject(String), +impl std::fmt::Display for RejectResponse { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + // Follows [agent-rs](https://github.com/dfinity/agent-rs/blob/a651dbbe69e61d4e8508c144cd60cfa3118eeb3a/ic-agent/src/agent/agent_error.rs#L54) + write!(f, "PocketIC returned a rejection error: reject code {:?}, reject message {}, error code {:?}", self.reject_code, self.reject_message, self.error_code) + } +} + +/// This enum describes the result of retrieving ingress status. +/// The `IngressStatusResult::Forbidden` variant is produced +/// if an optional caller is provided and a corresponding read state request +/// for the status of the same update call signed by that specified caller +/// was rejected because the update call was submitted by a different caller. +#[derive(Debug, Serialize, Deserialize)] +pub enum IngressStatusResult { + NotAvailable, + Forbidden(String), + Success(Result, RejectResponse>), } #[cfg(windows)] @@ -1624,6 +1685,9 @@ To download the binary, please visit https://github.com/dfinity/pocketic." cmd.stderr(std::process::Stdio::null()); } } + + // TODO: SDK-1936 + #[allow(clippy::zombie_processes)] cmd.spawn() .unwrap_or_else(|_| panic!("Failed to start PocketIC binary ({:?})", bin_path)); @@ -1678,9 +1742,18 @@ pub fn get_default_effective_canister_id( #[cfg(test)] mod test { - use crate::ErrorCode; + use crate::{ErrorCode, RejectCode}; use strum::IntoEnumIterator; + #[test] + fn reject_code_round_trip() { + for initial in RejectCode::iter() { + let round_trip = RejectCode::try_from(initial as u64).unwrap(); + + assert_eq!(initial, round_trip); + } + } + #[test] fn error_code_round_trip() { for initial in ErrorCode::iter() { @@ -1690,6 +1763,21 @@ mod test { } } + #[test] + fn reject_code_matches_ic_error_code() { + assert_eq!( + RejectCode::iter().len(), + ic_error_types::RejectCode::iter().len() + ); + for ic_reject_code in ic_error_types::RejectCode::iter() { + let reject_code: RejectCode = (ic_reject_code as u64).try_into().unwrap(); + assert_eq!( + format!("{:?}", reject_code), + format!("{:?}", ic_reject_code) + ); + } + } + #[test] fn error_code_matches_ic_error_code() { assert_eq!( diff --git a/packages/pocket-ic/src/management_canister.rs b/packages/pocket-ic/src/management_canister.rs index 1878e6728e2..e76660c5237 100644 --- a/packages/pocket-ic/src/management_canister.rs +++ b/packages/pocket-ic/src/management_canister.rs @@ -1,6 +1,7 @@ use candid::{CandidType, Deserialize, Principal}; pub type CanisterId = Principal; +pub type SubnetId = Principal; #[derive(CandidType, Deserialize, Debug, Clone)] pub struct CanisterIdRecord { @@ -234,6 +235,11 @@ pub struct CanisterInfoArgs { pub num_requested_changes: Option, } +#[derive(CandidType, Deserialize, Debug, Clone)] +pub struct SubnetInfoArgs { + pub subnet_id: SubnetId, +} + #[derive(CandidType, Deserialize, Debug, Clone)] pub enum ChangeOrigin { #[serde(rename = "from_user")] @@ -292,6 +298,11 @@ pub struct CanisterInfoResult { pub total_num_changes: u64, } +#[derive(CandidType, Deserialize, Debug, Clone)] +pub struct SubnetInfoResult { + pub replica_version: String, +} + // raw randomness pub type RawRandResult = Vec; @@ -455,6 +466,18 @@ pub struct SignWithSchnorrArgs { pub key_id: SignWithSchnorrArgsKeyId, pub derivation_path: Vec>, pub message: Vec, + pub aux: Option, +} + +#[derive(CandidType, Deserialize, Debug, Clone)] +pub enum SignWithSchnorrAux { + #[serde(rename = "bip341")] + Bip341(SignWithBip341Aux), +} + +#[derive(CandidType, Deserialize, Debug, Clone)] +pub struct SignWithBip341Aux { + pub merkle_root_hash: Vec, } #[derive(CandidType, Deserialize, Debug, Clone)] diff --git a/packages/pocket-ic/src/nonblocking.rs b/packages/pocket-ic/src/nonblocking.rs index 9f7fbcdb13e..cd39af24cae 100644 --- a/packages/pocket-ic/src/nonblocking.rs +++ b/packages/pocket-ic/src/nonblocking.rs @@ -3,9 +3,9 @@ use crate::common::rest::{ CreateHttpGatewayResponse, CreateInstanceResponse, ExtendedSubnetConfigSet, HttpGatewayBackend, HttpGatewayConfig, HttpGatewayInfo, HttpsConfig, InstanceConfig, InstanceId, MockCanisterHttpResponse, RawAddCycles, RawCanisterCall, RawCanisterHttpRequest, RawCanisterId, - RawCanisterResult, RawCycles, RawEffectivePrincipal, RawMessageId, RawMockCanisterHttpResponse, - RawPrincipalId, RawSetStableMemory, RawStableMemory, RawSubmitIngressResult, RawSubnetId, - RawTime, RawVerifyCanisterSigArg, RawWasmResult, SubnetId, Topology, + RawCanisterResult, RawCycles, RawEffectivePrincipal, RawIngressStatusArgs, RawMessageId, + RawMockCanisterHttpResponse, RawPrincipalId, RawSetStableMemory, RawStableMemory, RawSubnetId, + RawTime, RawVerifyCanisterSigArg, SubnetId, Topology, }; use crate::management_canister::{ CanisterId, CanisterIdRecord, CanisterInstallMode, CanisterInstallModeUpgradeInner, @@ -16,7 +16,7 @@ use crate::management_canister::{ TakeCanisterSnapshotArgs, UpdateSettingsArgs, UploadChunkArgs, UploadChunkResult, }; pub use crate::DefaultEffectiveCanisterIdError; -use crate::{CallError, PocketIcBuilder, UserError, WasmResult}; +use crate::{IngressStatusResult, PocketIcBuilder, RejectResponse}; use backoff::backoff::Backoff; use backoff::{ExponentialBackoff, ExponentialBackoffBuilder}; use candid::{ @@ -546,7 +546,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result { self.submit_call_with_effective_principal( canister_id, RawEffectivePrincipal::CanisterId(canister_id.as_slice().to_vec()), @@ -565,7 +565,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result { let endpoint = "update/submit_ingress_message"; let raw_canister_call = RawCanisterCall { sender: sender.as_slice().to_vec(), @@ -574,51 +574,76 @@ impl PocketIc { payload, effective_principal, }; - let res: RawSubmitIngressResult = self.post(endpoint, raw_canister_call).await; - match res { - RawSubmitIngressResult::Ok(message_id) => Ok(message_id), - RawSubmitIngressResult::Err(user_error) => Err(user_error), - } + self.post(endpoint, raw_canister_call).await } /// Await an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. - pub async fn await_call(&self, message_id: RawMessageId) -> Result { + pub async fn await_call(&self, message_id: RawMessageId) -> Result, RejectResponse> { let endpoint = "update/await_ingress_message"; let result: RawCanisterResult = self.post(endpoint, message_id).await; - match result { - RawCanisterResult::Ok(raw_wasm_result) => match raw_wasm_result { - RawWasmResult::Reply(data) => Ok(WasmResult::Reply(data)), - RawWasmResult::Reject(text) => Ok(WasmResult::Reject(text)), - }, - RawCanisterResult::Err(user_error) => Err(user_error), - } + result.into() } /// Fetch the status of an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. /// Note that the status of the update call can only change if the PocketIC instance is in live mode - /// or a round has been executed due to a separate PocketIC library call. + /// or a round has been executed due to a separate PocketIC library call, e.g., `PocketIc::tick()`. pub async fn ingress_status( &self, - message_id: RawMessageId, - ) -> Option> { + raw_message_id: RawMessageId, + ) -> Option, RejectResponse>> { + let status = self.ingress_status_as_caller(raw_message_id, None).await; + match status { + IngressStatusResult::NotAvailable => None, + IngressStatusResult::Success(status) => Some(status), + IngressStatusResult::Forbidden(err) => panic!( + "Retrieving ingress status was forbidden: {}. This is a bug!", + err + ), + } + } + + /// Fetch the status of an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. + /// Note that the status of the update call can only change if the PocketIC instance is in live mode + /// or a round has been executed due to a separate PocketIC library call, e.g., `PocketIc::tick()`. + /// If the status of the update call is known, but the update call was submitted by a different caller, then an error is returned. + pub async fn ingress_status_as( + &self, + raw_message_id: RawMessageId, + caller: Principal, + ) -> IngressStatusResult { + self.ingress_status_as_caller(raw_message_id, Some(caller)) + .await + } + + async fn ingress_status_as_caller( + &self, + raw_message_id: RawMessageId, + caller: Option, + ) -> IngressStatusResult { let endpoint = "read/ingress_status"; - let result: Option = self.post(endpoint, message_id).await; - result.map(|result| match result { - RawCanisterResult::Ok(raw_wasm_result) => match raw_wasm_result { - RawWasmResult::Reply(data) => Ok(WasmResult::Reply(data)), - RawWasmResult::Reject(text) => Ok(WasmResult::Reject(text)), - }, - RawCanisterResult::Err(user_error) => Err(user_error), - }) + let raw_ingress_status_args = RawIngressStatusArgs { + raw_message_id, + raw_caller: caller.map(|caller| caller.into()), + }; + let result: Result, (StatusCode, String)> = + self.try_post(endpoint, raw_ingress_status_args).await; + match result { + Ok(None) => IngressStatusResult::NotAvailable, + Ok(Some(result)) => IngressStatusResult::Success(result.into()), + Err((status, message)) => { + assert_eq!(status, StatusCode::FORBIDDEN, "HTTP error code {} for /read/ingress_status is not StatusCode::FORBIDDEN. This is a bug!", status); + IngressStatusResult::Forbidden(message) + } + } } /// Await an update call submitted previously by `submit_call` or `submit_call_with_effective_principal`. - /// This function does not execute rounds and thus should only be called on a "live" PocketIC instance - /// or if rounds are executed due to separate PocketIC library calls. + /// Note that the status of the update call can only change if the PocketIC instance is in live mode + /// or a round has been executed due to a separate PocketIC library call. pub async fn await_call_no_ticks( &self, message_id: RawMessageId, - ) -> Result { + ) -> Result, RejectResponse> { let mut retry_policy: ExponentialBackoff = ExponentialBackoffBuilder::new() .with_initial_interval(Duration::from_millis(10)) .with_max_interval(Duration::from_secs(1)) @@ -640,7 +665,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { self.update_call_with_effective_principal( canister_id, RawEffectivePrincipal::CanisterId(canister_id.as_slice().to_vec()), @@ -659,7 +684,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { self.query_call_with_effective_principal( canister_id, RawEffectivePrincipal::CanisterId(canister_id.as_slice().to_vec()), @@ -681,7 +706,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let endpoint = "read/query"; self.canister_call( endpoint, @@ -699,7 +724,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Principal, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { with_candid::<_, (FetchCanisterLogsResult,), _>( (CanisterIdRecord { canister_id },), |payload| async { @@ -723,7 +748,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result { + ) -> Result { call_candid_as::<(CanisterIdRecord,), (CanisterStatusResult,)>( self, Principal::management_canister(), @@ -856,7 +881,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, chunk: Vec, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { call_candid_as::<_, (UploadChunkResult,)>( self, Principal::management_canister(), @@ -875,7 +900,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result>, CallError> { + ) -> Result>, RejectResponse> { call_candid_as::<_, (StoredChunksResult,)>( self, Principal::management_canister(), @@ -894,7 +919,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as( self, Principal::management_canister(), @@ -917,7 +942,7 @@ impl PocketIc { chunk_hashes_list: Vec>, wasm_module_hash: Vec, arg: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as( self, Principal::management_canister(), @@ -947,7 +972,7 @@ impl PocketIc { wasm_module: Vec, arg: Vec, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { if wasm_module.len() + arg.len() < INSTALL_CHUNKED_CODE_THRESHOLD { call_candid_as::<(InstallCodeArgs,), ()>( self, @@ -1019,7 +1044,7 @@ impl PocketIc { wasm_module: Vec, arg: Vec, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { self.install_canister_helper( CanisterInstallMode::Upgrade(Some(CanisterInstallModeUpgradeInner { wasm_memory_persistence: Some( @@ -1043,7 +1068,7 @@ impl PocketIc { wasm_module: Vec, arg: Vec, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { self.install_canister_helper( CanisterInstallMode::Reinstall, canister_id, @@ -1060,7 +1085,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as::<(CanisterIdRecord,), ()>( self, Principal::management_canister(), @@ -1079,7 +1104,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, replace_snapshot: Option>, - ) -> Result { + ) -> Result { call_candid_as::<_, (Snapshot,)>( self, Principal::management_canister(), @@ -1102,7 +1127,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, snapshot_id: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as( self, Principal::management_canister(), @@ -1124,7 +1149,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result, CallError> { + ) -> Result, RejectResponse> { call_candid_as::<_, (Vec,)>( self, Principal::management_canister(), @@ -1144,7 +1169,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, snapshot_id: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as( self, Principal::management_canister(), @@ -1166,7 +1191,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, settings: CanisterSettings, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as::<_, ()>( self, Principal::management_canister(), @@ -1189,7 +1214,7 @@ impl PocketIc { canister_id: CanisterId, sender: Option, new_controllers: Vec, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { let settings = CanisterSettings { controllers: Some(new_controllers), ..CanisterSettings::default() @@ -1215,7 +1240,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as::<(CanisterIdRecord,), ()>( self, Principal::management_canister(), @@ -1233,7 +1258,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as::<(CanisterIdRecord,), ()>( self, Principal::management_canister(), @@ -1251,7 +1276,7 @@ impl PocketIc { &self, canister_id: CanisterId, sender: Option, - ) -> Result<(), CallError> { + ) -> Result<(), RejectResponse> { call_candid_as::<(CanisterIdRecord,), ()>( self, Principal::management_canister(), @@ -1361,12 +1386,29 @@ impl PocketIc { self.request(HttpMethod::Post, endpoint, body).await } + async fn try_post( + &self, + endpoint: &str, + body: B, + ) -> Result { + self.try_request(HttpMethod::Post, endpoint, body).await + } + async fn request( &self, http_method: HttpMethod, endpoint: &str, body: B, ) -> T { + self.try_request(http_method, endpoint, body).await.unwrap() + } + + async fn try_request( + &self, + http_method: HttpMethod, + endpoint: &str, + body: B, + ) -> Result { // we may have to try several times if the instance is busy let start = std::time::SystemTime::now(); loop { @@ -1377,9 +1419,10 @@ impl PocketIc { HttpMethod::Post => reqwest_client.post(url).json(&body), }; let result = builder.send().await.expect("HTTP failure"); + let status = result.status(); match ApiResponse::<_>::from_response(result).await { - ApiResponse::Success(t) => break t, - ApiResponse::Error { message } => panic!("{}", message), + ApiResponse::Success(t) => break Ok(t), + ApiResponse::Error { message } => break Err((status, message)), ApiResponse::Busy { state_label, op_id } => { debug!( "instance_id={} Instance is busy (with a different computation): state_label: {}, op_id: {}", @@ -1404,24 +1447,31 @@ impl PocketIc { .send() .await .expect("HTTP failure"); - match ApiResponse::<_>::from_response(result).await { - ApiResponse::Error { message } => { - debug!("Polling has not succeeded yet: {}", message) - } - ApiResponse::Success(t) => { - return t; - } - ApiResponse::Started { state_label, op_id } => { - warn!( - "instance_id={} unexpected Started({} {})", - self.instance_id, state_label, op_id - ); - } - ApiResponse::Busy { state_label, op_id } => { - warn!( - "instance_id={} unexpected Busy({} {})", - self.instance_id, state_label, op_id - ); + if result.status() == reqwest::StatusCode::NOT_FOUND { + let message = + String::from_utf8(result.bytes().await.unwrap().to_vec()).unwrap(); + debug!("Polling has not succeeded yet: {}", message); + } else { + let status = result.status(); + match ApiResponse::<_>::from_response(result).await { + ApiResponse::Error { message } => { + return Err((status, message)); + } + ApiResponse::Success(t) => { + return Ok(t); + } + ApiResponse::Started { state_label, op_id } => { + warn!( + "instance_id={} unexpected Started({} {})", + self.instance_id, state_label, op_id + ); + } + ApiResponse::Busy { state_label, op_id } => { + warn!( + "instance_id={} unexpected Busy({} {})", + self.instance_id, state_label, op_id + ); + } } } if let Some(max_request_time_ms) = self.max_request_time_ms { @@ -1450,7 +1500,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let raw_canister_call = RawCanisterCall { sender: sender.as_slice().to_vec(), canister_id: canister_id.as_slice().to_vec(), @@ -1460,13 +1510,7 @@ impl PocketIc { }; let result: RawCanisterResult = self.post(endpoint, raw_canister_call).await; - match result { - RawCanisterResult::Ok(raw_wasm_result) => match raw_wasm_result { - RawWasmResult::Reply(data) => Ok(WasmResult::Reply(data)), - RawWasmResult::Reject(text) => Ok(WasmResult::Reject(text)), - }, - RawCanisterResult::Err(user_error) => Err(user_error), - } + result.into() } pub(crate) async fn update_call_with_effective_principal( @@ -1476,7 +1520,7 @@ impl PocketIc { sender: Principal, method: &str, payload: Vec, - ) -> Result { + ) -> Result, RejectResponse> { let message_id = self .submit_call_with_effective_principal( canister_id, @@ -1530,7 +1574,7 @@ pub async fn call_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1556,7 +1600,7 @@ pub async fn call_candid( effective_principal: RawEffectivePrincipal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1578,7 +1622,7 @@ pub async fn query_candid( canister_id: CanisterId, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1594,7 +1638,7 @@ pub async fn query_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1611,7 +1655,7 @@ pub async fn update_candid( canister_id: CanisterId, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1627,7 +1671,7 @@ pub async fn update_candid_as( sender: Principal, method: &str, input: Input, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, @@ -1643,15 +1687,15 @@ where pub async fn with_candid( input: Input, f: impl FnOnce(Vec) -> Fut, -) -> Result +) -> Result where Input: ArgumentEncoder, Output: for<'a> ArgumentDecoder<'a>, - Fut: Future>, + Fut: Future, RejectResponse>>, { let in_bytes = encode_args(input).expect("failed to encode args"); - match f(in_bytes).await { - Ok(WasmResult::Reply(out_bytes)) => Ok(decode_args(&out_bytes).unwrap_or_else(|e| { + f(in_bytes).await.map(|out_bytes| { + decode_args(&out_bytes).unwrap_or_else(|e| { panic!( "Failed to decode response as candid type {}:\nerror: {}\nbytes: {:?}\nutf8: {}", std::any::type_name::(), @@ -1659,10 +1703,8 @@ where out_bytes, String::from_utf8_lossy(&out_bytes), ) - })), - Ok(WasmResult::Reject(message)) => Err(CallError::Reject(message)), - Err(user_error) => Err(CallError::UserError(user_error)), - } + }) + }) } fn setup_tracing(pid: u32) -> Option { diff --git a/packages/pocket-ic/test_canister/canister.did b/packages/pocket-ic/test_canister/canister.did index 242f3de8c78..f0e2766bcc7 100644 --- a/packages/pocket-ic/test_canister/canister.did +++ b/packages/pocket-ic/test_canister/canister.did @@ -114,4 +114,8 @@ service : { execute_many_instructions : (nat64) -> (); canister_log : (text) -> (); time : () -> (nat64) query; + reject_query : () -> () query; + reject_update : () -> (); + trap_query : () -> () query; + trap_update : () -> (); } diff --git a/packages/pocket-ic/test_canister/src/canister.rs b/packages/pocket-ic/test_canister/src/canister.rs index 53cd4ffad6c..239803ea47b 100644 --- a/packages/pocket-ic/test_canister/src/canister.rs +++ b/packages/pocket-ic/test_canister/src/canister.rs @@ -1,5 +1,5 @@ use candid::{define_function, CandidType, Principal}; -use ic_cdk::api::call::RejectionCode; +use ic_cdk::api::call::{accept_message, arg_data_raw, reject, RejectionCode}; use ic_cdk::api::instruction_counter; use ic_cdk::api::management_canister::ecdsa::{ ecdsa_public_key as ic_cdk_ecdsa_public_key, sign_with_ecdsa as ic_cdk_sign_with_ecdsa, @@ -9,7 +9,7 @@ use ic_cdk::api::management_canister::http_request::{ http_request as canister_http_outcall, CanisterHttpRequestArgument, HttpMethod, HttpResponse, TransformArgs, TransformContext, TransformFunc, }; -use ic_cdk::{query, update}; +use ic_cdk::{inspect_message, query, trap, update}; use serde::{Deserialize, Serialize}; use serde_bytes::ByteBuf; @@ -109,6 +109,18 @@ struct SignWithSchnorrArgument { pub message: Vec, pub derivation_path: Vec>, pub key_id: SchnorrKeyId, + pub aux: Option, +} + +#[derive(CandidType, Serialize, Deserialize, Debug)] +pub enum SignWithSchnorrAux { + #[serde(rename = "bip341")] + Bip341(SignWithBip341Aux), +} + +#[derive(CandidType, Serialize, Deserialize, Debug)] +pub struct SignWithBip341Aux { + pub merkle_root_hash: ByteBuf, } #[derive(CandidType, Deserialize, Debug)] @@ -144,11 +156,13 @@ async fn sign_with_schnorr( message: Vec, derivation_path: Vec>, key_id: SchnorrKeyId, + aux: Option, ) -> Result, String> { let internal_request = SignWithSchnorrArgument { message, derivation_path, key_id, + aux, }; let (internal_reply,): (SignWithSchnorrResponse,) = ic_cdk::api::call::call_with_payment( @@ -300,4 +314,37 @@ fn time() -> u64 { ic_cdk::api::time() } +// reject responses + +#[inspect_message] +fn inspect_message() { + let arg_data = arg_data_raw(); + if arg_data == b"trap" { + trap("trap in inspect message"); + } else if arg_data == b"skip" { + } else { + accept_message(); + } +} + +#[query(manual_reply = true)] +fn reject_query() { + reject("reject in query method"); +} + +#[update(manual_reply = true)] +fn reject_update() { + reject("reject in update method"); +} + +#[query] +fn trap_query() { + trap("trap in query method"); +} + +#[update] +fn trap_update() { + trap("trap in update method"); +} + fn main() {} diff --git a/packages/pocket-ic/tests/management_canister.rs b/packages/pocket-ic/tests/management_canister.rs index b6e813729eb..fe1c68e261e 100644 --- a/packages/pocket-ic/tests/management_canister.rs +++ b/packages/pocket-ic/tests/management_canister.rs @@ -61,6 +61,11 @@ fn canister_info(_: CanisterInfoArgs) -> CanisterInfoResult { unreachable!() } +#[update] +fn subnet_info(_: SubnetInfoArgs) -> SubnetInfoResult { + unreachable!() +} + #[update] fn delete_canister(_: CanisterIdRecord) { unreachable!() diff --git a/packages/pocket-ic/tests/slow.rs b/packages/pocket-ic/tests/slow.rs index 25e94b02537..126cb7db213 100644 --- a/packages/pocket-ic/tests/slow.rs +++ b/packages/pocket-ic/tests/slow.rs @@ -1,5 +1,5 @@ use candid::{Encode, Principal}; -use pocket_ic::{PocketIc, PocketIcBuilder, UserError, WasmResult}; +use pocket_ic::{PocketIc, PocketIcBuilder, RejectResponse}; use std::time::Duration; // 200T cycles @@ -15,7 +15,7 @@ fn execute_many_instructions( instructions: u64, dts_rounds: u64, system_subnet: bool, -) -> Result { +) -> Result, RejectResponse> { // Create a canister. let t0 = pic.get_time(); let can_id = pic.create_canister(); @@ -90,7 +90,7 @@ fn instruction_limit_exceeded() { let instructions = 42_000_000_000_u64; let dts_rounds = 20; // instruction limit exceeded after 20 rounds let res = execute_many_instructions(&pic, instructions, dts_rounds, false).unwrap_err(); - assert!(res.description.contains( + assert!(res.reject_message.contains( "Canister exceeded the limit of 40000000000 instructions for single message execution." )); } diff --git a/packages/pocket-ic/tests/tests.rs b/packages/pocket-ic/tests/tests.rs index 56389585740..e0c090c8516 100644 --- a/packages/pocket-ic/tests/tests.rs +++ b/packages/pocket-ic/tests/tests.rs @@ -1,19 +1,23 @@ use candid::{decode_one, encode_one, CandidType, Decode, Deserialize, Encode, Principal}; +use ic_certification::Label; +use ic_transport_types::Envelope; +use ic_transport_types::EnvelopeContent::ReadState; use pocket_ic::management_canister::{ - CanisterId, CanisterIdRecord, CanisterInstallMode, CanisterSettings, EcdsaPublicKeyResult, + CanisterIdRecord, CanisterInstallMode, CanisterSettings, EcdsaPublicKeyResult, HttpRequestResult, ProvisionalCreateCanisterWithCyclesArgs, SchnorrAlgorithm, - SchnorrPublicKeyArgsKeyId, SchnorrPublicKeyResult, + SchnorrPublicKeyArgsKeyId, SchnorrPublicKeyResult, SignWithBip341Aux, SignWithSchnorrAux, }; use pocket_ic::{ common::rest::{ BlobCompression, CanisterHttpReply, CanisterHttpResponse, MockCanisterHttpResponse, RawEffectivePrincipal, SubnetKind, }, - query_candid, update_candid, DefaultEffectiveCanisterIdError, ErrorCode, PocketIc, - PocketIcBuilder, WasmResult, + query_candid, update_candid, DefaultEffectiveCanisterIdError, ErrorCode, IngressStatusResult, + PocketIc, PocketIcBuilder, RejectCode, }; #[cfg(unix)] use reqwest::blocking::Client; +use serde::Serialize; use sha2::{Digest, Sha256}; use std::{io::Read, time::SystemTime}; @@ -31,39 +35,48 @@ enum RejectionCode { Unknown, } +// Create a counter canister and charge it with 2T cycles. +fn deploy_counter_canister(pic: &PocketIc) -> Principal { + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); + pic.install_canister(canister_id, counter_wasm(), vec![], None); + canister_id +} + +// Call a method on the counter canister as the anonymous principal. +fn call_counter_canister(pic: &PocketIc, canister_id: Principal, method: &str) -> Vec { + pic.update_call( + canister_id, + Principal::anonymous(), + method, + encode_one(()).unwrap(), + ) + .expect("Failed to call counter canister") +} + #[test] fn test_counter_canister() { let pic = PocketIc::new(); + let canister_id = deploy_counter_canister(&pic); - // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); - - // Install the counter canister wasm file on the canister. - let counter_wasm = counter_wasm(); - pic.install_canister(can_id, counter_wasm, vec![], None); - - // Make some calls to the canister. - let reply = call_counter_can(&pic, can_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 0])); - let reply = call_counter_can(&pic, can_id, "write"); - assert_eq!(reply, WasmResult::Reply(vec![1, 0, 0, 0])); - let reply = call_counter_can(&pic, can_id, "write"); - assert_eq!(reply, WasmResult::Reply(vec![2, 0, 0, 0])); - let reply = call_counter_can(&pic, can_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![2, 0, 0, 0])); + // Make some calls to the counter canister. + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, vec![0, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, vec![1, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, vec![2, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, vec![2, 0, 0, 0]); } fn counter_wasm() -> Vec { const COUNTER_WAT: &str = r#" (module (import "ic0" "msg_reply" (func $msg_reply)) - (import "ic0" "msg_reply_data_append" - (func $msg_reply_data_append (param i32 i32))) + (import "ic0" "msg_reply_data_append" (func $msg_reply_data_append (param i32 i32))) (func $write - (i32.store - (i32.const 0) - (i32.add (i32.load (i32.const 0)) (i32.const 1))) + (i32.store (i32.const 0) (i32.add (i32.load (i32.const 0)) (i32.const 1))) (call $read)) (func $read (call $msg_reply_data_append @@ -77,16 +90,6 @@ fn counter_wasm() -> Vec { wat::parse_str(COUNTER_WAT).unwrap() } -fn call_counter_can(ic: &PocketIc, can_id: CanisterId, method: &str) -> WasmResult { - ic.update_call( - can_id, - Principal::anonymous(), - method, - encode_one(()).unwrap(), - ) - .expect("Failed to call counter canister") -} - #[test] fn test_create_canister_with_id() { let pic = PocketIcBuilder::new() @@ -279,22 +282,20 @@ fn test_routing_with_multiple_subnets() { let canister_id_2 = pic.create_canister_on_subnet(None, None, subnet_id_2); pic.add_cycles(canister_id_1, INIT_CYCLES); pic.add_cycles(canister_id_2, INIT_CYCLES); - - let counter_wasm = counter_wasm(); - pic.install_canister(canister_id_1, counter_wasm.clone(), vec![], None); - pic.install_canister(canister_id_2, counter_wasm.clone(), vec![], None); + pic.install_canister(canister_id_1, counter_wasm(), vec![], None); + pic.install_canister(canister_id_2, counter_wasm(), vec![], None); // Call canister 1 on subnet 1. - let reply = call_counter_can(&pic, canister_id_1, "read"); - assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 0])); - let reply = call_counter_can(&pic, canister_id_1, "write"); - assert_eq!(reply, WasmResult::Reply(vec![1, 0, 0, 0])); + let reply = call_counter_canister(&pic, canister_id_1, "read"); + assert_eq!(reply, vec![0, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id_1, "write"); + assert_eq!(reply, vec![1, 0, 0, 0]); // Call canister 2 on subnet 2. - let reply = call_counter_can(&pic, canister_id_2, "read"); - assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 0])); - let reply = call_counter_can(&pic, canister_id_2, "write"); - assert_eq!(reply, WasmResult::Reply(vec![1, 0, 0, 0])); + let reply = call_counter_canister(&pic, canister_id_2, "read"); + assert_eq!(reply, vec![0, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id_2, "write"); + assert_eq!(reply, vec![1, 0, 0, 0]); // Creating a canister without specifying a subnet should still work. let _canister_id = pic.create_canister(); @@ -329,7 +330,7 @@ fn test_multiple_large_xnet_payloads() { // Self-calls with 10M and xnet-calls with up to 2M arguments work just fine // and return the length of the blob sent in the inter-canister call. match xnet_result { - Ok(WasmResult::Reply(reply)) => { + Ok(reply) => { let blob_len = Decode!(&reply, usize).unwrap(); assert_eq!(blob_len, size); } @@ -338,8 +339,8 @@ fn test_multiple_large_xnet_payloads() { } else { // An inter-canister call to a different subnet with 10M argument traps. match xnet_result { - Err(user_error) => { - assert_eq!(user_error.code, ErrorCode::CanisterCalledTrap); + Err(reject_response) => { + assert_eq!(reject_response.error_code, ErrorCode::CanisterCalledTrap); } _ => panic!("Unexpected update call result: {:?}", xnet_result), }; @@ -510,11 +511,7 @@ fn test_get_subnet_of_canister() { #[test] fn test_set_and_get_stable_memory_not_compressed() { let pic = PocketIc::new(); - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - - let counter_wasm = counter_wasm(); - pic.install_canister(canister_id, counter_wasm, vec![], None); + let canister_id = deploy_counter_canister(&pic); let data = "deadbeef".as_bytes().to_vec(); pic.set_stable_memory(canister_id, data.clone(), BlobCompression::NoCompression); @@ -526,10 +523,7 @@ fn test_set_and_get_stable_memory_not_compressed() { #[test] fn test_set_and_get_stable_memory_compressed() { let pic = PocketIc::new(); - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - let counter_wasm = counter_wasm(); - pic.install_canister(canister_id, counter_wasm, vec![], None); + let canister_id = deploy_counter_canister(&pic); let data = "decafbad".as_bytes().to_vec(); let mut compressed_data = Vec::new(); @@ -661,11 +655,7 @@ fn test_inspect_message() { #[test] fn test_too_large_call() { let pic = PocketIc::new(); - - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - let counter_wasm = counter_wasm(); - pic.install_canister(canister_id, counter_wasm, vec![], None); + let canister_id = deploy_counter_canister(&pic); const MAX_INGRESS_MESSAGE_ARG_SIZE: usize = 2097152; pic.update_call( @@ -696,26 +686,23 @@ async fn test_create_and_drop_instances_async() { async fn test_counter_canister_async() { let pic = pocket_ic::nonblocking::PocketIc::new().await; - // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister().await; - pic.add_cycles(can_id, INIT_CYCLES).await; - - // Install the counter canister wasm file on the canister. - let counter_wasm = counter_wasm(); - pic.install_canister(can_id, counter_wasm, vec![], None) + // Create a counter canister and charge it with 2T cycles. + let canister_id = pic.create_canister().await; + pic.add_cycles(canister_id, INIT_CYCLES).await; + pic.install_canister(canister_id, counter_wasm(), vec![], None) .await; // Make some calls to the canister. let reply = pic .update_call( - can_id, + canister_id, Principal::anonymous(), "read", encode_one(()).unwrap(), ) .await .expect("Failed to call counter canister"); - assert_eq!(reply, WasmResult::Reply(vec![0, 0, 0, 0])); + assert_eq!(reply, vec![0, 0, 0, 0]); // Drop the PocketIc instance. pic.drop().await; @@ -749,48 +736,38 @@ fn install_very_large_wasm() { let pic = PocketIcBuilder::new().with_application_subnet().build(); // Create a canister. - let can_id = pic.create_canister(); + let canister_id = pic.create_canister(); // Charge the canister with 2T cycles. - pic.add_cycles(can_id, 100 * INIT_CYCLES); + pic.add_cycles(canister_id, 100 * INIT_CYCLES); // Install the very large canister wasm on the canister. let wasm_module = very_large_wasm(5_000_000); assert!(wasm_module.len() >= 5_000_000); - pic.install_canister(can_id, wasm_module, vec![], None); + pic.install_canister(canister_id, wasm_module, vec![], None); // Update call on the newly installed canister should succeed // and return 4 bytes of the large data section. let res = pic - .update_call(can_id, Principal::anonymous(), "read", vec![]) + .update_call(canister_id, Principal::anonymous(), "read", vec![]) .unwrap(); - match res { - WasmResult::Reply(data) => assert_eq!(data, vec![b'X'; 4]), - _ => panic!("Unexpected update call response: {:?}", res), - }; + assert_eq!(res, vec![b'X'; 4]); } #[test] fn test_uninstall_canister() { let pic = PocketIc::new(); - - // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); - - // Install the counter canister wasm file on the canister. - let counter_wasm = counter_wasm(); - pic.install_canister(can_id, counter_wasm, vec![], None); + let canister_id = deploy_counter_canister(&pic); // The module hash should be set after the canister is installed. - let status = pic.canister_status(can_id, None).unwrap(); + let status = pic.canister_status(canister_id, None).unwrap(); assert!(status.module_hash.is_some()); // Uninstall the canister. - pic.uninstall_canister(can_id, None).unwrap(); + pic.uninstall_canister(canister_id, None).unwrap(); // The module hash should be unset after the canister is uninstalled. - let status = pic.canister_status(can_id, None).unwrap(); + let status = pic.canister_status(canister_id, None).unwrap(); assert!(status.module_hash.is_none()); } @@ -799,11 +776,11 @@ fn test_update_canister_settings() { let pic = PocketIc::new(); // Create a canister and charge it with 200T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, 100 * INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, 100 * INIT_CYCLES); // The compute allocation of the canister should be zero. - let status = pic.canister_status(can_id, None).unwrap(); + let status = pic.canister_status(canister_id, None).unwrap(); let zero: candid::Nat = 0_u64.into(); assert_eq!(status.settings.compute_allocation, zero); @@ -813,11 +790,11 @@ fn test_update_canister_settings() { compute_allocation: Some(new_compute_allocation.clone()), ..Default::default() }; - pic.update_canister_settings(can_id, None, settings) + pic.update_canister_settings(canister_id, None, settings) .unwrap(); // Check that the compute allocation has been set. - let status = pic.canister_status(can_id, None).unwrap(); + let status = pic.canister_status(canister_id, None).unwrap(); assert_eq!(status.settings.compute_allocation, new_compute_allocation); } @@ -891,7 +868,7 @@ fn test_xnet_call_and_create_canister_with_specified_id() { Encode!(&canister_b).unwrap(), ); match xnet_result { - Ok(WasmResult::Reply(reply)) => { + Ok(reply) => { let identity = Decode!(&reply, String).unwrap(); assert_eq!(identity, canister_b.to_string()); } @@ -942,53 +919,96 @@ fn test_schnorr() { // We define the message, derivation path, and ECDSA key ID to use in this test. let message = b"Hello, world!==================="; // must be of length 32 bytes for BIP340 let derivation_path = vec!["my message".as_bytes().to_vec()]; + let some_aux: Option = + Some(SignWithSchnorrAux::Bip341(SignWithBip341Aux { + merkle_root_hash: b"Hello, aux!=====================".to_vec(), + })); for algorithm in [SchnorrAlgorithm::Bip340Secp256K1, SchnorrAlgorithm::Ed25519] { for name in ["key_1", "test_key_1", "dfx_test_key"] { - let key_id = SchnorrPublicKeyArgsKeyId { - algorithm: algorithm.clone(), - name: name.to_string(), - }; - - // We get the Schnorr public key and signature via update calls to the test canister. - let schnorr_public_key = update_candid::< - (Option, _, _), - (Result,), - >( - &pic, - canister, - "schnorr_public_key", - (None, derivation_path.clone(), key_id.clone()), - ) - .unwrap() - .0 - .unwrap(); - let schnorr_signature = update_candid::<_, (Result, String>,)>( - &pic, - canister, - "sign_with_schnorr", - (message, derivation_path.clone(), key_id.clone()), - ) - .unwrap() - .0 - .unwrap(); + for aux in [None, some_aux.clone()] { + let key_id = SchnorrPublicKeyArgsKeyId { + algorithm: algorithm.clone(), + name: name.to_string(), + }; - // We verify the Schnorr signature. - match key_id.algorithm { - SchnorrAlgorithm::Bip340Secp256K1 => { - use k256::ecdsa::signature::hazmat::PrehashVerifier; - use k256::schnorr::{Signature, VerifyingKey}; - let vk = VerifyingKey::from_bytes(&schnorr_public_key.public_key[1..]).unwrap(); - let sig = Signature::try_from(schnorr_signature.as_slice()).unwrap(); - vk.verify_prehash(message, &sig).unwrap(); - } - SchnorrAlgorithm::Ed25519 => { - use ed25519_dalek::{Signature, Verifier, VerifyingKey}; - let pk: [u8; 32] = schnorr_public_key.public_key.try_into().unwrap(); - let vk = VerifyingKey::from_bytes(&pk).unwrap(); - let signature = Signature::from_slice(&schnorr_signature).unwrap(); - vk.verify(message, &signature).unwrap(); - } - }; + // We get the Schnorr public key and signature via update calls to the test canister. + let schnorr_public_key = update_candid::< + (Option, _, _), + (Result,), + >( + &pic, + canister, + "schnorr_public_key", + (None, derivation_path.clone(), key_id.clone()), + ) + .unwrap() + .0 + .unwrap(); + let schnorr_signature_result = update_candid::<_, (Result, String>,)>( + &pic, + canister, + "sign_with_schnorr", + ( + message, + derivation_path.clone(), + key_id.clone(), + aux.clone(), + ), + ) + .unwrap() + .0; + + // We verify the Schnorr signature. + match key_id.algorithm { + SchnorrAlgorithm::Bip340Secp256K1 => { + use k256::ecdsa::signature::hazmat::PrehashVerifier; + use k256::schnorr::{Signature, VerifyingKey}; + let bip340_public_key = schnorr_public_key.public_key[1..].to_vec(); + let public_key = match aux { + None => bip340_public_key, + Some(SignWithSchnorrAux::Bip341(bip341_aux)) => { + use bitcoin::hashes::Hash; + use bitcoin::schnorr::TapTweak; + let xonly = bitcoin::util::key::XOnlyPublicKey::from_slice( + bip340_public_key.as_slice(), + ) + .unwrap(); + let merkle_root = + bitcoin::util::taproot::TapBranchHash::from_slice( + &bip341_aux.merkle_root_hash, + ) + .unwrap(); + let secp256k1_engine = bitcoin::secp256k1::Secp256k1::new(); + xonly + .tap_tweak(&secp256k1_engine, Some(merkle_root)) + .0 + .to_inner() + .serialize() + .to_vec() + } + }; + let vk = VerifyingKey::from_bytes(&public_key).unwrap(); + let sig = Signature::try_from(schnorr_signature_result.unwrap().as_slice()) + .unwrap(); + + vk.verify_prehash(message, &sig).unwrap(); + } + SchnorrAlgorithm::Ed25519 => { + use ed25519_dalek::{Signature, Verifier, VerifyingKey}; + let pk: [u8; 32] = schnorr_public_key.public_key.try_into().unwrap(); + let vk = VerifyingKey::from_bytes(&pk).unwrap(); + let verification_result = schnorr_signature_result.map(|signature| { + let s = Signature::from_slice(&signature).unwrap(); + vk.verify(message, &s).unwrap(); + }); + assert!( + verification_result.is_ok() == aux.is_none(), + "{:?}", + verification_result + ); + } + }; + } } } } @@ -1121,18 +1141,18 @@ fn test_canister_http() { let pic = PocketIc::new(); // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); // Install the test canister wasm file on the canister. let test_wasm = test_canister_wasm(); - pic.install_canister(can_id, test_wasm, vec![], None); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // and mock a canister http outcall response. let call_id = pic .submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http", encode_one(()).unwrap(), @@ -1167,14 +1187,9 @@ fn test_canister_http() { // Now the test canister will receive the http outcall response // and reply to the ingress message from the test driver. let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: Result = - decode_one(&data).unwrap(); - assert_eq!(http_response.unwrap().body, body); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), - }; + let http_response: Result = + decode_one(&reply).unwrap(); + assert_eq!(http_response.unwrap().body, body); } #[test] @@ -1182,12 +1197,12 @@ fn test_canister_http_with_transform() { let pic = PocketIc::new(); // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); // Install the test canister wasm file on the canister. let test_wasm = test_canister_wasm(); - pic.install_canister(can_id, test_wasm, vec![], None); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // with a transform function (clearing http response headers and setting @@ -1195,7 +1210,7 @@ fn test_canister_http_with_transform() { // and mock a canister http outcall response. let call_id = pic .submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http_with_transform", encode_one(()).unwrap(), @@ -1229,17 +1244,12 @@ fn test_canister_http_with_transform() { // Now the test canister will receive the http outcall response // and reply to the ingress message from the test driver. let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: HttpRequestResult = decode_one(&data).unwrap(); - // http response headers are cleared by the transform function - assert!(http_response.headers.is_empty()); - // mocked non-empty response body is transformed to the transform context - // by the transform function - assert_eq!(http_response.body, b"this is my transform context".to_vec()); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), - }; + let http_response: HttpRequestResult = decode_one(&reply).unwrap(); + // http response headers are cleared by the transform function + assert!(http_response.headers.is_empty()); + // mocked non-empty response body is transformed to the transform context + // by the transform function + assert_eq!(http_response.body, b"this is my transform context".to_vec()); } #[test] @@ -1247,18 +1257,18 @@ fn test_canister_http_with_diverging_responses() { let pic = PocketIc::new(); // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); // Install the test canister wasm file on the canister. let test_wasm = test_canister_wasm(); - pic.install_canister(can_id, test_wasm, vec![], None); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // and mock diverging canister http outcall responses. let call_id = pic .submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http", encode_one(()).unwrap(), @@ -1296,17 +1306,12 @@ fn test_canister_http_with_diverging_responses() { // and reply to the ingress message from the test driver // relaying the error. let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: Result = - decode_one(&data).unwrap(); - let (reject_code, err) = http_response.unwrap_err(); - assert!(matches!(reject_code, RejectionCode::SysTransient)); - let expected = "No consensus could be reached. Replicas had different responses. Details: request_id: 0, timeout: 1620328930000000005, hashes: [98387cc077af9cff2ef439132854e91cb074035bb76e2afb266960d8e3beaf11: 2], [6a2fa8e54fb4bbe62cde29f7531223d9fcf52c21c03500c1060a5f893ed32d2e: 2], [3e9ec98abf56ef680bebb14309858ede38f6fde771cd4c04cda8f066dc2810db: 2], [2c14e77f18cd990676ae6ce0d7eb89c0af9e1a66e17294b5f0efa68422bba4cb: 2], [2843e4133f673571ff919808d3ca542cc54aaf288c702944e291f0e4fafffc69: 2], [1c4ad84926c36f1fbc634a0dc0535709706f7c48f0c6ebd814fe514022b90671: 2], [7bf80e2f02011ab0a7836b526546e75203b94e856d767c9df4cb0c19baf34059: 1]"; - assert_eq!(err, expected); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), - }; + let http_response: Result = + decode_one(&reply).unwrap(); + let (reject_code, err) = http_response.unwrap_err(); + assert!(matches!(reject_code, RejectionCode::SysTransient)); + let expected = "No consensus could be reached. Replicas had different responses. Details: request_id: 0, timeout: 1620328930000000005, hashes: [98387cc077af9cff2ef439132854e91cb074035bb76e2afb266960d8e3beaf11: 2], [6a2fa8e54fb4bbe62cde29f7531223d9fcf52c21c03500c1060a5f893ed32d2e: 2], [3e9ec98abf56ef680bebb14309858ede38f6fde771cd4c04cda8f066dc2810db: 2], [2c14e77f18cd990676ae6ce0d7eb89c0af9e1a66e17294b5f0efa68422bba4cb: 2], [2843e4133f673571ff919808d3ca542cc54aaf288c702944e291f0e4fafffc69: 2], [1c4ad84926c36f1fbc634a0dc0535709706f7c48f0c6ebd814fe514022b90671: 2], [7bf80e2f02011ab0a7836b526546e75203b94e856d767c9df4cb0c19baf34059: 1]"; + assert_eq!(err, expected); } #[test] @@ -1315,17 +1320,17 @@ fn test_canister_http_with_one_additional_response() { let pic = PocketIc::new(); // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); // Install the test canister wasm file on the canister. let test_wasm = test_canister_wasm(); - pic.install_canister(can_id, test_wasm, vec![], None); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // and mock diverging canister http outcall responses. pic.submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http", encode_one(()).unwrap(), @@ -1363,18 +1368,18 @@ fn test_canister_http_timeout() { let pic = PocketIc::new(); // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); + let canister_id = pic.create_canister(); + pic.add_cycles(canister_id, INIT_CYCLES); // Install the test canister wasm file on the canister. let test_wasm = test_canister_wasm(); - pic.install_canister(can_id, test_wasm, vec![], None); + pic.install_canister(canister_id, test_wasm, vec![], None); // Submit an update call to the test canister making a canister http outcall // and mock a canister http outcall response. let call_id = pic .submit_call( - can_id, + canister_id, Principal::anonymous(), "canister_http", encode_one(()).unwrap(), @@ -1399,24 +1404,18 @@ fn test_canister_http_timeout() { // Now the test canister will receive the http outcall response // and reply to the ingress message from the test driver. let reply = pic.await_call(call_id).unwrap(); - match reply { - WasmResult::Reply(data) => { - let http_response: Result = - decode_one(&data).unwrap(); - let (reject_code, err) = http_response.unwrap_err(); - match reject_code { - RejectionCode::SysTransient => (), - _ => panic!("Unexpected reject code {:?}", reject_code), - }; - assert_eq!(err, "Canister http request timed out"); - } - WasmResult::Reject(msg) => panic!("Unexpected reject {}", msg), + let http_response: Result = + decode_one(&reply).unwrap(); + let (reject_code, err) = http_response.unwrap_err(); + match reject_code { + RejectionCode::SysTransient => (), + _ => panic!("Unexpected reject code {:?}", reject_code), }; + assert_eq!(err, "Canister http request timed out"); } #[test] fn subnet_metrics() { - const INIT_CYCLES: u128 = 2_000_000_000_000; let pic = PocketIcBuilder::new().with_application_subnet().build(); let topology = pic.topology(); @@ -1426,17 +1425,13 @@ fn subnet_metrics() { .get_subnet_metrics(Principal::management_canister()) .is_none()); - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - pic.install_canister(canister_id, counter_wasm(), vec![], None); + deploy_counter_canister(&pic); let metrics = pic.get_subnet_metrics(app_subnet).unwrap(); assert_eq!(metrics.num_canisters, 1); assert!((1 << 16) < metrics.canister_state_bytes && metrics.canister_state_bytes < (1 << 17)); - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - pic.install_canister(canister_id, counter_wasm(), vec![], None); + let canister_id = deploy_counter_canister(&pic); let metrics = pic.get_subnet_metrics(app_subnet).unwrap(); assert_eq!(metrics.num_canisters, 2); @@ -1742,17 +1737,13 @@ fn get_controllers_of_nonexisting_canister() { #[test] fn test_canister_snapshots() { let pic = PocketIc::new(); - - // We deploy the counter canister. - let canister_id = pic.create_canister(); - pic.add_cycles(canister_id, INIT_CYCLES); - pic.install_canister(canister_id, counter_wasm(), vec![], None); + let canister_id = deploy_counter_canister(&pic); // We bump the counter to make the counter different from its initial value. - let reply = call_counter_can(&pic, canister_id, "write"); - assert_eq!(reply, WasmResult::Reply(1_u32.to_le_bytes().to_vec())); - let reply = call_counter_can(&pic, canister_id, "read"); - assert_eq!(reply, WasmResult::Reply(1_u32.to_le_bytes().to_vec())); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, 1_u32.to_le_bytes().to_vec()); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, 1_u32.to_le_bytes().to_vec()); // We haven't taken any snapshot so far and thus listing snapshots yields an empty result. let snapshots = pic.list_canister_snapshots(canister_id, None).unwrap(); @@ -1774,10 +1765,10 @@ fn test_canister_snapshots() { ); // We bump the counter once more to test loading snapshots in a subsequent step. - let reply = call_counter_can(&pic, canister_id, "write"); - assert_eq!(reply, WasmResult::Reply(2_u32.to_le_bytes().to_vec())); - let reply = call_counter_can(&pic, canister_id, "read"); - assert_eq!(reply, WasmResult::Reply(2_u32.to_le_bytes().to_vec())); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, 2_u32.to_le_bytes().to_vec()); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, 2_u32.to_le_bytes().to_vec()); // We load the snapshot (it is recommended to only load a snapshot on a stopped canister). pic.stop_canister(canister_id, None).unwrap(); @@ -1786,14 +1777,14 @@ fn test_canister_snapshots() { pic.start_canister(canister_id, None).unwrap(); // We verify that the snapshot was successfully loaded. - let reply = call_counter_can(&pic, canister_id, "read"); - assert_eq!(reply, WasmResult::Reply(1_u32.to_le_bytes().to_vec())); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, 1_u32.to_le_bytes().to_vec()); // We bump the counter again. - let reply = call_counter_can(&pic, canister_id, "write"); - assert_eq!(reply, WasmResult::Reply(2_u32.to_le_bytes().to_vec())); - let reply = call_counter_can(&pic, canister_id, "read"); - assert_eq!(reply, WasmResult::Reply(2_u32.to_le_bytes().to_vec())); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, 2_u32.to_le_bytes().to_vec()); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, 2_u32.to_le_bytes().to_vec()); // We take one more snapshot: since we already have an active snapshot, // taking another snapshot fails unless we specify the active snapshot to be replaced. @@ -1963,40 +1954,33 @@ fn make_live_twice() { #[test] fn create_instance_from_existing() { let pic = PocketIc::new(); - - // Create a canister and charge it with 2T cycles. - let can_id = pic.create_canister(); - pic.add_cycles(can_id, INIT_CYCLES); - - // Install the counter canister wasm file on the canister. - let counter_wasm = counter_wasm(); - pic.install_canister(can_id, counter_wasm, vec![], None); + let canister_id = deploy_counter_canister(&pic); // Bump and check the counter value; - let reply = call_counter_can(&pic, can_id, "write"); - assert_eq!(reply, WasmResult::Reply(vec![1, 0, 0, 0])); - let reply = call_counter_can(&pic, can_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![1, 0, 0, 0])); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, vec![1, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, vec![1, 0, 0, 0]); // Create a new PocketIC handle to the existing PocketIC instance. let pic_handle = PocketIc::new_from_existing_instance(pic.get_server_url(), pic.instance_id(), None); // Bump and check the counter value; - let reply = call_counter_can(&pic_handle, can_id, "write"); - assert_eq!(reply, WasmResult::Reply(vec![2, 0, 0, 0])); - let reply = call_counter_can(&pic_handle, can_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![2, 0, 0, 0])); + let reply = call_counter_canister(&pic_handle, canister_id, "write"); + assert_eq!(reply, vec![2, 0, 0, 0]); + let reply = call_counter_canister(&pic_handle, canister_id, "read"); + assert_eq!(reply, vec![2, 0, 0, 0]); // Drop the newly created PocketIC handle. // This should not delete the existing PocketIC instance. drop(pic_handle); // Bump and check the counter value; - let reply = call_counter_can(&pic, can_id, "write"); - assert_eq!(reply, WasmResult::Reply(vec![3, 0, 0, 0])); - let reply = call_counter_can(&pic, can_id, "read"); - assert_eq!(reply, WasmResult::Reply(vec![3, 0, 0, 0])); + let reply = call_counter_canister(&pic, canister_id, "write"); + assert_eq!(reply, vec![3, 0, 0, 0]); + let reply = call_counter_canister(&pic, canister_id, "read"); + assert_eq!(reply, vec![3, 0, 0, 0]); } #[test] @@ -2009,25 +1993,82 @@ fn ingress_status() { pic.add_cycles(canister_id, INIT_CYCLES); pic.install_canister(canister_id, test_canister_wasm(), vec![], None); + let caller = Principal::from_slice(&[0xFF; 29]); let msg_id = pic - .submit_call( - canister_id, - Principal::anonymous(), - "whoami", - encode_one(()).unwrap(), - ) + .submit_call(canister_id, caller, "whoami", encode_one(()).unwrap()) .unwrap(); assert!(pic.ingress_status(msg_id.clone()).is_none()); + // since the ingress status is not available, any caller can attempt to retrieve it + match pic.ingress_status_as(msg_id.clone(), Principal::anonymous()) { + IngressStatusResult::NotAvailable => (), + status => panic!("Unexpected ingress status: {:?}", status), + } + pic.tick(); - let ingress_status = pic.ingress_status(msg_id).unwrap().unwrap(); - let principal = match ingress_status { - WasmResult::Reply(data) => Decode!(&data, String).unwrap(), - WasmResult::Reject(err) => panic!("Unexpected reject: {}", err), - }; + let reply = pic.ingress_status(msg_id.clone()).unwrap().unwrap(); + let principal = Decode!(&reply, String).unwrap(); assert_eq!(principal, canister_id.to_string()); + + // now that the ingress status is available, the caller must match + let expected_err = "The user tries to access Request ID not signed by the caller."; + match pic.ingress_status_as(msg_id.clone(), Principal::anonymous()) { + IngressStatusResult::Forbidden(msg) => assert_eq!(msg, expected_err,), + status => panic!("Unexpected ingress status: {:?}", status), + } + + // confirm the behavior of read state requests + let resp = read_state_request_status(&pic, canister_id, msg_id.message_id.as_slice()); + assert_eq!(resp.status(), reqwest::StatusCode::FORBIDDEN); + assert_eq!( + String::from_utf8(resp.bytes().unwrap().to_vec()).unwrap(), + expected_err + ); +} + +fn read_state_request_status( + pic: &PocketIc, + canister_id: Principal, + msg_id: &[u8], +) -> reqwest::blocking::Response { + let path = vec!["request_status".into(), Label::from_bytes(msg_id)]; + let paths = vec![path.clone()]; + let content = ReadState { + ingress_expiry: pic + .get_time() + .duration_since(std::time::SystemTime::UNIX_EPOCH) + .unwrap() + .as_nanos() as u64 + + 240_000_000_000, + sender: Principal::anonymous(), + paths, + }; + let envelope = Envelope { + content: std::borrow::Cow::Borrowed(&content), + sender_pubkey: None, + sender_sig: None, + sender_delegation: None, + }; + + let mut serialized_bytes = Vec::new(); + let mut serializer = serde_cbor::Serializer::new(&mut serialized_bytes); + serializer.self_describe().unwrap(); + envelope.serialize(&mut serializer).unwrap(); + + let endpoint = format!( + "instances/{}/api/v2/canister/{}/read_state", + pic.instance_id(), + canister_id.to_text() + ); + let client = reqwest::blocking::Client::new(); + client + .post(pic.get_server_url().join(&endpoint).unwrap()) + .header(reqwest::header::CONTENT_TYPE, "application/cbor") + .body(serialized_bytes) + .send() + .unwrap() } #[test] @@ -2052,9 +2093,121 @@ fn await_call_no_ticks() { .unwrap(); let result = pic.await_call_no_ticks(msg_id).unwrap(); - let principal = match result { - WasmResult::Reply(data) => Decode!(&data, String).unwrap(), - WasmResult::Reject(err) => panic!("Unexpected reject: {}", err), - }; + let principal = Decode!(&result, String).unwrap(); assert_eq!(principal, canister_id.to_string()); } + +#[test] +fn many_intersubnet_calls() { + let pic = PocketIcBuilder::new() + .with_application_subnet() + .with_application_subnet() + .build(); + let canister_1 = pic.create_canister_on_subnet(None, None, pic.topology().get_app_subnets()[0]); + pic.add_cycles(canister_1, 100_000_000_000_000_000); + pic.install_canister(canister_1, test_canister_wasm(), vec![], None); + let canister_2 = pic.create_canister_on_subnet(None, None, pic.topology().get_app_subnets()[1]); + pic.add_cycles(canister_2, 100_000_000_000_000_000); + pic.install_canister(canister_2, test_canister_wasm(), vec![], None); + + let mut msg_ids = vec![]; + let num_msgs: usize = 500; + let msg_size: usize = 10000; + for _ in 0..num_msgs { + let msg_id = pic + .submit_call( + canister_1, + Principal::anonymous(), + "call_with_large_blob", + Encode!(&canister_2, &msg_size).unwrap(), + ) + .unwrap(); + msg_ids.push(msg_id); + } + for msg_id in msg_ids { + pic.await_call(msg_id).unwrap(); + } +} + +#[test] +fn test_reject_response_type() { + let pic = PocketIc::new(); + + // We create a test canister. + let canister = pic.create_canister(); + pic.add_cycles(canister, INIT_CYCLES); + pic.install_canister(canister, test_canister_wasm(), vec![], None); + + for certified in [true, false] { + for action in ["reject", "trap"] { + for method in ["query", "update"] { + // updates are always certified + if !certified && method == "update" { + continue; + } + let method_name = format!("{}_{}", action, method); + let (err, msg_id) = if certified { + let msg_id = pic + .submit_call( + canister, + Principal::anonymous(), + &method_name, + Encode!(&()).unwrap(), + ) + .unwrap(); + let err = pic.await_call(msg_id.clone()).unwrap_err(); + (err, Some(msg_id)) + } else { + let err = pic + .query_call( + canister, + Principal::anonymous(), + &method_name, + Encode!(&()).unwrap(), + ) + .unwrap_err(); + (err, None) + }; + if let Some(msg_id) = msg_id { + let ingress_status_err = pic.ingress_status(msg_id).unwrap().unwrap_err(); + assert_eq!(ingress_status_err, err); + } + if action == "reject" { + assert_eq!(err.reject_code, RejectCode::CanisterReject); + assert_eq!(err.error_code, ErrorCode::CanisterRejectedMessage); + } else { + assert_eq!(action, "trap"); + assert_eq!(err.reject_code, RejectCode::CanisterError); + assert_eq!(err.error_code, ErrorCode::CanisterCalledTrap); + } + assert!(err + .reject_message + .contains(&format!("{} in {} method", action, method))); + assert_eq!(err.certified, certified); + } + } + } + + for action in [b"trap", b"skip"] { + let err = pic + .submit_call( + canister, + Principal::anonymous(), + "trap_update", + action.to_vec(), + ) + .unwrap_err(); + if action == b"trap" { + assert_eq!(err.reject_code, RejectCode::CanisterError); + assert!(err.reject_message.contains("trap in inspect message")); + assert_eq!(err.error_code, ErrorCode::CanisterCalledTrap); + } else { + assert_eq!(action, b"skip"); + assert_eq!(err.reject_code, RejectCode::CanisterReject); + assert!(err.reject_message.contains("Canister rejected the message")); + assert_eq!(err.error_code, ErrorCode::CanisterRejectedMessage); + } + // inspect message is always uncertified + assert!(!err.certified); + } +} diff --git a/publish/canisters/BUILD.bazel b/publish/canisters/BUILD.bazel index b4f480f7003..d2c64d9e258 100644 --- a/publish/canisters/BUILD.bazel +++ b/publish/canisters/BUILD.bazel @@ -18,7 +18,6 @@ CANISTERS = { "ic-ckbtc-minter_debug.wasm.gz": "//rs/bitcoin/ckbtc/minter:ckbtc_minter_debug", "ic-ckbtc-kyt.wasm.gz": "//rs/bitcoin/ckbtc/kyt:kyt_canister", "ic-cketh-minter.wasm.gz": "//rs/ethereum/cketh/minter:cketh_minter", - "ic-icrc1-index.wasm.gz": "//rs/ledger_suite/icrc1/index:index_canister", "ic-icrc1-index-ng.wasm.gz": "//rs/ledger_suite/icrc1/index-ng:index_ng_canister", "ic-icrc1-index-ng-u256.wasm.gz": "//rs/ledger_suite/icrc1/index-ng:index_ng_canister_u256", "ic-icrc1-ledger.wasm.gz": "//rs/ledger_suite/icrc1/ledger:ledger_canister", @@ -79,8 +78,8 @@ CANISTERS_MAX_SIZE_COMPRESSED_E5_BYTES = { # The orchestrator needs to embed 3 wasms at compile time # (ICRC1 index, ICRC1 ledger, and ICRC1 archive) and size is # therefore strictly controlled. - # Size when constraint addded: 1_655_752 bytes - "ic-ledger-suite-orchestrator-canister.wasm.gz": "17", + # Size when constraint addded: 1_704_979 bytes + "ic-ledger-suite-orchestrator-canister.wasm.gz": "18", # -- BN team -- # Size when constraint addded: 540_349 bytes diff --git a/rs/artifact_pool/src/consensus_pool_cache.rs b/rs/artifact_pool/src/consensus_pool_cache.rs index 5b5ef9462b3..5de2a1d307d 100644 --- a/rs/artifact_pool/src/consensus_pool_cache.rs +++ b/rs/artifact_pool/src/consensus_pool_cache.rs @@ -120,7 +120,7 @@ impl<'a> CachedChainIterator<'a> { } } -impl<'a> Iterator for CachedChainIterator<'a> { +impl Iterator for CachedChainIterator<'_> { type Item = Block; fn next(&mut self) -> Option { diff --git a/rs/artifact_pool/src/idkg_pool.rs b/rs/artifact_pool/src/idkg_pool.rs index aaa3c7f4a2f..b28484165b2 100644 --- a/rs/artifact_pool/src/idkg_pool.rs +++ b/rs/artifact_pool/src/idkg_pool.rs @@ -12,17 +12,14 @@ use crate::{ IntoInner, }; use ic_config::artifact_pool::{ArtifactPoolConfig, PersistentPoolBackend}; +use ic_interfaces::idkg::{ + IDkgChangeAction, IDkgChangeSet, IDkgPool, IDkgPoolSection, IDkgPoolSectionOp, + IDkgPoolSectionOps, MutableIDkgPoolSection, +}; use ic_interfaces::p2p::consensus::{ ArtifactTransmit, ArtifactTransmits, ArtifactWithOpt, MutablePool, UnvalidatedArtifact, ValidatedPoolReader, }; -use ic_interfaces::{ - idkg::{ - IDkgChangeAction, IDkgChangeSet, IDkgPool, IDkgPoolSection, IDkgPoolSectionOp, - IDkgPoolSectionOps, MutableIDkgPoolSection, - }, - time_source::TimeSource, -}; use ic_logger::{info, warn, ReplicaLogger}; use ic_metrics::MetricsRegistry; use ic_types::consensus::{ @@ -380,11 +377,7 @@ impl IDkgPoolImpl { } // Populates the unvalidated pool with the initial dealings from the CUP. - pub fn add_initial_dealings( - &mut self, - catch_up_package: &CatchUpPackage, - time_source: &dyn TimeSource, - ) { + pub fn add_initial_dealings(&mut self, catch_up_package: &CatchUpPackage) { let block = catch_up_package.content.block.get_value(); let mut initial_dealings = Vec::new(); @@ -413,7 +406,7 @@ impl IDkgPoolImpl { self.insert(UnvalidatedArtifact { message: IDkgMessage::Dealing(signed_dealing.clone()), peer_id: signed_dealing.dealer_id(), - timestamp: time_source.get_relative_time(), + timestamp: block.context.time, }) } } diff --git a/rs/artifact_pool/src/lmdb_iterator.rs b/rs/artifact_pool/src/lmdb_iterator.rs index 59437b6c1b8..36924fc0fec 100644 --- a/rs/artifact_pool/src/lmdb_iterator.rs +++ b/rs/artifact_pool/src/lmdb_iterator.rs @@ -43,7 +43,7 @@ pub(crate) struct LMDBIterator<'a, F> { db_env: Arc, } -impl<'a, F> LMDBIterator<'a, F> { +impl LMDBIterator<'_, F> { /// Return a new iterator that will iterator through DB objects between /// min_key and max_key (inclusive) that are deserialized using the /// given deserialize function. @@ -71,7 +71,7 @@ impl<'a, F> LMDBIterator<'a, F> { } } -impl<'a, T, F: Fn(&RoTransaction<'_>, &[u8]) -> lmdb::Result> Iterator for LMDBIterator<'a, F> { +impl, &[u8]) -> lmdb::Result> Iterator for LMDBIterator<'_, F> { type Item = T; fn next(&mut self) -> Option { @@ -106,7 +106,7 @@ pub(crate) struct LMDBIDkgIterator<'a, F> { _db_env: Arc, } -impl<'a, F> LMDBIDkgIterator<'a, F> { +impl LMDBIDkgIterator<'_, F> { pub fn new( db_env: Arc, db: Database, @@ -136,7 +136,7 @@ impl<'a, F> LMDBIDkgIterator<'a, F> { } } -impl<'a, K, T, F: Fn(&[u8], &[u8]) -> Option<(K, T)>> Iterator for LMDBIDkgIterator<'a, F> { +impl Option<(K, T)>> Iterator for LMDBIDkgIterator<'_, F> { type Item = (K, T); fn next(&mut self) -> Option { diff --git a/rs/artifact_pool/src/rocksdb_iterator.rs b/rs/artifact_pool/src/rocksdb_iterator.rs index b61483cb1d0..55936a2e0ec 100644 --- a/rs/artifact_pool/src/rocksdb_iterator.rs +++ b/rs/artifact_pool/src/rocksdb_iterator.rs @@ -68,7 +68,7 @@ enum Status { Stopped, } -impl<'a, F> StandaloneIterator<'a, F> { +impl StandaloneIterator<'_, F> { /// Create an iterator for the given column family 'name' of the given 'db' /// starting from 'start_key' pub fn new( diff --git a/rs/artifact_pool/src/rocksdb_pool.rs b/rs/artifact_pool/src/rocksdb_pool.rs index ab35775a2f0..0c89925857b 100755 --- a/rs/artifact_pool/src/rocksdb_pool.rs +++ b/rs/artifact_pool/src/rocksdb_pool.rs @@ -568,7 +568,7 @@ fn deserialize_consensus_artifact( impl PoolSection for PersistentHeightIndexedPool { fn contains(&self, msg_id: &ConsensusMessageId) -> bool { - self.lookup_key(msg_id).map_or(false, |key| { + self.lookup_key(msg_id).is_some_and(|key| { let info = info_for_msg_id(msg_id); let cf_handle = check_not_none_uw!(self.db.cf_handle(info.name)); check_ok_uw!(self.db.get_pinned_cf(cf_handle, &key)).is_some() diff --git a/rs/backup/BUILD.bazel b/rs/backup/BUILD.bazel index a792b7b5e34..32709db022a 100644 --- a/rs/backup/BUILD.bazel +++ b/rs/backup/BUILD.bazel @@ -61,7 +61,7 @@ rust_binary( rust_test( name = "backup_test", + compile_data = ["test_data/fake_input_config.json.template"], crate = ":backup", - data = ["test_data/fake_input_config.json.template"], deps = DEPENDENCIES + DEV_DEPENDENCIES, ) diff --git a/rs/bitcoin/adapter/BUILD.bazel b/rs/bitcoin/adapter/BUILD.bazel index 2050fc86d39..bf093511e2d 100644 --- a/rs/bitcoin/adapter/BUILD.bazel +++ b/rs/bitcoin/adapter/BUILD.bazel @@ -89,11 +89,11 @@ rust_binary( rust_test( name = "adapter_test", - crate = ":adapter", - data = [ + compile_data = [ "test_data/first_2500_mainnet_headers.json", "test_data/first_2500_testnet_headers.json", ], + crate = ":adapter", tags = ["requires-network"], deps = DEV_DEPENDENCIES, ) diff --git a/rs/bitcoin/adapter/src/lib.rs b/rs/bitcoin/adapter/src/lib.rs index ffec373df3f..61329ee5136 100644 --- a/rs/bitcoin/adapter/src/lib.rs +++ b/rs/bitcoin/adapter/src/lib.rs @@ -1,4 +1,4 @@ -#![warn(missing_docs)] +#![cfg_attr(not(test), warn(missing_docs))] //! The Bitcoin adapter interacts with the Bitcoin P2P network to obtain blocks //! and publish transactions. Moreover, it interacts with the Bitcoin system diff --git a/rs/bitcoin/checker/BUILD.bazel b/rs/bitcoin/checker/BUILD.bazel index 2944598a22e..3bc774f10df 100644 --- a/rs/bitcoin/checker/BUILD.bazel +++ b/rs/bitcoin/checker/BUILD.bazel @@ -73,7 +73,6 @@ rust_canister( "@crate_index//:ic-cdk", "@crate_index//:ic-metrics-encoder", "@crate_index//:ic-stable-structures", - "@crate_index//:num-traits", "@crate_index//:serde", "@crate_index//:serde_json", "@crate_index//:time", @@ -98,6 +97,7 @@ rust_ic_test( # Keep sorted. ":btc_checker_lib", "//:pocket-ic-server", + "//packages/ic-metrics-assert:ic-metrics-assert_pocket_ic", "//packages/pocket-ic", "//rs/rust_canisters/http_types", "//rs/test_utilities/load_wasm", @@ -107,5 +107,6 @@ rust_ic_test( "@crate_index//:candid", "@crate_index//:ic-btc-interface", "@crate_index//:ic-cdk", + "@crate_index//:regex", ], ) diff --git a/rs/bitcoin/checker/Cargo.toml b/rs/bitcoin/checker/Cargo.toml index 972c1058d08..757e9ef16bc 100644 --- a/rs/bitcoin/checker/Cargo.toml +++ b/rs/bitcoin/checker/Cargo.toml @@ -24,15 +24,15 @@ ic-canisters-http-types = { path = "../../rust_canisters/http_types" } ic-cdk = { workspace = true } ic-metrics-encoder = "1.1" ic-stable-structures = { workspace = true } -num-traits = { workspace = true } serde = { workspace = true } -serde_json = {workspace = true } +serde_json = { workspace = true } time = { workspace = true } url = { workspace = true } [dev-dependencies] candid_parser = { workspace = true } ic-base-types = { path = "../../types/base_types" } +ic-metrics-assert = { path = "../../../packages/ic-metrics-assert", features = ["pocket_ic"] } ic-types = { path = "../../types/types" } ic-test-utilities-load-wasm = { path = "../../test_utilities/load_wasm" } ic-universal-canister = { path = "../../universal_canister/lib" } diff --git a/rs/bitcoin/checker/src/main.rs b/rs/bitcoin/checker/src/main.rs index 134b9491c47..e81f92263fc 100644 --- a/rs/bitcoin/checker/src/main.rs +++ b/rs/bitcoin/checker/src/main.rs @@ -1,19 +1,20 @@ use bitcoin::{consensus::Decodable, Address, Transaction}; +use candid::Nat; use ic_btc_checker::{ blocklist::is_blocked, get_tx_cycle_cost, BtcNetwork, CheckAddressArgs, CheckAddressResponse, CheckArg, CheckMode, CheckTransactionArgs, CheckTransactionIrrecoverableError, CheckTransactionResponse, CheckTransactionRetriable, CheckTransactionStatus, CheckTransactionStrArgs, CHECK_TRANSACTION_CYCLES_REQUIRED, - CHECK_TRANSACTION_CYCLES_SERVICE_FEE, + CHECK_TRANSACTION_CYCLES_SERVICE_FEE, RETRY_MAX_RESPONSE_BYTES, }; use ic_btc_interface::Txid; use ic_canister_log::{export as export_logs, log}; use ic_canisters_http_types as http; use ic_cdk::api::call::RejectionCode; use ic_cdk::api::management_canister::http_request::{HttpResponse, TransformArgs}; -use num_traits::cast::ToPrimitive; use std::cell::RefCell; use std::collections::BTreeMap; +use std::fmt; use std::str::FromStr; mod dashboard; @@ -26,12 +27,28 @@ use fetch::{FetchEnv, FetchResult, TryFetchResult}; use logs::{Log, LogEntry, Priority, DEBUG, WARN}; use state::{get_config, set_config, Config, FetchGuardError, HttpGetTxError}; +#[derive(PartialOrd, Ord, PartialEq, Eq)] +enum HttpsOutcallStatus { + ResponseTooLarge, + IcError(RejectionCode), + HttpStatusCode(Nat), +} + +impl fmt::Display for HttpsOutcallStatus { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Self::ResponseTooLarge => write!(f, "ResponseTooLarge"), + Self::IcError(rejection_code) => write!(f, "IcError({})", *rejection_code as i32), + Self::HttpStatusCode(status_code) => write!(f, "HttpStatusCode({})", status_code), + } + } +} + #[derive(Default)] struct Stats { - https_outcall_status: BTreeMap<(String, u16), u64>, + https_outcall_status: BTreeMap<(String, HttpsOutcallStatus), u64>, http_response_size: BTreeMap, check_transaction_count: u64, - check_address_count: u64, } thread_local! { @@ -57,7 +74,6 @@ fn check_address(args: CheckAddressArgs) -> CheckAddressResponse { ic_cdk::trap(&format!("Not a Bitcoin {} address: {}", btc_network, err)) }); - STATS.with(|s| s.borrow_mut().check_transaction_count += 1); match config.check_mode { CheckMode::AcceptAll => CheckAddressResponse::Passed, CheckMode::RejectAll => CheckAddressResponse::Failed, @@ -232,7 +248,7 @@ fn http_request(req: http::HttpRequest) -> http::HttpResponse { .value( &[ ("provider", provider.as_str()), - ("status", status.to_string().as_str()), + ("status", status.to_string().as_ref()), ], *count as f64, ) @@ -259,11 +275,6 @@ fn http_request(req: http::HttpRequest) -> http::HttpResponse { &[("type", "check_transaction")], stats.check_transaction_count as f64, ) - .unwrap() - .value( - &[("type", "check_address")], - stats.check_address_count as f64, - ) .unwrap(); }); @@ -373,7 +384,10 @@ impl FetchEnv for BtcCheckerCanisterEnv { let mut stat = s.borrow_mut(); *stat .https_outcall_status - .entry((provider.name(), response.status.0.to_u16().unwrap())) + .entry(( + provider.name(), + HttpsOutcallStatus::HttpStatusCode(response.status.clone()), + )) .or_default() += 1; // Calculate size bucket as a series of power of 2s. // Note that the max is bounded by `max_response_bytes`, which fits `u32`. @@ -421,8 +435,26 @@ impl FetchEnv for BtcCheckerCanisterEnv { } Ok(tx) } - Err((r, m)) if is_response_too_large(&r, &m) => Err(HttpGetTxError::ResponseTooLarge), + Err((r, m)) if is_response_too_large(&r, &m) => { + if max_response_bytes >= RETRY_MAX_RESPONSE_BYTES { + STATS.with(|s| { + let mut stat = s.borrow_mut(); + *stat + .https_outcall_status + .entry((provider.name(), HttpsOutcallStatus::ResponseTooLarge)) + .or_default() += 1; + }); + } + Err(HttpGetTxError::ResponseTooLarge) + } Err((r, m)) => { + STATS.with(|s| { + let mut stat = s.borrow_mut(); + *stat + .https_outcall_status + .entry((provider.name(), HttpsOutcallStatus::IcError(r))) + .or_default() += 1; + }); log!( DEBUG, "The http_request resulted into error. RejectionCode: {r:?}, Error: {m}, Request: {request:?}" diff --git a/rs/bitcoin/checker/tests/tests.rs b/rs/bitcoin/checker/tests/tests.rs index 50be26eb384..426816e3e82 100644 --- a/rs/bitcoin/checker/tests/tests.rs +++ b/rs/bitcoin/checker/tests/tests.rs @@ -1,4 +1,4 @@ -use candid::{decode_one, CandidType, Deserialize, Encode, Principal}; +use candid::{decode_one, Encode, Principal}; use ic_base_types::PrincipalId; use ic_btc_checker::{ blocklist, get_tx_cycle_cost, BtcNetwork, CheckAddressArgs, CheckAddressResponse, CheckArg, @@ -8,15 +8,19 @@ use ic_btc_checker::{ INITIAL_MAX_RESPONSE_BYTES, }; use ic_btc_interface::Txid; +use ic_canisters_http_types::{HttpRequest, HttpResponse}; +use ic_cdk::api::call::RejectionCode; +use ic_metrics_assert::{MetricsAssert, PocketIcHttpQuery}; use ic_test_utilities_load_wasm::load_wasm; use ic_types::Cycles; use ic_universal_canister::{call_args, wasm, UNIVERSAL_CANISTER_WASM}; +use pocket_ic::management_canister::CanisterId; use pocket_ic::{ common::rest::{ - CanisterHttpHeader, CanisterHttpReply, CanisterHttpRequest, CanisterHttpResponse, - MockCanisterHttpResponse, RawMessageId, + CanisterHttpHeader, CanisterHttpReject, CanisterHttpReply, CanisterHttpRequest, + CanisterHttpResponse, MockCanisterHttpResponse, RawMessageId, }, - query_candid, PocketIc, PocketIcBuilder, UserError, WasmResult, + query_candid, PocketIc, PocketIcBuilder, RejectResponse, }; use std::str::FromStr; @@ -98,7 +102,7 @@ impl Setup { method: &str, args: Vec, cycles: u128, - ) -> Result { + ) -> Result { let payload = wasm() .call_with_cycles( PrincipalId(self.btc_checker_canister), @@ -114,13 +118,6 @@ impl Setup { } } -fn decode<'a, T: CandidType + Deserialize<'a>>(result: &'a WasmResult) -> T { - match result { - WasmResult::Reply(bytes) => decode_one(bytes).unwrap(), - WasmResult::Reject(msg) => panic!("unexpected reject: {}", msg), - } -} - #[test] fn test_get_tx_cycle_cost() { assert_eq!( @@ -364,7 +361,7 @@ fn test_check_transaction_passed() { .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Passed )); @@ -374,6 +371,9 @@ fn test_check_transaction_passed() { let actual_cost = cycles_before - cycles_after; assert!(actual_cost > expected_cost); assert!(actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN); + MetricsAssert::from_http_query(&setup).assert_contains_metric_matching( + r#"btc_check_requests_total\{type=\"check_transaction\"\} 1 \d+"#, + ); }; // With default installation @@ -408,7 +408,7 @@ fn test_check_transaction_passed() { .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Failed(addresses) if addresses.is_empty() ),); let cycles_after = env.cycle_balance(setup.caller); @@ -416,6 +416,9 @@ fn test_check_transaction_passed() { let actual_cost = cycles_before - cycles_after; assert!(actual_cost > expected_cost); assert!(actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN); + MetricsAssert::from_http_query(&setup).assert_contains_metric_matching( + r#"btc_check_requests_total\{type=\"check_transaction\"\} 1 \d+"#, + ); // Test CheckMode::AcceptAll env.tick(); @@ -446,7 +449,7 @@ fn test_check_transaction_passed() { .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Passed ),); let cycles_after = env.cycle_balance(setup.caller); @@ -457,6 +460,9 @@ fn test_check_transaction_passed() { actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN, "actual_cost: {actual_cost}, expected_cost: {expected_cost}" ); + MetricsAssert::from_http_query(&setup).assert_contains_metric_matching( + r#"btc_check_requests_total\{type=\"check_transaction\"\} 1 \d+"#, + ); // Test CheckMode::Normal env.tick(); @@ -497,7 +503,7 @@ fn test_check_transaction_error() { .await_call(call_id) .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::NotEnoughCycles), )); @@ -515,7 +521,7 @@ fn test_check_transaction_error() { .await_call(call_id) .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::NotEnoughCycles), )); @@ -553,7 +559,7 @@ fn test_check_transaction_error() { .expect("the fetch request didn't finish"); // 500 error is retriable assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::Retriable( CheckTransactionRetriable::TransientInternalError(msg) )) if msg.contains("received code 500") @@ -593,7 +599,7 @@ fn test_check_transaction_error() { .expect("the fetch request didn't finish"); // 404 error is retriable too assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::Retriable( CheckTransactionRetriable::TransientInternalError(msg) )) if msg.contains("received code 404") @@ -605,6 +611,45 @@ fn test_check_transaction_error() { assert!(actual_cost > expected_cost); assert!(actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN); + // Test for CanisterHttpReject error + let cycles_before = setup.env.cycle_balance(setup.caller); + let call_id = setup + .submit_btc_checker_call( + "check_transaction", + Encode!(&CheckTransactionArgs { txid: txid.clone() }).unwrap(), + CHECK_TRANSACTION_CYCLES_REQUIRED, + ) + .expect("submit_call failed to return call id"); + let canister_http_requests = tick_until_next_request(&setup.env); + setup + .env + .mock_canister_http_response(MockCanisterHttpResponse { + subnet_id: canister_http_requests[0].subnet_id, + request_id: canister_http_requests[0].request_id, + response: CanisterHttpResponse::CanisterHttpReject(CanisterHttpReject { + reject_code: RejectionCode::SysTransient as u64, + message: "Failed to directly connect".to_string(), + }), + additional_responses: vec![], + }); + let result = setup + .env + .await_call(call_id) + .expect("the fetch request didn't finish"); + // Reject error is retriable too + assert!(matches!( + decode_one(&result).unwrap(), + CheckTransactionResponse::Unknown(CheckTransactionStatus::Retriable( + CheckTransactionRetriable::TransientInternalError(msg) + )) if msg.contains("Failed to directly connect") + )); + let cycles_after = setup.env.cycle_balance(setup.caller); + let expected_cost = CHECK_TRANSACTION_CYCLES_SERVICE_FEE + + get_tx_cycle_cost(INITIAL_MAX_RESPONSE_BYTES, TEST_SUBNET_NODES); + let actual_cost = cycles_before - cycles_after; + assert!(actual_cost > expected_cost); + assert!(actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN); + // Test for malformatted transaction data let cycles_before = setup.env.cycle_balance(setup.caller); let call_id = setup @@ -633,7 +678,7 @@ fn test_check_transaction_error() { .expect("the fetch request didn't finish"); // malformated tx error is retriable assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::Retriable( CheckTransactionRetriable::TransientInternalError(msg) )) if msg.contains("TxEncoding") @@ -660,7 +705,7 @@ fn test_check_transaction_error() { .await_call(call_id) .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::Error( CheckTransactionIrrecoverableError::InvalidTransactionId(_) )) @@ -691,7 +736,7 @@ fn test_check_transaction_error() { .await_call(call_id) .expect("the fetch request didn't finish"); assert!(matches!( - decode::(&result), + decode_one(&result).unwrap(), CheckTransactionResponse::Unknown(CheckTransactionStatus::Error( CheckTransactionIrrecoverableError::InvalidTransactionId(_) )) @@ -702,6 +747,23 @@ fn test_check_transaction_error() { let actual_cost = cycles_before - cycles_after; assert!(actual_cost > expected_cost); assert!(actual_cost - expected_cost < UNIVERSAL_CANISTER_CYCLE_MARGIN); + + MetricsAssert::from_http_query(&setup) + .assert_contains_metric_matching( + r#"btc_check_requests_total\{type=\"check_transaction\"\} 5 \d+"#, + ) + .assert_contains_metric_matching( + r#"btc_checker_http_calls_total\{provider=\"[a-z.]*\",status=\"HttpStatusCode\(500\)\"\} 1 \d+"#, + ) + .assert_contains_metric_matching( + r#"btc_checker_http_calls_total\{provider=\"[a-z.]*\",status=\"HttpStatusCode\(200\)\"\} 1 \d+"#, + ) + .assert_contains_metric_matching( + r#"btc_checker_http_calls_total\{provider=\"[a-z.]*\",status=\"HttpStatusCode\(404\)\"\} 1 \d+"#, + ) + .assert_contains_metric_matching( + r#"btc_checker_http_calls_total\{provider=\"[a-z.]*\",status=\"IcError\(2\)\"\} 1 \d+"#, + ); } fn tick_until_next_request(env: &PocketIc) -> Vec { @@ -723,45 +785,44 @@ fn tick_until_next_request(env: &PocketIc) -> Vec { #[test] fn should_query_logs_and_metrics() { + let setup = Setup::new(BtcNetwork::Mainnet); + make_http_query(&setup, "/metrics"); + make_http_query(&setup, "/logs"); +} + +fn make_http_query>(setup: &Setup, url: U) -> Vec { use candid::Decode; + let request = HttpRequest { + method: "GET".to_string(), + url: url.into(), + headers: Default::default(), + body: Default::default(), + }; - let setup = Setup::new(BtcNetwork::Mainnet); - test_http_query(&setup, "/metrics"); - test_http_query(&setup, "/logs"); - - fn test_http_query>(setup: &Setup, url: U) { - let request = ic_canisters_http_types::HttpRequest { - method: "GET".to_string(), - url: url.into(), - headers: Default::default(), - body: Default::default(), - }; + let response = Decode!( + &setup + .env + .query_call( + setup.btc_checker_canister, + Principal::anonymous(), + "http_request", + Encode!(&request).expect("failed to encode HTTP request"), + ) + .expect("failed to query get_transactions on the ledger"), + HttpResponse + ) + .unwrap(); - let response = Decode!( - &assert_reply( - setup - .env - .query_call( - setup.btc_checker_canister, - Principal::anonymous(), - "http_request", - Encode!(&request).expect("failed to encode HTTP request"), - ) - .expect("failed to query get_transactions on the ledger") - ), - ic_canisters_http_types::HttpResponse - ) - .unwrap(); + assert_eq!(response.status_code, 200_u16); + response.body.into_vec() +} - assert_eq!(response.status_code, 200_u16); +impl PocketIcHttpQuery for &Setup { + fn get_pocket_ic(&self) -> &PocketIc { + &self.env } -} -fn assert_reply(result: WasmResult) -> Vec { - match result { - WasmResult::Reply(bytes) => bytes, - WasmResult::Reject(reject) => { - panic!("Expected a successful reply, got a reject: {}", reject) - } + fn get_canister_id(&self) -> CanisterId { + self.btc_checker_canister } } diff --git a/rs/bitcoin/ckbtc/mainnet/README.md b/rs/bitcoin/ckbtc/mainnet/README.md index 8c746d4c706..b412d6e094d 100644 --- a/rs/bitcoin/ckbtc/mainnet/README.md +++ b/rs/bitcoin/ckbtc/mainnet/README.md @@ -3,7 +3,6 @@ Root canister id: `r7inp-6aaaa-aaaaa-aaabq-cai`. Subnet: `pzp6e-ekpqk-3c5x7-2h6so-njoeq-mt45d-h3h6c-q3mxf-vpeq5-fk5o7-yae` - ## Installing the minter ([`mqygn-kiaaa-aaaar-qaadq-cai`](https://dashboard.internetcomputer.org/canister/mqygn-kiaaa-aaaar-qaadq-cai)) Notes on init args: @@ -81,7 +80,7 @@ Notes on init args: * The transfer fee is 10 ckBTC Satoshis. * There are no initial balances: the minter is responsible for minting all ckBTC. * Archive max memory size is 3 GiB, or 3_221_225_472 bytes. We can afford to use that much memory because archives store transactions in stable memory. -* The `max_memo_length` was last udpated to 80 in [NNS proposal 123422](https://dashboard.internetcomputer.org/proposal/123422). +* The `max_memo_length` was last updated to 80 in [NNS proposal 123422](https://dashboard.internetcomputer.org/proposal/123422). The metadata contains the official ckBTC logo. @@ -138,7 +137,7 @@ bazel build //rs/registry/admin:ic-admin Encoding the init args: ```shell -didc encode -d ../../../ledger_suite/icrc1/index/index.did -t '(InitArgs)' '(record { ledger_id = principal "mxzaz-hqaaa-aaaar-qaada-cai" })' | xxd -r -p > index_arg.bin +didc encode -d ../../../ledger_suite/icrc1/index-ng/index-ng.did -t '(opt IndexArg)' '(opt variant { Init = record { ledger_id = principal "mxzaz-hqaaa-aaaar-qaada-cai" } })' | xxd -r -p > index_arg.bin ``` Submitting the install proposal: @@ -156,7 +155,7 @@ bazel build //rs/registry/admin:ic-admin --proposer $NEURON_ID \ --canister-id n5wcd-faaaa-aaaar-qaaea-cai \ --mode install \ - --wasm-module-path ./ic-icrc1-index.wasm.gz \ + --wasm-module-path ./ic-icrc1-index-ng.wasm.gz \ --wasm-module-sha256 $WASM_SHA256 \ --arg index_arg.bin \ --summary-file ./index_proposal.md @@ -177,7 +176,7 @@ bazel build //rs/registry/admin:ic-admin --proposer $NEURON_ID \ --canister-id n5wcd-faaaa-aaaar-qaaea-cai \ --mode upgrade \ - --wasm-module-path ./ic-icrc1-index.wasm.gz \ + --wasm-module-path ./ic-icrc1-index-ng.wasm.gz \ --wasm-module-sha256 $WASM_SHA256 \ --summary-file ./index_upgrade.md ``` diff --git a/rs/bitcoin/ckbtc/mainnet/ckbtc_archive_upgrade_2025_01_17.md b/rs/bitcoin/ckbtc/mainnet/ckbtc_archive_upgrade_2025_01_17.md new file mode 100644 index 00000000000..5443f70ffa2 --- /dev/null +++ b/rs/bitcoin/ckbtc/mainnet/ckbtc_archive_upgrade_2025_01_17.md @@ -0,0 +1,47 @@ +# Proposal to upgrade the ckBTC archive canister + +Repository: `https://github.com/dfinity/ic.git` + +Git hash: `c741e349451edf0c9792149ad439bb32a0161371` + +New compressed Wasm hash: `2b0970a84976bc2eb9591b68d44501566937994fa5594972f8aac9c8b058672f` + +Upgrade args hash: `0fee102bd16b053022b69f2c65fd5e2f41d150ce9c214ac8731cfaf496ebda4e` + +Target canister: `nbsys-saaaa-aaaar-qaaga-cai` + +Previous ckBTC archive proposal: https://dashboard.internetcomputer.org/proposal/134451 + +--- + +## Motivation + +Upgrade the ckBTC archive canister to the same version ([ledger-suite-icrc-2025-01-07](https://github.com/dfinity/ic/releases/tag/ledger-suite-icrc-2025-01-07)) as the ckBTC ledger canister to maintain a consistent versioning across the ckBTC ledger suite. + +## Upgrade args + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +cd rs/ledger_suite/icrc1/archive +didc encode '()' | xxd -r -p | sha256sum +``` + +## Release Notes + +No changes since last version (`2190613d3b5bcd9b74c382b22d151580b8ac271a`). + +``` +git log --format='%C(auto) %h %s' 2190613d3b5bcd9b74c382b22d151580b8ac271a..c741e349451edf0c9792149ad439bb32a0161371 -- rs/ledger_suite/icrc1/archive + ``` + +## Wasm Verification + +Verify that the hash of the gzipped WASM matches the proposed hash. + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +"./ci/container/build-ic.sh" "--canisters" +sha256sum ./artifacts/canisters/ic-icrc1-archive.wasm.gz +``` diff --git a/rs/bitcoin/ckbtc/mainnet/ckbtc_index_upgrade_2025_01_17.md b/rs/bitcoin/ckbtc/mainnet/ckbtc_index_upgrade_2025_01_17.md new file mode 100644 index 00000000000..0c1786fc1bd --- /dev/null +++ b/rs/bitcoin/ckbtc/mainnet/ckbtc_index_upgrade_2025_01_17.md @@ -0,0 +1,49 @@ +# Proposal to upgrade the ckBTC index canister + +Repository: `https://github.com/dfinity/ic.git` + +Git hash: `c741e349451edf0c9792149ad439bb32a0161371` + +New compressed Wasm hash: `e155db9d06b6147ece4f9defe599844f132a7db21693265671aa6ac60912935f` + +Upgrade args hash: `0fee102bd16b053022b69f2c65fd5e2f41d150ce9c214ac8731cfaf496ebda4e` + +Target canister: `n5wcd-faaaa-aaaar-qaaea-cai` + +Previous ckBTC index proposal: https://dashboard.internetcomputer.org/proposal/134449 + +--- + +## Motivation + +Upgrade the ckBTC index canister to the same version ([ledger-suite-icrc-2025-01-07](https://github.com/dfinity/ic/releases/tag/ledger-suite-icrc-2025-01-07)) as the ckBTC ledger canister to maintain a consistent versioning across the ckBTC ledger suite. + +## Upgrade args + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +cd rs/ledger_suite/icrc1/index-ng +didc encode '()' | xxd -r -p | sha256sum +``` + +## Release Notes + +``` +git log --format='%C(auto) %h %s' 2190613d3b5bcd9b74c382b22d151580b8ac271a..c741e349451edf0c9792149ad439bb32a0161371 -- rs/ledger_suite/icrc1/index-ng +c741e34945 feat: ICRC-ledger: FI-1439: Implement V4 for ICRC ledger - migrate balances to stable structures (#2901) +575ca531a7 chore(ICRC_Index): FI-1468: Remove old ICRC index canister (#3286) +8d4fcddc6e test(ICRC_Index): FI-1617: Optimize retrieve_blocks_from_ledger_interval tests (#3236) +e369646b76 fix: Use default rust edition instead of specifying it in the BUILD rules (#3047) + ``` + +## Wasm Verification + +Verify that the hash of the gzipped WASM matches the proposed hash. + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +"./ci/container/build-ic.sh" "--canisters" +sha256sum ./artifacts/canisters/ic-icrc1-index-ng.wasm.gz +``` diff --git a/rs/bitcoin/ckbtc/mainnet/ckbtc_ledger_upgrade_2025_01_17.md b/rs/bitcoin/ckbtc/mainnet/ckbtc_ledger_upgrade_2025_01_17.md new file mode 100644 index 00000000000..bcef187ba8b --- /dev/null +++ b/rs/bitcoin/ckbtc/mainnet/ckbtc_ledger_upgrade_2025_01_17.md @@ -0,0 +1,49 @@ +# Proposal to upgrade the ckBTC ledger canister + +Repository: `https://github.com/dfinity/ic.git` + +Git hash: `c741e349451edf0c9792149ad439bb32a0161371` + +New compressed Wasm hash: `3b03d1bb1145edbcd11101ab2788517bc0f427c3bd7b342b9e3e7f42e29d5822` + +Upgrade args hash: `0fee102bd16b053022b69f2c65fd5e2f41d150ce9c214ac8731cfaf496ebda4e` + +Target canister: `mxzaz-hqaaa-aaaar-qaada-cai` + +Previous ckBTC ledger proposal: https://dashboard.internetcomputer.org/proposal/134450 + +--- + +## Motivation + +Upgrade the ckBTC ledger canister to the latest version ([ledger-suite-icrc-2025-01-07](https://github.com/dfinity/ic/releases/tag/ledger-suite-icrc-2025-01-07)) to continue the migration towards stable memory. + +## Upgrade args + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +cd rs/ledger_suite/icrc1/ledger +didc encode '()' | xxd -r -p | sha256sum +``` + +## Release Notes + +``` +git log --format='%C(auto) %h %s' 2190613d3b5bcd9b74c382b22d151580b8ac271a..c741e349451edf0c9792149ad439bb32a0161371 -- rs/ledger_suite/icrc1/ledger +c741e34945 feat: ICRC-ledger: FI-1439: Implement V4 for ICRC ledger - migrate balances to stable structures (#2901) +ddadaafd51 test(ICP_Ledger): FI-1616: Fix ICP ledger upgrade tests (#3213) +dfc3810851 fix(ICRC-Ledger): changed certificate version (#2848) +b006ae9934 feat(ICP-ledger): FI-1438: Implement V3 for ICP ledger - migrate allowances to stable structures (#2818) + ``` + +## Wasm Verification + +Verify that the hash of the gzipped WASM matches the proposed hash. + +``` +git fetch +git checkout c741e349451edf0c9792149ad439bb32a0161371 +"./ci/container/build-ic.sh" "--canisters" +sha256sum ./artifacts/canisters/ic-icrc1-ledger.wasm.gz +``` diff --git a/rs/bitcoin/ckbtc/mainnet/dfx.json b/rs/bitcoin/ckbtc/mainnet/dfx.json index 48d51478d74..ca0f34feb16 100644 --- a/rs/bitcoin/ckbtc/mainnet/dfx.json +++ b/rs/bitcoin/ckbtc/mainnet/dfx.json @@ -32,10 +32,10 @@ "index": { "type": "custom", "build": [ - "bazel build //rs/ledger_suite/icrc1/index:index_canister" + "bazel build //rs/ledger_suite/icrc1/index-ng:index_ng_canister" ], - "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/index/index_canister.wasm", - "candid": "../../../ledger_suite/icrc1/index/index.did", + "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/index-ng/index_ng_canister.wasm", + "candid": "../../../ledger_suite/icrc1/index-ng/index-ng.did", "shrink": false }, "btc_checker": { diff --git a/rs/bitcoin/ckbtc/minter/BUILD.bazel b/rs/bitcoin/ckbtc/minter/BUILD.bazel index f1a304a7c34..bc7dd02b463 100644 --- a/rs/bitcoin/ckbtc/minter/BUILD.bazel +++ b/rs/bitcoin/ckbtc/minter/BUILD.bazel @@ -145,6 +145,7 @@ rust_test( "@crate_index//:candid", "@crate_index//:flate2", "@crate_index//:ic-agent", + "@crate_index//:ic-stable-structures", "@crate_index//:serde", "@crate_index//:tokio", ], @@ -170,6 +171,7 @@ rust_ic_test( deps = [ # Keep sorted. ":ckbtc_minter_lib", + "//packages/ic-metrics-assert", "//packages/icrc-ledger-types:icrc_ledger_types", "//rs/bitcoin/checker:btc_checker_lib", "//rs/bitcoin/mock", diff --git a/rs/bitcoin/ckbtc/minter/Cargo.toml b/rs/bitcoin/ckbtc/minter/Cargo.toml index 22f238d721a..8f867f2f11c 100644 --- a/rs/bitcoin/ckbtc/minter/Cargo.toml +++ b/rs/bitcoin/ckbtc/minter/Cargo.toml @@ -56,13 +56,13 @@ ic-agent = { workspace = true } ic-bitcoin-canister-mock = { path = "../../mock" } ic-config = { path = "../../../config" } ic-icrc1-ledger = { path = "../../../ledger_suite/icrc1/ledger" } +ic-metrics-assert = { path = "../../../../packages/ic-metrics-assert" } ic-state-machine-tests = { path = "../../../state_machine_tests" } ic-test-utilities-load-wasm = { path = "../../../test_utilities/load_wasm" } ic-types = { path = "../../../types/types" } maplit = "1.0.2" mockall = { workspace = true } proptest = { workspace = true } -regex = "1.11.0" simple_asn1 = { workspace = true } tokio = { workspace = true } diff --git a/rs/bitcoin/ckbtc/minter/src/guard.rs b/rs/bitcoin/ckbtc/minter/src/guard.rs index 35639580086..954bc2abc1e 100644 --- a/rs/bitcoin/ckbtc/minter/src/guard.rs +++ b/rs/bitcoin/ckbtc/minter/src/guard.rs @@ -89,29 +89,6 @@ impl Drop for TimerLogicGuard { } } -#[must_use] -pub struct DistributeKytFeeGuard(()); - -impl DistributeKytFeeGuard { - pub fn new() -> Option { - mutate_state(|s| { - if s.is_distributing_fee { - return None; - } - s.is_distributing_fee = true; - Some(DistributeKytFeeGuard(())) - }) - } -} - -impl Drop for DistributeKytFeeGuard { - fn drop(&mut self) { - mutate_state(|s| { - s.is_distributing_fee = false; - }); - } -} - pub fn balance_update_guard(p: Principal) -> Result, GuardError> { Guard::new(p) } diff --git a/rs/bitcoin/ckbtc/minter/src/lib.rs b/rs/bitcoin/ckbtc/minter/src/lib.rs index 17606e5bc19..3d156535210 100644 --- a/rs/bitcoin/ckbtc/minter/src/lib.rs +++ b/rs/bitcoin/ckbtc/minter/src/lib.rs @@ -1,9 +1,7 @@ use crate::address::BitcoinAddress; use crate::logs::{P0, P1}; use crate::management::CallError; -use crate::memo::Status; use crate::queries::WithdrawalFee; -use crate::state::ReimbursementReason; use crate::updates::update_balance::UpdateBalanceError; use async_trait::async_trait; use candid::{CandidType, Deserialize, Principal}; @@ -14,8 +12,7 @@ use ic_btc_interface::{ use ic_canister_log::log; use ic_management_canister_types::DerivationPath; use icrc_ledger_types::icrc1::account::Account; -use icrc_ledger_types::icrc1::transfer::{Memo, TransferError}; -use num_traits::ToPrimitive; +use icrc_ledger_types::icrc1::transfer::Memo; use scopeguard::{guard, ScopeGuard}; use serde::Serialize; use serde_bytes::ByteBuf; @@ -464,40 +461,6 @@ fn finalized_txids(candidates: &[state::SubmittedBtcTransaction], new_utxos: &[U .collect() } -async fn reimburse_failed_kyt() { - let try_to_reimburse = state::read_state(|s| s.pending_reimbursements.clone()); - for (burn_block_index, entry) in try_to_reimburse { - let (memo_status, kyt_fee) = match entry.reason { - ReimbursementReason::TaintedDestination { kyt_fee, .. } => (Status::Rejected, kyt_fee), - ReimbursementReason::CallFailed => (Status::CallFailed, 0), - }; - let reimburse_memo = crate::memo::MintMemo::KytFail { - kyt_fee: Some(kyt_fee), - status: Some(memo_status), - associated_burn_index: Some(burn_block_index), - }; - if let Ok(block_index) = crate::updates::update_balance::mint( - entry - .amount - .checked_sub(kyt_fee) - .expect("reimburse underflow"), - entry.account, - crate::memo::encode(&reimburse_memo).into(), - ) - .await - { - state::mutate_state(|s| { - state::audit::reimbursed_failed_deposit( - s, - burn_block_index, - block_index, - &IC_CANISTER_RUNTIME, - ) - }); - } - } -} - async fn finalize_requests() { if state::read_state(|s| s.submitted_transactions.is_empty()) { return; @@ -1119,96 +1082,6 @@ fn distribute(amount: u64, n: u64) -> Vec { shares } -pub async fn distribute_kyt_fees() { - use icrc_ledger_client_cdk::CdkRuntime; - use icrc_ledger_client_cdk::ICRC1Client; - use icrc_ledger_types::icrc1::transfer::TransferArg; - - enum MintError { - TransferError(TransferError), - CallError(i32, String), - } - - impl std::fmt::Debug for MintError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - MintError::TransferError(e) => write!(f, "TransferError({:?})", e), - MintError::CallError(code, msg) => write!(f, "CallError({}, {:?})", code, msg), - } - } - } - - async fn mint(amount: u64, to: candid::Principal, memo: Memo) -> Result { - debug_assert!(memo.0.len() <= CKBTC_LEDGER_MEMO_SIZE as usize); - - let client = ICRC1Client { - runtime: CdkRuntime, - ledger_canister_id: state::read_state(|s| s.ledger_id.get().into()), - }; - client - .transfer(TransferArg { - from_subaccount: None, - to: Account { - owner: to, - subaccount: None, - }, - fee: None, - created_at_time: None, - memo: Some(memo), - amount: candid::Nat::from(amount), - }) - .await - .map_err(|(code, msg)| MintError::CallError(code, msg))? - .map_err(MintError::TransferError) - .map(|n| n.0.to_u64().expect("nat does not fit into u64")) - } - - let fees_to_distribute = state::read_state(|s| s.owed_kyt_amount.clone()); - for (provider, amount) in fees_to_distribute { - let memo = crate::memo::MintMemo::Kyt; - match mint(amount, provider, crate::memo::encode(&memo).into()).await { - Ok(block_index) => { - state::mutate_state(|s| { - if let Err(state::Overdraft(overdraft)) = state::audit::distributed_kyt_fee( - s, - provider, - amount, - block_index, - &IC_CANISTER_RUNTIME, - ) { - // This should never happen because: - // 1. The fee distribution task is guarded (at most one copy is active). - // 2. Fee distribution is the only way to decrease the balance. - log!( - P0, - "BUG[distribute_kyt_fees]: distributed {} to {} but the balance is only {}", - tx::DisplayAmount(amount), - provider, - tx::DisplayAmount(amount - overdraft), - ); - } else { - log!( - P0, - "[distribute_kyt_fees]: minted {} to {}", - tx::DisplayAmount(amount), - provider, - ); - } - }); - } - Err(error) => { - log!( - P0, - "[distribute_kyt_fees]: failed to mint {} to {} with error: {:?}", - tx::DisplayAmount(amount), - provider, - error - ); - } - } - } -} - pub fn timer(runtime: R) { use tasks::{pop_if_ready, run_task}; diff --git a/rs/bitcoin/ckbtc/minter/src/lifecycle/upgrade.rs b/rs/bitcoin/ckbtc/minter/src/lifecycle/upgrade.rs index 3bc4013f329..e265b76ee40 100644 --- a/rs/bitcoin/ckbtc/minter/src/lifecycle/upgrade.rs +++ b/rs/bitcoin/ckbtc/minter/src/lifecycle/upgrade.rs @@ -2,7 +2,7 @@ use crate::logs::P0; use crate::state::eventlog::{replay, EventType}; use crate::state::invariants::CheckInvariantsImpl; use crate::state::{replace_state, Mode}; -use crate::storage::{count_events, events, record_event}; +use crate::storage::{count_events, events, migrate_old_events_if_not_empty, record_event}; use crate::IC_CANISTER_RUNTIME; use candid::{CandidType, Deserialize}; use ic_base_types::CanisterId; @@ -58,6 +58,9 @@ pub fn post_upgrade(upgrade_args: Option) { let start = ic_cdk::api::instruction_counter(); + if let Some(removed) = migrate_old_events_if_not_empty() { + log!(P0, "[upgrade]: {} empty events removed", removed) + } log!(P0, "[upgrade]: replaying {} events", count_events()); let state = replay::(events()).unwrap_or_else(|e| { diff --git a/rs/bitcoin/ckbtc/minter/src/main.rs b/rs/bitcoin/ckbtc/minter/src/main.rs index e12d791e89e..5456da881c9 100644 --- a/rs/bitcoin/ckbtc/minter/src/main.rs +++ b/rs/bitcoin/ckbtc/minter/src/main.rs @@ -50,7 +50,6 @@ fn init(args: MinterArg) { fn setup_tasks() { schedule_now(TaskType::ProcessLogic, &IC_CANISTER_RUNTIME); schedule_now(TaskType::RefreshFeePercentiles, &IC_CANISTER_RUNTIME); - schedule_now(TaskType::DistributeKytFee, &IC_CANISTER_RUNTIME); } #[cfg(feature = "self_check")] @@ -84,16 +83,6 @@ fn check_invariants() -> Result<(), String> { }) } -#[cfg(feature = "self_check")] -#[update] -async fn distribute_kyt_fee() { - let _guard = match ic_ckbtc_minter::guard::DistributeKytFeeGuard::new() { - Some(guard) => guard, - None => return, - }; - ic_ckbtc_minter::distribute_kyt_fees().await; -} - #[cfg(feature = "self_check")] #[update] async fn refresh_fee_percentiles() { diff --git a/rs/bitcoin/ckbtc/minter/src/memo.rs b/rs/bitcoin/ckbtc/minter/src/memo.rs index 7aeed4531d0..554ec72f274 100644 --- a/rs/bitcoin/ckbtc/minter/src/memo.rs +++ b/rs/bitcoin/ckbtc/minter/src/memo.rs @@ -1,3 +1,4 @@ +#![allow(deprecated)] use minicbor::Encoder; use minicbor::{Decode, Encode}; @@ -37,9 +38,11 @@ pub enum MintMemo<'a> { kyt_fee: Option, }, #[n(1)] + #[deprecated] /// The minter minted accumulated check fees to the KYT provider. Kyt, #[n(2)] + #[deprecated] /// The minter failed to check retrieve btc destination address /// or the destination address is tainted. KytFail { diff --git a/rs/bitcoin/ckbtc/minter/src/state/audit.rs b/rs/bitcoin/ckbtc/minter/src/state/audit.rs index 6b7d0aa939b..993f128bf68 100644 --- a/rs/bitcoin/ckbtc/minter/src/state/audit.rs +++ b/rs/bitcoin/ckbtc/minter/src/state/audit.rs @@ -5,9 +5,8 @@ use super::{ RetrieveBtcRequest, SubmittedBtcTransaction, SuspendedReason, }; use crate::state::invariants::CheckInvariantsImpl; -use crate::state::{ReimburseDepositTask, ReimbursedDeposit}; use crate::storage::record_event; -use crate::{CanisterRuntime, ReimbursementReason, Timestamp}; +use crate::{CanisterRuntime, Timestamp}; use candid::Principal; use ic_btc_interface::{Txid, Utxo}; use icrc_ledger_types::icrc1::account::Account; @@ -213,58 +212,3 @@ pub fn distributed_kyt_fee( ); state.distribute_kyt_fee(kyt_provider, amount) } - -pub fn schedule_deposit_reimbursement( - state: &mut CkBtcMinterState, - account: Account, - amount: u64, - reason: ReimbursementReason, - burn_block_index: u64, - runtime: &R, -) { - record_event( - EventType::ScheduleDepositReimbursement { - account, - amount, - reason, - burn_block_index, - }, - runtime, - ); - state.schedule_deposit_reimbursement( - burn_block_index, - ReimburseDepositTask { - account, - amount, - reason, - }, - ); -} - -pub fn reimbursed_failed_deposit( - state: &mut CkBtcMinterState, - burn_block_index: u64, - mint_block_index: u64, - runtime: &R, -) { - record_event( - EventType::ReimbursedFailedDeposit { - burn_block_index, - mint_block_index, - }, - runtime, - ); - let reimbursed_tx = state - .pending_reimbursements - .remove(&burn_block_index) - .expect("bug: reimbursement task should be present"); - state.reimbursed_transactions.insert( - burn_block_index, - ReimbursedDeposit { - account: reimbursed_tx.account, - amount: reimbursed_tx.amount, - reason: reimbursed_tx.reason, - mint_block_index, - }, - ); -} diff --git a/rs/bitcoin/ckbtc/minter/src/storage.rs b/rs/bitcoin/ckbtc/minter/src/storage.rs index b907fcf645e..27e285cec13 100644 --- a/rs/bitcoin/ckbtc/minter/src/storage.rs +++ b/rs/bitcoin/ckbtc/minter/src/storage.rs @@ -11,8 +11,11 @@ use ic_stable_structures::{ use serde::Deserialize; use std::cell::RefCell; -const LOG_INDEX_MEMORY_ID: MemoryId = MemoryId::new(0); -const LOG_DATA_MEMORY_ID: MemoryId = MemoryId::new(1); +const V0_LOG_INDEX_MEMORY_ID: MemoryId = MemoryId::new(0); +const V0_LOG_DATA_MEMORY_ID: MemoryId = MemoryId::new(1); + +const V1_LOG_INDEX_MEMORY_ID: MemoryId = MemoryId::new(2); +const V1_LOG_DATA_MEMORY_ID: MemoryId = MemoryId::new(3); type VMem = VirtualMemory; type EventLog = StableLog, VMem, VMem>; @@ -22,13 +25,24 @@ thread_local! { MemoryManager::init(DefaultMemoryImpl::default()) ); - /// The log of the ckBTC state modifications. - static EVENTS: RefCell = MEMORY_MANAGER + /// The v0 log of the ckBTC state modifications that should be migrated to v1 and then set to empty. + static V0_EVENTS: RefCell = MEMORY_MANAGER + .with(|m| + RefCell::new( + StableLog::init( + m.borrow().get(V0_LOG_INDEX_MEMORY_ID), + m.borrow().get(V0_LOG_DATA_MEMORY_ID) + ).expect("failed to initialize stable log") + ) + ); + + /// The latest log of the ckBTC state modifications. + static V1_EVENTS: RefCell = MEMORY_MANAGER .with(|m| RefCell::new( StableLog::init( - m.borrow().get(LOG_INDEX_MEMORY_ID), - m.borrow().get(LOG_DATA_MEMORY_ID) + m.borrow().get(V1_LOG_INDEX_MEMORY_ID), + m.borrow().get(V1_LOG_DATA_MEMORY_ID) ).expect("failed to initialize stable log") ) ); @@ -43,7 +57,7 @@ impl Iterator for EventIterator { type Item = Event; fn next(&mut self) -> Option { - EVENTS.with(|events| { + V1_EVENTS.with(|events| { let events = events.borrow(); match events.read_entry(self.pos, &mut self.buf) { @@ -63,7 +77,7 @@ impl Iterator for EventIterator { } /// Encodes an event into a byte array. -fn encode_event(event: &Event) -> Vec { +pub fn encode_event(event: &Event) -> Vec { let mut buf = Vec::new(); ciborium::ser::into_writer(event, &mut buf).expect("failed to encode a minter event"); buf @@ -72,7 +86,7 @@ fn encode_event(event: &Event) -> Vec { /// # Panics /// /// This function panics if the event decoding fails. -fn decode_event(buf: &[u8]) -> Event { +pub fn decode_event(buf: &[u8]) -> Event { // For backwards compatibility, we have to handle two cases: // 1. Legacy events: raw instances of the event type enum // 2. New events: a struct containing a timestamp and an event type @@ -101,9 +115,49 @@ pub fn events() -> impl Iterator { } } +pub fn migrate_old_events_if_not_empty() -> Option { + let mut num_events_removed = None; + V0_EVENTS.with(|old_events| { + let mut old = old_events.borrow_mut(); + if old.len() > 0 { + V1_EVENTS.with(|new| { + num_events_removed = Some(migrate_events(&old, &new.borrow())); + }); + *old = MEMORY_MANAGER.with(|m| { + StableLog::new( + m.borrow().get(V0_LOG_INDEX_MEMORY_ID), + m.borrow().get(V0_LOG_DATA_MEMORY_ID), + ) + }); + } + }); + assert_eq!( + V0_EVENTS.with(|events| events.borrow().len()), + 0, + "Old events is not emptied after data migration" + ); + num_events_removed +} + +pub fn migrate_events(old_events: &EventLog, new_events: &EventLog) -> u64 { + let mut removed = 0; + for bytes in old_events.iter() { + let event = decode_event(&bytes); + match event.payload { + EventType::ReceivedUtxos { utxos, .. } if utxos.is_empty() => removed += 1, + _ => { + new_events + .append(&bytes) + .expect("failed to append an entry to the new event log"); + } + } + } + removed +} + /// Returns the current number of events in the log. pub fn count_events() -> u64 { - EVENTS.with(|events| events.borrow().len()) + V1_EVENTS.with(|events| events.borrow().len()) } /// Records a new minter event. @@ -112,7 +166,7 @@ pub fn record_event(payload: EventType, runtime: &R) { timestamp: Some(runtime.time()), payload, }); - EVENTS.with(|events| { + V1_EVENTS.with(|events| { events .borrow() .append(&bytes) diff --git a/rs/bitcoin/ckbtc/minter/src/storage/tests.rs b/rs/bitcoin/ckbtc/minter/src/storage/tests.rs index 906a1e76f3e..453f44c5cb6 100644 --- a/rs/bitcoin/ckbtc/minter/src/storage/tests.rs +++ b/rs/bitcoin/ckbtc/minter/src/storage/tests.rs @@ -1,48 +1,38 @@ -use crate::state::eventlog::{Event, EventType}; -use crate::test_fixtures::{ignored_utxo, ledger_account}; - -#[test] -fn should_decode_encoded_event() { - let event = Event { - timestamp: Some(123), - payload: event_type(), - }; - - let encoded = super::encode_event(&event); - let decoded = super::decode_event(&encoded); - - assert_eq!(event, decoded); -} - -#[test] -fn should_decode_encoded_legacy_event() { - /// Legacy events simply consisted of an event type instance. The - /// encoding logic is the exact same as for new events, only the type - /// being encoded differs. - fn encode_legacy_event(event: &EventType) -> Vec { - let mut buf = Vec::new(); - ciborium::ser::into_writer(event, &mut buf).expect("failed to encode a minter event"); - buf +use super::{decode_event, encode_event}; +use crate::{ + state::eventlog::{Event, EventType}, + test_fixtures::arbitrary, +}; +use proptest::proptest; + +proptest! { + #[test] + fn should_decode_encoded_event(event in arbitrary::event()) { + let encoded = encode_event(&event); + let decoded = decode_event(&encoded); + + assert_eq!(event, decoded); } - let legacy_event = event_type(); - - let encoded = encode_legacy_event(&legacy_event); - let decoded = super::decode_event(&encoded); - - assert_eq!( - decoded, - Event { - timestamp: None, - payload: legacy_event, + #[test] + fn should_decode_encoded_legacy_event(legacy_event in arbitrary::event_type()) { + /// Legacy events just consist of an event type instance. The encoding logic + /// is the exact same as for new events. Only the type being encoded differs. + fn encode_legacy_event(event: &EventType) -> Vec { + let mut buf = Vec::new(); + ciborium::ser::into_writer(event, &mut buf).expect("failed to encode a minter event"); + buf } - ); -} -fn event_type() -> EventType { - EventType::ReceivedUtxos { - mint_txid: Some(1), - to_account: ledger_account(), - utxos: vec![ignored_utxo()], + let encoded = encode_legacy_event(&legacy_event); + let decoded = decode_event(&encoded); + + assert_eq!( + decoded, + Event { + timestamp: None, + payload: legacy_event, + } + ); } } diff --git a/rs/bitcoin/ckbtc/minter/src/tasks.rs b/rs/bitcoin/ckbtc/minter/src/tasks.rs index 4dcfb77c14f..d454c13ab0f 100644 --- a/rs/bitcoin/ckbtc/minter/src/tasks.rs +++ b/rs/bitcoin/ckbtc/minter/src/tasks.rs @@ -1,10 +1,6 @@ #[cfg(test)] mod tests; -use crate::{ - distribute_kyt_fees, estimate_fee_per_vbyte, finalize_requests, reimburse_failed_kyt, - submit_pending_requests, CanisterRuntime, -}; -use ic_btc_interface::Network; +use crate::{estimate_fee_per_vbyte, finalize_requests, submit_pending_requests, CanisterRuntime}; use scopeguard::guard; use std::cell::{Cell, RefCell}; use std::collections::{BTreeMap, BTreeSet}; @@ -19,7 +15,6 @@ thread_local! { pub enum TaskType { ProcessLogic, RefreshFeePercentiles, - DistributeKytFee, } #[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Debug)] @@ -147,7 +142,6 @@ pub(crate) async fn run_task(task: Task, runtime: R) { submit_pending_requests().await; finalize_requests().await; - reimburse_failed_kyt().await; } TaskType::RefreshFeePercentiles => { const FEE_ESTIMATE_DELAY: Duration = Duration::from_secs(60 * 60); @@ -165,29 +159,5 @@ pub(crate) async fn run_task(task: Task, runtime: R) { }; let _ = estimate_fee_per_vbyte().await; } - TaskType::DistributeKytFee => { - const MAINNET_KYT_FEE_DISTRIBUTION_PERIOD: Duration = Duration::from_secs(24 * 60 * 60); - - let _enqueue_followup_guard = guard((), |_| { - schedule_after( - MAINNET_KYT_FEE_DISTRIBUTION_PERIOD, - TaskType::DistributeKytFee, - &runtime, - ); - }); - let _guard = match crate::guard::DistributeKytFeeGuard::new() { - Some(guard) => guard, - None => return, - }; - - match crate::state::read_state(|s| s.btc_network) { - Network::Mainnet | Network::Testnet => { - distribute_kyt_fees().await; - } - // We use a debug canister build exposing an endpoint - // triggering the fee distribution in tests. - Network::Regtest => {} - } - } } } diff --git a/rs/bitcoin/ckbtc/minter/src/tasks/tests.rs b/rs/bitcoin/ckbtc/minter/src/tasks/tests.rs index 78a8d4beec6..e571855b441 100644 --- a/rs/bitcoin/ckbtc/minter/src/tasks/tests.rs +++ b/rs/bitcoin/ckbtc/minter/src/tasks/tests.rs @@ -48,16 +48,6 @@ async fn should_reschedule_refresh_fees() { .await; } -#[tokio::test] -async fn should_reschedule_distribute_kyt_fee() { - test_reschedule( - TaskType::DistributeKytFee, - || crate::guard::DistributeKytFeeGuard::new().unwrap(), - Duration::from_secs(24 * 60 * 60), - ) - .await; -} - async fn test_reschedule T>( task_type: TaskType, guard: G, diff --git a/rs/bitcoin/ckbtc/minter/src/test_fixtures.rs b/rs/bitcoin/ckbtc/minter/src/test_fixtures.rs index cee6585f3a8..7861fc0c5c3 100644 --- a/rs/bitcoin/ckbtc/minter/src/test_fixtures.rs +++ b/rs/bitcoin/ckbtc/minter/src/test_fixtures.rs @@ -142,3 +142,306 @@ pub mod mock { } } } + +pub mod arbitrary { + use crate::{ + address::BitcoinAddress, + signature::EncodedSignature, + state::{ + eventlog::{Event, EventType}, + ChangeOutput, Mode, ReimbursementReason, RetrieveBtcRequest, SuspendedReason, + }, + tx, + tx::{SignedInput, TxOut, UnsignedInput}, + }; + use candid::Principal; + pub use event::event_type; + use ic_base_types::CanisterId; + use ic_btc_interface::{OutPoint, Satoshi, Txid, Utxo}; + use icrc_ledger_types::icrc1::account::Account; + use proptest::{ + array::uniform20, + array::uniform32, + collection::{vec as pvec, SizeRange}, + option, + prelude::{any, Just, Strategy}, + prop_oneof, + }; + use serde_bytes::ByteBuf; + + // Macro to simplify writing strategies that generate structs. + macro_rules! prop_struct { + ($struct_path:path { $($field_name:ident: $strategy:expr),* $(,)? }) => { + #[allow(unused_parens)] + ($($strategy),*).prop_map(|($($field_name),*)| { + $struct_path { + $($field_name),* + } + }) + }; + } + + fn amount() -> impl Strategy { + 1..10_000_000_000u64 + } + + fn txid() -> impl Strategy { + uniform32(any::()).prop_map(Txid::from) + } + + fn outpoint() -> impl Strategy { + prop_struct!(OutPoint { + txid: txid(), + vout: any::(), + }) + } + + fn canister_id() -> impl Strategy { + any::().prop_map(CanisterId::from_u64) + } + + pub fn retrieve_btc_requests( + amount: impl Strategy, + num: impl Into, + ) -> impl Strategy> { + pvec(retrieve_btc_request(amount), num).prop_map(|mut reqs| { + reqs.sort_by_key(|req| req.received_at); + for (i, req) in reqs.iter_mut().enumerate() { + req.block_index = i as u64; + } + reqs + }) + } + + fn principal() -> impl Strategy { + pvec(any::(), 1..=Principal::MAX_LENGTH_IN_BYTES) + .prop_map(|bytes| Principal::from_slice(bytes.as_slice())) + } + + fn retrieve_btc_request( + amount: impl Strategy, + ) -> impl Strategy { + prop_struct!(RetrieveBtcRequest { + amount: amount, + address: address(), + block_index: any::(), + received_at: 1569975147000..2069975147000u64, + kyt_provider: option::of(principal()), + reimbursement_account: option::of(account()), + }) + } + + fn reimbursement_reason() -> impl Strategy { + prop_oneof![ + (principal(), any::()).prop_map(|(kyt_provider, kyt_fee)| { + ReimbursementReason::TaintedDestination { + kyt_provider, + kyt_fee, + } + }), + Just(ReimbursementReason::CallFailed), + ] + } + + fn suspended_reason() -> impl Strategy { + prop_oneof![ + Just(SuspendedReason::ValueTooSmall), + Just(SuspendedReason::Quarantined), + ] + } + + fn change_output() -> impl Strategy { + (any::(), any::()).prop_map(|(vout, value)| ChangeOutput { vout, value }) + } + + fn mode() -> impl Strategy { + prop_oneof![ + Just(Mode::ReadOnly), + pvec(principal(), 0..10_000).prop_map(Mode::RestrictedTo), + pvec(principal(), 0..10_000).prop_map(Mode::DepositsRestrictedTo), + Just(Mode::GeneralAvailability), + ] + } + + fn encoded_signature() -> impl Strategy { + pvec(1u8..0xff, 64).prop_map(|bytes| EncodedSignature::from_sec1(bytes.as_slice())) + } + + pub fn unsigned_input( + value: impl Strategy, + ) -> impl Strategy { + prop_struct!(UnsignedInput { + previous_output: outpoint(), + value: value, + sequence: any::(), + }) + } + + pub fn signed_input() -> impl Strategy { + prop_struct!(SignedInput { + previous_output: outpoint(), + sequence: any::(), + signature: encoded_signature(), + pubkey: pvec(any::(), tx::PUBKEY_LEN).prop_map(ByteBuf::from), + }) + } + + pub fn address() -> impl Strategy { + prop_oneof![ + uniform20(any::()).prop_map(BitcoinAddress::P2wpkhV0), + uniform32(any::()).prop_map(BitcoinAddress::P2wshV0), + uniform32(any::()).prop_map(BitcoinAddress::P2trV1), + uniform20(any::()).prop_map(BitcoinAddress::P2pkh), + uniform20(any::()).prop_map(BitcoinAddress::P2sh), + ] + } + + pub fn tx_out() -> impl Strategy { + prop_struct!(TxOut { + value: amount(), + address: address(), + }) + } + + pub fn utxo(amount: impl Strategy) -> impl Strategy { + prop_struct!(Utxo { + outpoint: outpoint(), + value: amount, + height: any::(), + }) + } + + pub fn account() -> impl Strategy { + prop_struct!(Account { + owner: principal(), + subaccount: option::of(uniform32(any::())), + }) + } + + pub fn event() -> impl Strategy { + (any::>(), event_type()) + .prop_map(|(timestamp, payload)| Event { timestamp, payload }) + } + + // Some event types are deprecated, however we still want to use them in prop tests as we want + // to make sure they can still be deserialized. + // For convenience, the module is not visible to the outside. + #[allow(deprecated)] + mod event { + use super::*; + use crate::lifecycle::{ + init::{BtcNetwork, InitArgs}, + upgrade::UpgradeArgs, + }; + + fn btc_network() -> impl Strategy { + prop_oneof![ + Just(BtcNetwork::Mainnet), + Just(BtcNetwork::Testnet), + Just(BtcNetwork::Regtest), + ] + } + + fn init_args() -> impl Strategy { + prop_struct!(InitArgs { + btc_network: btc_network(), + ecdsa_key_name: ".*", + retrieve_btc_min_amount: any::(), + ledger_id: canister_id(), + max_time_in_queue_nanos: any::(), + min_confirmations: option::of(any::()), + mode: mode(), + check_fee: option::of(any::()), + kyt_fee: option::of(any::()), + btc_checker_principal: option::of(canister_id()), + kyt_principal: option::of(canister_id()), + }) + } + + fn upgrade_args() -> impl Strategy { + prop_struct!(UpgradeArgs { + retrieve_btc_min_amount: option::of(any::()), + min_confirmations: option::of(any::()), + max_time_in_queue_nanos: option::of(any::()), + mode: option::of(mode()), + check_fee: option::of(any::()), + kyt_fee: option::of(any::()), + btc_checker_principal: option::of(canister_id()), + kyt_principal: option::of(canister_id()), + }) + } + + pub fn event_type() -> impl Strategy { + prop_oneof![ + init_args().prop_map(EventType::Init), + upgrade_args().prop_map(EventType::Upgrade), + retrieve_btc_request(amount()).prop_map(EventType::AcceptedRetrieveBtcRequest), + prop_struct!(EventType::ReceivedUtxos { + mint_txid: option::of(any::()), + to_account: account(), + utxos: pvec(utxo(amount()), 0..10_000), + }), + prop_struct!(EventType::RemovedRetrieveBtcRequest { + block_index: any::() + }), + prop_struct!(EventType::SentBtcTransaction { + request_block_indices: pvec(any::(), 0..10_000), + txid: txid(), + utxos: pvec(utxo(amount()), 0..10_000), + change_output: option::of(change_output()), + submitted_at: any::(), + fee_per_vbyte: option::of(any::()), + }), + prop_struct!(EventType::ReplacedBtcTransaction { + old_txid: txid(), + new_txid: txid(), + change_output: change_output(), + submitted_at: any::(), + fee_per_vbyte: any::(), + }), + prop_struct!(EventType::ConfirmedBtcTransaction { txid: txid() }), + prop_struct!(EventType::CheckedUtxo { + utxo: utxo(amount()), + uuid: any::(), + clean: any::(), + kyt_provider: option::of(principal()) + }), + prop_struct!(EventType::CheckedUtxoV2 { + utxo: utxo(amount()), + account: account(), + }), + prop_struct!(EventType::IgnoredUtxo { + utxo: utxo(amount()) + }), + prop_struct!(EventType::SuspendedUtxo { + utxo: utxo(amount()), + account: account(), + reason: suspended_reason(), + }), + prop_struct!(EventType::DistributedKytFee { + kyt_provider: principal(), + amount: any::(), + block_index: any::(), + }), + prop_struct!(EventType::RetrieveBtcKytFailed { + owner: principal(), + address: ".*", + amount: any::(), + uuid: ".*", + kyt_provider: principal(), + block_index: any::(), + }), + prop_struct!(EventType::ScheduleDepositReimbursement { + account: account(), + amount: any::(), + reason: reimbursement_reason(), + burn_block_index: any::(), + }), + prop_struct!(EventType::ReimbursedFailedDeposit { + burn_block_index: any::(), + mint_block_index: any::(), + }), + ] + } + } +} diff --git a/rs/bitcoin/ckbtc/minter/src/tests.rs b/rs/bitcoin/ckbtc/minter/src/tests.rs index e492584e597..b772c95e58b 100644 --- a/rs/bitcoin/ckbtc/minter/src/tests.rs +++ b/rs/bitcoin/ckbtc/minter/src/tests.rs @@ -1,33 +1,29 @@ -use crate::state::invariants::CheckInvariantsImpl; -use crate::{ - address::BitcoinAddress, build_unsigned_transaction, estimate_retrieve_btc_fee, fake_sign, - greedy, signature::EncodedSignature, tx, BuildTxError, -}; -use crate::{evaluate_minter_fee, MINTER_ADDRESS_DUST_LIMIT}; use crate::{ + address::BitcoinAddress, + build_unsigned_transaction, estimate_retrieve_btc_fee, evaluate_minter_fee, fake_sign, greedy, lifecycle::init::InitArgs, + state::invariants::CheckInvariantsImpl, state::{ ChangeOutput, CkBtcMinterState, Mode, RetrieveBtcRequest, RetrieveBtcStatus, SubmittedBtcTransaction, }, + test_fixtures::arbitrary, + tx, BuildTxError, MINTER_ADDRESS_DUST_LIMIT, }; use bitcoin::network::constants::Network as BtcNetwork; use bitcoin::util::psbt::serialize::{Deserialize, Serialize}; use candid::Principal; -use ic_base_types::{CanisterId, PrincipalId}; -use ic_btc_interface::{Network, OutPoint, Satoshi, Txid, Utxo}; +use ic_base_types::CanisterId; +use ic_btc_interface::{Network, OutPoint, Utxo}; use icrc_ledger_types::icrc1::account::Account; use maplit::btreeset; -use proptest::proptest; use proptest::{ array::uniform20, - array::uniform32, - collection::{btree_set, vec as pvec, SizeRange}, + collection::{btree_set, vec as pvec}, option, - prelude::{any, Strategy}, + prelude::any, + prop_assert, prop_assert_eq, prop_assume, proptest, }; -use proptest::{prop_assert, prop_assert_eq, prop_assume, prop_oneof}; -use serde_bytes::ByteBuf; use std::collections::{BTreeMap, BTreeSet, HashMap}; use std::str::FromStr; @@ -444,121 +440,6 @@ fn test_no_dust_in_change_output() { } } -fn arb_amount() -> impl Strategy { - 1..10_000_000_000u64 -} - -fn vec_to_txid(vec: Vec) -> Txid { - let bytes: [u8; 32] = vec.try_into().expect("Can't convert to [u8; 32]"); - bytes.into() -} - -fn arb_out_point() -> impl Strategy { - (pvec(any::(), 32), any::()).prop_map(|(txid, vout)| tx::OutPoint { - txid: vec_to_txid(txid), - vout, - }) -} - -fn arb_unsigned_input( - value: impl Strategy, -) -> impl Strategy { - (arb_out_point(), value, any::()).prop_map(|(previous_output, value, sequence)| { - tx::UnsignedInput { - previous_output, - value, - sequence, - } - }) -} - -fn arb_signed_input() -> impl Strategy { - ( - arb_out_point(), - any::(), - pvec(1u8..0xff, 64), - pvec(any::(), 32), - ) - .prop_map( - |(previous_output, sequence, sec1, pubkey)| tx::SignedInput { - previous_output, - sequence, - signature: EncodedSignature::from_sec1(&sec1), - pubkey: ByteBuf::from(pubkey), - }, - ) -} - -fn arb_address() -> impl Strategy { - prop_oneof![ - uniform20(any::()).prop_map(BitcoinAddress::P2wpkhV0), - uniform32(any::()).prop_map(BitcoinAddress::P2wshV0), - uniform32(any::()).prop_map(BitcoinAddress::P2trV1), - uniform20(any::()).prop_map(BitcoinAddress::P2pkh), - uniform20(any::()).prop_map(BitcoinAddress::P2sh), - ] -} - -fn arb_tx_out() -> impl Strategy { - (arb_amount(), arb_address()).prop_map(|(value, address)| tx::TxOut { value, address }) -} - -fn arb_utxo(amount: impl Strategy) -> impl Strategy { - (amount, pvec(any::(), 32), 0..5u32).prop_map(|(value, txid, vout)| Utxo { - outpoint: OutPoint { - txid: vec_to_txid(txid), - vout, - }, - value, - height: 0, - }) -} - -fn arb_account() -> impl Strategy { - (pvec(any::(), 32), option::of(uniform32(any::()))).prop_map(|(pk, subaccount)| { - Account { - owner: PrincipalId::new_self_authenticating(&pk).0, - subaccount, - } - }) -} - -fn arb_retrieve_btc_requests( - amount: impl Strategy, - num: impl Into, -) -> impl Strategy> { - let request_strategy = ( - amount, - arb_address(), - any::(), - 1569975147000..2069975147000u64, - option::of(any::()), - option::of(arb_account()), - ) - .prop_map( - |(amount, address, block_index, received_at, provider, reimbursement_account)| { - RetrieveBtcRequest { - amount, - address, - block_index, - received_at, - kyt_provider: provider - .map(|id| Principal::from(CanisterId::from_u64(id).get())), - reimbursement_account, - } - }, - ); - pvec(request_strategy, num).prop_map(|mut reqs| { - reqs.sort_by_key(|req| req.received_at); - - for (i, req) in reqs.iter_mut().enumerate() { - req.block_index = i as u64; - } - - reqs - }) -} - proptest! { #[test] fn greedy_solution_properties( @@ -621,8 +502,8 @@ proptest! { #[test] fn unsigned_tx_encoding_model( - inputs in pvec(arb_unsigned_input(5_000u64..1_000_000_000), 1..20), - outputs in pvec(arb_tx_out(), 1..20), + inputs in pvec(arbitrary::unsigned_input(5_000u64..1_000_000_000), 1..20), + outputs in pvec(arbitrary::tx_out(), 1..20), lock_time in any::(), ) { let arb_tx = tx::UnsignedTransaction { inputs, outputs, lock_time }; @@ -643,13 +524,13 @@ proptest! { fn unsigned_tx_sighash_model( inputs_data in pvec( ( - arb_utxo(5_000u64..1_000_000_000), + arbitrary::utxo(5_000u64..1_000_000_000), any::(), pvec(any::(), tx::PUBKEY_LEN) ), 1..20 ), - outputs in pvec(arb_tx_out(), 1..20), + outputs in pvec(arbitrary::tx_out(), 1..20), lock_time in any::(), ) { let inputs: Vec = inputs_data @@ -686,8 +567,8 @@ proptest! { #[test] fn signed_tx_encoding_model( - inputs in pvec(arb_signed_input(), 1..20), - outputs in pvec(arb_tx_out(), 1..20), + inputs in pvec(arbitrary::signed_input(), 1..20), + outputs in pvec(arbitrary::tx_out(), 1..20), lock_time in any::(), ) { let arb_tx = tx::SignedTransaction { inputs, outputs, lock_time }; @@ -707,7 +588,7 @@ proptest! { #[test] fn build_tx_splits_utxos( - mut utxos in btree_set(arb_utxo(5_000u64..1_000_000_000), 1..20), + mut utxos in btree_set(arbitrary::utxo(5_000u64..1_000_000_000), 1..20), dst_pkhash in uniform20(any::()), main_pkhash in uniform20(any::()), fee_per_vbyte in 1000..2000u64, @@ -754,7 +635,7 @@ proptest! { #[test] fn check_output_order( - mut utxos in btree_set(arb_utxo(1_000_000u64..1_000_000_000), 1..20), + mut utxos in btree_set(arbitrary::utxo(1_000_000u64..1_000_000_000), 1..20), dst_pkhash in uniform20(any::()), main_pkhash in uniform20(any::()), target in 50000..100000u64, @@ -776,7 +657,7 @@ proptest! { #[test] fn build_tx_handles_change_from_inputs( - mut utxos in btree_set(arb_utxo(1_000_000u64..1_000_000_000), 1..20), + mut utxos in btree_set(arbitrary::utxo(1_000_000u64..1_000_000_000), 1..20), dst_pkhash in uniform20(any::()), main_pkhash in uniform20(any::()), target in 50000..100000u64, @@ -824,7 +705,7 @@ proptest! { #[test] fn build_tx_does_not_modify_utxos_on_error( - mut utxos in btree_set(arb_utxo(5_000u64..1_000_000_000), 1..20), + mut utxos in btree_set(arbitrary::utxo(5_000u64..1_000_000_000), 1..20), dst_pkhash in uniform20(any::()), main_pkhash in uniform20(any::()), fee_per_vbyte in 1000..2000u64, @@ -858,8 +739,8 @@ proptest! { #[test] fn add_utxos_maintains_invariants( - utxos_acc_idx in pvec((arb_utxo(5_000u64..1_000_000_000), 0..5usize), 10..20), - accounts in pvec(arb_account(), 5), + utxos_acc_idx in pvec((arbitrary::utxo(5_000u64..1_000_000_000), 0..5usize), 10..20), + accounts in pvec(arbitrary::account(), 5), ) { let mut state = CkBtcMinterState::from(InitArgs { retrieve_btc_min_amount: 1000, @@ -873,9 +754,9 @@ proptest! { #[test] fn batching_preserves_invariants( - utxos_acc_idx in pvec((arb_utxo(5_000u64..1_000_000_000), 0..5usize), 10..20), - accounts in pvec(arb_account(), 5), - requests in arb_retrieve_btc_requests(5_000u64..1_000_000_000, 1..25), + utxos_acc_idx in pvec((arbitrary::utxo(5_000u64..1_000_000_000), 0..5usize), 10..20), + accounts in pvec(arbitrary::account(), 5), + requests in arbitrary::retrieve_btc_requests(5_000u64..1_000_000_000, 1..25), limit in 1..25usize, ) { let mut state = CkBtcMinterState::from(InitArgs { @@ -907,9 +788,9 @@ proptest! { #[test] fn tx_replacement_preserves_invariants( - accounts in pvec(arb_account(), 5), - utxos_acc_idx in pvec((arb_utxo(5_000_000u64..1_000_000_000), 0..5usize), 10..=10), - requests in arb_retrieve_btc_requests(5_000_000u64..10_000_000, 1..5), + accounts in pvec(arbitrary::account(), 5), + utxos_acc_idx in pvec((arbitrary::utxo(5_000_000u64..1_000_000_000), 0..5usize), 10..=10), + requests in arbitrary::retrieve_btc_requests(5_000_000u64..10_000_000, 1..5), main_pkhash in uniform20(any::()), resubmission_chain_length in 1..=5, ) { @@ -1029,7 +910,7 @@ proptest! { } #[test] - fn btc_address_display_model(address in arb_address()) { + fn btc_address_display_model(address in arbitrary::address()) { for network in [Network::Mainnet, Network::Testnet].iter() { let addr_str = address.display(*network); let btc_addr = address_to_btc_address(&address, *network); @@ -1038,7 +919,7 @@ proptest! { } #[test] - fn address_roundtrip(address in arb_address()) { + fn address_roundtrip(address in arbitrary::address()) { for network in [Network::Mainnet, Network::Testnet, Network::Regtest].iter() { let addr_str = address.display(*network); prop_assert_eq!(BitcoinAddress::parse(&addr_str, *network), Ok(address.clone())); @@ -1110,7 +991,7 @@ proptest! { #[test] fn test_fee_range( - utxos in btree_set(arb_utxo(5_000u64..1_000_000_000), 0..20), + utxos in btree_set(arbitrary::utxo(5_000u64..1_000_000_000), 0..20), amount in option::of(any::()), fee_per_vbyte in 2000..10000u64, ) { diff --git a/rs/bitcoin/ckbtc/minter/tests/replay_events.rs b/rs/bitcoin/ckbtc/minter/tests/replay_events.rs index c9bfadfbc8d..238e635218c 100644 --- a/rs/bitcoin/ckbtc/minter/tests/replay_events.rs +++ b/rs/bitcoin/ckbtc/minter/tests/replay_events.rs @@ -5,6 +5,66 @@ use ic_ckbtc_minter::state::invariants::{CheckInvariants, CheckInvariantsImpl}; use ic_ckbtc_minter::state::{CkBtcMinterState, Network}; use std::path::PathBuf; +fn assert_useless_events_is_empty(events: impl Iterator) { + let mut count = 0; + for event in events { + match &event.payload { + EventType::ReceivedUtxos { utxos, .. } if utxos.is_empty() => { + count += 1; + } + _ => {} + } + } + assert_eq!(count, 0); +} + +async fn should_migrate_events_for(file: GetEventsFile) -> CkBtcMinterState { + use ic_ckbtc_minter::storage::{decode_event, encode_event, migrate_events}; + use ic_stable_structures::{ + log::Log as StableLog, + memory_manager::{MemoryId, MemoryManager}, + DefaultMemoryImpl, + }; + + file.retrieve_and_store_events_if_env().await; + + let mgr = MemoryManager::init(DefaultMemoryImpl::default()); + let old_events = StableLog::new(mgr.get(MemoryId::new(0)), mgr.get(MemoryId::new(1))); + let new_events = StableLog::new(mgr.get(MemoryId::new(2)), mgr.get(MemoryId::new(3))); + let events = file.deserialize().events; + events.iter().for_each(|event| { + old_events.append(&encode_event(event)).unwrap(); + }); + let removed = migrate_events(&old_events, &new_events); + assert!(removed > 0); + assert!(!new_events.is_empty()); + assert_eq!(new_events.len() + removed, old_events.len()); + assert_useless_events_is_empty(new_events.iter().map(|bytes| decode_event(&bytes))); + + let state = + replay::(new_events.iter().map(|bytes| decode_event(&bytes))) + .expect("Failed to replay events"); + state + .check_invariants() + .expect("Failed to check invariants"); + + state +} + +#[tokio::test] +async fn should_migrate_events_for_mainnet() { + let state = should_migrate_events_for(GetEventsFile::Mainnet).await; + assert_eq!(state.btc_network, Network::Mainnet); + assert_eq!(state.get_total_btc_managed(), 21_723_786_340); +} + +#[tokio::test] +async fn should_migrate_events_for_testnet() { + let state = should_migrate_events_for(GetEventsFile::Testnet).await; + assert_eq!(state.btc_network, Network::Testnet); + assert_eq!(state.get_total_btc_managed(), 16578205978); +} + #[tokio::test] async fn should_replay_events_for_mainnet() { GetEventsFile::Mainnet diff --git a/rs/bitcoin/ckbtc/minter/tests/tests.rs b/rs/bitcoin/ckbtc/minter/tests/tests.rs index 6f2190eb8ab..d6bb399554d 100644 --- a/rs/bitcoin/ckbtc/minter/tests/tests.rs +++ b/rs/bitcoin/ckbtc/minter/tests/tests.rs @@ -26,14 +26,14 @@ use ic_ckbtc_minter::{ Log, MinterInfo, CKBTC_LEDGER_MEMO_SIZE, MIN_RELAY_FEE_PER_VBYTE, MIN_RESUBMISSION_DELAY, }; use ic_icrc1_ledger::{InitArgsBuilder as LedgerInitArgsBuilder, LedgerArgument}; -use ic_state_machine_tests::{StateMachine, StateMachineBuilder, WasmResult}; +use ic_metrics_assert::{CanisterHttpQuery, MetricsAssert}; +use ic_state_machine_tests::{StateMachine, StateMachineBuilder, UserError, WasmResult}; use ic_test_utilities_load_wasm::load_wasm; use ic_types::Cycles; use icrc_ledger_types::icrc1::account::Account; use icrc_ledger_types::icrc1::transfer::{TransferArg, TransferError}; use icrc_ledger_types::icrc2::approve::{ApproveArgs, ApproveError}; use icrc_ledger_types::icrc3::transactions::{GetTransactionsRequest, GetTransactionsResponse}; -use regex::Regex; use std::collections::BTreeMap; use std::path::PathBuf; use std::str::FromStr; @@ -1232,8 +1232,16 @@ impl CkBtcSetup { .expect("minter self-check failed") } - pub fn check_minter_metrics(self) -> MetricsAssert { - MetricsAssert::from_querying_metrics(self.env, self.minter_id) + pub fn check_minter_metrics(self) -> MetricsAssert { + MetricsAssert::from_http_query(self) + } +} + +impl CanisterHttpQuery for CkBtcSetup { + fn http_query(&self, request: Vec) -> Result, UserError> { + self.env + .query(self.minter_id, "http_request", request) + .map(assert_reply) } } @@ -2110,69 +2118,3 @@ fn test_retrieve_btc_with_approval_fail() { vec![] ); } - -pub struct MetricsAssert { - metrics: Vec, -} - -impl MetricsAssert { - pub fn from_querying_metrics(state_machine: StateMachine, canister_id: CanisterId) -> Self { - use ic_canisters_http_types::{HttpRequest, HttpResponse}; - let request = HttpRequest { - method: "GET".to_string(), - url: "/metrics".to_string(), - headers: Default::default(), - body: Default::default(), - }; - let response = Decode!( - &assert_reply( - state_machine - .query( - canister_id, - "http_request", - Encode!(&request).expect("failed to encode HTTP request"), - ) - .expect("failed to get metrics") - ), - HttpResponse - ) - .unwrap(); - assert_eq!(response.status_code, 200_u16); - let metrics = String::from_utf8_lossy(response.body.as_slice()) - .trim() - .split('\n') - .map(|line| line.to_string()) - .collect::>(); - Self { metrics } - } - - pub fn assert_contains_metric_matching(self, pattern: &str) -> Self { - assert!( - !self.find_metrics_matching(pattern).is_empty(), - "Expected to find metric matching '{}', but none matched in:\n{:?}", - pattern, - self.metrics - ); - self - } - - pub fn assert_does_not_contain_metric_matching(self, pattern: &str) -> Self { - let matches = self.find_metrics_matching(pattern); - assert!( - matches.is_empty(), - "Expected not to find any metric matching '{}', but found the following matches:\n{:?}", - pattern, - matches - ); - self - } - - fn find_metrics_matching(&self, pattern: &str) -> Vec { - let regex = Regex::new(pattern).unwrap_or_else(|_| panic!("Invalid regex: {}", pattern)); - self.metrics - .iter() - .filter(|line| regex.is_match(line)) - .cloned() - .collect() - } -} diff --git a/rs/bitcoin/ckbtc/staging/dfx.json b/rs/bitcoin/ckbtc/staging/dfx.json index 2089106eb7f..633a51aa2ef 100644 --- a/rs/bitcoin/ckbtc/staging/dfx.json +++ b/rs/bitcoin/ckbtc/staging/dfx.json @@ -1,63 +1,63 @@ { - "version": 1, - "dfx": "0.12.1", - "canisters": { - "minter": { - "type": "custom", - "build": [ - "bazel build //rs/bitcoin/ckbtc/minter:ckbtc_minter" - ], - "wasm": "../../../../bazel-bin/rs/bitcoin/ckbtc/minter/ckbtc_minter.wasm", - "candid": "../minter/ckbtc_minter.did", - "shrink": false - }, - "ledger": { - "type": "custom", - "build": [ - "bazel build //rs/ledger_suite/icrc1/ledger:ledger_canister" - ], - "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/ledger/ledger_canister.wasm", - "candid": "../../../ledger_suite/icrc1/ledger/ledger.did", - "shrink": false - }, - "archive": { - "type": "custom", - "build": [ - "bazel build //rs/ledger_suite/icrc1/archive:archive_canister" - ], - "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/archive/archive_canister.wasm", - "candid": "../../../ledger_suite/icrc1/archive/archive.did", - "shrink": false - }, - "index": { - "type": "custom", - "build": [ - "bazel build //rs/ledger_suite/icrc1/index:index_canister" - ], - "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/index/index_canister.wasm", - "candid": "../../../ledger_suite/icrc1/index/index.did", - "shrink": false - }, - "kyt": { - "type": "custom", - "build": [ - "bazel build //rs/bitcoin/ckbtc/kyt:kyt_canister" - ], - "wasm": "../../../../bazel-bin/rs/bitcoin/ckbtc/kyt/kyt_canister.wasm", - "candid": "../kyt/kyt.did", - "shrink": false - } + "version": 1, + "dfx": "0.12.1", + "canisters": { + "minter": { + "type": "custom", + "build": [ + "bazel build //rs/bitcoin/ckbtc/minter:ckbtc_minter" + ], + "wasm": "../../../../bazel-bin/rs/bitcoin/ckbtc/minter/ckbtc_minter.wasm", + "candid": "../minter/ckbtc_minter.did", + "shrink": false }, - "defaults": { - "build": { - "packtool": "", - "args": "" - } + "ledger": { + "type": "custom", + "build": [ + "bazel build //rs/ledger_suite/icrc1/ledger:ledger_canister" + ], + "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/ledger/ledger_canister.wasm", + "candid": "../../../ledger_suite/icrc1/ledger/ledger.did", + "shrink": false }, - "networks": { - "local": { - "bind": "127.0.0.1:8000", - "type": "ephemeral" - } + "archive": { + "type": "custom", + "build": [ + "bazel build //rs/ledger_suite/icrc1/archive:archive_canister" + ], + "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/archive/archive_canister.wasm", + "candid": "../../../ledger_suite/icrc1/archive/archive.did", + "shrink": false + }, + "index": { + "type": "custom", + "build": [ + "bazel build //rs/ledger_suite/icrc1/index-ng:index_ng_canister" + ], + "wasm": "../../../../bazel-bin/rs/ledger_suite/icrc1/index-ng/index_ng_canister.wasm", + "candid": "../../../ledger_suite/icrc1/index-ng/index-ng.did", + "shrink": false + }, + "kyt": { + "type": "custom", + "build": [ + "bazel build //rs/bitcoin/ckbtc/kyt:kyt_canister" + ], + "wasm": "../../../../bazel-bin/rs/bitcoin/ckbtc/kyt/kyt_canister.wasm", + "candid": "../kyt/kyt.did", + "shrink": false + } + }, + "defaults": { + "build": { + "packtool": "", + "args": "" + } + }, + "networks": { + "local": { + "bind": "127.0.0.1:8000", + "type": "ephemeral" } -} \ No newline at end of file + } +} diff --git a/rs/bitcoin/consensus/src/payload_builder/parse.rs b/rs/bitcoin/consensus/src/payload_builder/parse.rs index 520de3d848d..8a5281e116a 100644 --- a/rs/bitcoin/consensus/src/payload_builder/parse.rs +++ b/rs/bitcoin/consensus/src/payload_builder/parse.rs @@ -1,11 +1,13 @@ use ic_btc_replica_types::BitcoinAdapterResponse; -use ic_interfaces::batch_payload::{iterator_to_bytes, slice_to_messages, PastPayload}; +use ic_interfaces::batch_payload::PastPayload; use ic_logger::{error, warn, ReplicaLogger}; use ic_protobuf::{ bitcoin::v1::BitcoinAdapterResponse as PbBitcoinAdapterResponse, proxy::ProxyDecodeError, }; use ic_types::{ - batch::{SelfValidatingPayload, MAX_BITCOIN_PAYLOAD_IN_BYTES}, + batch::{ + iterator_to_bytes, slice_to_messages, SelfValidatingPayload, MAX_BITCOIN_PAYLOAD_IN_BYTES, + }, NumBytes, }; use prost::Message; diff --git a/rs/bitcoin/replica_types/src/lib.rs b/rs/bitcoin/replica_types/src/lib.rs index 5213797bafe..269d01b2eee 100644 --- a/rs/bitcoin/replica_types/src/lib.rs +++ b/rs/bitcoin/replica_types/src/lib.rs @@ -414,6 +414,7 @@ impl From for SendTransactionResponse { impl SendTransactionResponse { /// Returns the size of this `SendTransactionResponse` in bytes. pub fn count_bytes(&self) -> usize { + let SendTransactionResponse {} = &self; 0 } } @@ -429,7 +430,11 @@ pub struct BitcoinReject { impl BitcoinReject { /// Returns the size of this `RejectResponse` in bytes. pub fn count_bytes(&self) -> usize { - size_of_val(&self.reject_code) + self.message.len() + let BitcoinReject { + reject_code, + message, + } = &self; + size_of_val(reject_code) + message.len() } } @@ -598,7 +603,11 @@ impl TryFrom for BitcoinAdapterResponse { impl BitcoinAdapterResponse { /// Returns the size of this `BitcoinAdapterResponse` in bytes. pub fn count_bytes(&self) -> usize { - self.response.count_bytes() + std::mem::size_of::() + let BitcoinAdapterResponse { + response, + callback_id, + } = &self; + response.count_bytes() + size_of_val(callback_id) } } diff --git a/rs/boundary_node/canary_proxy/src/support/auto_server.rs b/rs/boundary_node/canary_proxy/src/support/auto_server.rs index 0dd0d4079a7..cd5ce9926fe 100644 --- a/rs/boundary_node/canary_proxy/src/support/auto_server.rs +++ b/rs/boundary_node/canary_proxy/src/support/auto_server.rs @@ -123,7 +123,7 @@ enum Version { H1, H2, } -async fn read_version<'a, A>(mut reader: A) -> IoResult<(Version, Rewind)> +async fn read_version(mut reader: A) -> IoResult<(Version, Rewind)> where A: AsyncRead + Unpin, { @@ -171,7 +171,7 @@ where if this.buf.filled() == H2_PREFACE { *this.version = Version::H2; } - return Poll::Ready(Ok((*this.version, this.buf.filled().to_vec()))); + Poll::Ready(Ok((*this.version, this.buf.filled().to_vec()))) } } diff --git a/rs/boundary_node/certificate_issuance/certificate_issuer/src/check.rs b/rs/boundary_node/certificate_issuance/certificate_issuer/src/check.rs index f2f3abc0869..f5321deaa71 100644 --- a/rs/boundary_node/certificate_issuance/certificate_issuer/src/check.rs +++ b/rs/boundary_node/certificate_issuance/certificate_issuer/src/check.rs @@ -171,15 +171,10 @@ impl Check for Checker { })?; // Phase 4 - Ensure canister mentions known domain. - let request = HttpRequest { - method: String::from("GET"), - url: String::from("/.well-known/ic-domains"), - headers: vec![], - body: vec![], - }; + let request = HttpRequest::get("/.well-known/ic-domains").build(); let (response,) = HttpRequestCanister::create(&self.agent, canister_id) - .http_request(&request.method, &request.url, vec![], vec![], None) + .http_request(&request.method(), &request.url(), vec![], vec![], None) .call() .await .map_err(|_| CheckError::KnownDomainsUnavailable { @@ -197,16 +192,18 @@ impl Check for Checker { }?; // Check response certification - let response_for_verification = HttpResponse { - status_code: response.status_code, - headers: response + let response_for_verification = HttpResponse::ok( + // body + response.body.clone(), + // headers + response .headers .iter() .map(|field| (field.0.to_string(), field.1.to_string())) .collect::>(), - body: response.body.clone(), - upgrade: response.upgrade, - }; + ) + .with_upgrade(response.upgrade.unwrap_or_default()) + .build(); let max_cert_time_offset_ns = 300_000_000_000; let current_time_ns = SystemTime::now() .duration_since(UNIX_EPOCH) diff --git a/rs/boundary_node/certificate_issuance/certificate_issuer/src/main.rs b/rs/boundary_node/certificate_issuance/certificate_issuer/src/main.rs index ab2dca4f12c..f21af9ca8c2 100644 --- a/rs/boundary_node/certificate_issuance/certificate_issuer/src/main.rs +++ b/rs/boundary_node/certificate_issuance/certificate_issuer/src/main.rs @@ -23,9 +23,7 @@ use axum::{ use candid::{DecoderConfig, Principal}; use chacha20poly1305::{KeyInit, XChaCha20Poly1305}; use clap::Parser; -use ic_agent::{ - agent::http_transport::reqwest_transport::ReqwestTransport, identity::Secp256k1Identity, Agent, -}; +use ic_agent::{identity::Secp256k1Identity, Agent}; use instant_acme::{Account, AccountCredentials, NewAccount}; use opentelemetry::{ metrics::{Counter, Histogram, MeterProvider as _}, @@ -198,15 +196,13 @@ async fn main() -> Result<(), Error> { static USER_AGENT: &str = "Ic-Certificate-Issuer"; let client = reqwest::Client::builder().user_agent(USER_AGENT).build()?; - let transport = - ReqwestTransport::create_with_client(cli.orchestrator_uri.to_string(), client)?; - let f = File::open(cli.identity_path).context("failed to open identity file")?; let identity = Secp256k1Identity::from_pem(f).context("failed to create basic identity")?; let agent = Agent::builder() .with_identity(identity) - .with_transport(transport) + .with_url(cli.orchestrator_uri.to_string()) + .with_http_client(client) .build()?; let root_key = cli diff --git a/rs/boundary_node/ic_boundary/BUILD.bazel b/rs/boundary_node/ic_boundary/BUILD.bazel index 411bb4e75fd..2a95d624a98 100644 --- a/rs/boundary_node/ic_boundary/BUILD.bazel +++ b/rs/boundary_node/ic_boundary/BUILD.bazel @@ -51,6 +51,7 @@ DEPENDENCIES = [ "@crate_index//:humantime", "@crate_index//:ic-agent", "@crate_index//:ic-bn-lib", + "@crate_index//:ipnet", "@crate_index//:lazy_static", "@crate_index//:little-loadshedder", "@crate_index//:maxminddb", diff --git a/rs/boundary_node/ic_boundary/Cargo.toml b/rs/boundary_node/ic_boundary/Cargo.toml index 1ffd3653e91..dfc8567888a 100644 --- a/rs/boundary_node/ic_boundary/Cargo.toml +++ b/rs/boundary_node/ic_boundary/Cargo.toml @@ -61,6 +61,7 @@ ic-registry-replicator = { path = "../../orchestrator/registry_replicator" } ic-registry-routing-table = { path = "../../registry/routing_table" } ic-registry-subnet-type = { path = "../../registry/subnet_type" } ic-types = { path = "../../types/types" } +ipnet = { workspace = true } lazy_static = { workspace = true } maxminddb = "0.24" mockall = { workspace = true } diff --git a/rs/boundary_node/ic_boundary/src/bouncer.rs b/rs/boundary_node/ic_boundary/src/bouncer.rs index 216dff101c5..c0e7ddd5b07 100644 --- a/rs/boundary_node/ic_boundary/src/bouncer.rs +++ b/rs/boundary_node/ic_boundary/src/bouncer.rs @@ -13,16 +13,15 @@ use axum::{body::Body, extract::State, middleware::Next, response::IntoResponse} use dashmap::DashMap; use http::Request; use ic_bn_lib::http::ConnInfo; -use moka::sync::{Cache, CacheBuilder}; use prometheus::{ register_histogram_with_registry, register_int_gauge_vec_with_registry, Histogram, IntGaugeVec, Registry, }; -use ratelimit::Ratelimiter; use tracing::{debug, error, info, warn}; use crate::{ cli, + rate_limiting::sharded::ShardedRatelimiter, routes::{ErrorCause, RateLimitCause}, }; @@ -44,10 +43,6 @@ pub struct Decision { pub length: Duration, } -struct Bucket { - limiter: Ratelimiter, -} - struct Metrics { decisions: IntGaugeVec, fw_latency: Histogram, @@ -55,11 +50,9 @@ struct Metrics { pub struct Bouncer { firewall: Arc, - buckets: Cache>, + shards: ShardedRatelimiter, decisions: DashMap, ban_time: Duration, - burst_size: u64, - refill_interval: Duration, // Generations are used to track changes to `decisions` and to apply firewall only when needed gen_current: AtomicU64, gen_applied: AtomicU64, @@ -69,10 +62,10 @@ pub struct Bouncer { impl Bouncer { fn new( rate_per_second: u32, - burst_size: u64, + burst_size: u32, ban_time: Duration, - max_buckets: u64, - bucket_expiry: Duration, + max_shards: u64, + shard_tti: Duration, firewall: Arc, registry: &Registry, ) -> Result { @@ -80,15 +73,10 @@ impl Bouncer { return Err(anyhow!("rate_per_second should be > 0")); } - if burst_size < rate_per_second as u64 { + if burst_size < rate_per_second { return Err(anyhow!("burst_size should be >= rate_per_second")); } - let buckets = CacheBuilder::new(max_buckets) - // Expire buckets when they're not queried for some time, this bounds memory usage - .time_to_idle(bucket_expiry) - .build(); - let metrics = Metrics { decisions: register_int_gauge_vec_with_registry!( "bouncer_decisions", @@ -105,28 +93,22 @@ impl Bouncer { }; Ok(Self { - burst_size, firewall, - buckets, + shards: ShardedRatelimiter::new( + rate_per_second, + burst_size, + Duration::from_secs(1), + shard_tti, + max_shards, + ), decisions: DashMap::new(), ban_time, - refill_interval: Duration::from_secs(1).checked_div(rate_per_second).unwrap(), gen_current: AtomicU64::new(0), gen_applied: AtomicU64::new(0), metrics, }) } - fn new_bucket(&self) -> Arc { - Arc::new(Bucket { - limiter: Ratelimiter::builder(1, self.refill_interval) - .max_tokens(self.burst_size) - .initial_available(self.burst_size) - .build() - .unwrap(), - }) - } - // Increment the generation to indicate that we need to apply fn mark_update(&self) { self.gen_current.fetch_add(1, Ordering::SeqCst); @@ -139,12 +121,7 @@ impl Bouncer { return false; } - // Get bucket or create a new one - // Moka guarantees that concurrent requests for the same key would lead to only a single one value created - let bucket = self.buckets.get_with(ip, || self.new_bucket()); - - // Try to acquire a token - if bucket.limiter.try_wait().is_ok() { + if self.shards.acquire(ip) { return true; } diff --git a/rs/boundary_node/ic_boundary/src/cache.rs b/rs/boundary_node/ic_boundary/src/cache.rs index 11f046cf4cc..5920874df4d 100644 --- a/rs/boundary_node/ic_boundary/src/cache.rs +++ b/rs/boundary_node/ic_boundary/src/cache.rs @@ -100,7 +100,7 @@ fn weigh_entry(k: &Arc, v: &CacheItem) -> u32 { + 58; // 2 x Principal for (k, v) in v.headers.iter() { - cost += k.as_str().as_bytes().len(); + cost += k.as_str().len(); cost += v.as_bytes().len(); } diff --git a/rs/boundary_node/ic_boundary/src/check/test.rs b/rs/boundary_node/ic_boundary/src/check/test.rs index e65b17284fa..2bec3d0fe5d 100644 --- a/rs/boundary_node/ic_boundary/src/check/test.rs +++ b/rs/boundary_node/ic_boundary/src/check/test.rs @@ -83,6 +83,7 @@ pub fn generate_custom_registry_snapshot( nns_public_key: vec![], subnets, nodes: nodes_hash, + api_bns: vec![], } } diff --git a/rs/boundary_node/ic_boundary/src/cli.rs b/rs/boundary_node/ic_boundary/src/cli.rs index ddb15177c7a..8ca8c993d02 100644 --- a/rs/boundary_node/ic_boundary/src/cli.rs +++ b/rs/boundary_node/ic_boundary/src/cli.rs @@ -279,6 +279,22 @@ pub struct RateLimiting { /// How frequently to poll for rules (from file or canister) #[clap(env, long, default_value = "30s", value_parser = parse_duration)] pub rate_limit_generic_poll_interval: Duration, + + /// Time-to-idle for rules that have the `ip_group_prefix`. + /// If no requests are coming for the given shard - it will be removed. + #[clap(env, long, default_value = "1h", value_parser = parse_duration)] + pub rate_limit_generic_tti: Duration, + + /// Maximum number of shards that we store (per rule) + #[clap(env, long, default_value = "30000")] + pub rate_limit_generic_max_shards: u64, + + /// Whether to use the number of API BNs from the registry to scale the rate limit rules. + /// E.g. if a ratelimit action is set to "500/1h" and the number of API BNs is 5 then the + /// rule would be adjusted to "100/1h" so that the total ratelimit of all API BNs would be "500/1h". + /// Important: if after the divison the numerator would be less than 1 then it would be rounded to 1. + #[clap(env, long)] + pub rate_limit_generic_autoscale: bool, } #[derive(Args)] @@ -340,8 +356,8 @@ pub struct Bouncer { pub bouncer_ratelimit: u32, /// Number of requests in a burst allowed, must be higher than --bouncer-ratelimit - #[clap(env, long, default_value = "600", value_parser = clap::value_parser!(u64).range(1..))] - pub bouncer_burst_size: u64, + #[clap(env, long, default_value = "600", value_parser = clap::value_parser!(u32).range(1..))] + pub bouncer_burst_size: u32, /// For how long to ban the IPs #[clap(env, long, default_value = "10m", value_parser = parse_duration)] diff --git a/rs/boundary_node/ic_boundary/src/core.rs b/rs/boundary_node/ic_boundary/src/core.rs index a32185db95b..8c06873aa21 100644 --- a/rs/boundary_node/ic_boundary/src/core.rs +++ b/rs/boundary_node/ic_boundary/src/core.rs @@ -2,7 +2,7 @@ use std::{ error::Error as StdError, net::{Ipv4Addr, Ipv6Addr, SocketAddr}, - sync::Arc, + sync::{Arc, RwLock}, time::{Duration, Instant}, }; @@ -50,7 +50,7 @@ use ic_types::{crypto::threshold_sig::ThresholdSigPublicKey, messages::MessageId use nix::unistd::{getpgid, setpgid, Pid}; use prometheus::Registry; use rand::rngs::OsRng; -use tokio::sync::RwLock; +use tokio::sync::watch; use tokio_util::sync::CancellationToken; use tower::{limit::ConcurrencyLimitLayer, util::MapResponseLayer, ServiceBuilder}; use tower_http::{compression::CompressionLayer, request_id::MakeRequestUuid, ServiceBuilderExt}; @@ -201,6 +201,9 @@ pub async fn main(cli: Cli) -> Result<(), Error> { // Setup registry-related stuff let persister = Persister::new(Arc::clone(&routing_table)); + // Snapshot update notification channels + let (channel_snapshot_send, channel_snapshot_recv) = tokio::sync::watch::channel(None); + // Registry Client let (registry_client, registry_replicator, nns_pub_key) = if let Some(v) = &cli.registry.registry_local_store_path { @@ -222,6 +225,8 @@ pub async fn main(cli: Cli) -> Result<(), Error> { WithMetricsPersist(persister, MetricParamsPersist::new(&metrics_registry)), http_client_check, &metrics_registry, + channel_snapshot_send, + channel_snapshot_recv.clone(), &mut runners, )?; @@ -283,16 +288,30 @@ pub async fn main(cli: Cli) -> Result<(), Error> { }; // Generic Ratelimiter + let generic_limiter_opts = generic::Options { + tti: cli.rate_limiting.rate_limit_generic_tti, + max_shards: cli.rate_limiting.rate_limit_generic_max_shards, + poll_interval: cli.rate_limiting.rate_limit_generic_poll_interval, + autoscale: cli.rate_limiting.rate_limit_generic_autoscale, + }; let generic_limiter = if let Some(v) = &cli.rate_limiting.rate_limit_generic_file { - Some(Arc::new(generic::Limiter::new_from_file(v.clone()))) + Some(Arc::new(generic::GenericLimiter::new_from_file( + v.clone(), + generic_limiter_opts, + channel_snapshot_recv, + &metrics_registry, + ))) + } else if let Some(v) = cli.rate_limiting.rate_limit_generic_canister_id { + Some(Arc::new(generic::GenericLimiter::new_from_canister( + v, + agent.clone().unwrap(), + generic_limiter_opts, + cli.misc.crypto_config.is_some(), + channel_snapshot_recv, + &metrics_registry, + ))) } else { - cli.rate_limiting.rate_limit_generic_canister_id.map(|x| { - Arc::new(if cli.misc.crypto_config.is_some() { - generic::Limiter::new_from_canister_update(x, agent.clone().unwrap()) - } else { - generic::Limiter::new_from_canister_query(x, agent.clone().unwrap()) - }) - }) + None }; // HTTP Logs Anonymization @@ -424,11 +443,7 @@ pub async fn main(cli: Cli) -> Result<(), Error> { runners.push(Box::new(metrics_runner)); if let Some(v) = generic_limiter { - let runner = Box::new(WithThrottle( - v, - ThrottleParams::new(cli.rate_limiting.rate_limit_generic_poll_interval), - )); - runners.push(runner); + runners.push(Box::new(v)); } // HTTP Logs Anonymization @@ -594,10 +609,11 @@ fn setup_registry( persister: WithMetricsPersist, http_client_check: Arc, metrics_registry: &Registry, + channel_snapshot_send: watch::Sender>>, + channel_snapshot_recv: watch::Receiver>>, runners: &mut Vec>, ) -> Result<(Option, Option), Error> { // Snapshots - let (channel_snapshot_send, channel_snapshot_recv) = tokio::sync::watch::channel(None); let snapshot_runner = WithMetricsSnapshot( { let mut snapshotter = Snapshotter::new( @@ -818,7 +834,7 @@ pub fn setup_router( routing_table: Arc>, http_client: Arc, bouncer: Option>, - generic_limiter: Option>, + generic_limiter: Option>, cli: &Cli, metrics_registry: &Registry, cache: Option>, diff --git a/rs/boundary_node/ic_boundary/src/metrics.rs b/rs/boundary_node/ic_boundary/src/metrics.rs index 38ff6ad18ff..6b8c1701295 100644 --- a/rs/boundary_node/ic_boundary/src/metrics.rs +++ b/rs/boundary_node/ic_boundary/src/metrics.rs @@ -2,7 +2,7 @@ use std::{ hash::{DefaultHasher, Hash, Hasher}, - sync::Arc, + sync::{Arc, RwLock}, time::Instant, }; @@ -25,7 +25,6 @@ use prometheus::{ IntGauge, IntGaugeVec, Registry, TextEncoder, }; use tikv_jemalloc_ctl::{epoch, stats}; -use tokio::sync::RwLock; use tower_http::request_id::RequestId; use tracing::info; @@ -220,7 +219,7 @@ impl Run for MetricsRunner { } // Take a write lock, truncate the vector and encode the metrics into it - let mut metrics_cache = self.metrics_cache.write().await; + let mut metrics_cache = self.metrics_cache.write().unwrap(); metrics_cache.buffer.clear(); self.encoder .encode(&metric_families, &mut metrics_cache.buffer)?; @@ -501,8 +500,17 @@ pub async fn metrics_middleware( let ip_family = request .extensions() .get::>() - .map(|x| x.remote_addr.family()) - .unwrap_or("0"); + .map(|x| { + let f = x.remote_addr.family(); + if f == "v4" { + 4 + } else if f == "v6" { + 6 + } else { + 0 + } + }) + .unwrap_or(0); let remote_addr = request .extensions() @@ -707,7 +715,7 @@ pub async fn metrics_handler( // Get a read lock and clone the buffer contents ( [(CONTENT_TYPE, PROMETHEUS_CONTENT_TYPE)], - cache.read().await.buffer.clone(), + cache.read().unwrap().buffer.clone(), ) } diff --git a/rs/boundary_node/ic_boundary/src/rate_limiting.rs b/rs/boundary_node/ic_boundary/src/rate_limiting.rs index 4a02db0a352..a7c9f613be8 100644 --- a/rs/boundary_node/ic_boundary/src/rate_limiting.rs +++ b/rs/boundary_node/ic_boundary/src/rate_limiting.rs @@ -106,6 +106,7 @@ impl RateLimit { pub mod fetcher; pub mod generic; +pub mod sharded; #[cfg(test)] pub mod test; diff --git a/rs/boundary_node/ic_boundary/src/rate_limiting/fetcher.rs b/rs/boundary_node/ic_boundary/src/rate_limiting/fetcher.rs index 58f11e07154..32635d8bf9d 100644 --- a/rs/boundary_node/ic_boundary/src/rate_limiting/fetcher.rs +++ b/rs/boundary_node/ic_boundary/src/rate_limiting/fetcher.rs @@ -123,13 +123,13 @@ impl FetchesRules for CanisterFetcher { let Some(raw) = x.rule_raw else { return Err(anyhow!( "rule with id {} ({:?}) is None", - x.id, + x.rule_id, x.description )); }; let rule = RateLimitRule::from_bytes_yaml(&raw) - .context(format!("unable to decode raw rule with id {}", x.id))?; + .context(format!("unable to decode raw rule with id {}", x.rule_id))?; Ok(rule) }) @@ -164,7 +164,7 @@ mod test { is_redacted: false, rules: vec![ OutputRule { - id: "foobar".into(), + rule_id: "foobar".into(), incident_id: "barfoo".into(), rule_raw: Some(indoc! {" canister_id: aaaaa-aa @@ -175,7 +175,7 @@ mod test { description: None }, OutputRule { - id: "foobaz".into(), + rule_id: "foobaz".into(), incident_id: "barfoo".into(), rule_raw: Some(indoc! {" canister_id: 5s2ji-faaaa-aaaaa-qaaaq-cai @@ -186,7 +186,7 @@ mod test { description: None }, OutputRule { - id: "deadbeef".into(), + rule_id: "deadbeef".into(), incident_id: "barfoo".into(), rule_raw: Some(indoc! {" canister_id: aaaaa-aa @@ -234,7 +234,7 @@ mod test { schema_version: SCHEMA_VERSION, is_redacted: false, rules: vec![OutputRule { - id: "foobar".into(), + rule_id: "foobar".into(), incident_id: "barfoo".into(), rule_raw: None, description: None, @@ -270,6 +270,8 @@ mod test { )), methods_regex: Some(Regex::new("^foo|bar$").unwrap()), request_types: None, + ip_prefix_group: None, + ip: None, limit: v1::Action::Block, }, RateLimitRule { @@ -279,6 +281,8 @@ mod test { )), methods_regex: Some(Regex::new("^baz|bax$").unwrap()), request_types: None, + ip_prefix_group: None, + ip: None, limit: v1::Action::Limit(1, Duration::from_secs(10)), }, RateLimitRule { @@ -286,6 +290,8 @@ mod test { subnet_id: None, methods_regex: Some(Regex::new("^foo|bax$").unwrap()), request_types: None, + ip_prefix_group: None, + ip: None, limit: v1::Action::Limit(10, Duration::from_secs(60)), } ] diff --git a/rs/boundary_node/ic_boundary/src/rate_limiting/generic.rs b/rs/boundary_node/ic_boundary/src/rate_limiting/generic.rs index a28dce41f82..8d6414aeffe 100644 --- a/rs/boundary_node/ic_boundary/src/rate_limiting/generic.rs +++ b/rs/boundary_node/ic_boundary/src/rate_limiting/generic.rs @@ -1,6 +1,14 @@ -use std::{path::PathBuf, sync::Arc, time::Duration}; +use std::{ + net::IpAddr, + path::PathBuf, + sync::{ + atomic::{AtomicU32, Ordering}, + Arc, + }, + time::{Duration, Instant}, +}; -use anyhow::{Context, Error}; +use anyhow::{Context as _, Error}; use arc_swap::ArcSwap; use async_trait::async_trait; use axum::{ @@ -11,21 +19,34 @@ use axum::{ response::IntoResponse, }; use candid::Principal; +use ic_bn_lib::http::ConnInfo; use ic_canister_client::Agent; use ic_types::CanisterId; -use rate_limits_api::v1::{Action, RateLimitRule, RequestType as RequestTypeRule}; +use ipnet::IpNet; +use prometheus::{ + register_int_counter_vec_with_registry, register_int_gauge_with_registry, IntCounterVec, + IntGauge, Registry, +}; +use rate_limits_api::v1::{Action, IpPrefixes, RateLimitRule, RequestType as RequestTypeRule}; use ratelimit::Ratelimiter; +use strum::{Display, IntoStaticStr}; +#[allow(clippy::disallowed_types)] +use tokio::sync::{watch, Mutex}; use tracing::warn; -use super::fetcher::{ - CanisterConfigFetcherQuery, CanisterConfigFetcherUpdate, CanisterFetcher, FetchesConfig, - FetchesRules, FileFetcher, +use super::{ + fetcher::{ + CanisterConfigFetcherQuery, CanisterConfigFetcherUpdate, CanisterFetcher, FetchesConfig, + FetchesRules, FileFetcher, + }, + sharded::{create_ratelimiter, ShardedRatelimiter}, }; use crate::{ core::Run, persist::RouteSubnet, routes::{ErrorCause, RateLimitCause, RequestContext, RequestType}, + snapshot::RegistrySnapshot, }; // Converts between different request types @@ -41,9 +62,31 @@ fn convert_request_type(rt: RequestType) -> RequestTypeRule { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Display, IntoStaticStr)] +enum Decision { + Pass, + Block, + Limit, +} + +pub struct Context<'a> { + subnet_id: Principal, + canister_id: Option, + method: Option<&'a str>, + request_type: RequestType, + ip: IpAddr, +} + +#[derive(Clone)] +enum Limiter { + Single(Arc), + Sharded(Arc>, IpPrefixes), +} + +#[derive(Clone)] struct Bucket { rule: RateLimitRule, - limiter: Option, + limiter: Option, } impl PartialEq for Bucket { @@ -53,54 +96,246 @@ impl PartialEq for Bucket { } impl Eq for Bucket {} -pub struct Limiter { +impl Bucket { + fn evaluate(&self, ctx: &Context) -> Option { + if let Some(v) = self.rule.subnet_id { + if ctx.subnet_id != v { + return None; + } + } + + if let Some(v) = self.rule.canister_id { + if let Some(x) = ctx.canister_id { + if x != v { + return None; + } + } + } + + if let Some(v) = &self.rule.request_types { + if !v.contains(&convert_request_type(ctx.request_type)) { + return None; + } + } + + if let Some(rgx) = &self.rule.methods_regex { + if let Some(v) = ctx.method { + if !rgx.is_match(v) { + return None; + } + } else { + return None; + } + } + + if let Some(v) = self.rule.ip { + if !v.contains(&ctx.ip) { + return None; + } + } + + if self.rule.limit == Action::Pass { + return Some(Decision::Pass); + } else if self.rule.limit == Action::Block { + return Some(Decision::Block); + } + + if let Some(limiter) = &self.limiter { + let allowed = match limiter { + Limiter::Single(v) => v.try_wait().is_ok(), + Limiter::Sharded(v, prefix) => { + let prefix = match ctx.ip { + IpAddr::V4(_) => prefix.v4, + IpAddr::V6(_) => prefix.v6, + }; + + // We assume that the prefix is correct, assert is safe + let net = IpNet::new_assert(ctx.ip, prefix); + v.acquire(net) + } + }; + + return Some(if allowed { + Decision::Pass + } else { + Decision::Limit + }); + } + + // Should never get here + unreachable!(); + } +} + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Options { + pub tti: Duration, + pub max_shards: u64, + pub poll_interval: Duration, + pub autoscale: bool, +} + +struct Metrics { + scale: IntGauge, + last_successful_fetch: IntGauge, + active_rules: IntGauge, + fetches: IntCounterVec, + decisions: IntCounterVec, + shards_count: IntGauge, +} + +impl Metrics { + fn new(registry: &Registry) -> Self { + Self { + scale: register_int_gauge_with_registry!( + format!("generic_limiter_scale"), + format!("Current scale that's applied to the rules"), + registry, + ) + .unwrap(), + + last_successful_fetch: register_int_gauge_with_registry!( + format!("generic_limiter_last_successful_fetch"), + format!("How many seconds ago the last successful fetch happened"), + registry + ) + .unwrap(), + + active_rules: register_int_gauge_with_registry!( + format!("generic_limiter_rules"), + format!("Number of rules currently installed"), + registry + ) + .unwrap(), + + fetches: register_int_counter_vec_with_registry!( + format!("generic_limiter_fetches"), + format!("Count of rule fetches and their outcome"), + &["result"], + registry + ) + .unwrap(), + + decisions: register_int_counter_vec_with_registry!( + format!("generic_limiter_decisions"), + format!("Count of decisions made by the ratelimiter"), + &["decision"], + registry + ) + .unwrap(), + + shards_count: register_int_gauge_with_registry!( + format!("generic_limiter_shards_count"), + format!("Number of dynamic shards if the corresponding rules are used"), + registry, + ) + .unwrap(), + } + } +} + +pub struct GenericLimiter { fetcher: Arc, buckets: ArcSwap>, + active_rules: ArcSwap>, + scale: AtomicU32, + #[allow(clippy::disallowed_types)] + channel_snapshot: Mutex>>>, + #[allow(clippy::disallowed_types)] + last_refresh: Mutex, + opts: Options, + metrics: Metrics, } -impl Limiter { - pub fn new_from_file(path: PathBuf) -> Self { +impl GenericLimiter { + pub fn new_from_file( + path: PathBuf, + opts: Options, + channel_snapshot: watch::Receiver>>, + registry: &Registry, + ) -> Self { let fetcher = Arc::new(FileFetcher(path)); - Self::new_with_fetcher(fetcher) - } - - pub fn new_from_canister_query(canister_id: CanisterId, agent: Agent) -> Self { - let config_fetcher = CanisterConfigFetcherQuery(agent, canister_id); - Self::new_with_config_fetcher(Arc::new(config_fetcher)) + Self::new_with_fetcher(fetcher, opts, channel_snapshot, registry) } - pub fn new_from_canister_update(canister_id: CanisterId, agent: Agent) -> Self { - let config_fetcher = CanisterConfigFetcherUpdate(agent, canister_id); - Self::new_with_config_fetcher(Arc::new(config_fetcher)) - } + pub fn new_from_canister( + canister_id: CanisterId, + agent: Agent, + opts: Options, + use_update_call: bool, + channel_snapshot: watch::Receiver>>, + registry: &Registry, + ) -> Self { + let config_fetcher: Arc = if use_update_call { + Arc::new(CanisterConfigFetcherUpdate(agent, canister_id)) + } else { + Arc::new(CanisterConfigFetcherQuery(agent, canister_id)) + }; - fn new_with_config_fetcher(config_fetcher: Arc) -> Self { let fetcher = Arc::new(CanisterFetcher(config_fetcher)); - Self::new_with_fetcher(fetcher) + Self::new_with_fetcher(fetcher, opts, channel_snapshot, registry) } - fn new_with_fetcher(fetcher: Arc) -> Self { + fn new_with_fetcher( + fetcher: Arc, + opts: Options, + channel_snapshot: watch::Receiver>>, + registry: &Registry, + ) -> Self { Self { fetcher, buckets: ArcSwap::new(Arc::new(vec![])), + active_rules: ArcSwap::new(Arc::new(vec![])), + opts, + #[allow(clippy::disallowed_types)] + last_refresh: Mutex::new(Instant::now()), + scale: AtomicU32::new(1), + #[allow(clippy::disallowed_types)] + channel_snapshot: Mutex::new(channel_snapshot), + metrics: Metrics::new(registry), } } - fn process_rules(rules: Vec) -> Vec { + fn process_rules( + &self, + rules: Vec, + old: &Arc>, + scale: u32, + ) -> Vec { rules .into_iter() - .map(|rule| { - let limiter = if let Action::Limit(limit, duration) = rule.limit { - Some( - Ratelimiter::builder( - 1, - duration.checked_div(limit).unwrap_or(Duration::ZERO), + .enumerate() + .map(|(idx, mut rule)| { + // Scale the rule limit accordingly + if let Action::Limit(n, d) = rule.limit { + // Make sure the limit doesn't go below 1 + let limit = (n / scale).max(1); + rule.limit = Action::Limit(limit, d); + } + + // Check if the same rule exists in the same position. + // If yes, then copy over the old limiter to avoid resetting it. + if let Some(v) = old.get(idx) { + if v.rule == rule { + return v.clone(); + } + } + + let limiter = if let Action::Limit(limit, duration) = &rule.limit { + Some(if let Some(v) = &rule.ip_prefix_group { + Limiter::Sharded( + Arc::new(ShardedRatelimiter::new( + *limit, + *limit, + *duration, + self.opts.tti, + self.opts.max_shards, + )), + *v, ) - .max_tokens(limit as u64) - .initial_available(limit as u64) - .build() - .unwrap(), - ) + } else { + Limiter::Single(Arc::new(create_ratelimiter(*limit, *limit, *duration))) + }) } else { None }; @@ -110,18 +345,18 @@ impl Limiter { .collect() } - fn apply_rules(&self, rules: Vec) -> bool { - let new = Arc::new(Self::process_rules(rules)); + fn apply_rules(&self, rules: Vec, scale: u32) -> bool { let old = self.buckets.load_full(); + let new = Arc::new(self.process_rules(rules, &old, scale)); if old != new { - warn!("GenericLimiter: ruleset updated: {} rules", new.len()); + warn!( + "GenericLimiter: ruleset updated: {} rules (scale {scale})", + new.len() + ); for b in new.as_ref() { - warn!( - "GenericLimiter: subnet: {:?}, canister: {:?}, methods: {:?}, action: {:?}", - b.rule.subnet_id, b.rule.canister_id, b.rule.methods_regex, b.rule.limit, - ); + warn!("GenericLimiter: {}", b.rule); } self.buckets.store(new); @@ -138,105 +373,183 @@ impl Limiter { .await .context("unable to fetch rules")?; - self.apply_rules(rules); - Ok(()) - } + self.metrics.active_rules.set(rules.len() as i64); - fn acquire_token( - &self, - subnet_id: Principal, - canister_id: Option, - method: Option<&str>, - request_type: RequestType, - ) -> bool { - for b in self.buckets.load_full().as_ref() { - if let Some(v) = b.rule.subnet_id { - if subnet_id != v { - continue; - } - } + self.apply_rules(rules.clone(), self.scale.load(Ordering::SeqCst)); - if let Some(v) = b.rule.canister_id { - if let Some(x) = canister_id { - if x != v { - continue; - } - } - } + // Store the new copy of the rules as a golden copy for future recalculation + self.active_rules.store(Arc::new(rules)); + *self.last_refresh.lock().await = Instant::now(); - if let Some(v) = &b.rule.request_types { - if !v.contains(&convert_request_type(request_type)) { - continue; - } - } + Ok(()) + } - if let Some(rgx) = &b.rule.methods_regex { - if let Some(v) = method { - if !rgx.is_match(v) { - continue; - } - } else { - continue; - } - } + fn evaluate(&self, ctx: Context) -> Decision { + // Always allow access from localhost. + // This makes sure that ic-boundary & colocated services will always be able to query anything. + if ctx.ip.is_loopback() { + return Decision::Pass; + } - if let Some(r) = &b.limiter { - return r.try_wait().is_ok(); + for b in self.buckets.load_full().as_ref() { + if let Some(v) = b.evaluate(&ctx) { + return v; } - - // Always block - return false; } // No rules / no match -> pass - true + Decision::Pass + } + + /// Count the number of shards in sharded limiters (if there are any) + fn shards_count(&self) -> u64 { + self.buckets + .load_full() + .iter() + .filter_map(|x| { + if let Some(Limiter::Sharded(v, _)) = &x.limiter { + Some(v.shards_count()) + } else { + None + } + }) + .sum() } } #[async_trait] -impl Run for Arc { +impl Run for Arc { async fn run(&mut self) -> Result<(), Error> { - if let Err(e) = self.refresh().await { - warn!("Ratelimiter: unable to refresh: {e:#}"); + let mut interval = tokio::time::interval(self.opts.poll_interval); + interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); + + let mut channel = self.channel_snapshot.lock().await; + + loop { + tokio::select! { + biased; + + Ok(()) = channel.changed(), if self.opts.autoscale => { + let snapshot = channel.borrow_and_update().clone(); + + if let Some(v) = snapshot { + // Store the count of API BNs as a scale and make sure it's >= 1 + let scale = v.api_bns.len().max(1) as u32; + self.scale.store(scale, Ordering::SeqCst); + self.metrics.scale.set(scale as i64); + warn!("GenericLimiter: got a new registry snapshot, recalculating with scale {scale}"); + + // Recalculate the rules based on the potentially new scale + self.apply_rules(self.active_rules.load().as_ref().clone(), scale); + } + } + + _ = interval.tick() => { + let r = self.refresh().await; + self.metrics.fetches.with_label_values(&[if r.is_ok() { "success" } else {"failure"}]).inc(); + if let Err(e) = r { + warn!("GenericLimiter: unable to refresh: {e:#}"); + } + + // Update the metrics + self.metrics.last_successful_fetch.set(self.last_refresh.lock().await.elapsed().as_secs_f64() as i64); + self.metrics.shards_count.set(self.shards_count() as i64); + } + } } - Ok(()) } } pub async fn middleware( - State(state): State>, + State(state): State>, Extension(ctx): Extension>, Extension(subnet): Extension>, + Extension(conn_info): Extension>, canister_id: Option>, request: Request, next: Next, ) -> Result { - if !state.acquire_token( - subnet.id, - canister_id.map(|x| x.0.get().into()), - ctx.method_name.as_deref(), - ctx.request_type, - ) { - return Err(ErrorCause::RateLimited(RateLimitCause::Generic)); - } + let ctx = Context { + subnet_id: subnet.id, + canister_id: canister_id.map(|x| x.0.get().into()), + method: ctx.method_name.as_deref(), + request_type: ctx.request_type, + ip: conn_info.remote_addr.ip(), + }; - Ok(next.run(request).await) + let decision = state.evaluate(ctx); + + let decision_str: &'static str = decision.into(); + state + .metrics + .decisions + .with_label_values(&[decision_str]) + .inc(); + + match decision { + Decision::Pass => Ok(next.run(request).await), + Decision::Block => Err(ErrorCause::Forbidden), + Decision::Limit => Err(ErrorCause::RateLimited(RateLimitCause::Generic)), + } } #[cfg(test)] mod test { use super::*; use indoc::indoc; + use std::str::FromStr; + + use crate::{ + principal, + snapshot::{generate_stub_snapshot, ApiBoundaryNode}, + }; + + struct BrokenFetcher; + + #[async_trait] + impl FetchesRules for BrokenFetcher { + async fn fetch_rules(&self) -> Result, Error> { + Err(anyhow::anyhow!("boo")) + } + } + + struct TestFetcher(Vec); + + #[async_trait] + impl FetchesRules for TestFetcher { + async fn fetch_rules(&self) -> Result, Error> { + Ok(self.0.clone()) + } + } + + #[tokio::test] + async fn test_ratelimit() { + let ip1 = IpAddr::from_str("10.0.0.1").unwrap(); + let ip2 = IpAddr::from_str("192.168.0.1").unwrap(); + let ip_local4 = IpAddr::from_str("127.0.0.1").unwrap(); + let ip_local6 = IpAddr::from_str("::1").unwrap(); + + let id0 = principal!("pawub-syaaa-aaaam-qb7zq-cai"); + let id1 = principal!("aaaaa-aa"); + let id2 = principal!("5s2ji-faaaa-aaaaa-qaaaq-cai"); + let id3 = principal!("qoctq-giaaa-aaaaa-aaaea-cai"); + + let subnet_id = + principal!("3hhby-wmtmw-umt4t-7ieyg-bbiig-xiylg-sblrt-voxgt-bqckd-a75bf-rqe"); + let subnet_id2 = + principal!("6pbhf-qzpdk-kuqbr-pklfa-5ehhf-jfjps-zsj6q-57nrl-kzhpd-mu7hc-vae"); - #[test] - fn test_ratelimit() { let rules = indoc! {" + - canister_id: pawub-syaaa-aaaam-qb7zq-cai + limit: block + - subnet_id: 3hhby-wmtmw-umt4t-7ieyg-bbiig-xiylg-sblrt-voxgt-bqckd-a75bf-rqe canister_id: aaaaa-aa methods_regex: ^.*$ limit: 10/1h - canister_id: 5s2ji-faaaa-aaaaa-qaaaq-cai + ip: 10.0.0.0/24 methods_regex: ^(foo|bar)$ limit: 20/1h @@ -245,78 +558,491 @@ mod test { limit: block - canister_id: qoctq-giaaa-aaaaa-aaaea-cai + ip: 10.0.0.0/8 request_types: [call] limit: 10/1h + - canister_id: qoctq-giaaa-aaaaa-aaaea-cai + request_types: [read_state] + ip_prefix_group: + v4: 24 + v6: 64 + limit: 10/1h + - canister_id: qoctq-giaaa-aaaaa-aaaea-cai limit: 20/1h "}; + let rules: Vec = serde_yaml::from_str(rules).unwrap(); + let opts = Options { + tti: Duration::from_secs(10), + max_shards: 10000, + poll_interval: Duration::from_secs(30), + autoscale: true, + }; - let limiter = Limiter::new_from_file("/tmp/foo".into()); - limiter.apply_rules(rules); + // Check that fetching works + let fetcher = TestFetcher(rules.clone()); + let (_, rx) = watch::channel(None); + let limiter = Arc::new(GenericLimiter::new_with_fetcher( + Arc::new(fetcher), + opts.clone(), + rx, + &Registry::new(), + )); + assert!(limiter.refresh().await.is_ok()); + assert_eq!(limiter.active_rules.load().len(), 7); - let id1 = Principal::from_text("aaaaa-aa").unwrap(); - let id2 = Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap(); - let id3 = Principal::from_text("qoctq-giaaa-aaaaa-aaaea-cai").unwrap(); - let subnet_id = - Principal::from_text("3hhby-wmtmw-umt4t-7ieyg-bbiig-xiylg-sblrt-voxgt-bqckd-a75bf-rqe") - .unwrap(); - let subnet_id2 = - Principal::from_text("6pbhf-qzpdk-kuqbr-pklfa-5ehhf-jfjps-zsj6q-57nrl-kzhpd-mu7hc-vae") - .unwrap(); + // Check id1 limiting with any method + // 10 pass + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + } + + // then all blocked + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Check different rules + let (tx, rx) = watch::channel(None); + let limiter = Arc::new(GenericLimiter::new_with_fetcher( + Arc::new(BrokenFetcher), + opts, + rx, + &Registry::new(), + )); - // Check id1 blocking with any method + let mut runner = limiter.clone(); + tokio::spawn(async move { + let _ = runner.run().await; + }); + + limiter.apply_rules(rules.clone(), 1); + + let mut snapshot = generate_stub_snapshot(vec![]); + snapshot.api_bns = vec![ + ApiBoundaryNode { + id: principal!("3hhby-wmtmw-umt4t-7ieyg-bbiig-xiylg-sblrt-voxgt-bqckd-a75bf-rqe"), + addr: ip1, + port: 31337, + }, + ApiBoundaryNode { + id: principal!("3hhby-wmtmw-umt4t-7ieyg-bbiig-xiylg-sblrt-voxgt-bqckd-a75bf-rqe"), + addr: ip2, + port: 31337, + }, + ]; + + // Check that blocked canister always works from localhost even if there's a block rule present + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id0), + method: None, + request_type: RequestType::Query, + ip: ip_local4, + }), + Decision::Pass + ); + } + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id0), + method: None, + request_type: RequestType::Query, + ip: ip_local6, + }), + Decision::Pass + ); + } + + // Check id1 limiting with any method // 10 pass for _ in 0..10 { - assert!(limiter.acquire_token(subnet_id, Some(id1), Some("foo"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); } + // then all blocked for _ in 0..100 { - assert!(!limiter.acquire_token(subnet_id, Some(id1), Some("bar"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); } - // Check id2 blocking with two methods + // Check id2 limiting with two methods // 20 pass // Another subnet_id which shouldn't have any difference for _ in 0..20 { - assert!(limiter.acquire_token(subnet_id2, Some(id2), Some("foo"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id: subnet_id2, + canister_id: Some(id2), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); } - // Then all blocked + + // Then all limit for _ in 0..100 { - assert!(!limiter.acquire_token(subnet_id2, Some(id2), Some("bar"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id: subnet_id2, + canister_id: Some(id2), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); } - // Other methods should not block ever + // Other methods should not limit ever for _ in 0..100 { - assert!(limiter.acquire_token(subnet_id2, Some(id2), Some("lol"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id: subnet_id2, + canister_id: Some(id2), + method: Some("lol"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); } for _ in 0..100 { - assert!(limiter.acquire_token(subnet_id2, Some(id2), Some("rofl"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id: subnet_id2, + canister_id: Some(id2), + method: Some("rofl"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); } // This method should be blocked always for _ in 0..100 { - assert!(!limiter.acquire_token(subnet_id, Some(id2), Some("baz"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id2), + method: Some("baz"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Block + ); } - // Check id3 blocking with any method and request type call + // Check id3 limiting with any method and request type call // 10 pass for _ in 0..10 { - assert!(limiter.acquire_token(subnet_id, Some(id3), Some("foo"), RequestType::Call)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: Some("rofl"), + request_type: RequestType::Call, + ip: ip1, + }), + Decision::Pass + ); } - // then all blocked + // then all limited for _ in 0..100 { - assert!(!limiter.acquire_token(subnet_id, Some(id3), Some("bar"), RequestType::Call)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: Some("bar"), + request_type: RequestType::Call, + ip: ip1, + }), + Decision::Limit + ); } - // Then check id3 blocking with any method and request type query + // Then check id3 limiting with any method and request type query // 20 pass for _ in 0..20 { - assert!(limiter.acquire_token(subnet_id, Some(id3), Some("baz"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: Some("baz"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); } + // then all limited + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: Some("zob"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Check per-ip-subnet blocking + // IP1 + // 10 pass + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: None, + request_type: RequestType::ReadState, + ip: ip1, + }), + Decision::Pass + ); + } + // Then all limited + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: None, + request_type: RequestType::ReadState, + ip: ip1, + }), + Decision::Limit + ); + } + // IP2 + // 10 pass + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: None, + request_type: RequestType::ReadState, + ip: ip2, + }), + Decision::Pass + ); + } + // Then all limited + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id3), + method: None, + request_type: RequestType::ReadState, + ip: ip2, + }), + Decision::Limit + ); + } + + // Check that scaling works, the rules should fire 2x earlier now + limiter.apply_rules(rules.clone(), 2); + + // 5 pass (instead of configured 10) + for _ in 0..5 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + } + + // then all blocked + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Make sure that resetting scale back to 1 works + limiter.apply_rules(rules.clone(), 1); + + // 10 pass + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + } + + // then all blocked + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Check that limit after scaling doesn't go under 1 + limiter.apply_rules(rules.clone(), 100); + + // 1 pass (instead of configured 10) + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + + // then all blocked + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Check that autoscaling works by sending a snapshot + limiter.active_rules.store(Arc::new(rules.clone())); + tx.send(Some(Arc::new(snapshot.clone()))).unwrap(); + tokio::time::sleep(Duration::from_millis(100)).await; + + // 5 pass (instead of configured 10) + for _ in 0..5 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + } + + // then all blocked + for _ in 0..100 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); + } + + // Check that autoscaling resets to 1 if there are no API BNs + snapshot.api_bns = vec![]; + tx.send(Some(Arc::new(snapshot))).unwrap(); + tokio::time::sleep(Duration::from_millis(100)).await; + + // 10 pass + for _ in 0..10 { + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("foo"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Pass + ); + } + // then all blocked for _ in 0..100 { - assert!(!limiter.acquire_token(subnet_id, Some(id3), Some("zob"), RequestType::Query)); + assert_eq!( + limiter.evaluate(Context { + subnet_id, + canister_id: Some(id1), + method: Some("bar"), + request_type: RequestType::Query, + ip: ip1, + }), + Decision::Limit + ); } } } diff --git a/rs/boundary_node/ic_boundary/src/rate_limiting/sharded.rs b/rs/boundary_node/ic_boundary/src/rate_limiting/sharded.rs new file mode 100644 index 00000000000..9943dd3370f --- /dev/null +++ b/rs/boundary_node/ic_boundary/src/rate_limiting/sharded.rs @@ -0,0 +1,82 @@ +use std::{hash::Hash, sync::Arc, time::Duration}; + +use moka::sync::Cache; +use ratelimit::Ratelimiter; + +pub fn create_ratelimiter(limit: u32, burst: u32, duration: Duration) -> Ratelimiter { + Ratelimiter::builder(1, duration.checked_div(limit).unwrap_or(Duration::ZERO)) + .max_tokens(burst as u64) + .initial_available(burst as u64) + .build() + .unwrap() +} + +#[derive(Clone)] +struct Shard { + limiter: Arc, +} + +// Ratelimiter that creates sub-limiters for each key +pub struct ShardedRatelimiter { + shards: Cache, + limit: u32, + burst: u32, + dur: Duration, +} + +impl ShardedRatelimiter { + pub fn new(limit: u32, burst: u32, dur: Duration, tti: Duration, max_shards: u64) -> Self { + let shards = Cache::builder() + .time_to_idle(tti) + .max_capacity(max_shards) + .build(); + + Self { + shards, + limit, + burst, + dur, + } + } + + pub fn acquire(&self, key: K) -> bool { + let shard = self.shards.get_with(key, || Shard { + limiter: Arc::new(create_ratelimiter(self.limit, self.burst, self.dur)), + }); + + shard.limiter.try_wait().is_ok() + } + + pub fn shards_count(&self) -> u64 { + self.shards.run_pending_tasks(); + self.shards.entry_count() + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_sharded() { + let s: ShardedRatelimiter = + ShardedRatelimiter::new(10, 10, Duration::from_secs(1), Duration::from_secs(5), 1000); + + // Check 1st shard works and then blocked + for _ in 0..10 { + assert!(s.acquire("foo".into())); + } + assert!(!s.acquire("foo".into())); + + // Check 2nd shard works and then blocked + for _ in 0..10 { + assert!(s.acquire("bar".into())); + } + assert!(!s.acquire("bar".into())); + + // Check 1st still blocked + for _ in 0..10 { + assert!(!s.acquire("foo".into())); + } + } +} diff --git a/rs/boundary_node/ic_boundary/src/routes.rs b/rs/boundary_node/ic_boundary/src/routes.rs index 026e93f5eb5..b063157c1b6 100644 --- a/rs/boundary_node/ic_boundary/src/routes.rs +++ b/rs/boundary_node/ic_boundary/src/routes.rs @@ -73,8 +73,7 @@ pub enum RateLimitCause { Generic, } -// Categorized possible causes for request processing failures -// Not using Error as inner type since it's not cloneable +/// Categorized possible causes for request processing failures #[derive(Clone, Debug, Display)] #[strum(serialize_all = "snake_case")] pub enum ErrorCause { @@ -84,6 +83,7 @@ pub enum ErrorCause { UnableToParseCBOR(String), UnableToParseHTTPArg(String), LoadShed, + Forbidden, MalformedRequest(String), NoRoutingTable, SubnetNotFound, @@ -143,6 +143,7 @@ impl ErrorCause { Self::ReplicaTLSErrorOther(_) => ErrorClientFacing::ReplicaError, Self::ReplicaTLSErrorCert(_) => ErrorClientFacing::ReplicaError, Self::ReplicaErrorOther(_) => ErrorClientFacing::ReplicaError, + Self::Forbidden => ErrorClientFacing::Forbidden, Self::RateLimited(_) => ErrorClientFacing::RateLimited, } } @@ -169,6 +170,7 @@ pub enum ErrorClientFacing { #[strum(serialize = "internal_server_error")] Other, PayloadTooLarge(usize), + Forbidden, RateLimited, ReplicaError, ServiceUnavailable, @@ -187,6 +189,7 @@ impl ErrorClientFacing { Self::NoHealthyNodes => StatusCode::SERVICE_UNAVAILABLE, Self::Other => StatusCode::INTERNAL_SERVER_ERROR, Self::PayloadTooLarge(_) => StatusCode::PAYLOAD_TOO_LARGE, + Self::Forbidden => StatusCode::FORBIDDEN, Self::RateLimited => StatusCode::TOO_MANY_REQUESTS, Self::ReplicaError => StatusCode::SERVICE_UNAVAILABLE, Self::ServiceUnavailable => StatusCode::SERVICE_UNAVAILABLE, @@ -205,6 +208,7 @@ impl ErrorClientFacing { Self::NoHealthyNodes => "There are currently no healthy replica nodes available to handle the request. This may be due to an ongoing upgrade of the replica software in the subnet. Please try again later.".to_string(), Self::Other => "Internal Server Error".to_string(), Self::PayloadTooLarge(x) => format!("Payload is too large: maximum body size is {x} bytes."), + Self::Forbidden => "Request is forbidden according to currently active policy, it might work later.".to_string(), Self::RateLimited => "Rate limit exceeded. Please slow down requests and try again later.".to_string(), Self::ReplicaError => "An unexpected error occurred while communicating with the upstream replica node. Please try again later.".to_string(), Self::ServiceUnavailable => "The API boundary node is temporarily unable to process the request. Please try again later.".to_string(), diff --git a/rs/boundary_node/ic_boundary/src/snapshot.rs b/rs/boundary_node/ic_boundary/src/snapshot.rs index 7866c4a0e78..2de9a70131d 100644 --- a/rs/boundary_node/ic_boundary/src/snapshot.rs +++ b/rs/boundary_node/ic_boundary/src/snapshot.rs @@ -13,6 +13,7 @@ use async_trait::async_trait; use candid::Principal; use ic_registry_client::client::RegistryClient; use ic_registry_client_helpers::{ + api_boundary_node::ApiBoundaryNodeRegistry, crypto::CryptoRegistry, node::NodeRegistry, routing_table::RoutingTableRegistry, @@ -86,6 +87,14 @@ impl Node { } } +#[derive(Clone, Debug)] +#[allow(dead_code)] +pub struct ApiBoundaryNode { + pub id: Principal, + pub addr: IpAddr, + pub port: u16, +} + #[derive(Clone, Debug)] pub struct CanisterRange { pub start: Principal, @@ -138,6 +147,7 @@ pub struct RegistrySnapshot { pub nns_public_key: Vec, pub subnets: Vec, pub nodes: HashMap>, + pub api_bns: Vec, } pub struct Snapshotter { @@ -192,6 +202,38 @@ impl Snapshotter { self.persister = Some(persister); } + fn get_api_boundary_nodes( + &self, + version: RegistryVersion, + ) -> Result, Error> { + let node_ids = self + .registry_client + .get_api_boundary_node_ids(version) + .context("unable to get API BN node ids")?; + + let nodes = node_ids + .into_iter() + .map(|x| -> Result<_, Error> { + let node = self + .registry_client + .get_node_record(x, version) + .context("unable to get node record")? + .context("node not available")?; + + let http_endpoint = node.http.context("http endpoint not available")?; + + Ok(ApiBoundaryNode { + id: x.get().0, + addr: IpAddr::from_str(http_endpoint.ip_addr.as_str()) + .context("unable to parse IP address")?, + port: http_endpoint.port as u16, + }) + }) + .collect::, _>>()?; + + Ok(nodes) + } + // Creates a snapshot of the registry for given version fn get_snapshot(&self, version: RegistryVersion) -> Result { // Get routing table with canister ranges @@ -243,6 +285,11 @@ impl Snapshotter { .context("failed to get subnet ids")? // Result .context("subnet ids not available")?; // Option + // Fetch a list of API BNs + let api_bns = self + .get_api_boundary_nodes(version) + .context("unable to get API BNs")?; + let subnets = subnet_ids .into_iter() .map(|subnet_id| { @@ -337,6 +384,7 @@ impl Snapshotter { nns_public_key: nns_key_with_prefix, subnets, nodes: nodes_map, + api_bns, }) } } @@ -463,6 +511,7 @@ pub fn generate_stub_snapshot(subnets: Vec) -> RegistrySnapshot { nns_public_key: vec![], subnets, nodes, + api_bns: vec![], } } diff --git a/rs/boundary_node/rate_limits/BUILD.bazel b/rs/boundary_node/rate_limits/BUILD.bazel index 51c9bcadcb1..a9bb1930784 100644 --- a/rs/boundary_node/rate_limits/BUILD.bazel +++ b/rs/boundary_node/rate_limits/BUILD.bazel @@ -7,14 +7,13 @@ DEPENDENCIES = [ # Keep sorted. "//rs/boundary_node/rate_limits/api:rate_limits_api", "//rs/nns/constants", + "//rs/rust_canisters/canister_log", "//rs/rust_canisters/http_types", "@crate_index//:anyhow", "@crate_index//:candid", "@crate_index//:getrandom", - "@crate_index//:hex", "@crate_index//:ic-cdk", "@crate_index//:ic-cdk-timers", - "@crate_index//:ic-metrics-encoder", "@crate_index//:ic-stable-structures", "@crate_index//:mockall", "@crate_index//:prometheus", @@ -47,6 +46,7 @@ rust_test( srcs = glob(["canister/**/*.rs"]), crate_name = "rate_limit_canister", crate_root = "canister/lib.rs", + data = ["canister/interface.did"], proc_macro_deps = MACRO_DEPENDENCIES, - deps = DEPENDENCIES, + deps = DEPENDENCIES + ["@crate_index//:candid_parser"], ) diff --git a/rs/boundary_node/rate_limits/Cargo.toml b/rs/boundary_node/rate_limits/Cargo.toml index b88fca8cf01..247157ec494 100644 --- a/rs/boundary_node/rate_limits/Cargo.toml +++ b/rs/boundary_node/rate_limits/Cargo.toml @@ -10,8 +10,8 @@ documentation.workspace = true anyhow = { workspace = true } candid = { workspace = true } getrandom = { version = "0.2", features = ["custom"] } -hex = { workspace = true } ic-canisters-http-types = { path = "../../rust_canisters/http_types" } +ic-canister-log = { path = "../../rust_canisters/canister_log" } ic-cdk = { workspace = true } ic-cdk-macros = { workspace = true } ic-cdk-timers = { workspace = true } @@ -29,6 +29,7 @@ thiserror = { workspace = true } uuid = { workspace = true, features = ['serde', 'v4'] } [dev-dependencies] +candid_parser = { workspace = true } rate-limit-canister-integration-tests = { path = "./integration_tests" } [lib] diff --git a/rs/boundary_node/rate_limits/api/BUILD.bazel b/rs/boundary_node/rate_limits/api/BUILD.bazel index 7d52ed485c3..54ac3b10f81 100644 --- a/rs/boundary_node/rate_limits/api/BUILD.bazel +++ b/rs/boundary_node/rate_limits/api/BUILD.bazel @@ -6,6 +6,7 @@ DEPENDENCIES = [ # Keep sorted. "@crate_index//:candid", "@crate_index//:humantime", + "@crate_index//:ipnet", "@crate_index//:regex", "@crate_index//:serde", "@crate_index//:serde_json", diff --git a/rs/boundary_node/rate_limits/api/Cargo.toml b/rs/boundary_node/rate_limits/api/Cargo.toml index 45f57bfa32c..3a6c639fc86 100644 --- a/rs/boundary_node/rate_limits/api/Cargo.toml +++ b/rs/boundary_node/rate_limits/api/Cargo.toml @@ -10,6 +10,7 @@ documentation.workspace = true candid = { workspace = true } humantime = "2.1" ic-bn-lib = { workspace = true } +ipnet = { workspace = true } regex = { workspace = true } serde = { workspace = true } serde_bytes = { workspace = true } diff --git a/rs/boundary_node/rate_limits/api/src/lib.rs b/rs/boundary_node/rate_limits/api/src/lib.rs index 0a9dc300efd..9f79729f01f 100644 --- a/rs/boundary_node/rate_limits/api/src/lib.rs +++ b/rs/boundary_node/rate_limits/api/src/lib.rs @@ -108,7 +108,7 @@ pub struct InputRule { #[derive(CandidType, Deserialize, Debug, PartialEq)] pub struct OutputRule { - pub id: RuleId, + pub rule_id: RuleId, pub incident_id: IncidentId, pub rule_raw: Option>, pub description: Option, @@ -116,7 +116,7 @@ pub struct OutputRule { #[derive(CandidType, Deserialize, Debug, PartialEq)] pub struct OutputRuleMetadata { - pub id: RuleId, + pub rule_id: RuleId, pub incident_id: IncidentId, pub rule_raw: Option>, pub description: Option, @@ -158,7 +158,7 @@ impl std::fmt::Display for OutputConfig { writeln!(f, "{INDENT}Is redacted: {}", self.is_redacted)?; for (i, rule) in self.rules.iter().enumerate() { writeln!(f, "{DOUBLE_INDENT}Rule {}:", i + 1)?; - writeln!(f, "{DOUBLE_INDENT}ID: {}", rule.id)?; + writeln!(f, "{DOUBLE_INDENT}ID: {}", rule.rule_id)?; writeln!(f, "{DOUBLE_INDENT}Incident ID: {}", rule.incident_id)?; if let Some(ref description) = rule.description { writeln!(f, "{DOUBLE_INDENT}Description: {description}")?; @@ -175,7 +175,7 @@ impl std::fmt::Display for OutputConfig { impl std::fmt::Display for OutputRuleMetadata { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "\nOutputRuleMetadata")?; - writeln!(f, "{INDENT}ID: {}", self.id)?; + writeln!(f, "{INDENT}ID: {}", self.rule_id)?; writeln!( f, "{INDENT}Disclosed at: {}", diff --git a/rs/boundary_node/rate_limits/api/src/schema_versions/v1.rs b/rs/boundary_node/rate_limits/api/src/schema_versions/v1.rs index 00d79c91c73..42644593858 100644 --- a/rs/boundary_node/rate_limits/api/src/schema_versions/v1.rs +++ b/rs/boundary_node/rate_limits/api/src/schema_versions/v1.rs @@ -1,18 +1,20 @@ -use std::{fmt, time::Duration}; +use std::{ + fmt::{self, Display}, + time::Duration, +}; use candid::Principal; use humantime::{format_duration, parse_duration}; +use ipnet::IpNet; use regex::Regex; use serde::{ - de::{self, Deserializer}, + de::{self, Deserializer, Error}, ser::Serializer, Deserialize, Serialize, }; pub const SCHEMA_VERSION: u64 = 1; -const DOUBLE_INDENT: &str = " "; - #[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum RequestType { @@ -26,7 +28,7 @@ pub enum RequestType { /// Implement serde parser for Action struct ActionVisitor; -impl<'de> de::Visitor<'de> for ActionVisitor { +impl de::Visitor<'_> for ActionVisitor { type Value = Action; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { @@ -42,6 +44,8 @@ impl<'de> de::Visitor<'de> for ActionVisitor { { if s == "block" { return Ok(Action::Block); + } else if s == "pass" { + return Ok(Action::Pass); } let (count, interval) = s @@ -59,8 +63,10 @@ impl<'de> de::Visitor<'de> for ActionVisitor { } } -#[derive(Clone, Eq, PartialEq, Debug)] +#[derive(Clone, Eq, PartialEq, Debug, Default)] pub enum Action { + #[default] + Pass, Block, Limit(u32, Duration), } @@ -74,32 +80,78 @@ impl<'de> Deserialize<'de> for Action { } } +impl Serialize for Action { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_str(&self.to_string()) + } +} + impl fmt::Display for Action { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { + Self::Pass => write!(f, "pass"), Self::Block => write!(f, "block"), Self::Limit(l, d) => write!(f, "{l}/{}", format_duration(*d)), } } } -impl Serialize for Action { - fn serialize(&self, serializer: S) -> Result - where - S: Serializer, - { - serializer.serialize_str(&self.to_string()) +// Checks that u8 is <= 32 +fn de_le_32<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let v = u8::deserialize(deserializer)?; + if v > 32 { + return Err(D::Error::custom("v4 prefix must be <=32")); } + + Ok(v) } -// Defines the rate-limit rule to be stored in the canister -#[derive(Serialize, Deserialize, Debug)] +// Checks that u8 is <= 128 +fn de_le_128<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let v = u8::deserialize(deserializer)?; + if v > 128 { + return Err(D::Error::custom("v6 prefix must be <=128")); + } + + Ok(v) +} + +/// IP prefix lengths for v4 and v6 +/// v4 must be <= 32, v6 <= 128 +#[derive(Clone, Copy, Serialize, Deserialize, Debug, PartialEq, Eq)] +pub struct IpPrefixes { + #[serde(deserialize_with = "de_le_32")] + pub v4: u8, + #[serde(deserialize_with = "de_le_128")] + pub v6: u8, +} + +impl std::fmt::Display for IpPrefixes { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "v4: {}, v6: {}", self.v4, self.v6) + } +} + +/// Defines the rate-limit rule to be stored in the canister +#[derive(Clone, Deserialize, Serialize, Debug, Default)] +#[serde(remote = "Self")] pub struct RateLimitRule { pub canister_id: Option, pub subnet_id: Option, #[serde(default, with = "serde_regex")] pub methods_regex: Option, + pub ip: Option, pub request_types: Option>, + pub ip_prefix_group: Option, pub limit: Action, } @@ -111,42 +163,68 @@ impl PartialEq for RateLimitRule { && self.request_types == other.request_types && self.canister_id == other.canister_id && self.subnet_id == other.subnet_id + && self.ip == other.ip + && self.ip_prefix_group == other.ip_prefix_group && self.limit == other.limit } } impl Eq for RateLimitRule {} -impl std::fmt::Display for RateLimitRule { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - writeln!( - f, - "{DOUBLE_INDENT}Canister ID: {}", - format_principal_option(&self.canister_id) - )?; +impl<'de> Deserialize<'de> for RateLimitRule { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let this = Self::deserialize(deserializer)?; - writeln!( - f, - "{DOUBLE_INDENT}Subnet ID: {}", - format_principal_option(&self.subnet_id) - )?; + if this.ip_prefix_group.is_some() && !matches!(this.limit, Action::Limit(_, _)) { + return Err(D::Error::custom( + "ip_prefix_group only makes sense with 'limit' set to an actual ratelimit", + )); + } + + if this.canister_id.is_none() + && this.subnet_id.is_none() + && this.methods_regex.is_none() + && this.request_types.is_none() + && this.ip.is_none() + { + return Err(D::Error::custom( + "at least one filtering condition must be specified", + )); + } + + Ok(this) + } +} + +impl Serialize for RateLimitRule { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + Self::serialize(self, serializer) + } +} - writeln!( +impl std::fmt::Display for RateLimitRule { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( f, - "{DOUBLE_INDENT}Methods: {}", - &self - .methods_regex - .as_ref() - .map(|x| x.to_string()) - .unwrap_or("None".to_string()) - )?; - - write!(f, "{DOUBLE_INDENT}Limit: {}", &self.limit)?; - Ok(()) + "CanisterID: {}, SubnetID: {}, Request Types: {:?}, Methods: {}, IP: {}, IP Prefix: {}, Limit: {}", + format_option(&self.canister_id), + format_option(&self.subnet_id), + self.request_types, + format_option(&self.methods_regex), + format_option(&self.ip), + format_option(&self.ip_prefix_group), + self.limit, + ) } } -fn format_principal_option(principal: &Option) -> String { - match principal { +fn format_option(v: &Option) -> String { + match v { Some(p) => p.to_string(), None => "None".to_string(), } @@ -172,6 +250,11 @@ impl RateLimitRule { #[cfg(test)] mod test { + use std::{ + net::{IpAddr, Ipv4Addr, Ipv6Addr}, + str::FromStr, + }; + use super::*; use indoc::indoc; @@ -198,6 +281,10 @@ mod test { let rule_raw = indoc! {" canister_id: aaaaa-aa methods_regex: ^.*$ + ip: 10.1.1.0/24 + ip_prefix_group: + v4: 24 + v6: 64 limit: 100/1s "}; @@ -209,13 +296,79 @@ mod test { subnet_id: None, methods_regex: Some(Regex::new("^.*$").unwrap()), request_types: None, + ip: Some(IpNet::new_assert( + IpAddr::V4(Ipv4Addr::new(10, 1, 1, 0)), + 24 + )), + ip_prefix_group: Some(IpPrefixes { v4: 24, v6: 64 }), limit: Action::Limit(100, Duration::from_secs(1)), } ); + // Bad prefix lengths + let rule_raw = indoc! {" + canister_id: aaaaa-aa + methods_regex: ^.*$ + ip: 10.1.1.0/24 + ip_prefix_group: + v4: 33 + v6: 64 + limit: 100/1s + "}; + + assert!(RateLimitRule::from_bytes_yaml(rule_raw.as_bytes()) + .unwrap_err() + .to_string() + .contains("v4 prefix must be")); + + let rule_raw = indoc! {" + canister_id: aaaaa-aa + methods_regex: ^.*$ + ip: 10.1.1.0/24 + ip_prefix_group: + v4: 24 + v6: 129 + limit: 100/1s + "}; + + assert!(RateLimitRule::from_bytes_yaml(rule_raw.as_bytes()) + .unwrap_err() + .to_string() + .contains("v6 prefix must be")); + + // limit: block with ip prefixes + let rule_raw = indoc! {" + canister_id: aaaaa-aa + methods_regex: ^.*$ + ip: 10.1.1.0/24 + ip_prefix_group: + v4: 24 + v6: 64 + limit: block + "}; + + assert!(RateLimitRule::from_bytes_yaml(rule_raw.as_bytes()) + .unwrap_err() + .to_string() + .contains("ip_prefix_group only makes sense with")); + + // No conditions + let rule_raw = indoc! {" + ip_prefix_group: + v4: 24 + v6: 64 + limit: 100/1s + "}; + + assert!(RateLimitRule::from_bytes_yaml(rule_raw.as_bytes()) + .unwrap_err() + .to_string() + .contains("at least one filtering condition must be")); + let rules = indoc! {" - canister_id: aaaaa-aa methods_regex: ^.*$ + ip: 2001:db8::/32 limit: 100/1s - canister_id: 5s2ji-faaaa-aaaaa-qaaaq-cai @@ -241,7 +394,13 @@ mod test { - call - sync_call limit: block - "}; + + - canister_id: 5s2ji-faaaa-aaaaa-qaaaq-cai + request_types: + - call + - sync_call + limit: pass + "}; let rules: Vec = serde_yaml::from_str(rules).unwrap(); @@ -253,6 +412,11 @@ mod test { canister_id: Some(Principal::from_text("aaaaa-aa").unwrap()), request_types: None, methods_regex: Some(Regex::new("^.*$").unwrap()), + ip: Some(IpNet::new_assert( + IpAddr::V6(Ipv6Addr::from_str("2001:db8::").unwrap()), + 32 + )), + ip_prefix_group: None, limit: Action::Limit(100, Duration::from_secs(1)), }, RateLimitRule { @@ -260,6 +424,8 @@ mod test { canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), request_types: None, methods_regex: Some(Regex::new("^(foo|bar)$").unwrap()), + ip: None, + ip_prefix_group: None, limit: Action::Limit(60, Duration::from_secs(60)), }, RateLimitRule { @@ -272,6 +438,8 @@ mod test { canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), request_types: None, methods_regex: None, + ip: None, + ip_prefix_group: None, limit: Action::Limit(90, Duration::from_secs(60)), }, RateLimitRule { @@ -279,6 +447,8 @@ mod test { canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), request_types: None, methods_regex: Some(Regex::new("^(foo|bar)$").unwrap()), + ip: None, + ip_prefix_group: None, limit: Action::Block, }, RateLimitRule { @@ -286,6 +456,8 @@ mod test { canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), request_types: Some(vec![RequestType::Query]), methods_regex: Some(Regex::new("^(foo|bar)$").unwrap()), + ip: None, + ip_prefix_group: None, limit: Action::Block, }, RateLimitRule { @@ -293,8 +465,19 @@ mod test { canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), request_types: Some(vec![RequestType::Call, RequestType::SyncCall]), methods_regex: None, + ip: None, + ip_prefix_group: None, limit: Action::Block, }, + RateLimitRule { + subnet_id: None, + canister_id: Some(Principal::from_text("5s2ji-faaaa-aaaaa-qaaaq-cai").unwrap()), + request_types: Some(vec![RequestType::Call, RequestType::SyncCall]), + methods_regex: None, + ip: None, + ip_prefix_group: None, + limit: Action::Pass, + }, ], ); @@ -304,7 +487,7 @@ mod test { limit: 100/1s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("canister_id")); // Bad regex let rules = indoc! {" @@ -313,7 +496,7 @@ mod test { limit: 100/1s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("regex")); // Bad limits let rules = indoc! {" @@ -321,42 +504,42 @@ mod test { limit: 100/ "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); let rules = indoc! {" - canister_id: aaaaa-aa limit: /100s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); let rules = indoc! {" - canister_id: aaaaa-aa limit: / "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); let rules = indoc! {" - canister_id: aaaaa-aa limit: 0/1s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); let rules = indoc! {" - canister_id: aaaaa-aa limit: 1/0s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); let rules = indoc! {" - canister_id: aaaaa-aa limit: 1/1 "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("limit")); // Bad request type let rules = indoc! {" @@ -365,6 +548,6 @@ mod test { limit: 10/1s "}; let rules = serde_yaml::from_str::>(rules); - assert!(rules.is_err()); + assert!(rules.unwrap_err().to_string().contains("request_type")); } } diff --git a/rs/boundary_node/rate_limits/canister/add_config.rs b/rs/boundary_node/rate_limits/canister/add_config.rs index 6450b9f0767..35e201c68f9 100644 --- a/rs/boundary_node/rate_limits/canister/add_config.rs +++ b/rs/boundary_node/rate_limits/canister/add_config.rs @@ -90,7 +90,11 @@ impl AddsConfig for ConfigAdder { AddConfigError::Internal(anyhow!("No config for version={current_version} found")) })?; - let next_version = current_version + 1; + let next_version = current_version.checked_add(1).ok_or_else(|| { + AddConfigError::Internal(anyhow!( + "Overflow occurred while incrementing the current version {current_version}" + )) + })?; // Ordered IDs of all rules in the submitted config let mut rule_ids = Vec::::new(); diff --git a/rs/boundary_node/rate_limits/canister/canister.rs b/rs/boundary_node/rate_limits/canister/canister.rs index c8648f09c16..3c53e1b89ac 100644 --- a/rs/boundary_node/rate_limits/canister/canister.rs +++ b/rs/boundary_node/rate_limits/canister/canister.rs @@ -5,12 +5,13 @@ use crate::confidentiality_formatting::{ }; use crate::disclose::{DisclosesRules, RulesDiscloser}; use crate::getter::{ConfigGetter, EntityGetter, IncidentGetter, RuleGetter}; +use crate::logs::{self, Log, LogEntry, Priority, P0}; use crate::metrics::{ - export_metrics_as_http_response, with_metrics_registry, WithMetrics, LAST_CANISTER_CHANGE_TIME, - LAST_SUCCESSFUL_REGISTRY_POLL_TIME, REGISTRY_POLL_CALLS_COUNTER, + export_metrics_as_http_response, with_metrics_registry, WithMetrics, METRICS, }; use crate::state::{init_version_and_config, with_canister_state, CanisterApi}; use candid::Principal; +use ic_canister_log::{export as export_logs, log}; use ic_canisters_http_types::{HttpRequest, HttpResponse, HttpResponseBuilder}; use ic_cdk::api::call::call; use ic_cdk_macros::{init, inspect_message, post_upgrade, query, update}; @@ -20,7 +21,7 @@ use rate_limits_api::{ GetApiBoundaryNodeIdsRequest, GetConfigResponse, GetRuleByIdResponse, GetRulesByIncidentIdResponse, IncidentId, InitArg, InputConfig, RuleId, Version, }; -use std::{sync::Arc, time::Duration}; +use std::{borrow::BorrowMut, str::FromStr, sync::Arc, time::Duration}; const REGISTRY_CANISTER_METHOD: &str = "get_api_boundary_node_ids"; const UPDATE_METHODS: [&str; 2] = ["add_config", "disclose_rules"]; @@ -84,8 +85,11 @@ fn init(init_arg: InitArg) { ); }); // Update metric. - LAST_CANISTER_CHANGE_TIME.with(|cell| { - cell.borrow_mut().set(current_time as i64); + METRICS.with(|cell| { + let mut cell = cell.borrow_mut(); + cell.last_canister_change_time + .borrow_mut() + .set(current_time as i64); }); } @@ -146,14 +150,14 @@ fn get_rules_by_incident_id(incident_id: IncidentId) -> GetRulesByIncidentIdResp fn add_config(config: InputConfig) -> AddConfigResponse { let caller_id = ic_cdk::api::caller(); let current_time = ic_cdk::api::time(); - let result = with_canister_state(|state| { + with_canister_state(|state| { let access_resolver = AccessLevelResolver::new(caller_id, state.clone()); let adder = ConfigAdder::new(state); let adder = WithAuthorization::new(adder, access_resolver); let adder = WithMetrics::new(adder); adder.add_config(config, current_time) })?; - Ok(result) + Ok(()) } /// Makes specified rules publicly accessible for viewing @@ -164,14 +168,14 @@ fn add_config(config: InputConfig) -> AddConfigResponse { fn disclose_rules(args: DiscloseRulesArg) -> DiscloseRulesResponse { let caller_id = ic_cdk::api::caller(); let disclose_time = ic_cdk::api::time(); - let result = with_canister_state(|state| { + with_canister_state(|state| { let access_resolver = AccessLevelResolver::new(caller_id, state.clone()); let discloser = RulesDiscloser::new(state); let discloser = WithAuthorization::new(discloser, access_resolver); let discloser = WithMetrics::new(discloser); discloser.disclose_rules(args, disclose_time) })?; - Ok(result) + Ok(()) } #[query(decoding_quota = 10000)] @@ -180,6 +184,50 @@ fn http_request(request: HttpRequest) -> HttpResponse { "/metrics" => with_canister_state(|state| { with_metrics_registry(|registry| export_metrics_as_http_response(registry, state)) }), + "/logs" => { + use serde_json; + + let max_skip_timestamp = match request.raw_query_param("time") { + Some(arg) => match u64::from_str(arg) { + Ok(value) => value, + Err(_) => { + return HttpResponseBuilder::bad_request() + .with_body_and_content_length("failed to parse the 'time' parameter") + .build() + } + }, + None => 0, + }; + + let mut entries: Log = Default::default(); + for entry in export_logs(&logs::P0) { + entries.entries.push(LogEntry { + timestamp: entry.timestamp, + counter: entry.counter, + priority: Priority::P0, + file: entry.file.to_string(), + line: entry.line, + message: entry.message, + }); + } + for entry in export_logs(&logs::P1) { + entries.entries.push(LogEntry { + timestamp: entry.timestamp, + counter: entry.counter, + priority: Priority::P1, + file: entry.file.to_string(), + line: entry.line, + message: entry.message, + }); + } + entries + .entries + .retain(|entry| entry.timestamp >= max_skip_timestamp); + HttpResponseBuilder::ok() + .header("Content-Type", "application/json; charset=utf-8") + .with_body_and_content_length(serde_json::to_string(&entries).unwrap_or_default()) + .build() + } _ => HttpResponseBuilder::not_found().build(), } } @@ -205,22 +253,98 @@ fn periodically_poll_api_boundary_nodes(interval: u64, canister_api: Arc ("failure", "calling_canister_method_failed"), - Err(_) => ("failure", "canister_call_rejected"), + Ok((Err(err),)) => { + log!( + P0, + "[poll_api_boundary_nodes]: failed to fetch nodes from registry {err:?}", + ); + ("failure", "calling_canister_method_failed") + } + Err(err) => { + log!( + P0, + "[poll_api_boundary_nodes]: failed to fetch nodes from registry {err:?}", + ); + ("failure", "canister_call_rejected") + } }; // Update metric. - REGISTRY_POLL_CALLS_COUNTER.with(|cell| { - let metric = cell.borrow_mut(); - metric.with_label_values(&[call_status, message]).inc(); + METRICS.with(|cell| { + let mut cell = cell.borrow_mut(); + cell.registry_poll_calls + .borrow_mut() + .with_label_values(&[call_status, message]) + .inc(); }); }); }); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn check_candid_interface_compatibility() { + use candid_parser::utils::{service_equal, CandidSource}; + + fn source_to_str(source: &CandidSource) -> String { + match source { + CandidSource::File(f) => { + std::fs::read_to_string(f).unwrap_or_else(|_| "".to_string()) + } + CandidSource::Text(t) => t.to_string(), + } + } + + fn check_service_equal( + new_name: &str, + new: CandidSource, + old_name: &str, + old: CandidSource, + ) { + let new_str = source_to_str(&new); + let old_str = source_to_str(&old); + match service_equal(new, old) { + Ok(_) => {} + Err(e) => { + eprintln!( + "{} is not compatible with {}!\n\n\ + {}:\n\ + {}\n\n\ + {}:\n\ + {}\n", + new_name, old_name, new_name, new_str, old_name, old_str + ); + panic!("{:?}", e); + } + } + } + + candid::export_service!(); + + let new_interface = __export_service(); + + // check the public interface against the actual one + let old_interface = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()) + .join("canister/interface.did"); + + check_service_equal( + "actual rate-limit candid interface", + candid_parser::utils::CandidSource::Text(&new_interface), + "declared candid interface in interface.did file", + candid_parser::utils::CandidSource::File(old_interface.as_path()), + ); + } +} diff --git a/rs/boundary_node/rate_limits/canister/getter.rs b/rs/boundary_node/rate_limits/canister/getter.rs index afe365e7953..038d24d6656 100644 --- a/rs/boundary_node/rate_limits/canister/getter.rs +++ b/rs/boundary_node/rate_limits/canister/getter.rs @@ -339,13 +339,13 @@ mod tests { is_redacted: false, rules: vec![ api::OutputRule { - id: rule_id_1.0.to_string(), + rule_id: rule_id_1.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: Some(b"{\"a\": 1}".to_vec()), description: Some("verbose description 1".to_string()), }, api::OutputRule { - id: rule_id_2.0.to_string(), + rule_id: rule_id_2.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: Some(b"{\"b\": 2}".to_vec()), description: Some("verbose description 2".to_string()), @@ -367,13 +367,13 @@ mod tests { is_redacted: true, rules: vec![ api::OutputRule { - id: rule_id_1.0.to_string(), + rule_id: rule_id_1.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: None, description: None, }, api::OutputRule { - id: rule_id_2.0.to_string(), + rule_id: rule_id_2.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: Some(b"{\"b\": 2}".to_vec()), description: Some("verbose description 2".to_string()), @@ -421,7 +421,7 @@ mod tests { assert_eq!( response, api::OutputRuleMetadata { - id: rule_id.0.to_string(), + rule_id: rule_id.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: Some(b"{\"a\": 1}".to_vec()), description: Some("verbose description".to_string()), @@ -435,7 +435,7 @@ mod tests { assert_eq!( response, api::OutputRuleMetadata { - id: rule_id.0.to_string(), + rule_id: rule_id.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: None, description: None, @@ -498,7 +498,7 @@ mod tests { let response = getter_unauthorized.get(&incident_id.0.to_string()).unwrap(); let rule_1 = api::OutputRuleMetadata { - id: rule_id_1.0.to_string(), + rule_id: rule_id_1.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: None, description: None, @@ -507,7 +507,7 @@ mod tests { removed_in_version: Some(3), }; let rule_2 = api::OutputRuleMetadata { - id: rule_id_2.0.to_string(), + rule_id: rule_id_2.0.to_string(), incident_id: incident_id.0.to_string(), rule_raw: Some(b"{\"b\": 2}".to_vec()), description: Some("verbose description 2".to_string()), diff --git a/rs/boundary_node/rate_limits/canister/interface.did b/rs/boundary_node/rate_limits/canister/interface.did index d1f60823a0b..e87ad544923 100644 --- a/rs/boundary_node/rate_limits/canister/interface.did +++ b/rs/boundary_node/rate_limits/canister/interface.did @@ -29,7 +29,7 @@ type OutputConfig = record { }; // Response structure for returning the requested configuration and associated metadata -type OutputConfigResponse = record { +type ConfigResponse = record { version: Version; // Version of the configuration active_since: Timestamp; // Time when this configuration was added (became active) config: OutputConfig; // Contains the list of rules @@ -94,14 +94,14 @@ type GetConfigError = variant { }; type GetRuleByIdError = variant { - NotFound; // Indicates that a rule with the specified ID does not exist - InvalidUuidFormat: text; // Indicates that the provided ID is not a valid UUID + NotFound; // Indicates that a rule with the specified ID does not exist + InvalidUuidFormat; // Indicates that the provided ID is not a valid UUID Internal: text; // Captures all unexpected internal errors }; type GetRulesByIncidentIdError = variant { - NotFound; // Indicates that an incident with the specified ID does not exist - InvalidUuidFormat: text; // Indicates that the provided ID is not a valid UUID + NotFound; // Indicates that an incident with the specified ID does not exist + InvalidUuidFormat; // Indicates that the provided ID is not a valid UUID Internal: text; // Captures all unexpected internal errors }; @@ -117,7 +117,7 @@ type DiscloseRulesResponse = variant { }; type GetConfigResponse = variant { - Ok: OutputConfigResponse; + Ok: ConfigResponse; Err: GetConfigError; }; diff --git a/rs/boundary_node/rate_limits/canister/lib.rs b/rs/boundary_node/rate_limits/canister/lib.rs index 7e6ee975e84..83adf10f42b 100644 --- a/rs/boundary_node/rate_limits/canister/lib.rs +++ b/rs/boundary_node/rate_limits/canister/lib.rs @@ -2,7 +2,7 @@ mod access_control; #[allow(dead_code)] mod add_config; -#[cfg(target_family = "wasm")] +#[cfg(any(target_family = "wasm", test))] mod canister; #[allow(dead_code)] mod confidentiality_formatting; @@ -10,6 +10,7 @@ mod confidentiality_formatting; mod disclose; #[allow(dead_code)] mod getter; +mod logs; #[allow(dead_code)] mod metrics; mod random; diff --git a/rs/boundary_node/rate_limits/canister/logs.rs b/rs/boundary_node/rate_limits/canister/logs.rs new file mode 100644 index 00000000000..a470a72c57c --- /dev/null +++ b/rs/boundary_node/rate_limits/canister/logs.rs @@ -0,0 +1,29 @@ +use candid::Deserialize; +use ic_canister_log::declare_log_buffer; + +// High-priority messages. +declare_log_buffer!(name = P0, capacity = 1000); + +// Low-priority info messages. +declare_log_buffer!(name = P1, capacity = 1000); + +#[derive(Clone, Debug, Default, Deserialize, serde::Serialize)] +pub struct Log { + pub entries: Vec, +} + +#[derive(Clone, Debug, Deserialize, serde::Serialize)] +pub struct LogEntry { + pub timestamp: u64, + pub priority: Priority, + pub file: String, + pub line: u32, + pub message: String, + pub counter: u64, +} + +#[derive(Clone, Debug, Deserialize, serde::Serialize)] +pub enum Priority { + P0, + P1, +} diff --git a/rs/boundary_node/rate_limits/canister/metrics.rs b/rs/boundary_node/rate_limits/canister/metrics.rs index a2c9ec0d865..2f95b9b285a 100644 --- a/rs/boundary_node/rate_limits/canister/metrics.rs +++ b/rs/boundary_node/rate_limits/canister/metrics.rs @@ -6,136 +6,114 @@ use crate::{ }; use ic_canisters_http_types::{HttpResponse, HttpResponseBuilder}; use ic_cdk::api::stable::WASM_PAGE_SIZE_IN_BYTES; -use prometheus::{CounterVec, Encoder, Gauge, IntGauge, Opts, Registry, TextEncoder}; -use std::cell::RefCell; +use prometheus::{ + CounterVec, Encoder, Gauge, IntGauge, Opts, Registry, Result as PrometheusResult, TextEncoder, +}; +use std::{borrow::BorrowMut, cell::RefCell}; thread_local! { - static STABLE_MEMORY_SIZE: RefCell = RefCell::new( - Gauge::new( + pub static METRICS: RefCell = RefCell::new(CanisterMetrics::new().expect("failed to create Prometheus metrics")); +} + +/// Represents all metrics collected in the canister +pub struct CanisterMetrics { + pub registry: Registry, // Prometheus registry + pub active_rate_limit_rules_count: IntGauge, + pub active_version: IntGauge, + pub api_boundary_nodes_count: IntGauge, + pub canister_api_calls: CounterVec, + pub configs_count: IntGauge, + pub incidents_count: IntGauge, + pub last_canister_change_time: IntGauge, + pub last_successful_registry_poll_time: IntGauge, + pub registry_poll_calls: CounterVec, + pub stable_memory_size: Gauge, +} + +impl CanisterMetrics { + pub fn new() -> PrometheusResult { + let registry = Registry::new(); + + let stable_memory_size = Gauge::new( "stable_memory_bytes", "Size of the stable memory allocated by this canister in bytes.", - ) - .unwrap(), - ); + )?; - static CANISTER_API_CALLS_COUNTER: RefCell = RefCell::new(CounterVec::new(Opts::new( - "canister_api_calls", - "Number of calls to the canister methods with the status and message (in case of error)", - ), &["method", "status", "message"]).unwrap()); + let canister_api_calls = CounterVec::new( + Opts::new( + "canister_api_calls", + "Number of calls to the canister methods with the status and message (in case of error)", + ), + &["method", "status", "message"], + )?; - static API_BOUNDARY_NODES_COUNT: RefCell = RefCell::new( - IntGauge::new( + let api_boundary_nodes_count = IntGauge::new( "api_boundary_nodes_count", "Number of API boundary nodes with full read access permission to rate-limit config.", - ) - .unwrap(), - ); + )?; - static ACTIVE_VERSION: RefCell = RefCell::new( - IntGauge::new( + let active_version = IntGauge::new( "active_config_version", "Version of the currently active configuration", - ) - .unwrap(), - ); + )?; - static ACTIVE_RATE_LIMIT_RULES_COUNT: RefCell = RefCell::new( - IntGauge::new( + let active_rate_limit_rules_count = IntGauge::new( "active_rules_count", "Number of rate-limit rules in the active configuration", - ) - .unwrap(), - ); + )?; - static INCIDENTS_COUNT: RefCell = - RefCell::new(IntGauge::new("stored_incidents_count", "Number of stored incidents").unwrap()); + let incidents_count = + IntGauge::new("stored_incidents_count", "Number of stored incidents")?; - static CONFIGS_COUNT: RefCell = RefCell::new( - IntGauge::new( + let configs_count = IntGauge::new( "stored_configs_count", "Number of stored rate-limit configurations", - ) - .unwrap(), - ); + )?; - pub static LAST_SUCCESSFUL_REGISTRY_POLL_TIME: RefCell = RefCell::new(IntGauge::new( - "last_successful_registry_poll", - "The Unix timestamp of the last successful poll of the API boundary nodes from registry canister").unwrap()); + let last_successful_registry_poll_time = IntGauge::new( + "last_successful_registry_poll", + "The Unix timestamp of the last successful poll of the API boundary nodes from registry canister", + )?; - pub static REGISTRY_POLL_CALLS_COUNTER: RefCell = RefCell::new( - CounterVec::new( + let registry_poll_calls = CounterVec::new( Opts::new( "registry_poll_calls", "Number of registry polling calls with the status and message (in case of error)", ), &["status", "message"], - ) - .unwrap(), - ); + )?; - pub static LAST_CANISTER_CHANGE_TIME: RefCell = RefCell::new( - IntGauge::new( + let last_canister_change_time = IntGauge::new( "last_successful_canister_upgrade", "The Unix timestamp of the last successful canister upgrade", - ) - .unwrap(), - ); - - static METRICS_REGISTRY: RefCell = RefCell::new({ - let registry = Registry::new(); - - STABLE_MEMORY_SIZE.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - CANISTER_API_CALLS_COUNTER.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - API_BOUNDARY_NODES_COUNT.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - ACTIVE_VERSION.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - ACTIVE_RATE_LIMIT_RULES_COUNT.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - INCIDENTS_COUNT.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - CONFIGS_COUNT.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - LAST_SUCCESSFUL_REGISTRY_POLL_TIME.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - REGISTRY_POLL_CALLS_COUNTER.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - LAST_CANISTER_CHANGE_TIME.with(|cell| { - let cell = Box::new(cell.borrow().clone()); - registry.register(cell).unwrap(); - }); - - registry - }); + )?; + + // Register all metrics in the registry + registry.register(Box::new(stable_memory_size.clone()))?; + registry.register(Box::new(canister_api_calls.clone()))?; + registry.register(Box::new(api_boundary_nodes_count.clone()))?; + registry.register(Box::new(active_version.clone()))?; + registry.register(Box::new(active_rate_limit_rules_count.clone()))?; + registry.register(Box::new(incidents_count.clone()))?; + registry.register(Box::new(configs_count.clone()))?; + registry.register(Box::new(last_successful_registry_poll_time.clone()))?; + registry.register(Box::new(registry_poll_calls.clone()))?; + registry.register(Box::new(last_canister_change_time.clone()))?; + + Ok(Self { + registry, + active_rate_limit_rules_count, + active_version, + api_boundary_nodes_count, + canister_api_calls, + configs_count, + incidents_count, + last_canister_change_time, + last_successful_registry_poll_time, + registry_poll_calls, + stable_memory_size, + }) + } } pub fn export_metrics_as_http_response( @@ -163,31 +141,20 @@ pub fn export_metrics_as_http_response( } pub fn recompute_metrics(canister_api: impl CanisterApi) { - STABLE_MEMORY_SIZE.with(|cell| { + METRICS.with(|cell| { + let mut cell = cell.borrow_mut(); + let memory = (ic_cdk::api::stable::stable_size() * WASM_PAGE_SIZE_IN_BYTES) as f64; - cell.borrow_mut().set(memory); - }); - API_BOUNDARY_NODES_COUNT.with(|cell| { - cell.borrow_mut() + cell.stable_memory_size.borrow_mut().set(memory); + cell.api_boundary_nodes_count .set(canister_api.api_boundary_nodes_count() as i64); - }); - - ACTIVE_VERSION.with(|cell| { - cell.borrow_mut() + cell.active_version .set(canister_api.get_version().unwrap_or(0) as i64); - }); - - CONFIGS_COUNT.with(|cell| { - cell.borrow_mut().set(canister_api.configs_count() as i64); - }); - - INCIDENTS_COUNT.with(|cell| { - cell.borrow_mut().set(canister_api.incidents_count() as i64); - }); - - ACTIVE_RATE_LIMIT_RULES_COUNT.with(|cell| { - cell.borrow_mut() + cell.configs_count.set(canister_api.configs_count() as i64); + cell.incidents_count + .set(canister_api.incidents_count() as i64); + cell.active_rate_limit_rules_count .set(canister_api.active_rules_count() as i64); }); } @@ -239,8 +206,8 @@ impl DisclosesRules for WithMetrics { } fn update_canister_call_metrics(method_name: &str, status: &str, message: &str) { - CANISTER_API_CALLS_COUNTER.with(|cell| { - let metric = cell.borrow_mut(); + METRICS.with(|cell| { + let metric = &cell.borrow_mut().canister_api_calls; metric .with_label_values(&[method_name, status, message]) .inc(); @@ -251,8 +218,8 @@ pub fn with_metrics_registry(f: F) -> T where F: FnOnce(&Registry) -> T, { - METRICS_REGISTRY.with(|cell| { - let registry = cell.borrow().clone(); + METRICS.with(|cell| { + let registry = cell.borrow().registry.clone(); f(®istry) }) } diff --git a/rs/boundary_node/rate_limits/canister/types.rs b/rs/boundary_node/rate_limits/canister/types.rs index 672a8b0e954..0b579194632 100644 --- a/rs/boundary_node/rate_limits/canister/types.rs +++ b/rs/boundary_node/rate_limits/canister/types.rs @@ -79,7 +79,7 @@ impl From for api::OutputRule { fn from(value: OutputRule) -> Self { api::OutputRule { description: value.description, - id: value.id.to_string(), + rule_id: value.id.to_string(), incident_id: value.incident_id.to_string(), rule_raw: value.rule_raw, } @@ -299,7 +299,7 @@ pub struct OutputRuleMetadata { impl From for api::OutputRuleMetadata { fn from(value: OutputRuleMetadata) -> Self { api::OutputRuleMetadata { - id: value.id.0.to_string(), + rule_id: value.id.0.to_string(), incident_id: value.incident_id.0.to_string(), rule_raw: value.rule_raw, description: value.description, diff --git a/rs/boundary_node/rate_limits/integration_tests/src/pocket_ic_helpers.rs b/rs/boundary_node/rate_limits/integration_tests/src/pocket_ic_helpers.rs index cfbce8ae134..02c2ea31af4 100644 --- a/rs/boundary_node/rate_limits/integration_tests/src/pocket_ic_helpers.rs +++ b/rs/boundary_node/rate_limits/integration_tests/src/pocket_ic_helpers.rs @@ -7,9 +7,7 @@ use ic_nns_test_utils::common::{ build_mainnet_registry_wasm, build_registry_wasm, NnsInitPayloadsBuilder, }; use ic_registry_transport::pb::v1::RegistryAtomicMutateRequest; -use pocket_ic::{ - management_canister::CanisterSettings, nonblocking::PocketIc, PocketIcBuilder, WasmResult, -}; +use pocket_ic::{management_canister::CanisterSettings, nonblocking::PocketIc, PocketIcBuilder}; use rate_limits_api::InitArg; use serde::de::DeserializeOwned; @@ -115,11 +113,6 @@ pub async fn canister_call( _ => panic!("{method_type} is not allowed"), }; - let result = match result { - WasmResult::Reply(result) => result, - WasmResult::Reject(s) => panic!("Call to {method} failed: {:#?}", s), - }; - let decoded: R = Decode!(&result, R).unwrap(); Ok(decoded) diff --git a/rs/boundary_node/rate_limits/proposals/install_10-01-2025_134775.md b/rs/boundary_node/rate_limits/proposals/install_10-01-2025_134775.md new file mode 100644 index 00000000000..28a5ace58a3 --- /dev/null +++ b/rs/boundary_node/rate_limits/proposals/install_10-01-2025_134775.md @@ -0,0 +1,72 @@ +# Install the Rate-Limit Canister from Commit ab29295 + +__Proposer__: DFINITY Foundation + +__Source code__: [ab29295b39258e753aafaaad72c740d938d61e35][new-commit] + +[new-commit]: https://github.com/dfinity/ic/tree/ab29295b39258e753aafaaad72c740d938d61e35 + +## Summary + +Following the adoption of the motion proposal addressing [incident handling](https://dashboard.internetcomputer.org/proposal/134031) within the framework of the new decentralized boundary node architecture, we propose the deployment of the new rate-limit canister. + +This canister will enable API boundary nodes to enforce rate-limiting rules issued by an authorized DFINITY principal, hence protecting the ICP during incidents. Canister is designed as an append-only storage model, ensuring transparency and auditability of rate-limit rules after incidents disclosure. + +The authorized principal responsible for pushing new rate-limit configurations and disclosing them is specified through the upgrade arguments in this proposal. + +## Verifying the installation + +First, make sure your Git repo has the right information. + +``` +# Option A. Get a fresh copy of the code. +git clone git@github.com:dfinity/ic.git && cd ic +# Option B. If you already have a copy of the ICP repo. +git fetch +``` + +Second, checkout the right version of the code. + +``` +git checkout ab29295b39258e753aafaaad72c740d938d61e35 +``` + +### Argument Verification + +The [didc][latest_didc] tool is required. + +[latest_didc]: https://github.com/dfinity/candid/releases/latest + +Fingerprint the canister argument: + +``` +didc encode \ + -d rs/boundary_node/rate_limits/canister/interface.did \ + -t '(InitArg)' \ + '(record { + authorized_principal = opt principal "2igsz-4cjfz-unvfj-s4d3u-ftcdb-6ibug-em6tf-nzm2h-6igks-spdus-rqe"; + registry_polling_period_secs = 60; + })' | xxd -r -p | sha256sum +``` + +This should match `arg_hash` field of this proposal. + +### WASM Verification + +See ["Building the code"][prereqs] for prerequisites. + +[prereqs]: https://github.com/dfinity/ic/tree/ab29295b39258e753aafaaad72c740d938d61e35/README.adoc#building-the-code + +Build the release version of canisters: + +``` +./ci/container/build-ic.sh -c +``` + +Fingerprint the canister module: + +``` +sha256sum ./artifacts/canisters/rate-limit-canister.wasm.gz +``` + +This should match `wasm_module_hash` field of this proposal. diff --git a/rs/canister_sandbox/BUILD.bazel b/rs/canister_sandbox/BUILD.bazel index 70e77c64477..fe1a2757697 100644 --- a/rs/canister_sandbox/BUILD.bazel +++ b/rs/canister_sandbox/BUILD.bazel @@ -96,7 +96,6 @@ rust_binary( # Keep sorted. ":backend_lib", ":build_script", - "@crate_index//:libc", ], ) diff --git a/rs/canister_sandbox/bin/canister_sandbox.rs b/rs/canister_sandbox/bin/canister_sandbox.rs index 4f76bde94bd..f1a6645a649 100644 --- a/rs/canister_sandbox/bin/canister_sandbox.rs +++ b/rs/canister_sandbox/bin/canister_sandbox.rs @@ -1,4 +1,4 @@ -#[cfg(target_os = "linux")] +#[cfg(all(target_os = "linux", target_arch = "x86_64"))] extern "C" { fn install_backtrace_handler(); } diff --git a/rs/canister_sandbox/src/protocol/ctlsvc.rs b/rs/canister_sandbox/src/protocol/ctlsvc.rs index 93656fbf868..a23ba95830b 100644 --- a/rs/canister_sandbox/src/protocol/ctlsvc.rs +++ b/rs/canister_sandbox/src/protocol/ctlsvc.rs @@ -67,14 +67,16 @@ mod tests { InstanceStats, SystemApiCallCounters, WasmExecutionOutput, }; use ic_replicated_state::{Global, NumWasmPages, PageMap}; - use ic_system_api::sandbox_safe_system_state::SystemStateChanges; + use ic_system_api::sandbox_safe_system_state::SystemStateModifications; use ic_types::{ingress::WasmResult, CanisterLog, NumBytes, NumInstructions}; use crate::protocol::{ ctlsvc::{ExecutionFinishedReply, ExecutionPausedReply, ExecutionPausedRequest, Reply}, id::ExecId, logging::{LogLevel, LogRequest}, - structs::{MemoryModifications, SandboxExecOutput, StateModifications}, + structs::{ + ExecutionStateModifications, MemoryModifications, SandboxExecOutput, StateModifications, + }, }; use super::{ExecutionFinishedRequest, Request}; @@ -105,24 +107,26 @@ mod tests { system_api_call_counters: SystemApiCallCounters::default(), canister_log: CanisterLog::default(), }, - state: Some(StateModifications { - globals: vec![ - Global::I32(10), - Global::I64(32), - Global::F32(10.5), - Global::F64(1.1), - Global::V128(123), - ], - wasm_memory: MemoryModifications { - page_delta: PageMap::new_for_testing().serialize_delta(&[]), - size: NumWasmPages::new(10), - }, - stable_memory: MemoryModifications { - page_delta: PageMap::new_for_testing().serialize_delta(&[]), - size: NumWasmPages::new(42), - }, - system_state_changes: SystemStateChanges::default(), - }), + state: StateModifications { + execution_state_modifications: Some(ExecutionStateModifications { + globals: vec![ + Global::I32(10), + Global::I64(32), + Global::F32(10.5), + Global::F64(1.1), + Global::V128(123), + ], + wasm_memory: MemoryModifications { + page_delta: PageMap::new_for_testing().serialize_delta(&[]), + size: NumWasmPages::new(10), + }, + stable_memory: MemoryModifications { + page_delta: PageMap::new_for_testing().serialize_delta(&[]), + size: NumWasmPages::new(42), + }, + }), + system_state_modifications: SystemStateModifications::default(), + }, execute_total_duration: Duration::from_secs(10), execute_run_duration: Duration::from_secs(1), }; diff --git a/rs/canister_sandbox/src/protocol/structs.rs b/rs/canister_sandbox/src/protocol/structs.rs index 3cc2d049424..243c1687cdc 100644 --- a/rs/canister_sandbox/src/protocol/structs.rs +++ b/rs/canister_sandbox/src/protocol/structs.rs @@ -4,7 +4,7 @@ use ic_replicated_state::{ page_map::PageDeltaSerialization, Global, Memory, NumWasmPages, PageIndex, }; use ic_system_api::{ - sandbox_safe_system_state::{SandboxSafeSystemState, SystemStateChanges}, + sandbox_safe_system_state::{SandboxSafeSystemState, SystemStateModifications}, ApiType, ExecutionParameters, }; use ic_types::{methods::FuncRef, NumBytes}; @@ -36,11 +36,17 @@ pub struct SandboxExecInput { pub struct SandboxExecOutput { pub slice: SliceExecutionOutput, pub wasm: WasmExecutionOutput, - pub state: Option, + pub state: StateModifications, pub execute_total_duration: std::time::Duration, pub execute_run_duration: std::time::Duration, } +impl SandboxExecOutput { + pub fn take_state_modifications(&mut self) -> StateModifications { + std::mem::take(&mut self.state) + } +} + /// Describes the memory changes performed by execution. #[derive(Clone, PartialEq, Debug, Deserialize, Serialize)] pub struct MemoryModifications { @@ -48,8 +54,24 @@ pub struct MemoryModifications { pub size: NumWasmPages, } -#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)] +#[derive(Serialize, Default, Debug, Deserialize, Clone, PartialEq)] pub struct StateModifications { + /// Modifications in the execution state of the canister. + /// + /// This field is optional because the state changes might or might not + /// be applied depending on the method executed. + pub execution_state_modifications: Option, + + /// Modifications in the system state of the canister. + /// + /// The system state changes contain parts that are always applied + /// and parts that are only applied depending on the method executed + /// (similarly to `execution_state_modifications`). + pub system_state_modifications: SystemStateModifications, +} + +#[derive(Serialize, Debug, Deserialize, Clone, PartialEq)] +pub struct ExecutionStateModifications { /// The state of the global variables after execution. pub globals: Vec, @@ -58,19 +80,15 @@ pub struct StateModifications { /// Modifications in the stable memory. pub stable_memory: MemoryModifications, - - /// Modifications in the system state. - pub system_state_changes: SystemStateChanges, } -impl StateModifications { +impl ExecutionStateModifications { pub fn new( globals: Vec, wasm_memory: &Memory, stable_memory: &Memory, wasm_memory_delta: &[PageIndex], stable_memory_delta: &[PageIndex], - system_state_changes: SystemStateChanges, ) -> Self { let wasm_memory = MemoryModifications { page_delta: wasm_memory.page_map.serialize_delta(wasm_memory_delta), @@ -82,11 +100,10 @@ impl StateModifications { size: stable_memory.size, }; - StateModifications { + ExecutionStateModifications { globals, wasm_memory, stable_memory, - system_state_changes, } } } diff --git a/rs/canister_sandbox/src/replica_controller/sandboxed_execution_controller.rs b/rs/canister_sandbox/src/replica_controller/sandboxed_execution_controller.rs index 15bfa97a703..adf4f402a23 100644 --- a/rs/canister_sandbox/src/replica_controller/sandboxed_execution_controller.rs +++ b/rs/canister_sandbox/src/replica_controller/sandboxed_execution_controller.rs @@ -3,14 +3,14 @@ use crate::controller_launcher_service::ControllerLauncherService; use crate::launcher_service::LauncherService; use crate::protocol::id::{ExecId, MemoryId, WasmId}; use crate::protocol::sbxsvc::MemorySerialization; -use crate::protocol::structs::{SandboxExecInput, SandboxExecOutput}; +use crate::protocol::structs::{SandboxExecInput, SandboxExecOutput, StateModifications}; use crate::sandbox_service::SandboxService; use crate::{protocol, rpc}; use ic_config::embedders::Config as EmbeddersConfig; use ic_config::flag_status::FlagStatus; use ic_embedders::wasm_executor::{ - get_wasm_reserved_pages, wasm_execution_error, CanisterStateChanges, PausedWasmExecution, - SliceExecutionOutput, WasmExecutionResult, WasmExecutor, + get_wasm_reserved_pages, wasm_execution_error, CanisterStateChanges, ExecutionStateChanges, + PausedWasmExecution, SliceExecutionOutput, WasmExecutionResult, WasmExecutor, }; use ic_embedders::{ wasm_utils::WasmImportsDetails, CompilationCache, CompilationResult, StoredCompilation, @@ -1238,6 +1238,8 @@ impl SandboxedExecutionController { let sandbox_processes = get_sandbox_process_stats(&backends); #[allow(unused_mut)] // for MacOS let mut sandbox_processes_rss = Vec::with_capacity(sandbox_processes.len()); + let mut active_last_used = Vec::with_capacity(sandbox_processes.len()); + let mut evicted_last_used = Vec::with_capacity(sandbox_processes.len()); #[cfg(target_os = "linux")] { @@ -1278,14 +1280,10 @@ impl SandboxedExecutionController { .unwrap_or_else(|| std::time::Duration::from_secs(0)); match status { SandboxProcessStatus::Active => { - metrics - .sandboxed_execution_subprocess_active_last_used - .observe(time_since_last_usage.as_secs_f64()); + active_last_used.push(time_since_last_usage.as_secs_f64()); } SandboxProcessStatus::Evicted => { - metrics - .sandboxed_execution_subprocess_evicted_last_used - .observe(time_since_last_usage.as_secs_f64()); + evicted_last_used.push(time_since_last_usage.as_secs_f64()); } } } @@ -1313,18 +1311,24 @@ impl SandboxedExecutionController { .unwrap_or_else(|| std::time::Duration::from_secs(0)); match status { SandboxProcessStatus::Active => { - metrics - .sandboxed_execution_subprocess_active_last_used - .observe(time_since_last_usage.as_secs_f64()); + active_last_used.push(time_since_last_usage.as_secs_f64()); } SandboxProcessStatus::Evicted => { - metrics - .sandboxed_execution_subprocess_evicted_last_used - .observe(time_since_last_usage.as_secs_f64()); + evicted_last_used.push(time_since_last_usage.as_secs_f64()); } } } } + for o in active_last_used { + metrics + .sandboxed_execution_subprocess_active_last_used + .observe(o); + } + for o in evicted_last_used { + metrics + .sandboxed_execution_subprocess_evicted_last_used + .observe(o); + } { let mut guard = backends.lock().unwrap(); @@ -1575,22 +1579,31 @@ impl SandboxedExecutionController { next_stable_memory_id: MemoryId, canister_id: CanisterId, sandbox_process: Arc, - ) -> Option { + ) -> CanisterStateChanges { // If the execution has failed, then we don't apply any changes. if exec_output.wasm.wasm_result.is_err() { - return None; + return CanisterStateChanges::default(); } - match exec_output.state.take() { - None => None, - Some(state_modifications) => { + + let StateModifications { + execution_state_modifications, + system_state_modifications, + } = exec_output.take_state_modifications(); + + match execution_state_modifications { + None => CanisterStateChanges { + execution_state_changes: None, + system_state_modifications, + }, + Some(execution_state_modifications) => { // TODO: If a canister has broken out of wasm then it might have allocated more // wasm or stable memory then allowed. We should add an additional check here // that thet canister is still within it's allowed memory usage. let mut wasm_memory = execution_state.wasm_memory.clone(); wasm_memory .page_map - .deserialize_delta(state_modifications.wasm_memory.page_delta); - wasm_memory.size = state_modifications.wasm_memory.size; + .deserialize_delta(execution_state_modifications.wasm_memory.page_delta); + wasm_memory.size = execution_state_modifications.wasm_memory.size; wasm_memory.sandbox_memory = SandboxMemory::synced(wrap_remote_memory( &sandbox_process, next_wasm_memory_id, @@ -1610,8 +1623,8 @@ impl SandboxedExecutionController { let mut stable_memory = execution_state.stable_memory.clone(); stable_memory .page_map - .deserialize_delta(state_modifications.stable_memory.page_delta); - stable_memory.size = state_modifications.stable_memory.size; + .deserialize_delta(execution_state_modifications.stable_memory.page_delta); + stable_memory.size = execution_state_modifications.stable_memory.size; stable_memory.sandbox_memory = SandboxMemory::synced(wrap_remote_memory( &sandbox_process, next_stable_memory_id, @@ -1628,12 +1641,14 @@ impl SandboxedExecutionController { .sandboxed_execution_critical_error_invalid_memory_size .inc(); } - Some(CanisterStateChanges { - globals: state_modifications.globals, - wasm_memory, - stable_memory, - system_state_changes: state_modifications.system_state_changes, - }) + CanisterStateChanges { + execution_state_changes: Some(ExecutionStateChanges { + globals: execution_state_modifications.globals, + wasm_memory, + stable_memory, + }), + system_state_modifications, + } } } } diff --git a/rs/canister_sandbox/src/rpc.rs b/rs/canister_sandbox/src/rpc.rs index 8cdef287c94..4dc06be5d51 100644 --- a/rs/canister_sandbox/src/rpc.rs +++ b/rs/canister_sandbox/src/rpc.rs @@ -5,7 +5,6 @@ use std::task::{Context, Poll}; /// Pieces for a very simple bidirectional RPC using an underlying /// duplex stream channel. - /// Describe RPC error -- can be either related to transport (i.e. /// failure to transport or parse a message) or to server (i.e. server /// responded, but gave us a message indicating an error). @@ -276,7 +275,6 @@ impl MessageSink for ReplyManager { /// An RPC result that is immediately "ready" (i.e. pass a value to /// a caller such that it does not need to wait). - pub struct ReadyResult { value: Mutex>, } diff --git a/rs/canister_sandbox/src/sandbox_manager.rs b/rs/canister_sandbox/src/sandbox_manager.rs index 2266ecaee2e..2cd78be9028 100644 --- a/rs/canister_sandbox/src/sandbox_manager.rs +++ b/rs/canister_sandbox/src/sandbox_manager.rs @@ -21,7 +21,8 @@ use std::time::{Duration, Instant}; use crate::protocol::id::{ExecId, MemoryId, WasmId}; use crate::protocol::sbxsvc::{CreateExecutionStateSerializedSuccessReply, OpenMemoryRequest}; use crate::protocol::structs::{ - MemoryModifications, SandboxExecInput, SandboxExecOutput, StateModifications, + ExecutionStateModifications, MemoryModifications, SandboxExecInput, SandboxExecOutput, + StateModifications, }; use crate::{controller_service::ControllerService, protocol}; use ic_config::embedders::Config as EmbeddersConfig; @@ -158,37 +159,44 @@ impl Execution { match wasm_result { Ok(_) => { - let state_modifications = deltas.map( - |WasmStateChanges { - dirty_page_indices, - globals, - }| { - let system_state_changes = match instance_or_system_api { - // Here we use `store_data_mut` instead of - // `into_store_data` because the later will drop the - // wasmtime Instance which can be an expensive - // operation. Mutating the store instead allows us - // to delay the drop until after the execution - // completed message is sent back to the main - // process. - Ok(mut instance) => instance - .store_data_mut() - .system_api_mut() - .expect("System api not present in the wasmtime instance") - .take_system_state_changes(), - Err(system_api) => system_api.into_system_state_changes(), - }; - StateModifications::new( - globals, - &wasm_memory, - &stable_memory, - &dirty_page_indices.wasm_memory_delta, - &dirty_page_indices.stable_memory_delta, - system_state_changes, - ) - }, - ); - if state_modifications.is_some() { + let state_modifications = { + let system_state_modifications = match instance_or_system_api { + // Here we use `store_data_mut` instead of + // `into_store_data` because the later will drop the + // wasmtime Instance which can be an expensive + // operation. Mutating the store instead allows us + // to delay the drop until after the execution + // completed message is sent back to the main + // process. + Ok(mut instance) => instance + .store_data_mut() + .system_api_mut() + .expect("System api not present in the wasmtime instance") + .take_system_state_modifications(), + Err(system_api) => system_api.into_system_state_modifications(), + }; + + let execution_state_modifications = deltas.map( + |WasmStateChanges { + dirty_page_indices, + globals, + }| { + ExecutionStateModifications::new( + globals, + &wasm_memory, + &stable_memory, + &dirty_page_indices.wasm_memory_delta, + &dirty_page_indices.stable_memory_delta, + ) + }, + ); + + StateModifications { + execution_state_modifications, + system_state_modifications, + } + }; + if state_modifications.execution_state_modifications.is_some() { self.sandbox_manager .add_memory(exec_input.next_wasm_memory_id, wasm_memory); self.sandbox_manager @@ -237,7 +245,7 @@ impl Execution { exec_output: SandboxExecOutput { slice, wasm: wasm_output, - state: None, + state: StateModifications::default(), execute_total_duration: total_timer.elapsed(), execute_run_duration: run_timer.elapsed(), }, diff --git a/rs/canister_sandbox/src/sandbox_server.rs b/rs/canister_sandbox/src/sandbox_server.rs index 8df92b51f9e..9ac46749ccc 100644 --- a/rs/canister_sandbox/src/sandbox_server.rs +++ b/rs/canister_sandbox/src/sandbox_server.rs @@ -294,7 +294,7 @@ mod tests { } } - fn exec_input_for_query( + fn exec_input_for_replicated_query( method_name: &str, incoming_payload: &[u8], globals: Vec, @@ -303,6 +303,7 @@ mod tests { Time::from_nanos_since_unix_epoch(0), incoming_payload.to_vec(), PrincipalId::try_from([0].as_ref()).unwrap(), + CallContextId::from(0), ); let caller = api_type.caller(); let call_context_id = api_type.call_context_id(); @@ -650,7 +651,12 @@ mod tests { < NumInstructions::from(INSTRUCTION_LIMIT) ); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let globals = result.exec_output.state.unwrap().globals; + let globals = result + .exec_output + .state + .execution_state_modifications + .unwrap() + .globals; assert_eq!(WasmResult::Reply([1, 0, 0, 0].to_vec()), wasm_result); // Second time around, issue a query to read the counter. We @@ -662,7 +668,7 @@ mod tests { wasm_id, wasm_memory_id, stable_memory_id, - exec_input: exec_input_for_query("read", &[], globals), + exec_input: exec_input_for_replicated_query("read", &[], globals), }) .sync() .unwrap(); @@ -728,10 +734,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - wasm_memory.deserialize_delta(state_modifications.wasm_memory.page_delta); + wasm_memory.deserialize_delta(execution_state_modifications.wasm_memory.page_delta); assert_eq!( vec![1, 2, 3, 4], wasm_memory.get_page(PageIndex::new(0))[16..20].to_vec() @@ -799,7 +809,7 @@ mod tests { wasm_id, wasm_memory_id: next_wasm_memory_id, stable_memory_id: next_stable_memory_id, - exec_input: exec_input_for_query( + exec_input: exec_input_for_replicated_query( "read", &[16, 0, 0, 0, 4, 0, 0, 0], vec![Global::I64(0)], @@ -883,7 +893,12 @@ mod tests { < NumInstructions::from(INSTRUCTION_LIMIT) ); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let globals = result.exec_output.state.unwrap().globals; + let globals = result + .exec_output + .state + .execution_state_modifications + .unwrap() + .globals; assert_eq!(WasmResult::Reply([1, 0, 0, 0].to_vec()), wasm_result); assert_eq!(Global::I32(1), globals[0]); @@ -923,7 +938,12 @@ mod tests { < NumInstructions::from(INSTRUCTION_LIMIT) ); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let globals = result.exec_output.state.unwrap().globals; + let globals = result + .exec_output + .state + .execution_state_modifications + .unwrap() + .globals; assert_eq!(WasmResult::Reply([2, 0, 0, 0].to_vec()), wasm_result); // Second time around, issue a query to read the counter. We @@ -935,7 +955,7 @@ mod tests { wasm_id, wasm_memory_id, stable_memory_id, - exec_input: exec_input_for_query("read", &[], globals), + exec_input: exec_input_for_replicated_query("read", &[], globals), }) .sync() .unwrap(); @@ -1000,10 +1020,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - stable_memory.deserialize_delta(state_modifications.stable_memory.page_delta); + stable_memory.deserialize_delta(execution_state_modifications.stable_memory.page_delta); assert_eq!( vec![1, 2, 3, 4], stable_memory.get_page(PageIndex::new(0))[16..20].to_vec() @@ -1071,7 +1095,7 @@ mod tests { wasm_id, wasm_memory_id: next_wasm_memory_id, stable_memory_id: next_stable_memory_id, - exec_input: exec_input_for_query( + exec_input: exec_input_for_replicated_query( "read_stable", &[16, 0, 0, 0, 4, 0, 0, 0], vec![Global::I64(0)], @@ -1138,10 +1162,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - wasm_memory.deserialize_delta(state_modifications.wasm_memory.page_delta); + wasm_memory.deserialize_delta(execution_state_modifications.wasm_memory.page_delta); assert_eq!( vec![1, 2, 3, 4], wasm_memory.get_page(PageIndex::new(0))[16..20].to_vec() @@ -1169,10 +1197,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - wasm_memory.deserialize_delta(state_modifications.wasm_memory.page_delta); + wasm_memory.deserialize_delta(execution_state_modifications.wasm_memory.page_delta); assert_eq!( vec![5, 6, 7, 8], wasm_memory.get_page(PageIndex::new(0))[32..36].to_vec() @@ -1240,10 +1272,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - stable_memory.deserialize_delta(state_modifications.stable_memory.page_delta); + stable_memory.deserialize_delta(execution_state_modifications.stable_memory.page_delta); assert_eq!( vec![1, 2, 3, 4], stable_memory.get_page(PageIndex::new(0))[16..20].to_vec() @@ -1271,10 +1307,14 @@ mod tests { let result = exec_finished_sync.get(); let wasm_result = result.exec_output.wasm.wasm_result.unwrap().unwrap(); - let state_modifications = result.exec_output.state.unwrap(); + let execution_state_modifications = result + .exec_output + .state + .execution_state_modifications + .unwrap(); assert_eq!(WasmResult::Reply([].to_vec()), wasm_result); - stable_memory.deserialize_delta(state_modifications.stable_memory.page_delta); + stable_memory.deserialize_delta(execution_state_modifications.stable_memory.page_delta); assert_eq!( vec![5, 6, 7, 8], stable_memory.get_page(PageIndex::new(0))[32..36].to_vec() diff --git a/rs/canister_sandbox/src/transport.rs b/rs/canister_sandbox/src/transport.rs index 57975178cf6..9e6f9a4e9ba 100644 --- a/rs/canister_sandbox/src/transport.rs +++ b/rs/canister_sandbox/src/transport.rs @@ -471,7 +471,7 @@ pub fn socket_read_messages< // updating the socket timeout. loop { if let Some(bytes) = reader.receive_message(&mut buf, &mut fds, 0, None) { - break (bytes); + break bytes; } } } diff --git a/rs/canonical_state/src/encoding/tests/compatibility.rs b/rs/canonical_state/src/encoding/tests/compatibility.rs index dd46b757209..c451d085f61 100644 --- a/rs/canonical_state/src/encoding/tests/compatibility.rs +++ b/rs/canonical_state/src/encoding/tests/compatibility.rs @@ -333,7 +333,6 @@ fn canonical_encoding_stream_header_v19_plus() { /// 00 # unsigned(0) /// 03 # field_index(SubnetMetrics::update_transactions_total) /// 19 1068 # unsigned(4200) - /// ``` /// Used http://cbor.me/ for printing the human friendly output. #[test] diff --git a/rs/canonical_state/src/subtree_visitor.rs b/rs/canonical_state/src/subtree_visitor.rs index a9ebbd7a574..8c9d92c8312 100644 --- a/rs/canonical_state/src/subtree_visitor.rs +++ b/rs/canonical_state/src/subtree_visitor.rs @@ -91,7 +91,7 @@ impl<'a, V> SubtreeVisitor<'a, V> { } } -impl<'a, V> Visitor for SubtreeVisitor<'a, V> +impl Visitor for SubtreeVisitor<'_, V> where V: Visitor, { diff --git a/rs/canonical_state/tree_hash/src/lazy_tree.rs b/rs/canonical_state/tree_hash/src/lazy_tree.rs index 64f6c8d8a4f..fd76d0a3cdc 100644 --- a/rs/canonical_state/tree_hash/src/lazy_tree.rs +++ b/rs/canonical_state/tree_hash/src/lazy_tree.rs @@ -25,7 +25,7 @@ pub enum Lazy<'a, T> { Func(ArcFn<'a, T>), } -impl<'a, T: Clone> Lazy<'a, T> { +impl Lazy<'_, T> { pub fn force(&self) -> T { match self { Self::Value(v) => v.clone(), diff --git a/rs/config/src/config_sample.rs b/rs/config/src/config_sample.rs index 46069274b59..147248c05c6 100644 --- a/rs/config/src/config_sample.rs +++ b/rs/config/src/config_sample.rs @@ -60,7 +60,6 @@ /// # EXAMPLE: y: "bad" /// y: "good" /// ``` - pub const SAMPLE_CONFIG: &str = r#" { // ============================================ diff --git a/rs/config/src/embedders.rs b/rs/config/src/embedders.rs index 9c6ef4db9d7..837f62f5cbb 100644 --- a/rs/config/src/embedders.rs +++ b/rs/config/src/embedders.rs @@ -3,7 +3,10 @@ use std::time::Duration; use ic_base_types::NumBytes; use ic_registry_subnet_type::SubnetType; use ic_sys::PAGE_SIZE; -use ic_types::{NumInstructions, NumOsPages, MAX_STABLE_MEMORY_IN_BYTES, MAX_WASM_MEMORY_IN_BYTES}; +use ic_types::{ + NumInstructions, NumOsPages, MAX_STABLE_MEMORY_IN_BYTES, MAX_WASM64_MEMORY_IN_BYTES, + MAX_WASM_MEMORY_IN_BYTES, +}; use serde::{Deserialize, Serialize}; use crate::flag_status::FlagStatus; @@ -245,6 +248,9 @@ pub struct Config { /// The maximum size of the wasm heap memory. pub max_wasm_memory_size: NumBytes, + /// The maximum size of the wasm heap memory for Wasm64 canisters. + pub max_wasm64_memory_size: NumBytes, + /// The maximum size of the stable memory. pub max_stable_memory_size: NumBytes, } @@ -284,6 +290,7 @@ impl Config { dirty_page_copy_overhead: DIRTY_PAGE_COPY_OVERHEAD, wasm_max_size: WASM_MAX_SIZE, max_wasm_memory_size: NumBytes::new(MAX_WASM_MEMORY_IN_BYTES), + max_wasm64_memory_size: NumBytes::new(MAX_WASM64_MEMORY_IN_BYTES), max_stable_memory_size: NumBytes::new(MAX_STABLE_MEMORY_IN_BYTES), wasm64_dirty_page_overhead_multiplier: WASM64_DIRTY_PAGE_OVERHEAD_MULTIPLIER, } diff --git a/rs/config/src/execution_environment.rs b/rs/config/src/execution_environment.rs index d6e47d83aa6..84636d07e8f 100644 --- a/rs/config/src/execution_environment.rs +++ b/rs/config/src/execution_environment.rs @@ -2,7 +2,8 @@ use crate::embedders::Config as EmbeddersConfig; use crate::flag_status::FlagStatus; use ic_base_types::{CanisterId, NumSeconds}; use ic_types::{ - Cycles, NumBytes, NumInstructions, MAX_STABLE_MEMORY_IN_BYTES, MAX_WASM_MEMORY_IN_BYTES, + Cycles, NumBytes, NumInstructions, MAX_STABLE_MEMORY_IN_BYTES, MAX_WASM64_MEMORY_IN_BYTES, + MAX_WASM_MEMORY_IN_BYTES, }; use serde::{Deserialize, Serialize}; use std::{str::FromStr, time::Duration}; @@ -204,7 +205,12 @@ pub struct Config { pub subnet_memory_reservation: NumBytes, /// The maximum amount of memory that can be utilized by a single canister. - pub max_canister_memory_size: NumBytes, + /// running in Wasm32 mode. + pub max_canister_memory_size_wasm32: NumBytes, + + /// The maximum amount of memory that can be utilized by a single canister. + /// running in Wasm64 mode. + pub max_canister_memory_size_wasm64: NumBytes, /// The soft limit on the subnet-wide number of callbacks. Beyond this limit, /// canisters are only allowed to make downstream calls up to their individual @@ -342,9 +348,12 @@ impl Default for Config { subnet_wasm_custom_sections_memory_capacity: SUBNET_WASM_CUSTOM_SECTIONS_MEMORY_CAPACITY, subnet_memory_reservation: SUBNET_MEMORY_RESERVATION, - max_canister_memory_size: NumBytes::new( + max_canister_memory_size_wasm32: NumBytes::new( MAX_STABLE_MEMORY_IN_BYTES + MAX_WASM_MEMORY_IN_BYTES, ), + max_canister_memory_size_wasm64: NumBytes::new( + MAX_STABLE_MEMORY_IN_BYTES + MAX_WASM64_MEMORY_IN_BYTES, + ), subnet_callback_soft_limit: SUBNET_CALLBACK_SOFT_LIMIT, canister_guaranteed_callback_quota: CANISTER_GUARANTEED_CALLBACK_QUOTA, default_provisional_cycles_balance: Cycles::new(100_000_000_000_000), diff --git a/rs/config/src/subnet_config.rs b/rs/config/src/subnet_config.rs index 3724a39fa5d..0bbefe812c5 100644 --- a/rs/config/src/subnet_config.rs +++ b/rs/config/src/subnet_config.rs @@ -140,7 +140,6 @@ const DEFAULT_REFERENCE_SUBNET_SIZE: usize = 13; /// Costs for each newly created dirty page in stable memory. const DEFAULT_DIRTY_PAGE_OVERHEAD: NumInstructions = NumInstructions::new(1_000); -const SYSTEM_SUBNET_DIRTY_PAGE_OVERHEAD: NumInstructions = NumInstructions::new(0); /// Accumulated priority reset interval, rounds. /// @@ -341,7 +340,7 @@ impl SchedulerConfig { // This limit should be high enough (1000T) to effectively disable // rate-limiting for the system subnets. install_code_rate_limit: NumInstructions::from(1_000_000_000_000_000), - dirty_page_overhead: SYSTEM_SUBNET_DIRTY_PAGE_OVERHEAD, + dirty_page_overhead: DEFAULT_DIRTY_PAGE_OVERHEAD, accumulated_priority_reset_interval: ACCUMULATED_PRIORITY_RESET_INTERVAL, upload_wasm_chunk_instructions: NumInstructions::from(0), canister_snapshot_baseline_instructions: NumInstructions::from(0), diff --git a/rs/consensus/BUILD.bazel b/rs/consensus/BUILD.bazel index 55d0c52f6e1..512d45e0049 100644 --- a/rs/consensus/BUILD.bazel +++ b/rs/consensus/BUILD.bazel @@ -6,6 +6,7 @@ package(default_visibility = ["//visibility:public"]) DEPENDENCIES = [ # Keep sorted. "//rs/config", + "//rs/consensus/dkg", "//rs/consensus/utils", "//rs/crypto", "//rs/crypto/prng", @@ -30,7 +31,6 @@ DEPENDENCIES = [ "@crate_index//:prometheus", "@crate_index//:rand", "@crate_index//:rand_chacha", - "@crate_index//:rayon", "@crate_index//:slog", "@crate_index//:tokio", ] diff --git a/rs/consensus/Cargo.toml b/rs/consensus/Cargo.toml index 910b2aeae5a..38bee84bf8a 100644 --- a/rs/consensus/Cargo.toml +++ b/rs/consensus/Cargo.toml @@ -8,6 +8,7 @@ documentation.workspace = true [dependencies] ic-config = { path = "../config" } +ic-consensus-dkg = { path = "./dkg" } ic-consensus-utils = { path = "./utils" } ic-crypto = { path = "../crypto" } ic-crypto-prng = { path = "../crypto/prng" } @@ -33,7 +34,6 @@ phantom_newtype = { path = "../phantom_newtype" } prometheus = { workspace = true } rand = { workspace = true } rand_chacha = { workspace = true } -rayon = { workspace = true } slog = { workspace = true } strum_macros = { workspace = true } tokio = { workspace = true } diff --git a/rs/consensus/benches/validate_payload.rs b/rs/consensus/benches/validate_payload.rs index 00d463268f0..db2b14d1507 100644 --- a/rs/consensus/benches/validate_payload.rs +++ b/rs/consensus/benches/validate_payload.rs @@ -10,7 +10,7 @@ //! in the past payloads, and the user signature is checked eventually, and //! the message validates successfully -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion}; use dkg::DkgDataPayload; use ic_artifact_pool::{consensus_pool::ConsensusPoolImpl, ingress_pool::IngressPoolImpl}; use ic_config::state_manager::Config as StateManagerConfig; @@ -80,7 +80,7 @@ const PAST_PAYLOAD_HEIGHT: u64 = 4; /// Ingress history size: 5 min worth of messages at 1000/sec = 300K. const INGRESS_HISTORY_SIZE: usize = 300_000; -fn run_test(_test_name: &str, test_fn: T) +fn run_test(test_fn: T) where T: FnOnce(Time, &mut ConsensusPoolImpl, &dyn PayloadBuilder), { @@ -233,13 +233,18 @@ fn setup_ingress_state(now: Time, state_manager: &mut StateManagerImpl) { /// Prepares the ingress payload which has 1K x specified number of /// SignedIngress messages. The payload is filled with the specified 'seed' /// bytes -fn prepare_ingress_payload(now: Time, message_count: usize, seed: u8) -> IngressPayload { +fn prepare_ingress_payload( + now: Time, + message_count: usize, + message_size: usize, + seed: u8, +) -> IngressPayload { let mut ingress_msgs = Vec::new(); let expiry = std::time::Duration::from_secs(MAX_INGRESS_TTL.as_secs() - 1); for i in 0..message_count { let ingress = SignedIngressBuilder::new() .method_name("provisional_create_canister_with_cycles") - .method_payload(vec![seed; INGRESS_MESSAGE_SIZE]) + .method_payload(vec![seed; message_size]) .nonce(i as u64) .expiry_time(now + expiry) .canister_id(IC_00) @@ -269,7 +274,7 @@ fn add_past_blocks( for i in 1..=to_add { let mut block = Block::from_parent(&parent); block.rank = Rank(i); - let ingress = prepare_ingress_payload(now, message_count, i as u8); + let ingress = prepare_ingress_payload(now, message_count, INGRESS_MESSAGE_SIZE, i as u8); block.payload = Payload::new( ic_types::crypto::crypto_hash, BlockPayload::Data(DataPayload { @@ -336,7 +341,6 @@ fn validate_payload_benchmark(criterion: &mut Criterion) { for message_count in (50..=850).step_by(50) { run_test( - "validate_payload_benchmark", |now: Time, consensus_pool: &mut ConsensusPoolImpl, payload_builder: &dyn PayloadBuilder| { @@ -344,7 +348,8 @@ fn validate_payload_benchmark(criterion: &mut Criterion) { let pool_reader = PoolReader::new(consensus_pool); let seed = CERTIFIED_HEIGHT + PAST_PAYLOAD_HEIGHT + 10; - let ingress = prepare_ingress_payload(now, message_count, seed as u8); + let ingress = + prepare_ingress_payload(now, message_count, INGRESS_MESSAGE_SIZE, seed as u8); let payload = Payload::new( ic_types::crypto::crypto_hash, BlockPayload::Data(DataPayload { @@ -359,8 +364,7 @@ fn validate_payload_benchmark(criterion: &mut Criterion) { }), ); - let name = format!("validate_payload_{}", message_count); - group.bench_function(&name, |bench| { + group.bench_function(format!("validate_payload_{}", message_count), |bench| { bench.iter(|| { validate_payload(now, &payload, &pool_reader, &tip, payload_builder) .expect("Invalid payload") @@ -372,31 +376,39 @@ fn validate_payload_benchmark(criterion: &mut Criterion) { } fn serialization_benchmark(criterion: &mut Criterion) { - let mut group = criterion.benchmark_group("serialization"); - group.sample_size(30); + let mut group = criterion.benchmark_group("ingress_payload_serialization_deserialization"); + group.sample_size(50); group.measurement_time(std::time::Duration::from_secs(10)); - for message_count in (2000..=8000).step_by(2000) { + for (message_count, message_size_kb, tag) in [ + (1_000, 4_000, "1000x4KB"), + (2_000, 4_000, "2000x4KB"), + (1, 4_000_000, "1x4MB"), + (1, 8_000_000, "1x8MB"), + ] { run_test( - "serialization_benchmark", |now: Time, _: &mut ConsensusPoolImpl, _: &dyn PayloadBuilder| { let seed = CERTIFIED_HEIGHT + PAST_PAYLOAD_HEIGHT + 10; - let ingress = prepare_ingress_payload(now, message_count, seed as u8); - let name = format!("serialization_{}_kb_payload", message_count); - group.bench_function(&name, |bench| { + let ingress = + prepare_ingress_payload(now, message_count, message_size_kb, seed as u8); + + group.bench_function(format!("serialization_{tag}"), |bench| { bench.iter(|| { let proto: pb::IngressPayload = (&ingress).into(); black_box(proto); }) }); - let name = format!("deserialization_{}_kb_payload", message_count); - group.bench_function(&name, |bench| { + + group.bench_function(format!("deserialization_{tag}"), |bench| { let p: pb::IngressPayload = (&ingress).into(); - bench.iter(|| { - let proto = p.clone(); - let deser: IngressPayload = proto.try_into().unwrap(); - black_box(deser); - }) + bench.iter_batched( + || p.clone(), + |proto| { + let deser: IngressPayload = proto.try_into().unwrap(); + black_box(deser); + }, + BatchSize::LargeInput, + ) }); }, ) diff --git a/rs/consensus/dkg/BUILD.bazel b/rs/consensus/dkg/BUILD.bazel new file mode 100644 index 00000000000..0f5a9ae42c0 --- /dev/null +++ b/rs/consensus/dkg/BUILD.bazel @@ -0,0 +1,60 @@ +load("@rules_rust//rust:defs.bzl", "rust_doc", "rust_library", "rust_test") + +package(default_visibility = ["//visibility:public"]) + +DEPENDENCIES = [ + # Keep sorted. + "//rs/consensus/utils", + "//rs/interfaces", + "//rs/interfaces/registry", + "//rs/interfaces/state_manager", + "//rs/monitoring/logger", + "//rs/monitoring/metrics", + "//rs/protobuf", + "//rs/registry/helpers", + "//rs/replicated_state", + "//rs/types/types", + "@crate_index//:prometheus", + "@crate_index//:rayon", + "@crate_index//:slog", +] + +DEV_DEPENDENCIES = [ + # Keep sorted. + "//rs/artifact_pool", + "//rs/consensus/mocks", + "//rs/crypto/test_utils/ni-dkg", + "//rs/test_utilities", + "//rs/test_utilities/artifact_pool", + "//rs/test_utilities/consensus", + "//rs/test_utilities/logger", + "//rs/test_utilities/registry", + "//rs/test_utilities/state", + "//rs/test_utilities/types", +] + +rust_library( + name = "dkg", + srcs = glob(["src/**/*.rs"]), + crate_features = select({ + "//conditions:default": [], + }), + crate_name = "ic_consensus_dkg", + proc_macro_deps = [ + # Keep sorted. + "@crate_index//:strum_macros", + ], + version = "0.9.0", + deps = DEPENDENCIES, +) + +rust_doc( + name = "consensus_dkg_doc", + crate = ":dkg", +) + +rust_test( + name = "consensus_dkg_test", + crate = ":dkg", + deps = DEPENDENCIES + DEV_DEPENDENCIES, +) diff --git a/rs/consensus/dkg/Cargo.toml b/rs/consensus/dkg/Cargo.toml new file mode 100644 index 00000000000..6d21a754f2a --- /dev/null +++ b/rs/consensus/dkg/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "ic-consensus-dkg" +version.workspace = true +authors.workspace = true +edition.workspace = true +description.workspace = true +documentation.workspace = true + +[dependencies] +ic-consensus-utils = { path = "../utils" } +ic-interfaces = { path = "../../interfaces" } +ic-interfaces-registry = { path = "../../interfaces/registry" } +ic-interfaces-state-manager = { path = "../../interfaces/state_manager" } +ic-logger = { path = "../../monitoring/logger" } +ic-metrics = { path = "../../monitoring/metrics" } +ic-protobuf = { path = "../../protobuf" } +ic-registry-client-helpers = { path = "../../registry/helpers" } +ic-replicated-state = { path = "../../replicated_state" } +ic-types = { path = "../../types/types" } +prometheus = { workspace = true } +slog = { workspace = true } +rayon = { workspace = true } + +[dev-dependencies] +ic-artifact-pool = { path = "../../artifact_pool" } +ic-consensus-mocks = { path = "../mocks" } +ic-crypto-test-utils-ni-dkg = { path = "../../crypto/test_utils/ni-dkg" } +ic-test-artifact-pool = { path = "../../test_utilities/artifact_pool" } +ic-test-utilities = { path = "../../test_utilities" } +ic-test-utilities-consensus = { path = "../../test_utilities/consensus" } +ic-test-utilities-logger = { path = "../../test_utilities/logger" } +ic-test-utilities-registry = { path = "../../test_utilities/registry" } +ic-test-utilities-state = { path = "../../test_utilities/state" } +ic-test-utilities-types = { path = "../../test_utilities/types" } diff --git a/rs/consensus/src/consensus/dkg_key_manager.rs b/rs/consensus/dkg/src/dkg_key_manager.rs similarity index 99% rename from rs/consensus/src/consensus/dkg_key_manager.rs rename to rs/consensus/dkg/src/dkg_key_manager.rs index 4d95ead7b60..38b516876bf 100644 --- a/rs/consensus/src/consensus/dkg_key_manager.rs +++ b/rs/consensus/dkg/src/dkg_key_manager.rs @@ -484,7 +484,7 @@ impl DkgKeyManager { .set(summary.registry_version.get() as i64); for tag in [NiDkgTag::LowThreshold, NiDkgTag::HighThreshold].iter() { - let current_transcript = summary.current_transcript(tag); + let current_transcript = summary.current_transcript(tag).unwrap(); let metric_label = &format!("{:?}", tag); self.metrics diff --git a/rs/consensus/src/dkg.rs b/rs/consensus/dkg/src/lib.rs similarity index 86% rename from rs/consensus/src/dkg.rs rename to rs/consensus/dkg/src/lib.rs index 67dc521c357..523a567fbb4 100644 --- a/rs/consensus/src/dkg.rs +++ b/rs/consensus/dkg/src/lib.rs @@ -2,47 +2,26 @@ //! component into the consensus algorithm that is implemented within this //! crate. -use crate::{ - bouncer_metrics::BouncerMetrics, - consensus::{check_protocol_version, dkg_key_manager::DkgKeyManager}, - idkg::{ - make_bootstrap_summary, - payload_builder::make_bootstrap_summary_with_initial_dealings, - utils::{get_idkg_chain_key_config_if_enabled, inspect_idkg_chain_key_initializations}, - }, -}; -use ic_consensus_utils::crypto::ConsensusCrypto; +use ic_consensus_utils::{bouncer_metrics::BouncerMetrics, crypto::ConsensusCrypto}; use ic_interfaces::{ consensus_pool::ConsensusPoolCache, crypto::ErrorReproducibility, dkg::{ChangeAction, DkgPool, Mutations}, p2p::consensus::{Bouncer, BouncerFactory, BouncerValue, PoolMutationsProducer}, }; -use ic_interfaces_registry::RegistryClient; -use ic_logger::{error, info, warn, ReplicaLogger}; +use ic_logger::{error, info, ReplicaLogger}; use ic_metrics::{ buckets::{decimal_buckets, linear_buckets}, MetricsRegistry, }; -use ic_protobuf::registry::subnet::v1::CatchUpPackageContents; -use ic_registry_client_helpers::subnet::SubnetRegistry; use ic_types::{ - batch::ValidationContext, - consensus::{ - dkg::{DealingContent, DkgMessageId, Message}, - idkg, Block, BlockPayload, CatchUpContent, CatchUpPackage, HashedBlock, HashedRandomBeacon, - Payload, RandomBeaconContent, Rank, SummaryPayload, - }, + consensus::dkg::{DealingContent, DkgMessageId, Message}, crypto::{ - crypto_hash, threshold_sig::ni_dkg::{config::NiDkgConfig, NiDkgId, NiDkgTag, NiDkgTargetSubnet}, - CombinedThresholdSig, CombinedThresholdSigOf, CryptoHash, Signed, + Signed, }, - signature::ThresholdSignature, - Height, NodeId, RegistryVersion, SubnetId, Time, + Height, NodeId, ReplicaVersion, }; -pub(crate) use payload_validator::{DkgPayloadValidationFailure, InvalidDkgPayloadReason}; -use phantom_newtype::Id; use prometheus::Histogram; use rayon::prelude::*; use std::{ @@ -50,13 +29,20 @@ use std::{ sync::{Arc, Mutex}, }; -pub(crate) mod payload_builder; -pub(crate) mod payload_validator; +pub mod dkg_key_manager; +pub mod payload_builder; +pub mod payload_validator; + +pub use crate::payload_validator::{DkgPayloadValidationFailure, InvalidDkgPayloadReason}; + #[cfg(test)] mod test_utils; mod utils; -pub use payload_builder::{create_payload, make_genesis_summary, PayloadCreationError}; +pub use { + dkg_key_manager::DkgKeyManager, + payload_builder::{create_payload, make_genesis_summary, PayloadCreationError}, +}; // The maximal number of DKGs for other subnets we want to run in one interval. const MAX_REMOTE_DKGS_PER_INTERVAL: usize = 1; @@ -212,7 +198,7 @@ impl DkgImpl { return Mutations::new(); }; - if check_protocol_version(&message.content.version).is_err() { + if message.content.version != ReplicaVersion::default() { return Mutations::from(ChangeAction::RemoveFromUnvalidated((*message).clone())); } @@ -421,195 +407,6 @@ impl BouncerFactory for DkgBouncer { } } -/// Constructs a genesis/recovery CUP from the CUP contents associated with the -/// given subnet -pub fn make_registry_cup( - registry: &dyn RegistryClient, - subnet_id: SubnetId, - logger: &ReplicaLogger, -) -> Option { - let versioned_record = match registry.get_cup_contents(subnet_id, registry.get_latest_version()) - { - Ok(versioned_record) => versioned_record, - Err(e) => { - warn!( - logger, - "Failed to retrieve versioned record from the registry {:?}", e, - ); - return None; - } - }; - - let cup_contents = versioned_record.value.expect("Missing CUP contents"); - make_registry_cup_from_cup_contents( - registry, - subnet_id, - cup_contents, - versioned_record.version, - logger, - ) -} - -/// Constructs a genesis/recovery CUP from the CUP contents associated with the -/// given subnet from the provided CUP contents -pub fn make_registry_cup_from_cup_contents( - registry: &dyn RegistryClient, - subnet_id: SubnetId, - cup_contents: CatchUpPackageContents, - registry_version: RegistryVersion, - logger: &ReplicaLogger, -) -> Option { - let replica_version = match registry.get_replica_version(subnet_id, registry_version) { - Ok(Some(replica_version)) => replica_version, - err => { - warn!( - logger, - "Failed to retrieve subnet replica version at registry version {:?}: {:?}", - registry_version, - err - ); - return None; - } - }; - let dkg_summary = payload_builder::get_dkg_summary_from_cup_contents( - cup_contents.clone(), - subnet_id, - registry, - registry_version, - ); - let cup_height = Height::new(cup_contents.height); - - let idkg_summary = match bootstrap_idkg_summary( - &cup_contents, - subnet_id, - registry_version, - registry, - logger, - ) { - Ok(summary) => summary, - Err(err) => { - warn!( - logger, - "Failed constructing IDKG summary block from CUP contents: {}.", err - ); - - return None; - } - }; - - let low_dkg_id = dkg_summary - .current_transcript(&NiDkgTag::LowThreshold) - .dkg_id - .clone(); - let high_dkg_id = dkg_summary - .current_transcript(&NiDkgTag::HighThreshold) - .dkg_id - .clone(); - - // In a NNS subnet recovery case the block validation context needs to reference a registry - // version of the NNS to be recovered. Otherwise the validation context points to a registry - // version without the NNS subnet record. - let block_registry_version = cup_contents - .registry_store_uri - .as_ref() - .map(|v| RegistryVersion::from(v.registry_version)) - .unwrap_or(registry_version); - let block = Block { - version: replica_version.clone(), - parent: Id::from(CryptoHash(Vec::new())), - payload: Payload::new( - crypto_hash, - BlockPayload::Summary(SummaryPayload { - dkg: dkg_summary, - idkg: idkg_summary, - }), - ), - height: cup_height, - rank: Rank(0), - context: ValidationContext { - certified_height: cup_height, - registry_version: block_registry_version, - time: Time::from_nanos_since_unix_epoch(cup_contents.time), - }, - }; - let random_beacon = Signed { - content: RandomBeaconContent { - version: replica_version, - height: cup_height, - parent: Id::from(CryptoHash(Vec::new())), - }, - signature: ThresholdSignature { - signer: low_dkg_id, - signature: CombinedThresholdSigOf::new(CombinedThresholdSig(vec![])), - }, - }; - - Some(CatchUpPackage { - content: CatchUpContent::new( - HashedBlock::new(crypto_hash, block), - HashedRandomBeacon::new(crypto_hash, random_beacon), - Id::from(CryptoHash(cup_contents.state_hash)), - /* oldest_registry_version_in_use_by_replicated_state */ None, - ), - signature: ThresholdSignature { - signer: high_dkg_id, - signature: CombinedThresholdSigOf::new(CombinedThresholdSig(vec![])), - }, - }) -} - -fn bootstrap_idkg_summary_from_cup_contents( - cup_contents: &CatchUpPackageContents, - subnet_id: SubnetId, - logger: &ReplicaLogger, -) -> Result { - let initial_dealings = inspect_idkg_chain_key_initializations( - &cup_contents.ecdsa_initializations, - &cup_contents.chain_key_initializations, - )?; - if initial_dealings.is_empty() { - return Ok(None); - }; - - make_bootstrap_summary_with_initial_dealings( - subnet_id, - Height::new(cup_contents.height), - initial_dealings, - logger, - ) - .map_err(|err| format!("Failed to create IDKG summary block: {:?}", err)) -} - -fn bootstrap_idkg_summary( - cup_contents: &CatchUpPackageContents, - subnet_id: SubnetId, - registry_version: RegistryVersion, - registry_client: &dyn RegistryClient, - logger: &ReplicaLogger, -) -> Result { - if let Some(summary) = - bootstrap_idkg_summary_from_cup_contents(cup_contents, subnet_id, logger)? - { - return Ok(Some(summary)); - } - - match get_idkg_chain_key_config_if_enabled(subnet_id, registry_version, registry_client) - .map_err(|err| format!("Failed getting the chain key config: {:?}", err))? - { - Some(chain_key_config) => Ok(make_bootstrap_summary( - subnet_id, - chain_key_config - .key_configs - .iter() - .map(|key_config| key_config.key_id.clone()) - .filter_map(|key_id| key_id.try_into().ok()) - .collect(), - Height::new(cup_contents.height), - )), - None => Ok(None), - } -} - #[cfg(test)] mod tests { use super::{test_utils::complement_state_manager_with_remote_dkg_requests, *}; @@ -619,28 +416,22 @@ mod tests { dependencies_with_subnet_records_with_raw_state_manager, Dependencies, }; use ic_consensus_utils::pool_reader::PoolReader; - use ic_crypto_test_utils_ni_dkg::dummy_initial_dkg_transcript; use ic_interfaces::{ consensus_pool::ConsensusPool, p2p::consensus::{MutablePool, UnvalidatedArtifact}, }; - use ic_interfaces_registry::RegistryVersionedRecord; - use ic_logger::replica_logger::no_op_logger; + use ic_interfaces_registry::RegistryClient; use ic_metrics::MetricsRegistry; - use ic_protobuf::registry::subnet::v1::{CatchUpPackageContents, SubnetRecord}; use ic_test_artifact_pool::consensus_pool::TestConsensusPool; use ic_test_utilities::crypto::CryptoReturningOk; use ic_test_utilities_logger::with_test_replica_logger; use ic_test_utilities_registry::{add_subnet_record, SubnetRecordBuilder}; use ic_test_utilities_types::ids::{node_test_id, subnet_test_id}; use ic_types::{ - consensus::HasVersion, - crypto::threshold_sig::ni_dkg::{ - NiDkgDealing, NiDkgId, NiDkgTag, NiDkgTargetId, NiDkgTargetSubnet, - }, - registry::RegistryClientError, + consensus::{Block, BlockPayload}, + crypto::threshold_sig::ni_dkg::{NiDkgDealing, NiDkgId, NiDkgTargetId, NiDkgTargetSubnet}, time::UNIX_EPOCH, - PrincipalId, RegistryVersion, ReplicaVersion, + RegistryVersion, ReplicaVersion, }; use std::{collections::BTreeSet, convert::TryFrom}; @@ -1855,7 +1646,7 @@ mod tests { RegistryVersion::from(5) ); for tag in TAGS.iter() { - let current_transcript = dkg_summary.current_transcript(tag); + let current_transcript = dkg_summary.current_transcript(tag).unwrap(); assert_eq!( current_transcript.dkg_id.start_block_height, Height::from(0) @@ -1909,7 +1700,7 @@ mod tests { ); for tag in TAGS.iter() { // We reused the transcript. - let current_transcript = dkg_summary.current_transcript(tag); + let current_transcript = dkg_summary.current_transcript(tag).unwrap(); assert_eq!( current_transcript.dkg_id.start_block_height, Height::from(0) @@ -1972,7 +1763,7 @@ mod tests { conf.receivers().get(), &committee3.clone().into_iter().collect::>() ); - let current_transcript = dkg_summary.current_transcript(tag); + let current_transcript = dkg_summary.current_transcript(tag).unwrap(); assert_eq!( current_transcript.dkg_id.start_block_height, Height::from(0) @@ -2012,7 +1803,7 @@ mod tests { conf.receivers().get(), &committee3.clone().into_iter().collect::>() ); - let current_transcript = dkg_summary.current_transcript(tag); + let current_transcript = dkg_summary.current_transcript(tag).unwrap(); assert_eq!( current_transcript.dkg_id.start_block_height, Height::from(5) @@ -2050,7 +1841,7 @@ mod tests { conf.receivers().get(), &committee3.clone().into_iter().collect::>() ); - let current_transcript = dkg_summary.current_transcript(tag); + let current_transcript = dkg_summary.current_transcript(tag).unwrap(); assert_eq!( current_transcript.dkg_id.start_block_height, Height::from(10) @@ -2061,131 +1852,6 @@ mod tests { }); } - /// `RegistryClient` implementation that allows to provide a custom function - /// to provide a `get_versioned_value`. - struct MockRegistryClient - where - F: Fn(&str, RegistryVersion) -> Option>, - { - latest_registry_version: RegistryVersion, - get_versioned_value_fun: F, - } - - impl MockRegistryClient - where - F: Fn(&str, RegistryVersion) -> Option>, - { - fn new(latest_registry_version: RegistryVersion, get_versioned_value_fun: F) -> Self { - Self { - latest_registry_version, - get_versioned_value_fun, - } - } - } - - impl RegistryClient for MockRegistryClient - where - F: Fn(&str, RegistryVersion) -> Option> + Send + Sync, - { - fn get_versioned_value( - &self, - key: &str, - version: RegistryVersion, - ) -> ic_interfaces_registry::RegistryClientVersionedResult> { - let value = (self.get_versioned_value_fun)(key, version); - Ok(RegistryVersionedRecord { - key: key.to_string(), - version, - value, - }) - } - - // Not needed for this test - fn get_key_family( - &self, - _: &str, - _: RegistryVersion, - ) -> Result, RegistryClientError> { - Ok(vec![]) - } - - fn get_latest_version(&self) -> RegistryVersion { - self.latest_registry_version - } - - // Not needed for this test - fn get_version_timestamp(&self, _: RegistryVersion) -> Option