diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eb5c6bb52f..fb22a803da1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,123 @@ +## [4.0.0](https://github.com/dashpay/platform/compare/v4.0.0-rc.2...v4.0.0) (2026-07-01) + + +### ⚠ BREAKING CHANGES + +* **dpp:** make platform/orchard address decoders network-agnostic (#3781) + +### Features + +* **contract:** on-chain QA framework storage layer (testCase + testRun) ([#3910](https://github.com/dashpay/platform/issues/3910)) +* **dpp:** add getters and setters for new shielded state transitions ([#3879](https://github.com/dashpay/platform/issues/3879)) +* **platform-wallet:** external signable wallets ([#3639](https://github.com/dashpay/platform/issues/3639)) +* **platform:** shielded transaction history ([#3870](https://github.com/dashpay/platform/issues/3870)) +* record DAPI address ban reason and expose via platform-wallet FFI ([#3890](https://github.com/dashpay/platform/issues/3890)) +* **rs-sdk-ffi:** add masternode contested-resource vote broadcast (FFI + Swift UI) ([#3883](https://github.com/dashpay/platform/issues/3883)) +* **rs-sdk-ffi:** expose dash_sdk_signer_can_sign for signer-delegated key preflight ([#3924](https://github.com/dashpay/platform/issues/3924)) +* **sdk:** implement document sum/average aggregation FFI (DOC-13/14) ([#3935](https://github.com/dashpay/platform/issues/3935)) +* **swift-example-app:** add identity→identity Transfer Credits production UI ([#3891](https://github.com/dashpay/platform/issues/3891)) +* **swift-example-app:** add production Disable Key action with safety gates (ID-12) ([#3918](https://github.com/dashpay/platform/issues/3918)) +* **swift-example-app:** document count aggregation view (DOC-10/11/12) ([#3926](https://github.com/dashpay/platform/issues/3926)) +* **swift-example-app:** document sum/average aggregation view (DOC-13/14) ([#3942](https://github.com/dashpay/platform/issues/3942)) +* **swift-example-app:** GroveDB path elements diagnostic view (SYS-06) ([#3931](https://github.com/dashpay/platform/issues/3931)) +* **swift-example-app:** multi-recipient Core L1 send (CORE-10) ([#3904](https://github.com/dashpay/platform/issues/3904)) +* **swift-example-app:** one-tap testnet DASH faucet button ([#3905](https://github.com/dashpay/platform/issues/3905)) +* **swift-example-app:** production document replace/delete/transfer/price/purchase UI (DOC-03..07) ([#3945](https://github.com/dashpay/platform/issues/3945)) +* **swift-example-app:** production Withdraw Credits UI on identity detail (ID-10) ([#3906](https://github.com/dashpay/platform/issues/3906)) +* **swift-example-app:** rebrand to "Dash Developer Pro" for TestFlight ([#3952](https://github.com/dashpay/platform/issues/3952)) +* **swift-example-app:** send from Core balance to a shielded recipient ([#3885](https://github.com/dashpay/platform/issues/3885)) +* **swift-sdk:** add BIP39 word-validation helpers for the recover flow ([#3842](https://github.com/dashpay/platform/issues/3842)) +* **swift-sdk:** add identityUpdate handler to the generic transition builder ([#3880](https://github.com/dashpay/platform/issues/3880)) +* **swift-sdk:** add production create-document flow via platform-wallet FFI ([#3908](https://github.com/dashpay/platform/issues/3908)) +* **swift-sdk:** log tokio runtime metrics from rs-sdk-ffi and platform-wallet-ffi ([#3901](https://github.com/dashpay/platform/issues/3901)) +* **swift-sdk:** wire data contract update through the platform-wallet path ([#3882](https://github.com/dashpay/platform/issues/3882)) + + +### Bug Fixes + +* **dashmate:** use active_dkgs for safe DKG stop ([#3941](https://github.com/dashpay/platform/issues/3941)) +* **dpp:** enforce byte array encoding stability in data contract updates ([#3868](https://github.com/dashpay/platform/issues/3868)) +* **dpp:** guard index property parsing against empty/oversized maps to prevent check_tx panic ([#3866](https://github.com/dashpay/platform/issues/3866)) +* **dpp:** make platform/orchard address decoders network-agnostic ([#3781](https://github.com/dashpay/platform/issues/3781)) +* **dpp:** reject empty token pricing schedules to prevent a direct-purchase chain halt ([#3865](https://github.com/dashpay/platform/issues/3865)) +* **drive:** return empty history for contracts that don't keep history ([#3884](https://github.com/dashpay/platform/issues/3884)) +* **drive:** unify shielded per-action processing fee across all protocol versions ([#3877](https://github.com/dashpay/platform/issues/3877)) +* **platform-wallet:** add TRANSFER key to default identity registration key set ([#3894](https://github.com/dashpay/platform/issues/3894)) +* **platform-wallet:** apply disabled-key flags to local cache after identity update ([#3915](https://github.com/dashpay/platform/issues/3915)) +* **platform-wallet:** build data contract config at the protocol-required version ([#3881](https://github.com/dashpay/platform/issues/3881)) +* **platform-wallet:** free SPV data dir on stop ([#3811](https://github.com/dashpay/platform/issues/3811)) +* **platform-wallet:** spv error propagation ([#3810](https://github.com/dashpay/platform/issues/3810)) +* **rs-sdk-ffi:** classify DAPI transport and timeout errors instead of internalError ([#3916](https://github.com/dashpay/platform/issues/3916)) +* **rs-sdk-ffi:** don't export ContestedResourceVoteChoiceFFI to the C header ([#3892](https://github.com/dashpay/platform/issues/3892)) +* **rs-sdk-ffi:** run blocking FFI calls on a large stack to prevent proof-verification stack overflow ([#3896](https://github.com/dashpay/platform/issues/3896)) +* **rs-sdk-ffi:** stop labeling unclassified SDK errors as "failed to fetch balances" ([#3878](https://github.com/dashpay/platform/issues/3878)) +* **rs-sdk:** case-insensitive .dash suffix in DPNS name resolution ([#3914](https://github.com/dashpay/platform/issues/3914)) +* **sdk:** ban node and retry elsewhere on UNIMPLEMENTED responses ([#3875](https://github.com/dashpay/platform/issues/3875)) +* **sdk:** ban rate-limited node for Envoy-advertised reset window ([#3951](https://github.com/dashpay/platform/issues/3951)) +* **sdk:** default initial protocol version to 10 when unpinned (upgrade-safe ratchet floor) ([#3809](https://github.com/dashpay/platform/issues/3809)) +* **sdk:** default to latest protocol version instead of pinning testnet to v1 ([#3937](https://github.com/dashpay/platform/issues/3937)) +* **sdk:** refresh protocol version via a proven query, not unproved getStatus ([#3893](https://github.com/dashpay/platform/issues/3893)) +* **sdk:** refresh SDK protocol version to the network's on startup and network switch ([#3886](https://github.com/dashpay/platform/issues/3886)) +* **sdk:** verify quorum signature on broadcast wait-path before trusting metadata ([#3872](https://github.com/dashpay/platform/issues/3872)) +* **swift-example-app:** expose Picker options to UI automation ([#3903](https://github.com/dashpay/platform/issues/3903)) +* **swift-example-app:** fix compile timeout on on newest xcode versions ([#3899](https://github.com/dashpay/platform/issues/3899)) +* **swift-example-app:** harden Withdraw Credits amount + address validation ([#3907](https://github.com/dashpay/platform/issues/3907)) +* **swift-example-app:** load document price on Purchase sheet appear ([#3947](https://github.com/dashpay/platform/issues/3947)) +* **swift-example-app:** prevent UInt64.max overflow crash in TransferCreditsView amount parsing ([#3909](https://github.com/dashpay/platform/issues/3909)) +* **swift-example-app:** show success title on DPNS registration alert ([#3873](https://github.com/dashpay/platform/issues/3873)) +* **swift-sdk:** keychain priv key storage indexes by label ([#3946](https://github.com/dashpay/platform/issues/3946)) +* **swift-sdk:** make Document transition contract/type pickers idb-drivable ([#3921](https://github.com/dashpay/platform/issues/3921)) +* **swift-sdk:** parse getIdentitiesTokenBalances NSNumber result ([#3943](https://github.com/dashpay/platform/issues/3943)) +* **swift-sdk:** seed testnet at the per-network protocol-version floor instead of pinning PV11 ([#3944](https://github.com/dashpay/platform/issues/3944)) +* **swift-sdk:** sign document state transitions with an available AUTHENTICATION key ([#3922](https://github.com/dashpay/platform/issues/3922)) +* **swift-sdk:** stamp firstSeen at insert for unconfirmed transactions ([#3874](https://github.com/dashpay/platform/issues/3874)) +* **swift-sdk:** update token balance from the transfer/burn proof result (MW-02) ([#3934](https://github.com/dashpay/platform/issues/3934)) +* **wasm-sdk:** preserve user-supplied addresses in withTrustedContext ([#3912](https://github.com/dashpay/platform/issues/3912)) + + +### Continuous Integration + +* **swift-sdk:** remove swift-sdk artifact upload ([#3778](https://github.com/dashpay/platform/issues/3778)) + + +### Documentation + +* **swift-example-app:** add MANUAL tier to iOS test plan ([#3895](https://github.com/dashpay/platform/issues/3895)) +* **swift-example-app:** add multi-wallet test cases (Core + Platform) to iOS test plan ([#3888](https://github.com/dashpay/platform/issues/3888)) +* **swift-example-app:** add tiered iOS feature test plan ([#3887](https://github.com/dashpay/platform/issues/3887)) +* **swift-example-app:** link on-chain QA status dashboard from TEST_PLAN ([#3911](https://github.com/dashpay/platform/issues/3911)) +* **swift-example-app:** re-tier + re-status SH-11 (shielded identity create) → Common, ✅ in-UI ([#3913](https://github.com/dashpay/platform/issues/3913)) +* **swift-example-app:** remove CORE-11/12/13 (not-implemented Core actions) from test plan ([#3919](https://github.com/dashpay/platform/issues/3919)) +* **swift-example-app:** remove TOK-17 (calculate token ID utility) from test plan ([#3925](https://github.com/dashpay/platform/issues/3925)) +* **swift-example-app:** retire GRP-04 from the QA catalog ([#3932](https://github.com/dashpay/platform/issues/3932)) +* **swift-example-app:** retire stub builder rows VOTE-07/ID-13 ([#3929](https://github.com/dashpay/platform/issues/3929)) + + +### Tests + +* **drive-abci:** fix direct-selling tests broken by empty-schedule validation ([#3876](https://github.com/dashpay/platform/issues/3876)) +* **swift-example-app:** cover KeyDisableGate and correct consensus-framing comments ([#3920](https://github.com/dashpay/platform/issues/3920)) +* **swift-sdk:** move swift-sdk unit test defined in the example app to the swift-sdk unit tests suite ([#3917](https://github.com/dashpay/platform/issues/3917)) +* **wasm-sdk:** raise withdrawal test amount to the v12 minimum ([#3867](https://github.com/dashpay/platform/issues/3867)) + + +### Code Refactoring + +* **sdk:** per-network protocol-version floor + version_pinned unification ([#3900](https://github.com/dashpay/platform/issues/3900)) + + +### Build System + +* **dashmate:** update Tenderdash image to v1.6.0 ([#3940](https://github.com/dashpay/platform/issues/3940)) +* update grovedb dependency from git revision to v5.0.0 tag ([#3971](https://github.com/dashpay/platform/issues/3971)) +* update rust-dashcore to v0.44.0 ([#3973](https://github.com/dashpay/platform/issues/3973)) + + +### Miscellaneous Chores + +* bump rust-dashcore to rev without Address::network() method ([#3788](https://github.com/dashpay/platform/issues/3788)) +* retarget in-repo branch references from v3.1-dev to v4.0-dev ([#3972](https://github.com/dashpay/platform/issues/3972)) + ## [4.0.0-rc.2](https://github.com/dashpay/platform/compare/v4.0.0-rc.1...v4.0.0-rc.2) (2026-06-12) diff --git a/Cargo.lock b/Cargo.lock index 1ca6768db23..5148cee60c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "check-features" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "toml 0.8.23", ] @@ -1528,7 +1528,7 @@ dependencies = [ [[package]] name = "dapi-grpc" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "dash-platform-macros", "futures-core", @@ -1615,7 +1615,7 @@ dependencies = [ [[package]] name = "dash-async" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "thiserror 2.0.18", "tokio", @@ -1624,7 +1624,7 @@ dependencies = [ [[package]] name = "dash-context-provider" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "dash-async", "dpp", @@ -1655,7 +1655,7 @@ dependencies = [ [[package]] name = "dash-platform-balance-checker" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "anyhow", "clap", @@ -1670,7 +1670,7 @@ dependencies = [ [[package]] name = "dash-platform-macros" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "heck 0.5.0", "quote", @@ -1679,7 +1679,7 @@ dependencies = [ [[package]] name = "dash-sdk" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "arc-swap", "assert_matches", @@ -1823,7 +1823,7 @@ dependencies = [ [[package]] name = "dashpay-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "platform-value", "platform-version", @@ -1833,7 +1833,7 @@ dependencies = [ [[package]] name = "data-contracts" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "dashpay-contract", "dpns-contract", @@ -2046,7 +2046,7 @@ checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] name = "dpns-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "platform-value", "platform-version", @@ -2056,7 +2056,7 @@ dependencies = [ [[package]] name = "dpp" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "anyhow", "assert_matches", @@ -2114,7 +2114,7 @@ dependencies = [ [[package]] name = "dpp-json-convertible-derive" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "proc-macro2", "quote", @@ -2123,7 +2123,7 @@ dependencies = [ [[package]] name = "drive" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "arc-swap", "assert_matches", @@ -2164,7 +2164,7 @@ dependencies = [ [[package]] name = "drive-abci" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "arc-swap", "assert_matches", @@ -2225,7 +2225,7 @@ dependencies = [ [[package]] name = "drive-proof-verifier" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "bincode", "dapi-grpc", @@ -3960,7 +3960,7 @@ dependencies = [ [[package]] name = "json-schema-compatibility-validator" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "assert_matches", "json-patch", @@ -4103,7 +4103,7 @@ dependencies = [ [[package]] name = "keyword-search-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "base58", "platform-value", @@ -4292,7 +4292,7 @@ dependencies = [ [[package]] name = "masternode-reward-shares-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "platform-value", "platform-version", @@ -5060,7 +5060,7 @@ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "platform-encryption" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "aes", "cbc", @@ -5071,7 +5071,7 @@ dependencies = [ [[package]] name = "platform-serialization" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "bincode", "platform-version", @@ -5079,7 +5079,7 @@ dependencies = [ [[package]] name = "platform-serialization-derive" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "proc-macro2", "quote", @@ -5089,7 +5089,7 @@ dependencies = [ [[package]] name = "platform-value" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "base64 0.22.1", "bincode", @@ -5108,7 +5108,7 @@ dependencies = [ [[package]] name = "platform-value-convertible" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "quote", "syn 2.0.117", @@ -5116,7 +5116,7 @@ dependencies = [ [[package]] name = "platform-version" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "bincode", "grovedb-version", @@ -5126,7 +5126,7 @@ dependencies = [ [[package]] name = "platform-versioning" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "proc-macro2", "quote", @@ -5135,7 +5135,7 @@ dependencies = [ [[package]] name = "platform-wallet" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "arc-swap", "async-trait", @@ -5172,7 +5172,7 @@ dependencies = [ [[package]] name = "platform-wallet-ffi" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "anyhow", "bincode", @@ -5200,7 +5200,7 @@ dependencies = [ [[package]] name = "platform-wallet-storage" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "apple-native-keyring-store", "argon2", @@ -6215,7 +6215,7 @@ dependencies = [ [[package]] name = "rs-dapi" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "async-trait", "axum 0.8.9", @@ -6264,7 +6264,7 @@ dependencies = [ [[package]] name = "rs-dapi-client" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "backon", "chrono", @@ -6289,7 +6289,7 @@ dependencies = [ [[package]] name = "rs-dash-event-bus" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "metrics", "tokio", @@ -6321,7 +6321,7 @@ dependencies = [ [[package]] name = "rs-sdk-ffi" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "async-trait", "bincode", @@ -6355,7 +6355,7 @@ dependencies = [ [[package]] name = "rs-sdk-trusted-context-provider" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "arc-swap", "dash-async", @@ -6374,7 +6374,7 @@ dependencies = [ [[package]] name = "rs-unified-sdk-ffi" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "dash-network", "key-wallet-ffi", @@ -7114,7 +7114,7 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple-signer" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "async-trait", "base64 0.22.1", @@ -7250,7 +7250,7 @@ dependencies = [ [[package]] name = "strategy-tests" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "bincode", "dpp", @@ -7641,7 +7641,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "token-history-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "platform-value", "platform-version", @@ -8489,7 +8489,7 @@ dependencies = [ [[package]] name = "wallet-utils-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "platform-value", "platform-version", @@ -8632,7 +8632,7 @@ checksum = "a8145dd1593bf0fb137dbfa85b8be79ec560a447298955877804640e40c2d6ea" [[package]] name = "wasm-dpp" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "anyhow", "async-trait", @@ -8656,7 +8656,7 @@ dependencies = [ [[package]] name = "wasm-dpp2" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "anyhow", "async-trait", @@ -8675,7 +8675,7 @@ dependencies = [ [[package]] name = "wasm-drive-verify" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "base64 0.22.1", "bincode", @@ -8730,7 +8730,7 @@ dependencies = [ [[package]] name = "wasm-sdk" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "base64 0.22.1", "bip39", @@ -9173,7 +9173,7 @@ dependencies = [ [[package]] name = "withdrawals-contract" -version = "4.0.0-rc.2" +version = "4.0.0" dependencies = [ "num_enum 0.5.11", "platform-value", diff --git a/Cargo.toml b/Cargo.toml index 6d462f62750..c7703f6b683 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -110,5 +110,5 @@ opt-level = 3 [workspace.package] -version = "4.0.0-rc.2" +version = "4.0.0" rust-version = "1.92" diff --git a/package.json b/package.json index 3a8022e57b5..cee417710cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/platform", - "version": "4.0.0-rc.2", + "version": "4.0.0", "private": true, "scripts": { "setup": "yarn install && yarn run build && yarn run configure", diff --git a/packages/bench-suite/package.json b/packages/bench-suite/package.json index 53531959c9e..c882593e1dc 100644 --- a/packages/bench-suite/package.json +++ b/packages/bench-suite/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/bench-suite", "private": true, - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Dash Platform benchmark tool", "scripts": { "bench": "node ./bin/bench.js", diff --git a/packages/dapi-grpc/package.json b/packages/dapi-grpc/package.json index 05ad80706c3..6c2ca4fed4e 100644 --- a/packages/dapi-grpc/package.json +++ b/packages/dapi-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dapi-grpc", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "DAPI GRPC definition file and generated clients", "browser": "browser.js", "main": "node.js", diff --git a/packages/dapi/package.json b/packages/dapi/package.json index d83f85f2944..3b1f6935d62 100644 --- a/packages/dapi/package.json +++ b/packages/dapi/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/dapi", "private": true, - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "A decentralized API for the Dash network", "scripts": { "api": "node scripts/api.js", diff --git a/packages/dash-spv/package.json b/packages/dash-spv/package.json index 16d4e295753..e331237c120 100644 --- a/packages/dash-spv/package.json +++ b/packages/dash-spv/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dash-spv", - "version": "5.0.0-rc.2", + "version": "5.0.0", "description": "Repository containing SPV functions used by @dashevo", "main": "index.js", "scripts": { diff --git a/packages/dashmate/configs/getConfigFileMigrationsFactory.js b/packages/dashmate/configs/getConfigFileMigrationsFactory.js index bde04e242c0..97994c3b759 100644 --- a/packages/dashmate/configs/getConfigFileMigrationsFactory.js +++ b/packages/dashmate/configs/getConfigFileMigrationsFactory.js @@ -1546,6 +1546,21 @@ export default function getConfigFileMigrationsFactory(homeDir, defaultConfigs) return configFile; }, + '4.0.0': (configFile) => { + Object.entries(configFile.configs) + .forEach(([, options]) => { + // The drive and rs-dapi image tags are derived from the package + // major version. Re-pin them from the base config so operators + // upgrading from a prerelease of this major, or from an older + // major, move off their stale tag onto the current stable images. + // The legacy 0.25.x migrations already do this, but only fire for + // configs old enough to cross them; recent upgraders need it here. + options.platform.drive.abci.docker.image = base.get('platform.drive.abci.docker.image'); + options.platform.dapi.rsDapi.docker.image = base.get('platform.dapi.rsDapi.docker.image'); + }); + + return configFile; + }, }; } diff --git a/packages/dashmate/package.json b/packages/dashmate/package.json index b5b477336ad..c598737b0b1 100644 --- a/packages/dashmate/package.json +++ b/packages/dashmate/package.json @@ -1,6 +1,6 @@ { "name": "dashmate", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Distribution package for Dash node installation", "scripts": { "lint": "eslint .", diff --git a/packages/dashmate/test/unit/config/configFile/migrateConfigFileFactory.spec.js b/packages/dashmate/test/unit/config/configFile/migrateConfigFileFactory.spec.js index eb7efe51ae8..26dfb0590f9 100644 --- a/packages/dashmate/test/unit/config/configFile/migrateConfigFileFactory.spec.js +++ b/packages/dashmate/test/unit/config/configFile/migrateConfigFileFactory.spec.js @@ -45,4 +45,44 @@ describe('migrateConfigFileFactory', () => { expect(migratedConfigFileData).to.be.deep.equal(currentConfigFileData); }); + + it('should refresh the version-derived platform images when upgrading from a recent version', async () => { + // The drive and rs-dapi image tags are derived from the package major + // version. An operator upgrading from a recent version (e.g. a prerelease + // of the same major) sits past the legacy 0.25.x migrations that refresh + // images from the base config, so a per-release migration must re-pin them + // or they stay stuck on the old/prerelease tag. + const { version } = JSON.parse(fs.readFileSync(path.join(PACKAGE_ROOT_DIR, 'package.json'), 'utf8')); + + const defaultConfigFileData = createConfigFile().toObject(); + const [firstConfigName] = Object.keys(defaultConfigFileData.configs); + const expectedDriveImage = defaultConfigFileData + .configs[firstConfigName].platform.drive.abci.docker.image; + const expectedRsDapiImage = defaultConfigFileData + .configs[firstConfigName].platform.dapi.rsDapi.docker.image; + + const staleConfigFileData = createConfigFile().toObject(); + staleConfigFileData.configFormatVersion = '4.0.0-rc.2'; + for (const options of Object.values(staleConfigFileData.configs)) { + options.platform.drive.abci.docker.image = 'dashpay/drive:4-rc'; + options.platform.dapi.rsDapi.docker.image = 'dashpay/rs-dapi:4-rc'; + } + + const migratedConfigFileData = migrateConfigFile( + staleConfigFileData, + staleConfigFileData.configFormatVersion, + version, + ); + + for (const [name, options] of Object.entries(migratedConfigFileData.configs)) { + expect(options.platform.drive.abci.docker.image).to.equal( + expectedDriveImage, + `drive image not refreshed for ${name}`, + ); + expect(options.platform.dapi.rsDapi.docker.image).to.equal( + expectedRsDapiImage, + `rs-dapi image not refreshed for ${name}`, + ); + } + }); }); diff --git a/packages/dashpay-contract/package.json b/packages/dashpay-contract/package.json index a7a1762c53a..7d867fb30c2 100644 --- a/packages/dashpay-contract/package.json +++ b/packages/dashpay-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dashpay-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Reference contract of the DashPay DPA on Dash Evolution", "scripts": { "lint": "eslint .", diff --git a/packages/dpns-contract/package.json b/packages/dpns-contract/package.json index 308b483ba56..cd497932f9d 100644 --- a/packages/dpns-contract/package.json +++ b/packages/dpns-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dpns-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "A contract and helper scripts for DPNS DApp", "scripts": { "lint": "eslint .", diff --git a/packages/js-dapi-client/package.json b/packages/js-dapi-client/package.json index 065a03e0b54..72eadfb5a3f 100644 --- a/packages/js-dapi-client/package.json +++ b/packages/js-dapi-client/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/dapi-client", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Client library used to access Dash DAPI endpoints", "main": "lib/index.js", "contributors": [ diff --git a/packages/js-dash-sdk/package.json b/packages/js-dash-sdk/package.json index bb7789da589..65ce37ded91 100644 --- a/packages/js-dash-sdk/package.json +++ b/packages/js-dash-sdk/package.json @@ -1,6 +1,6 @@ { "name": "dash", - "version": "7.0.0-rc.2", + "version": "7.0.0", "description": "Dash library for JavaScript/TypeScript ecosystem (Wallet, DAPI, Primitives, BLS, ...)", "main": "build/index.js", "unpkg": "dist/dash.min.js", diff --git a/packages/js-evo-sdk/package.json b/packages/js-evo-sdk/package.json index c6bb2645802..2e6b17588c0 100644 --- a/packages/js-evo-sdk/package.json +++ b/packages/js-evo-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/evo-sdk", - "version": "4.0.0-rc.2", + "version": "4.0.0", "type": "module", "main": "./dist/evo-sdk.module.js", "types": "./dist/sdk.d.ts", diff --git a/packages/js-grpc-common/package.json b/packages/js-grpc-common/package.json index 568edad7681..6c565660c03 100644 --- a/packages/js-grpc-common/package.json +++ b/packages/js-grpc-common/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/grpc-common", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Common GRPC library", "main": "index.js", "scripts": { diff --git a/packages/keyword-search-contract/package.json b/packages/keyword-search-contract/package.json index 319108e87cd..44557d5b32b 100644 --- a/packages/keyword-search-contract/package.json +++ b/packages/keyword-search-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/keyword-search-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "A contract that allows searching for contracts", "scripts": { "lint": "eslint .", diff --git a/packages/masternode-reward-shares-contract/package.json b/packages/masternode-reward-shares-contract/package.json index 1d7e3f38b17..c27273e10bf 100644 --- a/packages/masternode-reward-shares-contract/package.json +++ b/packages/masternode-reward-shares-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/masternode-reward-shares-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "A contract and helper scripts for reward sharing", "scripts": { "lint": "eslint .", diff --git a/packages/platform-test-suite/package.json b/packages/platform-test-suite/package.json index 031f0d4044a..e0e615a07aa 100644 --- a/packages/platform-test-suite/package.json +++ b/packages/platform-test-suite/package.json @@ -1,7 +1,7 @@ { "name": "@dashevo/platform-test-suite", "private": true, - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Dash Network end-to-end tests", "scripts": { "test": "yarn exec bin/test.sh", diff --git a/packages/token-history-contract/package.json b/packages/token-history-contract/package.json index 9cb96f2d72a..0209c66af82 100644 --- a/packages/token-history-contract/package.json +++ b/packages/token-history-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/token-history-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "The token history contract", "scripts": { "lint": "eslint .", diff --git a/packages/wallet-lib/package.json b/packages/wallet-lib/package.json index f962e4f86f1..520600c74f4 100644 --- a/packages/wallet-lib/package.json +++ b/packages/wallet-lib/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wallet-lib", - "version": "11.0.0-rc.2", + "version": "11.0.0", "description": "Light wallet library for Dash", "main": "src/index.js", "unpkg": "dist/wallet-lib.min.js", diff --git a/packages/wallet-utils-contract/package.json b/packages/wallet-utils-contract/package.json index 9d8a65b7816..1320129e60e 100644 --- a/packages/wallet-utils-contract/package.json +++ b/packages/wallet-utils-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wallet-utils-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "A contract and helper scripts for Wallet DApp", "scripts": { "lint": "eslint .", diff --git a/packages/wasm-dpp/package.json b/packages/wasm-dpp/package.json index 63e020cb432..b918ac82558 100644 --- a/packages/wasm-dpp/package.json +++ b/packages/wasm-dpp/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wasm-dpp", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "The JavaScript implementation of the Dash Platform Protocol", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/wasm-dpp2/package.json b/packages/wasm-dpp2/package.json index de147561319..f427357ec97 100644 --- a/packages/wasm-dpp2/package.json +++ b/packages/wasm-dpp2/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wasm-dpp2", - "version": "4.0.0-rc.2", + "version": "4.0.0", "type": "module", "main": "./dist/dpp.js", "types": "./dist/dpp.d.ts", diff --git a/packages/wasm-drive-verify/package.json b/packages/wasm-drive-verify/package.json index 54b0645a1f3..8eacdeeb2a0 100644 --- a/packages/wasm-drive-verify/package.json +++ b/packages/wasm-drive-verify/package.json @@ -3,7 +3,7 @@ "collaborators": [ "Dash Core Group " ], - "version": "4.0.0-rc.2", + "version": "4.0.0", "license": "MIT", "description": "WASM bindings for Drive verify functions", "repository": { diff --git a/packages/wasm-sdk/package.json b/packages/wasm-sdk/package.json index 847e5e0e52d..f1fa4f76e9d 100644 --- a/packages/wasm-sdk/package.json +++ b/packages/wasm-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/wasm-sdk", - "version": "4.0.0-rc.2", + "version": "4.0.0", "type": "module", "main": "./dist/sdk.js", "types": "./dist/sdk.d.ts", diff --git a/packages/withdrawals-contract/package.json b/packages/withdrawals-contract/package.json index 9d6113ab26f..9da2829634b 100644 --- a/packages/withdrawals-contract/package.json +++ b/packages/withdrawals-contract/package.json @@ -1,6 +1,6 @@ { "name": "@dashevo/withdrawals-contract", - "version": "4.0.0-rc.2", + "version": "4.0.0", "description": "Data Contract to manipulate and track withdrawals", "scripts": { "build": "",