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

MPC (Chain Signatures) 3.0.0

3.0.0github.com

Finally we're releasing the 3.0.0 bundle, featuring support for running MPC nodes on TDX servers with dstack.

MPC 3.0.0 release

Finally we're releasing the 3.0.0 bundle, featuring support for running MPC nodes on TDX servers with dstack.

Upgrading from 2.2.0

The MPC 3.0.0 contract can run with 2.2.0 nodes, but MPC 3.0.0 nodes can not run with a 2.2.0 contract.

Therefore, to upgrade a 2.2.0 network to 3.0.0 the following steps are needed:

  1. Migrate node secrets. This happens automatically by running the latest 2.2.0 mainnet-release and testnet-release images. Ensure you have a secrets.json file in your MPC_HOME directory.
  2. Vote for the 3.0.0 contract.
  3. Upgrade all nodes to run 3.0.0.

Main features

While this release feautres a lot of changes, some main features are:

  • Confidential Key Derivation.
    • The MPC contract now contains a method to query deterministic confidential keys.
  • TEE attestations.
    • MPC nodes now can produce TEE attestations when running on TDX servers with Dstack. The code features a guide on how to set this up as well.
    • The MPC contract can validate and kick-out any nodes with invalid attestations.
  • Upgraded key management.
    • MPC nodes now generate their own keys for communicating with each other and the contract. This is a security requirement for the TEE migration.
  • Migration service.
    • The contract now allows backup services to be registered, enabling MPC nodes to securely back up their sensitive key shares.

What's Changed

๐Ÿš€ Features

  • #489(@kevindeforth): (devnet) Loadtest tracks success statistics (#489)

  • #410(@pbeza): (contract) Add support for TEE (#410)

  • #511(@DSharifi): (contract) Add method to contract to get allowed image hashes (#511)

  • #468(@kevindeforth): (Tee) Automatic kickout mechanism for invalid TEE status (#468)

  • #509(@pbeza): (contract) Verification of TEE RTMRs 0-2 and MRTD (#509)

  • #513(@DSharifi): (indexer) Periodically fetch allowed image hashes from mpc contract (#513)

  • #525(@DSharifi): (tee) Node monitors latest allowed image hashes from contract (#525)

  • #524(@barakeinav1): Initial launcher script (#524)

  • #445(@kuksag): (tee) Generate p2p key/near signer key inside MPC node (#445)

  • #516(@pbeza): (contract) Verification of RTMR3 (#516)

  • #537(@pbeza): (contract) Verify report_data field of the TEE quote (#537)

  • #541(@barakeinav1): (remote attestation ) RTMRs and app_compose field checks (#541)

  • #543(@DSharifi): Submit remote attestation on startup (#543)

  • #553(@kevindeforth): (Tee) Join logic for new participant and readme (#553)

  • #558(@kevindeforth): (devnet) Enable ssd support (#558)

  • #576(@kevindeforth): (pytest) Interactive pytest (#576)

  • #560(@kevindeforth): Enable network hardship simulation (#560)

  • #639(@barakeinav1): (tee) Add p2p public key to StaticWebData and http endpoint (#639)

  • #632(@pbeza): (tee) Custom attestation module (#632)

  • #653(@pbeza): (tee) Implement attestation quote generation in attestation module (#653)

  • #665(@DSharifi): (contract) Key resharing can be cancelled on the contract (#665)

  • #684(@kevindeforth): (metrics) Expose peers block height metric (#684)

  • #683(@pbeza): (tee) Implement TEE quote verification in attestation module (#683)

  • #722(@gilcu3): Added TEE enabled dockerfile + github workflow (#722)

  • #734(@gilcu3): Add support for cargo-near reproducible build (#734)

  • #711(@pbeza): (tee) Add Docker image verification logic to attestation (#711)

  • #776(@kevindeforth): Export account balances as metric (#776)

  • #747(@barakeinav1): Add CLI script to deploy the Launcher in dstack CVM (#747)

  • #769(@andrei-near): Build info metrics (#769)

  • #885(@gilcu3): Add CKD support to the MPC contract (#885)

  • #934(@gilcu3): Add DomainId to CKDRequest (#934)

  • #956(@gilcu3): CKD support in indexer - node/src/indexer/ changes (#956)

  • #957(@gilcu3): CKD support in indexer - store + web changes (#957)

  • #942(@pbeza): (tee) Clean TEE state when concluding a resharing (#942)

  • #964(@andrei-near): Overwrite mpc/near configs from ENV vars (#964)

  • #968(@gilcu3): CKD indexer - queue refactor (#968)

  • #974(@gilcu3): CKD provider support (#974)

  • #967(@netrome): Cli option to configure attestation authority (#967)

  • #985(@gilcu3): Added pytests for CKD (#985)

  • #1008(@gilcu3): DomainId separation enforcement in the contract (#1008)

  • #1032(@kevindeforth): Improve asset cleanup behavior when entering running or resharing (#1032)

  • #1038(@gilcu3): Make leader explicit in completed requests (#1038)

  • #1023(@gilcu3): CKD support in devnet (#1023)

  • #1061(@kevindeforth): Change of participant set leads to exit of running state. (#1061)

  • #1064(@gilcu3): Achieve reproducible builds for the mpc node and launcher (#1064)

  • #1070(@barakeinav1): (pytest) Restrict signer keys to MPC contract method (clean) (#1070)

  • #1153(@andrei-near): Failed cluster signatures metrics main (#1153)

  • #1162(@kevindeforth): Contract supports migration service (#1162)

  • #1155(@barakeinav1): Devnet add missing image_hash and latest_allowed_hash_file (#1155)

  • #1197(@DSharifi): Enforce all participants to have valid attestations (#1197)

  • #1219(@gilcu3): Update to use new ts rerandomization+coordinator API (#1219)

  • #1233(@kevindeforth): Metrics tracking participant ids in failed signature computations (#1233)

  • #1215(@kevindeforth): Import keyshares into empty keyshare storage (#1215)

  • #1225(@gilcu3): New dtos_contract::PublicKey type (#1225)

  • #1223(@pbeza): Re-submit attestation if node detects it has no attestation on chain (#1223)

  • #1241(@gilcu3): Add near_sdk compatible serde serialization for dto types + Bls types (#1241)

  • #1250(@kevindeforth): Indexer fetches migration state from contract and displays it on a web-endpoint (#1250)

  • #1239(@gilcu3): Ckd bls pivot (#1239)

  • #1267(@kevindeforth): Onboarding logic for MPC node (#1267)

  • #1272(@gilcu3): Support CKD with BLS in pytests (#1272)

  • #1289(@pbeza): Scaffold initial backup service (#1289)

  • #1216(@kevindeforth): Import keyshares into non empty keyshare storage (#1216)

  • #1283(@kevindeforth): Migration service web server and client logic (#1283)

  • #1270(@barakeinav1): Add public key enforcement feature (#1270)

  • #1300(@gilcu3): Add read-only getter for keyshares (#1300)

  • #1301(@gilcu3): Backup_cli store secrets in json file (#1301)

  • #1313(@barakeinav1): Add enforcement that contract call are by attested participants (#1313)

  • #1317(@gilcu3): Backup-cli http over mtls support (#1317)

  • #1319(@kevindeforth): Mpc node spawns recovery web endpoint (1295) (#1319)

  • #1316(@barakeinav1): Use pre predecessor_account_id (#1316)

  • #1329(@Copilot): Add secrets.json migration support for 2.2.0 โ†’ 3.0.0 upgrade path (#1329)

  • #1339(@gilcu3): Update to current ts version, more changes than I expected, some tricky deps changes as well (#1339)

  • #1353(@gilcu3): Ensure docker compose file is up to date in get docker compose hash (#1353)

  • #1333(@pbeza): Implement public key registration for the backup service (#1333)

  • #1366(@barakeinav1): Update launcher to remove old MPC container (#1366)

  • #1369(@netrome): More detailed error messages when attestation validation fails (#1369)

  • #1375(@netrome): Don't enforce secure time (#1375)

  • #1380(@netrome): (launcher) Allow passing through NEAR_TESTS_PROTOCOL_UPGRADE_OVERRIDE env var (#1380)

  • #1376(@kevindeforth): Send AES-256 encrypted secrets over mutual TLS instead of plaintext (#1376)

  • #1384(@pbeza): Implement KeyshareStorageAdapter for keyshare persistence (#1384)

๐Ÿ› Bug Fixes

  • #552(@pbeza): (tee) Hotfix of TEE report_data verification (#552)

  • #585(@pbeza): (tee) Ensure quote verification status is UpToDate (#585)

  • #578(@kevindeforth): (devnet) Refill contract account for initalization (#578)

  • #595(@kevindeforth): Ignore peers who are behind in a computation (#595)

  • #589(@barakeinav1): Harden launcher docker-compose config against privilege escalation (#589)

  • #617(@DSharifi): (dstack) Bump dstack rust sdk version (#617)

  • #627(@DSharifi): (tee) Don't re-encode tdx_quote to hex (#627)

  • #629(@DSharifi): (tee) Serialize quote_collateral to a serde_json::Value instead of String (#629)

  • #588(@barakeinav1): (launcher) Enforce env var allow-list and custom host/port parsing in user-config (#588)

  • #620(@DSharifi): (dstack) Bump dstack rust sdk version (#620)

  • #612(@DSharifi): Create tokio enter guard for spawning TEE related tasks (#612)

  • #667(@andrei-near): Add boot nodes at near indexer config init state (#667)

  • #680(@kuksag): Adjust invariant checks when selecting participants (#680)

  • #705(@kevindeforth): (deployment) Gcp start script key error (#705)

  • #704(@netrome): Transparent serialization for Hash32 (#704)

  • #715(@kevindeforth): (devnet) Compatibility with upcoming mpc node version 3.0.0 (#715)

  • #724(@gilcu3): Fixes test_from_str_valid test in the contract crate (#724)

  • #740(@gilcu3): Display error message when participant list is empty in mpc-node generate-test-configs (#740)

  • #755(@andrei-near): Bumping nearcore to 2.7.0-rc4 (#755)

  • #768(@DSharifi): Defer creating allowed_image_hash file until write (#768)

  • #762(@barakeinav1): (launcher) Fixing of issues found during testing (#762)

  • #778(@kevindeforth): Spawn mointor docker images task before listening to blocks indefinitely (#778)

  • #785(@jaswinder6991): Update README.md to fix the broken link to Cait-Sith blog post (#785)

  • #800(@gilcu3): Replay all RTMR3 required events (#800)

  • #802(@DSharifi): Node ignores peers lagging 50 blocks behind (#802)

  • #780(@barakeinav1): (node) Enforce RTMR3 validation on event checks (#780)

  • #807(@kevindeforth): Node abort_key_event_instance instead of abort_key_event (#807)

  • #774(@gilcu3): Verify docker compose hashes correctly (#774)

  • #816(@barakeinav1): (contract) Correct tee_status and verify_tee logic (#816)

  • #838(@gilcu3): Fix typos and name inconsistencies (#838)

  • #852(@kevindeforth): Api mismatch for submitting participant info (#852)

  • #851(@kevindeforth): Propose join and rename to submit_participant_info (#851)

  • #788(@gilcu3): Use download_config parameter in mpc-node cli (#788)

  • #887(@pbeza): (tee) Ensure participants run valid TEE or none (#887)

  • #925(@kevindeforth): Increase gas limit for sign calls (#925)

  • #928(@gilcu3): CI get docker manifest timeouts (#928)

  • #955(@gilcu3): Add domainid ckdrequest again (#955)

  • #971(@pbeza): (tee) Avoid passing ExpectedMeasurements as a parameter in contract (#971)

  • #997(@think-in-universe): Redundant secure_time validation for app compose (#997)

  • #1022(@gilcu3): Use correct assert_matches (#1022)

  • #1031(@netrome): Use version controlled contracts in compatibility tests (#1031)

  • #1040(@netrome): Add missing bs58 dependency in contract_history crate (#1040)

  • #1096(@DSharifi): Return participants with invalid attestation in error message (#1096)

  • #1149(@netrome): Ignore broken tests (#1149)

  • #1146(@pbeza): Don't cleanup allowed hashes on getters (#1146)

  • #738(@robin-near): Stream while syncing instead of waiting for full sync. (#738)

  • #1170(@gilcu3): Add needed deps in dockerfile, remove unnecessary (#1170)

  • #1165(@pbeza): Contract was refunding too much of deposit (#1165)

  • #1189(@pbeza): Address post-merge code review comments for PR #1183 (#1189)

  • #1193(@gilcu3): Restore exact workflow before #1113 not including MPC launcher (#1193)

  • #1174(@DSharifi): Node should retry attestation submission until its observed onchain (#1174)

  • #1202(@pbeza): Resubmit participant info more frequently (#1202)

  • #1229(@netrome): Run attestation requests within a tokio runtime (#1229)

  • #1247(@pbeza): tee_authority::get_with_backoff was ending up in a hot loop (#1247)

  • #1258(@netrome): Remove references to stale scripts (#1258)

  • #1266(@gilcu3): Devnet using ckd with BLS (#1266)

  • #1281(@gilcu3): Use more efficient DomainRegistry (#1281)

  • #1282(@gilcu3): Remaining issues in TDX external guide (#1282)

  • #1330(@gilcu3): Bug wasm execution failed error when running mpc localnet nodes (#1330)

  • #1350(@netrome): Use port 24566 instead of 24567 for boot node arg in localnet guide (#1350)

  • #1358(@gilcu3): Ensure hex serialization in vote-code-hash (#1358)

  • #1364(@netrome): Disable state sync in localnet (#1364)

  • #1365(@gilcu3): Github actions by pinning versions, added zizmor to CI (#1365)

  • #1374(@gilcu3): Continue when receiver has lagged messages and log event (#1374)

  • #1381(@barakeinav1): Update operator guide with correct port configuration (#1381)

  • #1382(@gilcu3): Update the measurements that are actually used in the contract (#1382)

๐Ÿšœ Refactor

  • #670(@barakeinav1): (launcher) Update user-config format and values (#670)

  • #758(@pbeza): (tee) Move attestation generation logic (#758)

  • #882(@DSharifi): (attestation) Remove TcbInfo wrapper struct (#882)

  • #884(@DSharifi): Remove Quote wrapper struct in attestation (#884)

  • #890(@netrome): Consistent usage of SerializableEdwardsPoint in crypto_shared/types.rs (#890)

  • #998(@netrome): Get rid of mod.rs files (#998)

  • #1098(@DSharifi): Make verify_tee_participant API infallible (#1098)

๐Ÿ“š Documentation

  • #733(@gilcu3): Added doc on how to deploy an MPC node within a TEE (#733)

  • #886(@barakeinav1): Operator guide first version (#886)

  • #877(@kevindeforth): Document disaster recovery plan (#877)

  • #954(@DSharifi): Update readme to list testnet RPC providers for devnet tool (#954)

  • #980(@barakeinav1): Tdx cloud providers (#980)

  • #983(@barakeinav1): Update operator's guide with CVM update flow (#983)

  • #979(@barakeinav1): TEE design doc (#979)

  • #992(@barakeinav1): Explain how to get dstack logs (#992)

  • #993(@barakeinav1): Add link to HLD (#993)

  • #1002(@think-in-universe): Make the launcher docs more readable (#1002)

  • #999(@barakeinav1): Port collision documentation (#999)

  • #1001(@barakeinav1): Update production_settings (#1001)

  • #1033(@barakeinav1): Add explanation about key generation (#1033)

  • #1030(@barakeinav1): How to add MPC node key into account (#1030)

  • #1043(@barakeinav1): Getting lasted MPC hash from the contract (#1043)

  • #1045(@barakeinav1): Voting_new_hash (#1045)

  • #1041(@barakeinav1): Add vote_new_parameters documentation (#1041)

  • #1059(@barakeinav1): Update TEE difference table (#1059)

  • #1048(@barakeinav1): Update local key provider section (#1048)

  • #1072(@barakeinav1): Update information about MPC node retrieval (#1072)

  • #1062(@barakeinav1): Add submit_participant_info details (#1062)

  • #1106(@barakeinav1): Add reproducible build instructions for Dstack (#1106)

  • #1154(@barakeinav1): Update RTMR generation instructions for dstack 0.5.4 (#1154)

  • #1178(@pbeza): Update contract README with gas cost details (#1178)

  • #1256(@netrome): Document contract interface crate (#1256)

  • #1262(@netrome): Operator guide includes installation instructions for dstack-vmm instead of referencing their readme (#1262)

  • #1278(@pbeza): (localnet) Refine localnet setup instructions (#1278)

๐Ÿงช Testing

  • #481(@DSharifi): Test that threshold from previous running state is used when serving sign requests in resharing (#481)

  • #498(@kevindeforth): (node) Add timeout to avoid race condition in integration test (#498)

  • #555(@kevindeforth): (pytest) Resolve pytest nonce conflicts (#555)

  • #682(@DSharifi): Create pytest to test cancellation of key resharing (#682)

  • #746(@pbeza): (tee) Add an integration test for attestation verification (#746)

  • #819(@pbeza): (tee) Add contract integration test for MPC image hash voting (#819)

  • #834(@DSharifi): Re-organize tests in attestation crate (#834)

  • #828(@pbeza): (contract) Integration test to ensure contract rejects invalid remote attestations (#828)

  • #1099(@pbeza): Expired attestation kickout flow (#1099)

  • #1168(@DSharifi): Move sandbox integration tests into separate directory. (#1168)

  • #1183(@pbeza): Add grace period test for multi-node voting (#1183)

  • #1186(@DSharifi): Rewrite upgrade test as a sandbox integration tests (#1186)

  • #1200(@DSharifi): Wait for TEE attestations on resharings in pytests (#1200)

  • #986(@DSharifi): Proposal for adding new participant without valid TEE attestation should fail (#986)

  • #1211(@DSharifi): Resolve flaky test caused by ordering of attestations (#1211)

  • #1066(@pbeza): (contract) System test for submit_tee_participant_info (#1066)

โš™๏ธ Miscellaneous Tasks

  • #493(@netrome): Update devnet docs (#493)

  • #494(@netrome): Initial Changelog + CI check (#494)

  • #508(@kuksag): (pytests) Split cluster setup logic (#508)

  • #526(@DSharifi): Increase bytes allocated to version in report data from u8 to u16 (#526)

  • #549(@kevindeforth): (tee) Launcher cleanup (#549)

  • #564(@DSharifi): Fix docker build and publish action (#564)

  • #571(@andrei-near): Sanitize docker build CI to replace invalid tag symbol (#571)

  • #572(@kuksag): Remove p2p and signer key retrival via gcp (#572)

  • #569(@netrome): Enable support for JSON logging (#569)

  • #586(@sergey-ni): Migrated stats into IndexerState (#586)

  • #574(@DSharifi): Add info logs when creating file handle for TEE image hash (#574)

  • #573(@kuksag): Add near_responder_id and number of responder keys in gcp-start.sh logic (#573)

  • #575(@DSharifi): Keep MPC node running if image hash is disallowed (#575)

  • #615(@netrome): Bump nearcore to 2.7.0-rc.2 (#615)

  • #640(@gilcu3): Rename cait-sith -> threshold-signatures (#640)

  • #631(@netrome): Define release process (#631)

  • #649(@andrei-near): Build Docker image as part of CI tests (#649)

  • #651(@DSharifi): Use workspace for dependencies (#651)

  • #659(@DSharifi): Add --enable-bulk-memory-opt requirement in contract readme (#659)

  • #662(@DSharifi): Do not wait for indexer sync before generating TEE attestation (#662)

  • #669(@DSharifi): Use the right protocol_state type for MpcContractV1 state (#669)

  • #673(@DSharifi): Update pytest build step to include --enable-bulk-memory flag (#673)

  • #677(@DSharifi): Setup black as formatter for pytest code (#677)

  • #686(@kuksag): Make python formatter apply for the whole repo (#686)

  • #633(@IkerAlus): (readme) Eddsa example in readme.md (#633)

  • #685(@kuksag): Add TEE Launcher image building step to CI (#685)

  • #692(@kuksag): Fix failing CI for TEE Launcher build (#692)

  • #688(@kuksag): Add tee_launcher tests in CI (#688)

  • #694(@kuksag): Specify TEE Launcher image from nearone registry (#694)

  • #700(@DSharifi): Remove unused threshold parameter in start_cluster_with_mpc (#700)

  • #707(@kevindeforth): (deployment) Gcp start bash script: avoid unnecessary warning (#707)

  • #708(@kevindeforth): Rename web endpoint /get_public_data to /public_data (#708)

  • #718(@netrome): Override org-wide issue template (#718)

  • #720(@netrome): Move MPC node modules to lib.rs (#720)

  • #742(@DSharifi): (devnet) Add support for voting new approved code hash on devnet (#742)

  • #749(@kuksag): Remove mpc-keys crate in contract (#749)

  • #660(@hackpk): (lazy_static) Replace lazy_static with LazyLock (#660)

  • #750(@kuksag): Add python linter (#750)

  • #751(@kuksag): Allow contract to generate ABI (#751)

  • #773(@gilcu3): Execute python lint/format CI only when needed (#773)

  • #775(@DSharifi): Remove i/o code from attestation crate (#775)

  • #783(@gilcu3): Unify near-sdk versions (#783)

  • #787(@kevindeforth): (ci) Split ci-tests into multiple jobs (#787)

  • #790(@gilcu3): Remove nightly features from fmt config (#790)

  • #793(@gilcu3): Fix cargo-near install failure in CI (#793)

  • #792(@barakeinav1): (launcher) Small update of variable and file name for better clarity (#792)

  • #796(@kevindeforth): (pytests) Speedup - reduce rpc poll timeout and send txs in parallel (#796)

  • #798(@kevindeforth): (ci) Add clippy all-features (#798)

  • #810(@kevindeforth): (pytest) Improve test_lost_assets.py performance and coverage (#810)

  • #812(@kevindeforth): (pytest) Fix flaky test_signature_lifecycle (#812)

  • #813(@gilcu3): Use our own fork of dcap-qvl v0.2.4 (#813)

  • #821(@gilcu3): Remove default features prometheus (#821)

  • #806(@DSharifi): Implement serde + borsh (de)serialization for attestation crate types (#806)

  • #822(@gilcu3): Upd near-crypto in infra/scripts/generate_keys/ (#822)

  • #840(@DSharifi): Update dcap-qvl crate to upstream version (#840)

  • #833(@barakeinav1): (launcher script) Update readme (#833)

  • #870(@DSharifi): Replace YamlValue with a String wrapper for docker_compose_file (#870)

  • #835(@DSharifi): Add docker TEE build as a CI check (#835)

  • #871(@gilcu3): Added test_vote_code_hash_doesnt_accept_account_id_not_in_participant_list test (#871)

  • #873(@DSharifi): Implement borsh schema for attestation crate types (#873)

  • #874(@kevindeforth): (test) More detailed error checking in contract test (#874)

  • #876(@DSharifi): Update phala cloud API endpoint for collateral generation (#876)

  • #869(@pbeza): (tee) Remove account key from report data (#869)

  • #867(@gilcu3): Integrate ts#22 refactor (#867)

  • #878(@DSharifi): Integrate the attestation module into the contract code (#878)

  • #889(@DSharifi): Remove near_crypto from attestation crate (#889)

  • #922(@kevindeforth): (contract) Remove stale log of random seed in contract (#922)

  • #933(@DSharifi): Remove near_crypto dependency from smart contract (#933)

  • #937(@DSharifi): Move config.rs unit test behind feature gated test module (#937)

  • #872(@barakeinav1): (deploy script) Update MPC node ports (#872)

  • #914(@DSharifi): [breaking] Remove near_crypto from node code (#914)

  • #963(@kevindeforth): (node) Move tls into crate (#963)

  • #989(@gilcu3): Bump version tracing-subscriber (#989)

  • #991(@gilcu3): Bump dcap-qvl to released version (#991)

  • #995(@DSharifi): Use configuration value instead of constant for TEE_UPGRADE_PERIOD (#995)

  • #1000(@DSharifi): Upgrade ed25519-dalek version in contract (#1000)

  • #1004(@DSharifi): Use crates.io version of dstack-sdk (#1004)

  • #1010(@netrome): Enable running with dstack TEE authority in start.sh (#1010)

  • #1007(@DSharifi): Delete docker_release_tee.yaml workflow (#1007)

  • #1011(@gilcu3): Fix warning while building contract in pytests (#1011)

  • #1021(@gilcu3): Fix deployment start script (#1021)

  • #1013(@DSharifi): Use test_utils crate for image hashes in contract tests (#1013)

  • #1018(@barakeinav1): Set MPC authority stared by launcher to always expect real TDX HW (#1018)

  • #1036(@andrei-near): Test for new docker images (#1036)

  • #1047(@gilcu3): Avoid storing migration contract binary (#1047)

  • #1016(@DSharifi): Enhance mock attestation struct with conditional validation (#1016)

  • #1068(@kevindeforth): (test) Fix resharing tests (#1068)

  • #1082(@kevindeforth): Update disaster recovery doc (#1082)

  • #1093(@gilcu3): Refactor to adapt to API changes in threshold-signatures (#1093)

  • #1104(@barakeinav1): Unify launcher folders (#1104)

  • #1108(@DSharifi): Remove redundant and duplicate clippy check for devnet crate (#1108)

  • #1101(@DSharifi): Create an interface for submitting transactions with response (#1101)

  • #1113(@gilcu3): Update ci to use reproducible builds (#1113)

  • #1102(@DSharifi): Move contract crate into root workspace (#1102)

  • #1116(@gilcu3): Add detailed steps for mpc node image code inspection during upgrades (#1116)

  • #1122(@DSharifi): Fix build script for builds in detached head (#1122)

  • #1124(@gilcu3): Added security policy (#1124)

  • #1125(@DSharifi): Pin serde to 1.0.2191 to fix compilation issue with dstack-sdk (#1125)

  • #1127(@gilcu3): (ci) Separate CI actions for launcher and node (#1127)

  • #1131(@gilcu3): (docs) Update docs after #1127 (#1131)

  • #1136(@DSharifi): Move all workspace members in to /crates directory (#1136)

  • #1115(@barakeinav1): Update user guide with dstack 0.5.4 changes (#1115)

  • #1143(@gilcu3): Adapt to API changes in ts#78 (#1143)

  • #1120(@kevindeforth): Index nodes by account id & TLS key in TEE State (#1120)

  • #1142(@gilcu3): Use workspace versions in contract Cargo.toml (#1142)

  • #1111(@DSharifi): Remove enum VersionedMpcContract contract state in favor of a single version struct (#1111)

  • #1157(@gilcu3): Bring back legacy CI (#1157)

  • #1159(@DSharifi): Update error message in image hash watcher (#1159)

  • #1151(@DSharifi): Create DTO types for the attestation submission method (#1151)

  • #1166(@DSharifi): Use time durations instead of block numbers for tee grace period (#1166)

  • #1190(@gilcu3): Make sure devnet tests ckd (#1190)

  • #1141(@DSharifi): Add github action for unused dependencies (#1141)

  • #1221(@pbeza): Remove redundant allow attribute (#1221)

  • #1230(@DSharifi): Use base58 encoding for public key serialization on node HTTP server. (#1230)

  • #1231(@DSharifi): Document how to run a local mpc network (#1231)

  • #1251(@gilcu3): Remove unneeded deps in attestation crate (#1251)

  • #1253(@gilcu3): Added systemd service for VMM (#1253)

  • #1273(@kevindeforth): Resolve flaky integration tests (#1273)

  • #1261(@gilcu3): Contract unit tests for ckd (#1261)

  • #1276(@kevindeforth): Contract move helpers (#1276)

  • #1274(@gilcu3): Add support for CKD BLS in contract sandbox tests (#1274)

  • #1305(@kevindeforth): Use read-write lock for keyshare storage (#1305)

  • #1315(@DSharifi): Enforce sorted cargo dependencies on CI (#1315)

  • #1323(@netrome): Bump nearcore to 2.9.0 (#1323)

  • #1326(@netrome): Use pinned nextest version and standard installation action (#1326)

  • #1338(@gilcu3): Use proper serialization format for PersistentSecrets (#1338)

  • #1336(@netrome): Add support for dockerized localnet (#1336)

  • #1340(@pbeza): Cargo update and fix deprecated API usage (#1340)

  • #1347(@Copilot): Document reproducible builds in README.md (#1347)

  • #1352(@gilcu3): Use 0 as SOURCE_DATE_EPOCH for repro builds (#1352)

  • #1344(@gilcu3): Move test-utils to ts repo (#1344)

  • #1378(@gilcu3): Updated hard-coded TCB info for 3.0.0 release (#1378)

New Contributors

Full Changelog: https://github.com/near/mpc/compare/2.2.0...3.0.0

Docker images

  • nearone/mpc-node:3.0.0
    • Manifest digest: ``
    • Image ID: sha256:5239dd098bd53fea2b8d527e6885733d8b79dda2dc1fc3fbc871db77096454bd
  • nearone/mpc-launcher:3.0.0
    • Manifest digest: sha256:4b7ab5fac94b7ecd6ba180cf655c5700595c61a3945c321ddbe104b3993aaf83
    • Image ID: sha256:90de0813776b83e40c8483ce85a0dfe8e8f6c6deba24ce835f28baf0d3d2628b

Binaries