Skip to content
by Unity Nodes
MPC (Chain Signatures)Stable

MPC (Chain Signatures) 3.17.0

3.17.0github.com

This release adds preset configuration for foreign chains, implements contract upgrades to vote-then-submit, several node, contract and TEE attestation robustness improvements.

This release adds preset configuration for foreign chains, implements contract upgrades to vote-then-submit, several node, contract and TEE attestation robustness improvements.

🚀 Features

  • #4433(@gilcu3): (node) Wire protocol version selection (#4433)

  • #4501(@kevindeforth): Report duration of led computations (#4501)

  • #4510(@frolvanya): (sdk) Added svm support (#4510)

  • #4338(@netrome): Replace robust ecdsa implementation with a stub (#4338)

  • #4533(@gilcu3): (contract) Add required signers helper (#4533)

  • #4503(@gilcu3): (node) Support cait-sith with online presign (#4503)

  • #4532(@gilcu3): (node) Drive storage metrics independent of generation (#4532)

  • #4520(@kevindeforth): (contract-interface) Add the Update DTO, its hash and the submit deposit (#4520)

  • #4545(@kevindeforth): Add remaining endpoints and move deposit calculation (#4545)

  • #4582(@netrome): (backup-cli) Probe RPC URL on startup (#4582)

  • #4401(@haiyuechen-nearone): (config-tester) Drop golden values in favor of network fingerprint probe in ForeignTX config tester (#4401)

  • #4537(@kevindeforth): (contract) Vote-then-submit for contract updates (#4537)

  • #4597(@gilcu3): Constant time hardening for several comparisons (#4597)

  • #4583(@netrome): (backup-cli) Health and status endpoints (#4583)

  • #3813(@metalurgical): Implement simple log throttle utility (#3813)

  • #4553(@barakeinav1): (tee-verifier) Add verify_quote_with_collateral_dates (#4553)

  • #4622(@kevindeforth): Add more methods to contract call interface (#4622)

  • #4653(@anodar): Add testnet and mainnet embedded foreign chain configs to the node (#4653)

  • #4655(@anodar): Add foreign chain credentials and rpc_network to the node config (#4655)

  • #4667(@anodar): Implement foreign chain config resolution (embedded + node config) (#4667)

  • #4673(@anodar): Wire embedded foreign chain config resolution on node startup, update docs (#4673)

  • #4712(@anodar): Update whitelist with solana, bnb, arb, base, polygon, avalanhe, hyperevm and fogo on MAINNET (#4712)

  • #4722(@kevindeforth): Cloneable subscriptions (#4722)

🐛 Bug Fixes

  • #4480(@kevindeforth): Exclude offline participants from foreign chain tx computations (#4480)

  • #4488(@gilcu3): (node) Remove a single node's ability to shutdown independent computations (#4488)

  • #4490(@gilcu3): (contract) Reject duplicate TLS keys during migrations (#4490)

  • #4502(@gilcu3): (node) Prevent malicious channel ids (#4502)

  • #4028(@metalurgical): (p2p) Cap concurrent incoming connections (#4028)

  • #4527(@barakeinav1): (contract) Keep a launcher hash alive until its attestations expire (#4527)

  • #4598(@gilcu3): Make expire comparisons consistent (#4598)

  • #4615(@gilcu3): (contract) Verify_tee should not kickout participants needed for some domain (#4615)

  • #4678(@pbeza): Truncate attestation Debug output at a char boundary (#4678)

  • #4500(@barakeinav1): (attestation) Confirm submission from a stored timestamp (#4500)

💼 Other

  • #4483(@gilcu3): Minor rocksdb bump related fixes (#4483)

  • #4561(@pbeza): (nix) Publish Nix-built images alongside the repro-env images (#4561)

🚜 Refactor

  • #4363(@pbeza): (contract) Drop Option from tee_verifier_account_id (#4363)

  • #4541(@pbeza): (contract) Replace the hand-built verify_quote call with a typed #[ext_contract] wrapper (#4541)

  • #4539(@pbeza): (contract) Replace raw self-call promises with typed Self::ext_self() calls (#4539)

  • #4543(@pbeza): (contract) Replace the last hand-built promises with generated wrappers, pinning unused-gas weight to 0 (#4543)

  • #4548(@kevindeforth): (contract) Remove the update-proposal scheme (#4548)

  • #4614(@gilcu3): Rename contract upgrade config to apply_contract_update_tera_gas (#4614)

  • #4627(@kevindeforth): Use associated types for watch contract state (#4627)

  • #4572(@pbeza): (contract) Keep launchers alive by reference instead of refresh-on-use (#4572)

  • #4102(@ayushsingh82): Remove account_id parameter from IndexerViewClient methods (#4102)

  • #4632(@kevindeforth): Add DTO type for migration_info view (#4632)

  • #4652(@barakeinav1): (tee-verifier) Address #4553 review follow-ups (#4652)

  • #4679(@pbeza): Use Duration::from_mins and Duration::from_hours (#4679)

  • #4681(@pbeza): Adopt let chains, if-let guards and new std APIs (#4681)

  • #4657(@barakeinav1): (node) Drop the boxed future from the baseline reader (#4657)

  • #4680(@pbeza): Replace the assert_matches crate with std::assert_matches! (#4680)

  • #4706(@anodar): Use error types in resolver, reorder defined types (#4706)

  • #4700(@pbeza): (contract) Trim the contract's dependencies to shrink its wasm (#4700)

  • #4623(@kevindeforth): Expose near kit transport cli in near-contract-transport crate (#4623)

  • #4726(@kevindeforth): Typed prepay attestation storage calls (#4726)

  • #4737(@gilcu3): (contract-interface) Make curve25519 conversion available to the contract again (#4737)

  • #4625(@kevindeforth): (backup-cli) Read contract state through MpcContractHandle (#4625)

📚 Documentation

  • #4292(@barakeinav1): (tee) Design for certificate-derived attestation expiry (#4292)

  • #4566(@gilcu3): Make sure TDX nodes use compatible home_dir (#4566)

  • #4569(@gilcu3): Clarify how to access node logs in TDX (#4569)

  • #4581(@netrome): Document that BACKUP_RPC_URL has to be a NEAR RPC (#4581)

  • #4575(@anodar): Update onboarding docs with new chains for TESTNET (#4575)

  • #4618(@anodar): Foreign chain config embeddings in the node (#4618)

  • #4616(@gilcu3): (crypto) Ensure independent triples are used (#4616)

  • #4647(@barakeinav1): Un-archive the launcher auto-removal design and align it with #4572 (#4647)

  • #4660(@netrome): Make migration guide more coherent (#4660)

  • #4734(@gilcu3): More clear explanation of archived docs + archive the auto remove launcher hashes (#4734)

  • #4663(@SimonRastikian): Add DKG bench results and fix CKD doc typos (#4663)

⚡ Performance

  • #4641(@haiyuechen-nearone): (contract) Make the foreign-chains registration use sub-linear caller lookup (#4641)

🧪 Testing

  • #4555(@gilcu3): Fix flaky test_basic_cluster test (#4555)

  • #4599(@gilcu3): Make sure the node supports tls connections (#4599)

  • #4547(@kevindeforth): (contract) Drive the sandbox update flows through vote-then-submit (#4547)

  • #4602(@barakeinav1): (contract) Pin the contract clock in sandbox to the attestation fixture (#4602)

⚙️ Miscellaneous Tasks

  • #4462(@dependabot[bot]): Bump the github-actions group across 1 directory with 3 updates (#4462)

  • #4467(@dependabot[bot]): Bump sui-sdk-types from 0.3.2 to 0.4.0 (#4467)

  • #4466(@dependabot[bot]): Bump gcloud-sdk from 0.31.0 to 0.32.0 (#4466)

  • #4463(@dependabot[bot]): Bump the rust-minor-and-patch group across 1 directory with 3 updates (#4463)

  • #4464(@dependabot[bot]): Bump sui-rpc from 0.3.2 to 0.4.0 (#4464)

  • #4487(@gilcu3): Remove ExternalStorage migration path (#4487)

  • #4465(@dependabot[bot]): Bump near-kit from 0.17.0 to 0.18.0 (#4465)

  • #4489(@gilcu3): (node) Drop deprecated borsh fallback for allowed_foreign_chain_providers (#4489)

  • #4494(@dependabot[bot]): Bump the github-actions group across 1 directory with 2 updates (#4494)

  • #4495(@dependabot[bot]): Bump wycheproof from 0.6.0 to 0.7.0 (#4495)

  • #4524(@anodar): Update aptos tx in mainnet config for foreign-chain-config-tester (#4524)

  • #4528(@anodar): Add golden tx's for evm chains testnet, update aptos (#4528)

  • #4531(@gilcu3): Update Claude to latests standards (#4531)

  • #4552(@barakeinav1): (contract) Update contract migrations after 3.16.0 release (#4552)

  • #4560(@anodar): Update golden tx in testnet (#4560)

  • #4578(@dependabot[bot]): Bump the rust-minor-and-patch group with 3 updates (#4578)

  • #4577(@dependabot[bot]): Bump the github-actions group across 1 directory with 2 updates (#4577)

  • #4576(@anodar): Update testnet whitelist and its proposals (#4576)

  • #4590(@barakeinav1): Ignore RUSTSEC-2026-0316 in cargo-deny (#4590)

  • #4607(@gilcu3): Tighten permissions by agent actions (#4607)

  • #4098(@ayushsingh82): Ban wildcard imports via clippy::wildcard_imports (#4098)

  • #4603(@pbeza): (nix) Install a hash-pinned upstream Nix and assert its security settings (#4603)

  • #4651(@barakeinav1): Ignore RUSTSEC-2026-0327 in cargo-deny (#4651)

  • #4666(@pbeza): (cargo-deny) Clean up stale rules (#4666)

  • #4669(@dependabot[bot]): Bump the github-actions group across 1 directory with 2 updates (#4669)

  • #4686(@haiyuechen-nearone): Use query auth for the embedded Fogo fluxrpc provider (#4686)

  • #4638(@pbeza): (nix) Replace the CI checks' /nix cache with a signed project cache (#4638)

  • #4716(@dependabot[bot]): Bump the rust-minor-and-patch group across 1 directory with 11 updates (#4716)

  • #4682(@dependabot[bot]): Bump hickory-resolver from 0.26.1 to 0.26.3 in the cargo group across 1 directory (#4682)

  • #4739(@gilcu3): Update deny to include unsafe-libyaml being unmaintained (#4739)

Docker images

MPC contract

  • digest: sha256:b4a9434bd80a446dd2a45fe93d5b444acffff78da6ca517aec11ca8dbe1b4b7c