Repository navigation
3.10.0
MPC 3.10.0
This release expands foreign chain transaction support to Base, Arbitrum, Polygon, and Hyper EVM, and enables decentralised state sync (DSS) on the node. Note: contains two breaking changes (#3001, #3026) — see the changelog. Also note this features a launcher change, which means upgrading TDX deployments from 3.9.1 requires a full node migration.
🚀 Features
-
#2915(@DSharifi): Foreign chain inspector supports base (#2915)
-
#2918(@DSharifi): (sdk) Support
basefor foreign tx validation (#2918) -
#2943(@DSharifi): Node performs foreign chain validation for Base (#2943)
-
#2934(@kevindeforth): (contract) Vote generics structs (#2934)
-
#3001(@DSharifi): [breaking] Nodes don't require unanimous conensus on RPC providers (#3001)
-
#3010(@pbeza): (tee-authority) Support multiple PCCS endpoints with fallback (#3010)
-
#3043(@barakeinav1): (launcher) Add restart policy for MPC node container when started by the launcher (#3043)
-
#3059(@DSharifi): Add jemalloc pprof endpoint on the node (#3059)
-
#3026(@barakeinav1): (tee) [breaking] Allow PCCS with self-signed TLS certs via operator config (#3026)
-
#3107(@DSharifi): (foreign-chain-inspector) Support arbitrum validation requests (#3107)
-
#3106(@DSharifi): Accept foreign tx validation requests on contract (#3106)
-
#3110(@DSharifi): Node performs foreign chain signature requests for arbitrum (#3110)
-
#3086(@DSharifi): (contract) Add API to submit foreign support instead of configuration (#3086)
-
#3049(@barakeinav1): (tee-authority) Reject PCCS collateral older than 7 days (#3049)
-
#3144(@DSharifi): (sdk) Add support for aribtrum in sdk (#3144)
-
#3148(@DSharifi): Contract supports polygon and hyper_evm foreign tx request (#3148)
-
#3149(@DSharifi): (inspector) Support polygon + hyper_evm validation requests (#3149)
-
#3154(@DSharifi): (sdk) Support hyper_evm and polygon (#3154)
-
#3158(@DSharifi): Node supports sign requests for polygon + hyper (#3158)
-
#3161(@gilcu3): Add ReconstructionThreshold to DomainConfig (#3161)
-
#3177(@anodar): (config) Support query-param auth and optional header scheme (#3177)
-
#3188(@barakeinav1): (node) Enable decentralised state sync (DSS) (#3188)
-
#3211(@kevindeforth): Metric for counting failed requests (#3211)
-
#3187(@netrome): Fan-out responses to all duplicate requests (#3187)
-
#3216(@anodar): Implement foreign chain RPC providers in contract (#3216)
-
#3228(@barakeinav1): (node-config) Validate NearInitConfig address fields as SocketAddr (#3228)
🐛 Bug Fixes
-
#3056(@anodar): Retry conclude_node_migration until contract reflects completion, not until tx is applied (#3056)
-
#3108(@kevindeforth): Recent blocks tracker memory leak (#3108)
-
#3091(@netrome): EVM inspector checks that transaction is on the canonical chain (#3091)
-
#3185(@anodar): Don't serve rpc providers information over public debug endpoint (#3185)
-
#3159(@kevindeforth):
RecentBlocksTrackerremoves dead blocks instead of classifying them asOptimisticAndCanonical(#3159) -
#3227(@netrome): Use randomly generated delimiters in heredocs in LLM workflows (#3227)
-
#3272(@DSharifi): Correctly label succeeded and failed transactions (#3272)
-
#3273(@pbeza): (scripts) Make
prepare-release.shwork on BSD/macOS (#3273)
💼 Other
-
#2919(@anodar): Add make targets that run tests on fresh checkout (#2919)
-
#3021(@DSharifi): (nix) Add reproducible build flake for mpc-node (#3021)
-
#3222(@barakeinav1): (launcher) Render TEE compose from contract template at deploy time (#3222)
🚜 Refactor
-
#2931(@gilcu3): Remove node dependency on the contract for the crypto types (#2931)
-
#2929(@DSharifi): Pre-build http clients to avoid duplication (#2929)
-
#2944(@pbeza): Replace Phala collateral endpoint with direct PCCS calls (#2944)
-
#2951(@barakeinav1): Remove Python launcher (#2951)
-
#2964(@gilcu3): Unify participant types from the contract/node and interface (#2964)
-
#2976(@gilcu3): Remove node contract dependency for TEE and migration types in the node (#2976)
-
#2984(@DSharifi): Create generic config type for all foreign chains (#2984)
-
#2989(@gilcu3): Rename sign_pk to tls_public_key in ParticipantInfo (#2989)
-
#3048(@pbeza): (tee-authority) Add typed PCCS endpoint errors and fallback logging (#3048)
-
#3034(@kevindeforth):
mpc_client.rsandPendingRequestsunit tests (#3034) -
#3050(@gilcu3): Separate keyshare related contract-internal types/logic from node-facing interface types (#3050)
-
#3057(@kevindeforth): Move block height check out of
RecentBlocksTracker, intoPendingRequests(#3057) -
#3069(@kevindeforth): Recent blocks tracker relies on internal block height (#3069)
-
#3132(@kevindeforth): RecentBlocksTracker use weak pointers for parent (#3132)
-
#3155(@barakeinav1): (tee) Testnet TEE scripts Python→Rust + unify with localnet (#3155)
-
#3180(@kevindeforth): Remove
OlderThanRecentWindowvariant fromCheckBlockResult(#3180) -
#3189(@barakeinav1): Extract apply_near_config_patches helper (#3189)
-
#3209(@kevindeforth): Replace classify-blocks with atomic u8 in
RecentBlocksTracker(#3209) -
#3236(@kevindeforth): Improve
RecentBlocksTrackerinvariants (#3236)
📚 Documentation
-
#2912(@DSharifi): Design solution for allowing per node foreign tx rpc provider configurations (#2912)
-
#2960(@barakeinav1): Clarify launcher vote uses manifest digest (#2960)
-
#2947(@mitinarseny): Use relative links in ckd-example-cli (#2947)
-
#3013(@pbeza): Tell agents to verify docs stay aligned with code changes (#3013)
-
#3029(@barakeinav1): Recommend unlimited function-call allowance for the MPC operator account (#3029)
-
#3095(@barakeinav1): Add PCCS configuration guidance to operator deployment guide (#3095)
-
#3097(@barakeinav1): Add PCCS Collateral Handling section to TEE design doc (#3097)
-
#3163(@barakeinav1): Tighten PCCS TLS-mode wording across operator guide + template (#3163)
-
#3152(@barakeinav1): (tdx-guide) Pin apt sources for reproducible key-provider build (#3152)
-
#3259(@gilcu3): Clarify the DKG in README, add link to internal crypto docs (#3259)
-
#3271(@netrome): Fix doc drift in
pending_signature_queue_len(#3271) -
#3234(@barakeinav1): Fix operator deployment guide (#3234)
⚡ Performance
-
#3007(@pbeza): (contract) Enable dcap-qvl
json-corefeature to slim wasm (#3007) -
#3023(@pbeza): (contract) Slim attestation crate wasm by 14.38 KiB (#3023)
-
#3035(@DSharifi): Use jemalloc as memory allocator on node (#3035)
🧪 Testing
-
#2922(@anodar): Pass account_id in request, implement ToNearKey trait (#2922)
-
#2844(@DSharifi): Update sandbox integration test to use a builder pattern for setup (#2844)
-
#2946(@anodar): Port test_cleanup_lagging_node from pytest to Rust e2e (#2946)
-
#2953(@anodar): Port foreign chain policy and transaction validation from pytest to Rust e2e (#2953)
-
#2988(@anodar): Port migration endpoint and migration service from pytest to Rust e2e (#2988)
-
#3015(@anodar): Port multi-domain key event and robust ECDSA request-during-resharing from pytest to Rust (#3015)
-
#3041(@barakeinav1): Update allowance to unlimited in all scrips (#3041)
-
#3147(@gilcu3): Add e2e for contract upgrade compatibility (#3147)
-
#3133(@gilcu3): (perf) Measure testnet signing performance using devnet (#3133)
⚙️ Miscellaneous Tasks
-
#2927(@DSharifi): Bump tooling versions on CI and nix (#2927)
-
#2924(@gilcu3): Leave some amount of contract increase without breaking CI (#2924)
-
#2926(@gilcu3): Use Ed25519PublicKey in the contract interface consistently (#2926)
-
#2940(@gilcu3): Update migrations after 3.9.0 release (#2940)
-
#2958(@gilcu3): Fix dependabot vulnerability, bump rand (#2958)
-
#2968(@dependabot[bot]): Bump tokio-metrics from 0.4.9 to 0.5.0 (#2968)
-
#2969(@dependabot[bot]): Bump the rust-minor-and-patch group across 1 directory with 3 updates (#2969)
-
#2949(@barakeinav1): (localnet) Use slirp gateway for NEAR_BOOT_NODES so CVMs reach neard on loopback (#2949)
-
#2974(@gilcu3): Make account public key non-optional (#2974)
-
#2993(@DSharifi): Update rustls due to RUSTSEC-2026-0104 (#2993)
-
#2990(@gilcu3): Reduce contract size by disabling anyhow features (#2990)
-
#3003(@dependabot[bot]): Bump openssl from 0.10.76 to 0.10.78 in the cargo group across 1 directory (#3003)
-
#3038(@dependabot[bot]): Bump average from 0.16.0 to 0.17.0 (#3038)
-
#3040(@dependabot[bot]): Bump lru from 0.16.4 to 0.17.0 (#3040)
-
#3037(@dependabot[bot]): Bump the rust-minor-and-patch group across 1 directory with 4 updates (#3037)
-
#3047(@gilcu3): Remove image hashes, manifest digest is enough to guarantee repro (#3047)
-
#3018(@anodar): Factor out pytests into daily workflow (#3018)
-
#3064(@kevindeforth): Improve handshake error messages (#3064)
-
#3058(@DSharifi): Use nix for running CI checks except remaining builds (#3058)
-
#3072(@anodar): Concurrency group in nix-build-mpc-node.yml (#3072)
-
#3078(@DSharifi): Deprecate ForeignChainPolicyVotes storage key (#3078)
-
#2972(@barakeinav1): (localnet) Finish Python-launcher removal on localnet path (#2972)
-
#3082(@gilcu3): Add comments and tests for untagged ecdsa payload (#3082)
-
#3084(@gilcu3): Remove 3.9.0 compatibility serde serialization (#3084)
-
#3076(@anodar): Remove pytests, nearcore submodule, and pytests workflow, update docs (#3076)
-
#3093(@netrome): Ignore hickory-proto related advisories + clear out stale advisory + bump wasmtime (#3093)
-
#3102(@gilcu3): Make schemars crate excluded from compiling under wasm32 target (#3102)
-
#3100(@gilcu3): Unify the protocol_state_to_string function (#3100)
-
#3120(@dependabot[bot]): Bump lru from 0.17.0 to 0.18.0 (#3120)
-
#3117(@dependabot[bot]): Bump the rust-minor-and-patch group with 2 updates (#3117)
-
#3122(@gilcu3): Make Claude reviews more thorough, similar to Copilot (#3122)
-
#3112(@pbeza): Ban trailing whitespace via
.editorconfigand CI grep step (#3112) -
#3128(@pbeza): Enforce all
.editorconfigrules viaeditorconfig-checker(#3128) -
#3141(@pbeza): (editorconfig) Drop LICENSE exemption, add final newline (#3141)
-
#3157(@dependabot[bot]): Bump openssl from 0.10.78 to 0.10.79 in the cargo group across 1 directory (#3157)
-
#3175(@kevindeforth): Additional label for signature request timeouts (#3175)
-
#3204(@dependabot[bot]): Bump inferno from 0.11.21 to 0.12.6 (#3204)
-
#3201(@dependabot[bot]): Bump tokio from 1.52.1 to 1.52.2 in the rust-minor-and-patch group (#3201)
-
#3250(@dependabot[bot]): Bump rkyv from 0.8.15 to 0.8.16 in the cargo group across 1 directory (#3250)
Docker images
-
nearone/mpc-node:3.10.0
Manifest digest:sha256:96d5d607bd997abece343a5375d8f202457b01af1afea5d8ac4ba71d0f7f36d2
Image ID:sha256:51923d93941cde3111aab7e757dcd86ae6be112e828496b4589851a4dfb8b2d3 -
nearone/mpc-node-gcp:3.10.0
Manifest digest:sha256:0ad5d0953c37a1025ebcdf2456f42e2d58c1cc2d73cdccd59c03a11a69a6ba5d
Image ID:sha256:0a9f33c88330fffa0ba361ec2c4ad5aa01832edd590c8f0365a170e6e7787bea -
nearone/mpc-launcher:3.10.0
Manifest digest:sha256:c004f02cb6c75a8203ac772d22fdb3d9bb2e05f2378a0a53a089e78372888c70
Image ID:sha256:6415ef6a16e3e929d3ccbcc1435a85bc5fa400204723ceb3a24f51ccf25f4bf6
MPC contract
- digest:
sha256:0517ffe01a7745dd2ef83491bd42627ea30924f3b62d518470bc300213091bd9