From f796a4473d555af515f30580e019749155db415f Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Thu, 16 Nov 2023 21:11:11 +0300 Subject: [PATCH 1/7] build: let additional configure params to be passed into guix (#5705) ## Issue being fixed or feature implemented Make it possible to pass additional configure params into Guix. This could be used to setup various sets of nightly/debug builds which could then be deployed automagically to catch potential issues early. ## What was done? ## How Has This Been Tested? `CONFIGFLAGS="--enable-debug" HOSTS="x86_64-linux-gnu" ./contrib/guix/guix-build` ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ --- contrib/guix/guix-build | 1 + contrib/guix/libexec/build.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build index a5131d72f7..176eab32f9 100755 --- a/contrib/guix/guix-build +++ b/contrib/guix/guix-build @@ -447,6 +447,7 @@ EOF ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ ${ADDITIONAL_GUIX_COMMON_FLAGS} ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS} \ -- env HOST="$host" \ + CONFIGFLAGS="$CONFIGFLAGS" \ DISTNAME="$DISTNAME" \ JOBS="$JOBS" \ SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \ diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 060cf79cf8..895e1b86ac 100644 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -27,6 +27,7 @@ Required environment variables as seen inside the container: DIST_ARCHIVE_BASE: ${DIST_ARCHIVE_BASE:?not set} DISTNAME: ${DISTNAME:?not set} HOST: ${HOST:?not set} + CONFIGFLAGS: ${CONFIGFLAGS:?not set} SOURCE_DATE_EPOCH: ${SOURCE_DATE_EPOCH:?not set} JOBS: ${JOBS:?not set} DISTSRC: ${DISTSRC:?not set} @@ -229,7 +230,7 @@ mkdir -p "$OUTDIR" ########################### # CONFIGFLAGS -CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary" +CONFIGFLAGS+=" --enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary" case "$HOST" in *linux*) CONFIGFLAGS+=" --disable-threadlocal" ;; esac From 8428a581c2a2090a288c2b57387df697c5e93df9 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Thu, 16 Nov 2023 20:56:34 +0300 Subject: [PATCH 2/7] fix: add missing log categories (#5707) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Issue being fixed or feature implemented `creditpool` and `ehf` categories are missing in `logging`/`debug` RPCs 😞 ## What was done? ## How Has This Been Tested? run `debug` and `logging` RPCs and make sure these categories are listed now ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ --- src/logging.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/logging.cpp b/src/logging.cpp index e64d76c988..2c93287aeb 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -178,6 +178,8 @@ const CLogCategoryDesc LogCategories[] = {BCLog::COINJOIN, "coinjoin"}, {BCLog::SPORK, "spork"}, {BCLog::NETCONN, "netconn"}, + {BCLog::CREDITPOOL, "creditpool"}, + {BCLog::EHF, "ehf"}, {BCLog::DASH, "dash"}, //End Dash }; From 259ad319d92de966d852e6c5d8ccc65a59090cff Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 17 Nov 2023 01:14:12 +0700 Subject: [PATCH 3/7] chore: inacuracies in release notes for v20 and v19 (#5709) ## What was done? Fixes some inaccuracies for release notes for v20.0.0, for v19.2.0. ## How Has This Been Tested? n/a ## Breaking Changes n/a ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone --- doc/release-notes.md | 4 ++-- doc/release-notes/dash/release-notes-19.2.0.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/release-notes.md b/doc/release-notes.md index 77cd129ecd..47a77c41e1 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -281,7 +281,7 @@ while mixing. - `logging` and `debug` rpc support new logging categories `validations` and `i2p` - - `gettxoutsetinfo` RPC has 2 new parameters and lots of new fields in +- `gettxoutsetinfo` RPC has 2 new parameters and lots of new fields in results. Please check `help gettxoutsetinfo` for more information. - `gettxchainlocks` Returns the block height each transaction was mined at and @@ -433,7 +433,7 @@ meaningful results. ## Backports from Bitcoin Core This release introduces many updates from Bitcoin v0.20-v22.0 as well as -numerous updates from Bitcoin v23.0 and v25.0. Bitcoin changes that do not align +numerous updates from Bitcoin v23.0-v25.0. Bitcoin changes that do not align with Dash’s product needs, such as SegWit and RBF, are excluded from our backporting. For additional detail on what’s included in Bitcoin, please refer to their release notes. diff --git a/doc/release-notes/dash/release-notes-19.2.0.md b/doc/release-notes/dash/release-notes-19.2.0.md index 34f1b2fb2a..4e2c41547f 100644 --- a/doc/release-notes/dash/release-notes-19.2.0.md +++ b/doc/release-notes/dash/release-notes-19.2.0.md @@ -148,7 +148,7 @@ Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v19.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.0.0.md) released May/22/2023 +- [v19.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.1.0.md) released May/22/2023 - [v19.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.0.0.md) released Apr/14/2023 - [v18.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.2.md) released Mar/21/2023 - [v18.2.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.1.md) released Jan/17/2023 From c49628de541a89c9c5959a37b1008e95f87998a7 Mon Sep 17 00:00:00 2001 From: UdjinM6 Date: Thu, 16 Nov 2023 21:36:46 +0300 Subject: [PATCH 4/7] fix: should not notify about mnlist changes while ConnectBlock isn't done yet (#5711) ## Issue being fixed or feature implemented `ConnectBlock` can fail after `ProcessSpecialTxsInBlock`, we shouldn't be notifying too early. Same for `DisconnectBlock` but that's less of an issue imo. ## What was done? Move notifications to the end of `ConnectBlock`/`DisconnectBlock`. There is no `connman` in `CChainState` and I don't want to pass it in updates struct so I changed `NotifyMasternodeListChanged` and used `connman` from `CDSNotificationInterface` instead. ## How Has This Been Tested? run unit test, run testnet qt wallet ## Breaking Changes ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ --- src/dsnotificationinterface.cpp | 2 +- src/dsnotificationinterface.h | 2 +- src/evo/deterministicmns.cpp | 11 ++++------- src/evo/deterministicmns.h | 11 +++++++++-- src/evo/specialtxman.cpp | 8 ++++---- src/evo/specialtxman.h | 7 +++++-- src/validation.cpp | 22 +++++++++++++++++++--- src/validationinterface.cpp | 4 ++-- src/validationinterface.h | 4 ++-- test/lint/lint-circular-dependencies.sh | 1 + 10 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/dsnotificationinterface.cpp b/src/dsnotificationinterface.cpp index 9bfeb3f82d..a974cccf20 100644 --- a/src/dsnotificationinterface.cpp +++ b/src/dsnotificationinterface.cpp @@ -118,7 +118,7 @@ void CDSNotificationInterface::BlockDisconnected(const std::shared_ptr& pblock, const CBlockIndex* pindex) override; void BlockDisconnected(const std::shared_ptr& pblock, const CBlockIndex* pindexDisconnected) override; - void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman) override; + void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff) override; void NotifyChainLock(const CBlockIndex* pindex, const std::shared_ptr& clsig) override; private: diff --git a/src/evo/deterministicmns.cpp b/src/evo/deterministicmns.cpp index 08696c4ddd..2a0bc7c9ef 100644 --- a/src/evo/deterministicmns.cpp +++ b/src/evo/deterministicmns.cpp @@ -594,7 +594,7 @@ void CDeterministicMNList::RemoveMN(const uint256& proTxHash) mnInternalIdMap = mnInternalIdMap.erase(dmn->GetInternalId()); } -bool CDeterministicMNManager::ProcessBlock(const CBlock& block, gsl::not_null pindex, BlockValidationState& state, const CCoinsViewCache& view, bool fJustCheck) +bool CDeterministicMNManager::ProcessBlock(const CBlock& block, gsl::not_null pindex, BlockValidationState& state, const CCoinsViewCache& view, bool fJustCheck, std::optional& updatesRet) { AssertLockHeld(cs_main); @@ -641,10 +641,8 @@ bool CDeterministicMNManager::ProcessBlock(const CBlock& block, gsl::not_null pindex) +bool CDeterministicMNManager::UndoBlock(gsl::not_null pindex, std::optional& updatesRet) { int nHeight = pindex->nHeight; uint256 blockHash = pindex->GetBlockHash(); @@ -684,8 +682,7 @@ bool CDeterministicMNManager::UndoBlock(gsl::not_null pindex if (diff.HasChanges()) { auto inversedDiff = curList.BuildDiff(prevList); - GetMainSignals().NotifyMasternodeListChanged(true, curList, inversedDiff, connman); - uiInterface.NotifyMasternodeListChanged(prevList, pindex->pprev); + updatesRet = {curList, prevList, inversedDiff}; } const auto& consensusParams = Params().GetConsensus(); diff --git a/src/evo/deterministicmns.h b/src/evo/deterministicmns.h index 69044f5f8d..96e9e5ef42 100644 --- a/src/evo/deterministicmns.h +++ b/src/evo/deterministicmns.h @@ -565,6 +565,13 @@ constexpr int llmq_max_blocks() { return max_blocks; } +struct MNListUpdates +{ + CDeterministicMNList old_list; + CDeterministicMNList new_list; + CDeterministicMNListDiff diff; +}; + class CDeterministicMNManager { static constexpr int DISK_SNAPSHOT_PERIOD = 576; // once per day @@ -596,8 +603,8 @@ public: ~CDeterministicMNManager() = default; bool ProcessBlock(const CBlock& block, gsl::not_null pindex, BlockValidationState& state, - const CCoinsViewCache& view, bool fJustCheck) EXCLUSIVE_LOCKS_REQUIRED(cs_main) LOCKS_EXCLUDED(cs); - bool UndoBlock(gsl::not_null pindex) LOCKS_EXCLUDED(cs); + const CCoinsViewCache& view, bool fJustCheck, std::optional& updatesRet) EXCLUSIVE_LOCKS_REQUIRED(cs_main) LOCKS_EXCLUDED(cs); + bool UndoBlock(gsl::not_null pindex, std::optional& updatesRet) LOCKS_EXCLUDED(cs); void UpdatedBlockTip(gsl::not_null pindex) LOCKS_EXCLUDED(cs); diff --git a/src/evo/specialtxman.cpp b/src/evo/specialtxman.cpp index f4f7ba4dea..0108cc131b 100644 --- a/src/evo/specialtxman.cpp +++ b/src/evo/specialtxman.cpp @@ -133,7 +133,7 @@ static bool UndoSpecialTx(const CTransaction& tx, const CBlockIndex* pindex) bool ProcessSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHFManager& mnhfManager, llmq::CQuorumBlockProcessor& quorum_block_processor, const llmq::CChainLocksHandler& chainlock_handler, const Consensus::Params& consensusParams, const CCoinsViewCache& view, bool fJustCheck, bool fCheckCbTxMerleRoots, - BlockValidationState& state) + BlockValidationState& state, std::optional& updatesRet) { AssertLockHeld(cs_main); @@ -181,7 +181,7 @@ bool ProcessSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CM nTimeQuorum += nTime3 - nTime2; LogPrint(BCLog::BENCHMARK, " - quorumBlockProcessor: %.2fms [%.2fs]\n", 0.001 * (nTime3 - nTime2), nTimeQuorum * 0.000001); - if (!deterministicMNManager->ProcessBlock(block, pindex, state, view, fJustCheck)) { + if (!deterministicMNManager->ProcessBlock(block, pindex, state, view, fJustCheck, updatesRet)) { // pass the state returned by the function above return false; } @@ -231,7 +231,7 @@ bool ProcessSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CM return true; } -bool UndoSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHFManager& mnhfManager, llmq::CQuorumBlockProcessor& quorum_block_processor) +bool UndoSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHFManager& mnhfManager, llmq::CQuorumBlockProcessor& quorum_block_processor, std::optional& updatesRet) { AssertLockHeld(cs_main); @@ -256,7 +256,7 @@ bool UndoSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHF return false; } - if (!deterministicMNManager->UndoBlock(pindex)) { + if (!deterministicMNManager->UndoBlock(pindex, updatesRet)) { return false; } diff --git a/src/evo/specialtxman.h b/src/evo/specialtxman.h index eef77c686e..18a20381dc 100644 --- a/src/evo/specialtxman.h +++ b/src/evo/specialtxman.h @@ -9,12 +9,15 @@ #include #include +#include + class BlockValidationState; class CBlock; class CBlockIndex; class CCoinsViewCache; class CMNHFManager; class TxValidationState; +struct MNListUpdates; namespace llmq { class CQuorumBlockProcessor; class CChainLocksHandler; @@ -30,9 +33,9 @@ bool CheckSpecialTx(const CTransaction& tx, const CBlockIndex* pindexPrev, const bool ProcessSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHFManager& mnhfManager, llmq::CQuorumBlockProcessor& quorum_block_processor, const llmq::CChainLocksHandler& chainlock_handler, const Consensus::Params& consensusParams, const CCoinsViewCache& view, bool fJustCheck, bool fCheckCbTxMerleRoots, - BlockValidationState& state) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + BlockValidationState& state, std::optional& updatesRet) EXCLUSIVE_LOCKS_REQUIRED(cs_main); bool UndoSpecialTxsInBlock(const CBlock& block, const CBlockIndex* pindex, CMNHFManager& mnhfManager, - llmq::CQuorumBlockProcessor& quorum_block_processor) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + llmq::CQuorumBlockProcessor& quorum_block_processor, std::optional& updatesRet) EXCLUSIVE_LOCKS_REQUIRED(cs_main); bool CheckCreditPoolDiffForBlock(const CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams, const CAmount blockSubsidy, BlockValidationState& state); diff --git a/src/validation.cpp b/src/validation.cpp index b6c8843cdf..cd89ee410d 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -52,6 +52,7 @@ #include #include +#include #include #include #include @@ -1731,7 +1732,8 @@ DisconnectResult CChainState::DisconnectBlock(const CBlock& block, const CBlockI std::vector > addressUnspentIndex; std::vector > spentIndex; - if (!UndoSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor)) { + std::optional mnlist_updates_opt{std::nullopt}; + if (!UndoSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor, mnlist_updates_opt)) { error("DisconnectBlock(): UndoSpecialTxsInBlock failed"); return DISCONNECT_FAILED; } @@ -1847,6 +1849,12 @@ DisconnectResult CChainState::DisconnectBlock(const CBlock& block, const CBlockI view.SetBestBlock(pindex->pprev->GetBlockHash()); m_evoDb.WriteBestBlock(pindex->pprev->GetBlockHash()); + if (mnlist_updates_opt.has_value()) { + auto mnlu = mnlist_updates_opt.value(); + GetMainSignals().NotifyMasternodeListChanged(true, mnlu.old_list, mnlu.diff); + uiInterface.NotifyMasternodeListChanged(mnlu.new_list, pindex->pprev); + } + auto finish = Now(); auto diff = finish - start; statsClient.timing("DisconnectBlock_ms", count_milliseconds(diff), 1.0f); @@ -2210,7 +2218,8 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, bool fDIP0001Active_context = pindex->nHeight >= Params().GetConsensus().DIP0001Height; // MUST process special txes before updating UTXO to ensure consistency between mempool and block processing - if (!ProcessSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor, *m_clhandler, m_params.GetConsensus(), view, fJustCheck, fScriptChecks, state)) { + std::optional mnlist_updates_opt{std::nullopt}; + if (!ProcessSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor, *m_clhandler, m_params.GetConsensus(), view, fJustCheck, fScriptChecks, state, mnlist_updates_opt)) { return error("ConnectBlock(DASH): ProcessSpecialTxsInBlock for block %s failed with %s", pindex->GetBlockHash().ToString(), state.ToString()); } @@ -2470,6 +2479,12 @@ bool CChainState::ConnectBlock(const CBlock& block, BlockValidationState& state, view.SetBestBlock(pindex->GetBlockHash()); m_evoDb.WriteBestBlock(pindex->GetBlockHash()); + if (mnlist_updates_opt.has_value()) { + auto mnlu = mnlist_updates_opt.value(); + GetMainSignals().NotifyMasternodeListChanged(false, mnlu.old_list, mnlu.diff); + uiInterface.NotifyMasternodeListChanged(mnlu.new_list, pindex); + } + int64_t nTime8 = GetTimeMicros(); nTimeCallbacks += nTime8 - nTime5; LogPrint(BCLog::BENCHMARK, " - Callbacks: %.2fms [%.2fs (%.2fms/blk)]\n", MILLI * (nTime8 - nTime5), nTimeCallbacks * MICRO, nTimeCallbacks * MILLI / nBlocksTotal); @@ -4838,7 +4853,8 @@ bool CChainState::RollforwardBlock(const CBlockIndex* pindex, CCoinsViewCache& i // MUST process special txes before updating UTXO to ensure consistency between mempool and block processing BlockValidationState state; - if (!ProcessSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor, *m_clhandler, m_params.GetConsensus(), inputs, false /*fJustCheck*/, false /*fScriptChecks*/, state)) { + std::optional mnlist_updates_opt{std::nullopt}; + if (!ProcessSpecialTxsInBlock(block, pindex, m_mnhfManager, *m_quorum_block_processor, *m_clhandler, m_params.GetConsensus(), inputs, false /*fJustCheck*/, false /*fScriptChecks*/, state, mnlist_updates_opt)) { return error("RollforwardBlock(DASH): ProcessSpecialTxsInBlock for block %s failed with %s", pindex->GetBlockHash().ToString(), state.ToString()); } diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index 19085d8322..1dc40f3aad 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -310,7 +310,7 @@ void CMainSignals::NotifyRecoveredSig(const std::shared_ptrGetHash().ToString()); } -void CMainSignals::NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman) { +void CMainSignals::NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff) { LOG_EVENT("%s: notify mn list changed undo=%d", __func__, undo); - m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.NotifyMasternodeListChanged(undo, oldMNList, diff, connman); }); + m_internals->Iterate([&](CValidationInterface& callbacks) { callbacks.NotifyMasternodeListChanged(undo, oldMNList, diff); }); } diff --git a/src/validationinterface.h b/src/validationinterface.h index 4a29c8c088..018d858ef2 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -165,7 +165,7 @@ protected: virtual void NotifyGovernanceObject(const std::shared_ptr& object) {} virtual void NotifyInstantSendDoubleSpendAttempt(const CTransactionRef& currentTx, const CTransactionRef& previousTx) {} virtual void NotifyRecoveredSig(const std::shared_ptr& sig) {} - virtual void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman) {} + virtual void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff) {} /** * Notifies listeners of the new active block chain on-disk. * @@ -232,7 +232,7 @@ public: void NotifyGovernanceObject(const std::shared_ptr& object); void NotifyInstantSendDoubleSpendAttempt(const CTransactionRef ¤tTx, const CTransactionRef &previousTx); void NotifyRecoveredSig(const std::shared_ptr &sig); - void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff, CConnman& connman); + void NotifyMasternodeListChanged(bool undo, const CDeterministicMNList& oldMNList, const CDeterministicMNListDiff& diff); void ChainStateFlushed(const CBlockLocator &); void BlockChecked(const CBlock&, const BlockValidationState&); void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr&); diff --git a/test/lint/lint-circular-dependencies.sh b/test/lint/lint-circular-dependencies.sh index ed25df4f21..2486083977 100755 --- a/test/lint/lint-circular-dependencies.sh +++ b/test/lint/lint-circular-dependencies.sh @@ -105,6 +105,7 @@ EXPECTED_CIRCULAR_DEPENDENCIES=( "llmq/debug -> llmq/dkgsessionhandler -> llmq/dkgsession -> llmq/debug" "llmq/utils -> validation -> llmq/utils" "evo/mnhftx -> validation -> evo/mnhftx" + "evo/deterministicmns -> validation -> evo/deterministicmns" ) EXIT_CODE=0 From 42b5b155216be2c2f07527166e7a2de07ccdcc80 Mon Sep 17 00:00:00 2001 From: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com> Date: Thu, 16 Nov 2023 12:38:59 -0600 Subject: [PATCH 5/7] build(guix): add debug symbols for osx (#5708) ## Issue being fixed or feature implemented Add debug symbols for Darwin ## What was done? Added Darwin debug symbols and combine them as output ## How Has This Been Tested? guix build ## Breaking Changes _Please describe any breaking changes your code introduces_ ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ --------- Co-authored-by: UdjinM6 --- contrib/guix/libexec/build.sh | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index 895e1b86ac..5097b8b780 100644 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -286,6 +286,13 @@ mkdir -p "$DISTSRC" # Build Dash Core make --jobs="$JOBS" ${V:+V=1} + # Make macos-specific debug symbols + case "$HOST" in + *darwin*) + make -C src/ osx_debug + ;; + esac + # Check that symbol/security checks tools are sane. make test-security-check ${V:+V=1} # Perform basic security checks on a series of executables. @@ -308,14 +315,7 @@ mkdir -p "$DISTSRC" INSTALLPATH="${PWD}/installed/${DISTNAME}" mkdir -p "${INSTALLPATH}" # Install built Dash Core to $INSTALLPATH - case "$HOST" in - *darwin*) - make install-strip DESTDIR="${INSTALLPATH}" ${V:+V=1} - ;; - *) - make install DESTDIR="${INSTALLPATH}" ${V:+V=1} - ;; - esac + make install DESTDIR="${INSTALLPATH}" ${V:+V=1} case "$HOST" in *darwin*) @@ -355,7 +355,10 @@ mkdir -p "$DISTSRC" rm -rf "${DISTNAME}/lib/pkgconfig" case "$HOST" in - *darwin*) ;; + *darwin*) + # Copy dSYM-s + find ../src -name "*.dSYM" -exec cp -ra {} "${DISTNAME}/bin" \; + ;; *) # Split binaries and libraries from their debug symbols { @@ -404,11 +407,16 @@ mkdir -p "$DISTSRC" || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" && exit 1 ) ;; *darwin*) - find "${DISTNAME}" -print0 \ + find "${DISTNAME}" -not -path "*.dSYM*" -print0 \ | sort --zero-terminated \ | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" \ || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" && exit 1 ) + find "${DISTNAME}" -path "*.dSYM*" -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" && exit 1 ) ;; esac ) # $DISTSRC/installed From f914cdd52b8cf7c361ce3490f20839d1606cb792 Mon Sep 17 00:00:00 2001 From: pasta Date: Thu, 16 Nov 2023 12:41:31 -0600 Subject: [PATCH 6/7] docs: archive v20.0.0 release notes and create v20.0.1 release notes --- doc/release-notes.md | 430 +------------- .../dash/release-notes-20.0.0.md | 534 ++++++++++++++++++ 2 files changed, 546 insertions(+), 418 deletions(-) create mode 100644 doc/release-notes/dash/release-notes-20.0.0.md diff --git a/doc/release-notes.md b/doc/release-notes.md index 47a77c41e1..d31ae9642f 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,13 +1,12 @@ -# Dash Core version v20.0.0 +# Dash Core version v20.0.1 Release is now available from: -This is a new major version release, bringing new features, various bugfixes -and other improvements. +This is a new patch version release, bringing small bug fixes and build system enhancements. -This release is mandatory for all nodes. +This release is optional for all nodes. Please report bugs using the issue tracker at GitHub: @@ -36,409 +35,17 @@ reindex or re-sync the whole chain. # Notable changes -## ChainLock-based random beacon +## Qt Testnet Crash -To improve long-living masternode quorum (LLMQ) selection, the `v20` hard fork -will enable a new random beacon using ChainLock signatures as described in -[DIP-0029][DIP-0029]. ChainLock signatures will be stored in the Coinbase -transaction to be used as a source of randomness during quorum member -calculations. This change increases the decentralization in the source of -randomness and prevents masternodes or miners from being able to manipulate the -LLMQ process. +A crash has been fixed which has only been seen on testnet and only affects QT clients. -## Treasury expansion +## Guix Build System Enhancements +The Guix build system has been enhanced to enable building with custom options when needed. +This will be used to support custom builds such as for nightly builds with extra debug options. -Currently, 10% of block rewards are set aside for the Dash DAO treasury which -funds development and other network efforts. Once the `v20` hard fork goes into -effect on mainnet, the treasury system allotment will increase to 20% of block -rewards to align with the proposal approved in September. Miner and masternode -rewards will change to 20% and 60% respectively upon activation of the change, -previous reallocation periods are ignored. +Additionally, the Guix system will now produce debug symbols for MacOS. -## Asset lock and unlock transactions - -The asset lock process provides a mechanism for locking and unlocking Dash in a -credit pool. This credit pool mirrors the available credit supply in Dash -Platform. When a certain amount of Dash is locked, a proportional number of -credits are issued to the identity specified by the transaction issuer. The -identity then uses the credits to pay fees for operations done on Dash -Platform. Masternode identities receive the fees and can convert them back to -Dash by withdrawing them from Dash Platform. - -Note: The asset lock feature is activated by the `v20` hard fork while the asset -unlock feature will be activated later by another hard fork. - -## Coinbase Transaction Changes - -Once v20 activates, Coinbase transactions in all mined blocks must be of -version 3. - -Version 3 of the Coinbase transaction will include the following new fields: -- `bestCLSignature` (`BLSSignature`) will hold the best Chainlock signature - known at the moment -- `bestCLHeightDiff` (`uint32`) is equal to the diff in heights from the mined - block height -- `creditPoolBalance` (`int64`) is equal to all the duffs locked in all previous - blocks minus all the duffs unlocked in all previous blocks plus all the block - subsidy paid to evonodes on Platform. - -Although miners are forced to include a version 3 Coinbase transaction, the -actual real-time best Chainlock signature isn't required as long as blocks -contain a `bestCLSignature` equal to (or newer than) the previous block. - -Note: Until the first `bestCLSignature` is included in a Coinbase transaction -once v20 activates, null `bestCLSignature` and `bestCLHeightDiff` values are -perfectly valid. - -## Testnet Breaking Changes - -### Enhanced hard fork - -Full implementation of the [DIP-0023][DIP-0023] enhanced hard fork mechanism has -been completed. This improved activation mechanism includes signaling from both -masternodes and miners while also ensuring sufficient upgrade time is available -to partners. This new system is enabled on testnet and devnets by the `v20` -activation and a newly introduced `SPORK_24_TEST_EHF` spork. - -### Fixed subsidy base after `v20` - -Starting from `v20` activation, the base block subsidy on testnet and devnets -will no longer be calculated based on previous block difficulty. This change -mimics mainnet behaviour. It also simplifies calculations for Platform which -would not need to constantly get block's difficulty in order to calculate -platform reward. - -## Sentinel deprecation - -Sentinel functionality has been integrated directly into v20.0.0, so it will no -longer be necessary for masternodes to run the standalone Sentinel application. -During the superblock maturity window (1662 blocks), payee masternodes will try -to create, sign and submit a superblock candidate. Several RPC commands have -been updated to prevent conflicts between v20.0.0 and existing Sentinel -installs. It is recommended to remove or disable Sentinel after updating -masternodes to v20.0.0. - -## P2P and network changes - -### Removal of reject network messages from Dash Core (BIP61) - -This feature has been disabled by default since Dash Core version 19.0.0. -Nodes on the network can not generally be trusted to send valid ("reject") -messages, so this should only ever be used when connected to a trusted node. - -Since Dash Core version 20.0.0 there are extra changes: - -The removal of BIP61 `REJECT` message support also has the following minor RPC -and logging implications: - -- `testmempoolaccept` and `sendrawtransaction` no longer return the P2P `REJECT` - code when a transaction is not accepted to the mempool. They still return the - verbal reject reason. - -- Log messages that previously reported the `REJECT` code when a transaction was - not accepted to the mempool now no longer report the `REJECT` code. The reason - for rejection is still reported. - -### Transaction rebroadcast - -The mempool now tracks whether transactions submitted via the wallet or RPCs -have been successfully broadcast. Every 10-15 minutes, the node will try to -announce unbroadcast transactions until a peer requests it via a `getdata` -message or the transaction is removed from the mempool for other reasons. -The node will not track the broadcast status of transactions submitted to the -node using P2P relay. This version reduces the initial broadcast guarantees -for wallet transactions submitted via P2P to a node running the wallet. - -To improve wallet privacy, the frequency of wallet rebroadcast attempts is -reduced from approximately once every 15 minutes to once every 1-3 hours. -To maintain a similar level of guarantee for initial broadcast of wallet -transactions, the mempool tracks these transactions as a part of the newly -introduced unbroadcast set. - -### `MNLISTDIFF` P2P message - -Starting with protocol version `70230`, the following fields are added to the -`MNLISTDIFF` message after `newQuorums`. - -| Field | Type | Size | Description | -|-|-|-|-| -| quorumsCLSigsCount | compactSize uint | 1-9 | Number of quorumsCLSigs elements | -| quorumsCLSigs | quorumsCLSigsObject[] | variable | ChainLock signature used to calculate members per quorum indexes (in newQuorums) | - -The content of `quorumsCLSigsObject`: - -| Field | Type | Size | Description | -|-|-|-|-| -| signature | BLSSig | 96 | ChainLock signature | -| indexSetCount | compactSize uint | 1-9 | Number of quorum indexes using the same `signature` for their member calculation | -| indexSet | uint16_t[] | variable | Quorum indexes corresponding in `newQuorums` using `signature` for their member calculation | - -Note: The `quorumsCLSigs` field in both RPC and P2P will only be populated after -the v20 activation. - -### Other - -- It is possible to run Dash Core as an I2P service and connect to such - services. Please read [docs][i2p] for more information. -- Removed support for Tor v2, `LEGACYTXLOCKREQUEST` (`"ix"`) message and -`NODE_GETUTXO` (bit 1) node service bit. - -## GUI - -Add more granular CoinJoin options to let users control the number of CoinJoin -sessions and also the min/max number of denominations for wallets to create -while mixing. - -## Remote Procedure Call (RPC) Changes - -### The new RPCs are: - -- `addpeeraddress` Add the address of a potential peer to the address manager. - This RPC is for testing only. - -- The `getindexinfo` RPC returns the actively running indices of the node, - including their current sync status and height. It also accepts an - `index_name` to specify returning only the status of that index. - -- `protx listdiff` RPC returns a full deterministic masternode list diff - between two heights. - -### The removed RPCs are: - -- `gobject vote-conf` is no longer available. - -### Changes in existing RPCs introduced through bitcoin backports: - -- The `fundrawtransaction`, `sendmany`, `sendtoaddress`, and - `walletcreatefundedpsbt` RPC commands have been updated to include two new - fee estimation methods, `DASH/kB` and `duff/B`. The target is the fee - expressed explicitly in the given form. In addition, the `estimate_mode` - parameter is now case insensitive for all of the above RPC commands. - -- Soft fork reporting in the `getblockchaininfo` return object has been - updated. For full details, see the RPC help text. In summary: - - The `bip9_softforks` sub-object is no longer returned - - The `softforks` sub-object now returns an object keyed by soft fork name, - rather than an array - - Each softfork object in the `softforks` object contains a `type` value - which is either `buried` (for soft fork deployments where the activation - height is hard-coded into the client implementation), or `bip9`(for soft - fork deployments where activation is controlled by BIP 9 signaling). - -- `getblocktemplate` no longer returns a `rules` array containing `CSV` - (the BIP 9 deployments that are currently in active state). - -- The `gettransaction` RPC now accepts a third (boolean) argument, `verbose`. - If set to `true`, a new `decoded` field will be added to the response - containing the decoded transaction. This field is equivalent to RPC - `decoderawtransaction`, or RPC `getrawtransaction` when `verbose` is passed. - -- `testmempoolaccept` and `sendrawtransaction` no longer return the P2P - `REJECT` code when a transaction is not accepted to the mempool. See the - Section [_Removal of reject network messages from Dash Core (BIP61)_](#removal-of-reject-network-messages-from-dash-core-bip61) above for - details on the removal of BIP61 `REJECT` message support. - -- A new descriptor type, `sortedmulti(...)`, has been added to support multisig - scripts where the public keys are sorted lexicographically in the resulting - script. - -- The RPC `gettransaction`, `listtransactions` and `listsinceblock` responses - now also includes the height of the block that contains the wallet - transaction, if any. - -- RPC `getaddressinfo` changes: - - the `label` field has been deprecated in favor of the `labels` field and - will be removed in 0.21. It can be re-enabled in the interim by launching - with `-deprecatedrpc=label`. - - the `labels` behavior of returning an array of JSON objects containing name - and purpose key/value pairs has been deprecated in favor of an array of - label names and will be removed in 0.21. The previous behavior can be - re-enabled in the interim by launching with `-deprecatedrpc=labelspurpose`. - -- Error codes have been updated to be more accurate for the following error - cases: - - `signmessage` now returns `RPC_INVALID_ADDRESS_OR_KEY (-5)` if the - passed address is invalid. Previously returned `RPC_TYPE_ERROR (-3)`. - - `verifymessage` now returns `RPC_INVALID_ADDRESS_OR_KEY (-5)` if the - passed address is invalid. Previously returned `RPC_TYPE_ERROR (-3)`. - - `verifymessage` now returns `RPC_TYPE_ERROR (-3)` if the passed signature - is malformed. Previously returned `RPC_INVALID_ADDRESS_OR_KEY (-5)`. - -- The `settxfee` RPC will fail if the fee is set higher than the `-maxtxfee` - command line setting. The wallet will already fail to create transactions - with fees higher than `-maxtxfee`. - -- `getmempoolinfo` now returns an additional `unbroadcastcount` field. The - mempool tracks locally submitted transactions until their initial broadcast - is acknowledged by a peer. This field returns the count of transactions - waiting for acknowledgement. - -- Mempool RPCs such as `getmempoolentry` and `getrawmempool` with - `verbose=true` now return an additional `unbroadcast` field. This indicates - whether initial broadcast of the transaction has been acknowledged by a - peer. `getmempoolancestors` and `getmempooldescendants` are also updated. - -- `logging` and `debug` rpc support new logging categories `validations` and - `i2p` - -- `gettxoutsetinfo` RPC has 2 new parameters and lots of new fields in - results. Please check `help gettxoutsetinfo` for more information. - -- `gettxchainlocks` Returns the block height each transaction was mined at and - whether it is chainlocked or not. - -### Dash-specific changes in existing RPCs: - -- `getblockchaininfo` RPC returns the field `activation_height` for each - softfork in `locked_in` status indicating the expected activation height. - -- `getblockchaininfo` RPC returns the field `ehf` and `ehf_height` for each - softfork. `ehf_height` indicates the minimum height when miner's signals can - be accepted for the deployment with `ehf` set to `true`. - -- `getgovernanceinfo` RPC returns two new fields: - - `governancebudget` (the governance budget for the next superblock) - - `fundingthreshold` (the number of absolute yes votes required for a proposal - to be passing) - -- `gobject submit` will no longer accept submission of triggers. - -- `protx diff` RPC returns a new field `quorumsCLSigs`. This field is a list - containing: a ChainLock signature and the list of corresponding quorum - indexes in `newQuorums`. - -- `protx list`: New type `evo` filters only HPMNs. - -- `*_hpmn` RPCs were renamed: - - `protx register_hpmn` to `protx register_evo` - - `protx register_fund_hpmn` to `protx register_fund_evo` - - `protx register_prepare_hpmn` to `protx register_prepare_evo` - - `protx update_service_hpmn` to `protx update_service_evo` - - Please note that `*_hpmn` RPCs are not fully removed; instead they are - deprecated so you can still enable them by using the `-deprecatedrpc=hpmn` - option. - -- `masternode count` returns the total number of evonodes under field `evo` - instead of `hpmn`. - -- `masternodelist`: New mode `evo` filters only HPMNs. - -- Description type string `HighPerformance` is renamed to `Evo`: affects most - RPCs return MNs details. - -Please check `help ` for more detailed information on specific RPCs. - -## Command-line options - -### New cmd-line options: - -- `-generate` Generate blocks immediately, equivalent to RPC generatenewaddress - followed by RPC generatetoaddress. Optional positional integer arguments are - number of blocks to generate (default: 1) and maximum iterations to try - (default: 1000000), equivalent to RPC generatetoaddress nblocks and maxtries - arguments. - -- `-netinfo` Get network peer connection information from the remote server. - An optional integer argument from 0 to 4 can be passed for different peers - listings (default: 0). Pass `help` for detailed help documentation. - -- `-coinstatsindex` Maintain coinstats index used by the gettxoutset RPC - (default: false) - -- `-fastprune` Use smaller block files and lower minimum prune height for - testing purposes - -- `-i2psam`= I2P SAM proxy to reach I2P peers and accept I2P - connections (default: none) - -- `-i2pacceptincoming` If set and `-i2psam` is also set then incoming I2P - connections are accepted via the SAM proxy. If this is not set but `-i2psam` - is set then only outgoing connections will be made to the I2P network. Ignored - if `-i2psam` is not set. Listening for incoming I2P connections is done - through the SAM proxy, not by binding to a local address and port (default: 1) - -- `-llmqmnhf` Override the default LLMQ type used for EHF. (default: - llmq_devnet, devnet-only) - -- `-llmqtestinstantsend` Override the default LLMQ type used for InstantSend. - Used mainly to test Platform. (default: llmq_test_instantsend, regtest-only) - -- `-llmqtestinstantsenddip0024` Override the default LLMQ type used for - InstantSendDIP0024. Used mainly to test Platform. (default: - llmq_test_dip0024, regtest-only) - -- `-mnemonicbits` User defined mnemonic security for HD wallet in bits (BIP39). - Only has effect during wallet creation/first start (allowed values: 128, 160, - 192, 224, 256; default: 128) - -- `-chainlocknotify=` Execute command when the best chainlock changes - `%s` in cmd is replaced by chainlocked block hash. - -### Removed cmd-line options: - -- `-dropmessagestest` - -- `-upgradewallet` replaced by `upgradewallet` rpc - -### Changes in existing cmd-line options: - -- `-fallbackfee` was 0 (disabled) by default for the main chain, but 1000 by - default for the test chains. Now it is 0 by default for all chains. Testnet - and regtest users will have to add fallbackfee=1000 to their configuration if - they weren't setting it and they want it to keep working like before. - -- The `dash-cli -getinfo` command now displays the wallet name and balance for - each of the loaded wallets when more than one is loaded (e.g. in multiwallet - mode) and a wallet is not specified with `-rpcwallet`. - -- A `download` permission has been extracted from the `noban` permission. For - compatibility, `noban` implies the `download` permission, but this may change - in future releases. Refer to the help of the affected settings `-whitebind` - and `-whitelist` for more details. - -- `-vbparams` accepts `useehf`. - -- `-instantsendnotify=` `%w` is replaced by wallet name. - -Please check `Help -> Command-line options` in Qt wallet or `dashd --help` for -more information. - -## JSON-RPC - -All JSON-RPC methods accept a new [named parameter][json-rpc] called `args` that can -contain positional parameter values. This is a convenience to allow some -parameter values to be passed by name without having to name every value. The -python test framework and `dash-cli` tool both take advantage of this, so -for example: - -```sh -dash-cli -named createwallet wallet_name=mywallet load_on_startup=1 -``` - -Can now be shortened to: - -```sh -dash-cli -named createwallet mywallet load_on_startup=1 -``` - -## Switch from Gitian to Guix - -Starting from v20.0.0 deterministic builds are going to be produced using the -Guix build system. See [contrib/guix/README.md][guix-readme]. The previously -used -Gitian build system is no longer supported and is not guaranteed to produce any -meaningful results. - -## Backports from Bitcoin Core - -This release introduces many updates from Bitcoin v0.20-v22.0 as well as -numerous updates from Bitcoin v23.0-v25.0. Bitcoin changes that do not align -with Dash’s product needs, such as SegWit and RBF, are excluded from our -backporting. For additional detail on what’s included in Bitcoin, please refer -to their release notes. - -# v20.0.0 Change log +# v20.0.1 Change log See detailed [set of changes][set-of-changes]. @@ -446,17 +53,9 @@ See detailed [set of changes][set-of-changes]. Thanks to everyone who directly contributed to this release: -- Ivan Shumkov (shumkov) -- Kittywhiskers Van Gogh (kittywhiskers) - Konstantin Akimov (knst) -- Munkybooty -- Odysseas Gabrielides (ogabrielides) -- PanderMusubi (Pander) - PastaPastaPasta -- strophy -- thephez - UdjinM6 -- Vijay Das Manikpuri (vijaydasmp) As well as everyone that submitted issues, reviewed pull requests and helped debug the release candidates. @@ -483,6 +82,7 @@ Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: +- [v20.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.0.md) released November/15/2023 - [v19.3.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.3.0.md) released July/31/2023 - [v19.2.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.2.0.md) released June/19/2023 - [v19.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.1.0.md) released May/22/2023 @@ -525,10 +125,4 @@ These release are considered obsolete. Old release notes can be found here: - [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 - [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 -[DIP-0023]: https://github.com/dashpay/dips/blob/master/dip-0023.md -[DIP-0029]: https://github.com/dashpay/dips/blob/master/dip-0029.md - -[i2p]: https://github.com/dashpay/dash/blob/v20.x/doc/i2p.md -[guix-readme]: https://github.com/dashpay/dash/blob/v20.x/contrib/guix/README.md -[json-rpc]: https://github.com/dashpay/dash/blob/v20.x/doc/JSON-RPC-interface.md#parameter-passing -[set-of-changes]: https://github.com/dashpay/dash/compare/v19.3.0...dashpay:v20.0.0 +[set-of-changes]: https://github.com/dashpay/dash/compare/v20.0.0...dashpay:v20.0.1 diff --git a/doc/release-notes/dash/release-notes-20.0.0.md b/doc/release-notes/dash/release-notes-20.0.0.md new file mode 100644 index 0000000000..47a77c41e1 --- /dev/null +++ b/doc/release-notes/dash/release-notes-20.0.0.md @@ -0,0 +1,534 @@ +# Dash Core version v20.0.0 + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes +and other improvements. + +This release is mandatory for all nodes. + +Please report bugs using the issue tracker at GitHub: + + + + +# Upgrading and downgrading + +## How to Upgrade + +If you are running an older version, shut it down. Wait until it has completely +shut down (which might take a few minutes for older versions), then run the +installer (on Windows) or just copy over /Applications/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +## Downgrade warning + +### Downgrade to a version < v19.2.0 + +Downgrading to a version older than v19.2.0 is not supported due to changes +in the evodb database. If you need to use an older version, you must either +reindex or re-sync the whole chain. + +# Notable changes + +## ChainLock-based random beacon + +To improve long-living masternode quorum (LLMQ) selection, the `v20` hard fork +will enable a new random beacon using ChainLock signatures as described in +[DIP-0029][DIP-0029]. ChainLock signatures will be stored in the Coinbase +transaction to be used as a source of randomness during quorum member +calculations. This change increases the decentralization in the source of +randomness and prevents masternodes or miners from being able to manipulate the +LLMQ process. + +## Treasury expansion + +Currently, 10% of block rewards are set aside for the Dash DAO treasury which +funds development and other network efforts. Once the `v20` hard fork goes into +effect on mainnet, the treasury system allotment will increase to 20% of block +rewards to align with the proposal approved in September. Miner and masternode +rewards will change to 20% and 60% respectively upon activation of the change, +previous reallocation periods are ignored. + +## Asset lock and unlock transactions + +The asset lock process provides a mechanism for locking and unlocking Dash in a +credit pool. This credit pool mirrors the available credit supply in Dash +Platform. When a certain amount of Dash is locked, a proportional number of +credits are issued to the identity specified by the transaction issuer. The +identity then uses the credits to pay fees for operations done on Dash +Platform. Masternode identities receive the fees and can convert them back to +Dash by withdrawing them from Dash Platform. + +Note: The asset lock feature is activated by the `v20` hard fork while the asset +unlock feature will be activated later by another hard fork. + +## Coinbase Transaction Changes + +Once v20 activates, Coinbase transactions in all mined blocks must be of +version 3. + +Version 3 of the Coinbase transaction will include the following new fields: +- `bestCLSignature` (`BLSSignature`) will hold the best Chainlock signature + known at the moment +- `bestCLHeightDiff` (`uint32`) is equal to the diff in heights from the mined + block height +- `creditPoolBalance` (`int64`) is equal to all the duffs locked in all previous + blocks minus all the duffs unlocked in all previous blocks plus all the block + subsidy paid to evonodes on Platform. + +Although miners are forced to include a version 3 Coinbase transaction, the +actual real-time best Chainlock signature isn't required as long as blocks +contain a `bestCLSignature` equal to (or newer than) the previous block. + +Note: Until the first `bestCLSignature` is included in a Coinbase transaction +once v20 activates, null `bestCLSignature` and `bestCLHeightDiff` values are +perfectly valid. + +## Testnet Breaking Changes + +### Enhanced hard fork + +Full implementation of the [DIP-0023][DIP-0023] enhanced hard fork mechanism has +been completed. This improved activation mechanism includes signaling from both +masternodes and miners while also ensuring sufficient upgrade time is available +to partners. This new system is enabled on testnet and devnets by the `v20` +activation and a newly introduced `SPORK_24_TEST_EHF` spork. + +### Fixed subsidy base after `v20` + +Starting from `v20` activation, the base block subsidy on testnet and devnets +will no longer be calculated based on previous block difficulty. This change +mimics mainnet behaviour. It also simplifies calculations for Platform which +would not need to constantly get block's difficulty in order to calculate +platform reward. + +## Sentinel deprecation + +Sentinel functionality has been integrated directly into v20.0.0, so it will no +longer be necessary for masternodes to run the standalone Sentinel application. +During the superblock maturity window (1662 blocks), payee masternodes will try +to create, sign and submit a superblock candidate. Several RPC commands have +been updated to prevent conflicts between v20.0.0 and existing Sentinel +installs. It is recommended to remove or disable Sentinel after updating +masternodes to v20.0.0. + +## P2P and network changes + +### Removal of reject network messages from Dash Core (BIP61) + +This feature has been disabled by default since Dash Core version 19.0.0. +Nodes on the network can not generally be trusted to send valid ("reject") +messages, so this should only ever be used when connected to a trusted node. + +Since Dash Core version 20.0.0 there are extra changes: + +The removal of BIP61 `REJECT` message support also has the following minor RPC +and logging implications: + +- `testmempoolaccept` and `sendrawtransaction` no longer return the P2P `REJECT` + code when a transaction is not accepted to the mempool. They still return the + verbal reject reason. + +- Log messages that previously reported the `REJECT` code when a transaction was + not accepted to the mempool now no longer report the `REJECT` code. The reason + for rejection is still reported. + +### Transaction rebroadcast + +The mempool now tracks whether transactions submitted via the wallet or RPCs +have been successfully broadcast. Every 10-15 minutes, the node will try to +announce unbroadcast transactions until a peer requests it via a `getdata` +message or the transaction is removed from the mempool for other reasons. +The node will not track the broadcast status of transactions submitted to the +node using P2P relay. This version reduces the initial broadcast guarantees +for wallet transactions submitted via P2P to a node running the wallet. + +To improve wallet privacy, the frequency of wallet rebroadcast attempts is +reduced from approximately once every 15 minutes to once every 1-3 hours. +To maintain a similar level of guarantee for initial broadcast of wallet +transactions, the mempool tracks these transactions as a part of the newly +introduced unbroadcast set. + +### `MNLISTDIFF` P2P message + +Starting with protocol version `70230`, the following fields are added to the +`MNLISTDIFF` message after `newQuorums`. + +| Field | Type | Size | Description | +|-|-|-|-| +| quorumsCLSigsCount | compactSize uint | 1-9 | Number of quorumsCLSigs elements | +| quorumsCLSigs | quorumsCLSigsObject[] | variable | ChainLock signature used to calculate members per quorum indexes (in newQuorums) | + +The content of `quorumsCLSigsObject`: + +| Field | Type | Size | Description | +|-|-|-|-| +| signature | BLSSig | 96 | ChainLock signature | +| indexSetCount | compactSize uint | 1-9 | Number of quorum indexes using the same `signature` for their member calculation | +| indexSet | uint16_t[] | variable | Quorum indexes corresponding in `newQuorums` using `signature` for their member calculation | + +Note: The `quorumsCLSigs` field in both RPC and P2P will only be populated after +the v20 activation. + +### Other + +- It is possible to run Dash Core as an I2P service and connect to such + services. Please read [docs][i2p] for more information. +- Removed support for Tor v2, `LEGACYTXLOCKREQUEST` (`"ix"`) message and +`NODE_GETUTXO` (bit 1) node service bit. + +## GUI + +Add more granular CoinJoin options to let users control the number of CoinJoin +sessions and also the min/max number of denominations for wallets to create +while mixing. + +## Remote Procedure Call (RPC) Changes + +### The new RPCs are: + +- `addpeeraddress` Add the address of a potential peer to the address manager. + This RPC is for testing only. + +- The `getindexinfo` RPC returns the actively running indices of the node, + including their current sync status and height. It also accepts an + `index_name` to specify returning only the status of that index. + +- `protx listdiff` RPC returns a full deterministic masternode list diff + between two heights. + +### The removed RPCs are: + +- `gobject vote-conf` is no longer available. + +### Changes in existing RPCs introduced through bitcoin backports: + +- The `fundrawtransaction`, `sendmany`, `sendtoaddress`, and + `walletcreatefundedpsbt` RPC commands have been updated to include two new + fee estimation methods, `DASH/kB` and `duff/B`. The target is the fee + expressed explicitly in the given form. In addition, the `estimate_mode` + parameter is now case insensitive for all of the above RPC commands. + +- Soft fork reporting in the `getblockchaininfo` return object has been + updated. For full details, see the RPC help text. In summary: + - The `bip9_softforks` sub-object is no longer returned + - The `softforks` sub-object now returns an object keyed by soft fork name, + rather than an array + - Each softfork object in the `softforks` object contains a `type` value + which is either `buried` (for soft fork deployments where the activation + height is hard-coded into the client implementation), or `bip9`(for soft + fork deployments where activation is controlled by BIP 9 signaling). + +- `getblocktemplate` no longer returns a `rules` array containing `CSV` + (the BIP 9 deployments that are currently in active state). + +- The `gettransaction` RPC now accepts a third (boolean) argument, `verbose`. + If set to `true`, a new `decoded` field will be added to the response + containing the decoded transaction. This field is equivalent to RPC + `decoderawtransaction`, or RPC `getrawtransaction` when `verbose` is passed. + +- `testmempoolaccept` and `sendrawtransaction` no longer return the P2P + `REJECT` code when a transaction is not accepted to the mempool. See the + Section [_Removal of reject network messages from Dash Core (BIP61)_](#removal-of-reject-network-messages-from-dash-core-bip61) above for + details on the removal of BIP61 `REJECT` message support. + +- A new descriptor type, `sortedmulti(...)`, has been added to support multisig + scripts where the public keys are sorted lexicographically in the resulting + script. + +- The RPC `gettransaction`, `listtransactions` and `listsinceblock` responses + now also includes the height of the block that contains the wallet + transaction, if any. + +- RPC `getaddressinfo` changes: + - the `label` field has been deprecated in favor of the `labels` field and + will be removed in 0.21. It can be re-enabled in the interim by launching + with `-deprecatedrpc=label`. + - the `labels` behavior of returning an array of JSON objects containing name + and purpose key/value pairs has been deprecated in favor of an array of + label names and will be removed in 0.21. The previous behavior can be + re-enabled in the interim by launching with `-deprecatedrpc=labelspurpose`. + +- Error codes have been updated to be more accurate for the following error + cases: + - `signmessage` now returns `RPC_INVALID_ADDRESS_OR_KEY (-5)` if the + passed address is invalid. Previously returned `RPC_TYPE_ERROR (-3)`. + - `verifymessage` now returns `RPC_INVALID_ADDRESS_OR_KEY (-5)` if the + passed address is invalid. Previously returned `RPC_TYPE_ERROR (-3)`. + - `verifymessage` now returns `RPC_TYPE_ERROR (-3)` if the passed signature + is malformed. Previously returned `RPC_INVALID_ADDRESS_OR_KEY (-5)`. + +- The `settxfee` RPC will fail if the fee is set higher than the `-maxtxfee` + command line setting. The wallet will already fail to create transactions + with fees higher than `-maxtxfee`. + +- `getmempoolinfo` now returns an additional `unbroadcastcount` field. The + mempool tracks locally submitted transactions until their initial broadcast + is acknowledged by a peer. This field returns the count of transactions + waiting for acknowledgement. + +- Mempool RPCs such as `getmempoolentry` and `getrawmempool` with + `verbose=true` now return an additional `unbroadcast` field. This indicates + whether initial broadcast of the transaction has been acknowledged by a + peer. `getmempoolancestors` and `getmempooldescendants` are also updated. + +- `logging` and `debug` rpc support new logging categories `validations` and + `i2p` + +- `gettxoutsetinfo` RPC has 2 new parameters and lots of new fields in + results. Please check `help gettxoutsetinfo` for more information. + +- `gettxchainlocks` Returns the block height each transaction was mined at and + whether it is chainlocked or not. + +### Dash-specific changes in existing RPCs: + +- `getblockchaininfo` RPC returns the field `activation_height` for each + softfork in `locked_in` status indicating the expected activation height. + +- `getblockchaininfo` RPC returns the field `ehf` and `ehf_height` for each + softfork. `ehf_height` indicates the minimum height when miner's signals can + be accepted for the deployment with `ehf` set to `true`. + +- `getgovernanceinfo` RPC returns two new fields: + - `governancebudget` (the governance budget for the next superblock) + - `fundingthreshold` (the number of absolute yes votes required for a proposal + to be passing) + +- `gobject submit` will no longer accept submission of triggers. + +- `protx diff` RPC returns a new field `quorumsCLSigs`. This field is a list + containing: a ChainLock signature and the list of corresponding quorum + indexes in `newQuorums`. + +- `protx list`: New type `evo` filters only HPMNs. + +- `*_hpmn` RPCs were renamed: + - `protx register_hpmn` to `protx register_evo` + - `protx register_fund_hpmn` to `protx register_fund_evo` + - `protx register_prepare_hpmn` to `protx register_prepare_evo` + - `protx update_service_hpmn` to `protx update_service_evo` + + Please note that `*_hpmn` RPCs are not fully removed; instead they are + deprecated so you can still enable them by using the `-deprecatedrpc=hpmn` + option. + +- `masternode count` returns the total number of evonodes under field `evo` + instead of `hpmn`. + +- `masternodelist`: New mode `evo` filters only HPMNs. + +- Description type string `HighPerformance` is renamed to `Evo`: affects most + RPCs return MNs details. + +Please check `help ` for more detailed information on specific RPCs. + +## Command-line options + +### New cmd-line options: + +- `-generate` Generate blocks immediately, equivalent to RPC generatenewaddress + followed by RPC generatetoaddress. Optional positional integer arguments are + number of blocks to generate (default: 1) and maximum iterations to try + (default: 1000000), equivalent to RPC generatetoaddress nblocks and maxtries + arguments. + +- `-netinfo` Get network peer connection information from the remote server. + An optional integer argument from 0 to 4 can be passed for different peers + listings (default: 0). Pass `help` for detailed help documentation. + +- `-coinstatsindex` Maintain coinstats index used by the gettxoutset RPC + (default: false) + +- `-fastprune` Use smaller block files and lower minimum prune height for + testing purposes + +- `-i2psam`= I2P SAM proxy to reach I2P peers and accept I2P + connections (default: none) + +- `-i2pacceptincoming` If set and `-i2psam` is also set then incoming I2P + connections are accepted via the SAM proxy. If this is not set but `-i2psam` + is set then only outgoing connections will be made to the I2P network. Ignored + if `-i2psam` is not set. Listening for incoming I2P connections is done + through the SAM proxy, not by binding to a local address and port (default: 1) + +- `-llmqmnhf` Override the default LLMQ type used for EHF. (default: + llmq_devnet, devnet-only) + +- `-llmqtestinstantsend` Override the default LLMQ type used for InstantSend. + Used mainly to test Platform. (default: llmq_test_instantsend, regtest-only) + +- `-llmqtestinstantsenddip0024` Override the default LLMQ type used for + InstantSendDIP0024. Used mainly to test Platform. (default: + llmq_test_dip0024, regtest-only) + +- `-mnemonicbits` User defined mnemonic security for HD wallet in bits (BIP39). + Only has effect during wallet creation/first start (allowed values: 128, 160, + 192, 224, 256; default: 128) + +- `-chainlocknotify=` Execute command when the best chainlock changes + `%s` in cmd is replaced by chainlocked block hash. + +### Removed cmd-line options: + +- `-dropmessagestest` + +- `-upgradewallet` replaced by `upgradewallet` rpc + +### Changes in existing cmd-line options: + +- `-fallbackfee` was 0 (disabled) by default for the main chain, but 1000 by + default for the test chains. Now it is 0 by default for all chains. Testnet + and regtest users will have to add fallbackfee=1000 to their configuration if + they weren't setting it and they want it to keep working like before. + +- The `dash-cli -getinfo` command now displays the wallet name and balance for + each of the loaded wallets when more than one is loaded (e.g. in multiwallet + mode) and a wallet is not specified with `-rpcwallet`. + +- A `download` permission has been extracted from the `noban` permission. For + compatibility, `noban` implies the `download` permission, but this may change + in future releases. Refer to the help of the affected settings `-whitebind` + and `-whitelist` for more details. + +- `-vbparams` accepts `useehf`. + +- `-instantsendnotify=` `%w` is replaced by wallet name. + +Please check `Help -> Command-line options` in Qt wallet or `dashd --help` for +more information. + +## JSON-RPC + +All JSON-RPC methods accept a new [named parameter][json-rpc] called `args` that can +contain positional parameter values. This is a convenience to allow some +parameter values to be passed by name without having to name every value. The +python test framework and `dash-cli` tool both take advantage of this, so +for example: + +```sh +dash-cli -named createwallet wallet_name=mywallet load_on_startup=1 +``` + +Can now be shortened to: + +```sh +dash-cli -named createwallet mywallet load_on_startup=1 +``` + +## Switch from Gitian to Guix + +Starting from v20.0.0 deterministic builds are going to be produced using the +Guix build system. See [contrib/guix/README.md][guix-readme]. The previously +used +Gitian build system is no longer supported and is not guaranteed to produce any +meaningful results. + +## Backports from Bitcoin Core + +This release introduces many updates from Bitcoin v0.20-v22.0 as well as +numerous updates from Bitcoin v23.0-v25.0. Bitcoin changes that do not align +with Dash’s product needs, such as SegWit and RBF, are excluded from our +backporting. For additional detail on what’s included in Bitcoin, please refer +to their release notes. + +# v20.0.0 Change log + +See detailed [set of changes][set-of-changes]. + +# Credits + +Thanks to everyone who directly contributed to this release: + +- Ivan Shumkov (shumkov) +- Kittywhiskers Van Gogh (kittywhiskers) +- Konstantin Akimov (knst) +- Munkybooty +- Odysseas Gabrielides (ogabrielides) +- PanderMusubi (Pander) +- PastaPastaPasta +- strophy +- thephez +- UdjinM6 +- Vijay Das Manikpuri (vijaydasmp) + +As well as everyone that submitted issues, reviewed pull requests and helped +debug the release candidates. + +# Older releases + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v19.3.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.3.0.md) released July/31/2023 +- [v19.2.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.2.0.md) released June/19/2023 +- [v19.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.1.0.md) released May/22/2023 +- [v19.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.0.0.md) released Apr/14/2023 +- [v18.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.2.md) released Mar/21/2023 +- [v18.2.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.1.md) released Jan/17/2023 +- [v18.2.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.0.md) released Jan/01/2023 +- [v18.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.1.1.md) released January/08/2023 +- [v18.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.1.0.md) released October/09/2022 +- [v18.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.0.2.md) released October/09/2022 +- [v18.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.0.1.md) released August/17/2022 +- [v0.17.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.17.0.3.md) released June/07/2021 +- [v0.17.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.17.0.2.md) released May/19/2021 +- [v0.16.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.1.md) released November/17/2020 +- [v0.16.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.0.md) released November/14/2020 +- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020 +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 + +[DIP-0023]: https://github.com/dashpay/dips/blob/master/dip-0023.md +[DIP-0029]: https://github.com/dashpay/dips/blob/master/dip-0029.md + +[i2p]: https://github.com/dashpay/dash/blob/v20.x/doc/i2p.md +[guix-readme]: https://github.com/dashpay/dash/blob/v20.x/contrib/guix/README.md +[json-rpc]: https://github.com/dashpay/dash/blob/v20.x/doc/JSON-RPC-interface.md#parameter-passing +[set-of-changes]: https://github.com/dashpay/dash/compare/v19.3.0...dashpay:v20.0.0 From 39b315aef7d4a2ba42443996661cad3c0a6e112b Mon Sep 17 00:00:00 2001 From: pasta Date: Thu, 16 Nov 2023 12:42:35 -0600 Subject: [PATCH 7/7] chore: bump version to 20.0.1 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 5857110df2..4c88518214 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ AC_PREREQ([2.69]) define(_CLIENT_VERSION_MAJOR, 20) define(_CLIENT_VERSION_MINOR, 0) -define(_CLIENT_VERSION_BUILD, 0) +define(_CLIENT_VERSION_BUILD, 1) define(_CLIENT_VERSION_RC, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2023)