From 7ca56632cf25d66ec18a3843f315f8121ac8f095 Mon Sep 17 00:00:00 2001 From: pasta Date: Mon, 18 Nov 2024 12:22:13 -0600 Subject: [PATCH 01/10] Merge #6397: ci: add powerpc64 to GH Guix job matrix c5d5b14205e2e5f8b3775c3681f217e288319b8b ci: add powerpc64 to GH Guix job matrix (UdjinM6) Pull request description: ## Issue being fixed or feature implemented I guess we should make sure that binaries for every possible platform can be built via Guix with no issues even if we do not want to provide "official" binaries for it. ## What was done? ## How Has This Been Tested? ## Breaking Changes ## Checklist: - [ ] 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 - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ Top commit has no ACKs. Tree-SHA512: 6464b68a47e680bb379c82842599200d6917adb8f1493fa75ac80ddc7a6fea92a9190215cfa3f32b0bd88e2dd0425d4eb13846ea2d7e19e144afff9c1171ff13 --- .github/workflows/guix-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/guix-build.yml b/.github/workflows/guix-build.yml index 1ad6101e3a..8a48ee178b 100644 --- a/.github/workflows/guix-build.yml +++ b/.github/workflows/guix-build.yml @@ -68,7 +68,7 @@ jobs: # if: ${{ contains(github.event.pull_request.labels.*.name, 'guix-build') }} strategy: matrix: - build_target: [x86_64-linux-gnu, arm-linux-gnueabihf, aarch64-linux-gnu, riscv64-linux-gnu, x86_64-w64-mingw32, x86_64-apple-darwin, arm64-apple-darwin] + build_target: [x86_64-linux-gnu, arm-linux-gnueabihf, aarch64-linux-gnu, riscv64-linux-gnu, powerpc64-linux-gnu, x86_64-w64-mingw32, x86_64-apple-darwin, arm64-apple-darwin] timeout-minutes: 480 steps: From 66f67879dc8a89c586efb1b5262dd020c33c14ab Mon Sep 17 00:00:00 2001 From: pasta Date: Mon, 18 Nov 2024 13:18:03 -0600 Subject: [PATCH 02/10] Merge #6401: ci: deduplicate depends building 2f18c1af30c18f876ab1c550ad7ca5e50908e837 ci: deduplicate depends building (pasta) Pull request description: ## Issue being fixed or feature implemented Currently we build the same host / options multiple times. Don't do this! ## What was done? Now building depends only twice ## How Has This Been Tested? Local CI appears to be working ## Breaking Changes None ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [ ] 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)_ ACKs for top commit: kwvg: utACK 2f18c1af30c18f876ab1c550ad7ca5e50908e837 UdjinM6: utACK 2f18c1af30c18f876ab1c550ad7ca5e50908e837 Tree-SHA512: 67460508a2e9458152f7c8bb5f4a1a786aedcfded0e5c54fb03d85010ba8bb87362b66a0c322b51aeba75752e36418fc235d8dc4197ef10695e234ccc5a00a39 --- .github/workflows/build.yml | 70 ++++++++++--------------------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7b8997dc15..0834077119 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Prepare id: prepare run: | @@ -68,18 +67,6 @@ jobs: host: arm-linux-gnueabihf - build_target: linux64 host: x86_64-pc-linux-gnu - - build_target: linux64_tsan - host: x86_64-pc-linux-gnu - - build_target: linux64_ubsan - host: x86_64-pc-linux-gnu - - build_target: linux64_fuzz - host: x86_64-pc-linux-gnu - - build_target: linux64_cxx20 - host: x86_64-pc-linux-gnu - - build_target: linux64_sqlite - host: x86_64-pc-linux-gnu - - build_target: linux64_nowallet - host: x86_64-pc-linux-gnu container: image: ghcr.io/${{ needs.build-image.outputs.repo-name }}/dashcore-ci-runner:${{ needs.build-image.outputs.image-tag }} @@ -90,7 +77,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Cache depends sources uses: actions/cache@v4 with: @@ -113,6 +99,12 @@ jobs: - name: Build dependencies run: make -j$(nproc) -C depends HOST=${{ matrix.host }} + - name: Upload built depends + uses: actions/upload-artifact@v4 + with: + name: depends-${{ matrix.build_target }} + path: depends/${{ matrix.host }} + build: name: Build needs: [build-image, build-depends] @@ -123,20 +115,28 @@ jobs: include: - build_target: arm-linux host: arm-linux-gnueabihf + depends_on: arm-linux - build_target: linux64 host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_tsan host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_ubsan host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_fuzz host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_cxx20 host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_sqlite host: x86_64-pc-linux-gnu + depends_on: linux64 - build_target: linux64_nowallet host: x86_64-pc-linux-gnu + depends_on: linux64 container: image: ghcr.io/${{ needs.build-image.outputs.repo-name }}/dashcore-ci-runner:${{ needs.build-image.outputs.image-tag }} options: --user root @@ -146,16 +146,11 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - - name: Restore Cache dependencies - uses: actions/cache/restore@v4 + - name: Download built depends + uses: actions/download-artifact@v4 with: - path: | - depends/${{ matrix.host }} - key: ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} - restore-keys: | - ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} - ${{ runner.os }}-depends-${{ matrix.build_target }} + name: depends-${{ matrix.depends_on }} + path: depends/${{ matrix.host }} - name: Determine PR Base SHA id: vars @@ -192,32 +187,3 @@ jobs: name: build-artifacts-${{ matrix.build_target }} path: | /output - - -# Come back to this later and implement tests :) -# test: -# name: Test -# needs: [build-image, build] -# runs-on: ubuntu-22.04 -# container: -# image: ghcr.io/${{ needs.build-image.outputs.repo-name }}/dashcore-ci-runner:${{ needs.build-image.outputs.image-tag }} -# options: --user root -# steps: -# - name: Checkout code -# uses: actions/checkout@v4 -# with: -# ref: ${{ github.event.pull_request.head.sha }} -# -# - name: Download build artifacts -# uses: actions/download-artifact@v4 -# with: -# name: build-artifacts -# path: src/ -# -## - name: Setup environment -## run: | -## echo "BUILD_TARGET=${{ needs.build.matrix.build_target }}" -## source ./ci/dash/matrix.sh -# -# - name: Run integration tests -# run: ./ci/dash/test_integrationtests.sh --extended --exclude feature_pruning,feature_dbcrash From 90a3807903f8176878dae281da854b6faf6d8701 Mon Sep 17 00:00:00 2001 From: pasta Date: Mon, 18 Nov 2024 13:16:37 -0600 Subject: [PATCH 03/10] Merge #6402: ci: cache built 9604d87af1689d844c5be870c2cb3f305d67856d ci: cache depends/built like gitlab (pasta) Pull request description: ## Issue being fixed or feature implemented Depends build didn't seem to be caching properly ## What was done? changed depends/${{ matrix.host }} to depends/built as gitlab does ## How Has This Been Tested? Depends "build" now takes only ~1 minute instead of ~15 minutes in CI: https://github.com/PastaPastaPasta/dash/actions/runs/11899038167 ## Breaking Changes None ## Checklist: - [ ] 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)_ ACKs for top commit: UdjinM6: utACK 9604d87af1689d844c5be870c2cb3f305d67856d kwvg: utACK 9604d87af1689d844c5be870c2cb3f305d67856d Tree-SHA512: 63d2321f41b284be6cc2f0b2d53294cf220b1623af464d411225c0e43ec14268e1c3a701e23973e5c641925b6ea28dcb92062d8cefb9e6baed6ac5bb619ce1a1 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0834077119..197426c657 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -90,7 +90,7 @@ jobs: uses: actions/cache@v4 with: path: | - depends/${{ matrix.host }} + depends/built key: ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} restore-keys: | ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} From a1f7e96025c3e61f56feacc92dd2ddf6a7f1262f Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 19 Nov 2024 15:08:46 -0600 Subject: [PATCH 04/10] Merge #6406: ci: use `actions/cache` to manage depends cache 9cc29a832ed7021f9f6c27ece6fa48899d29d777 ci: use `actions/cache` to manage depends cache (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Builds after [dash#6401](https://github.com/dashpay/dash/pull/6401) have silently stopped building Dash Qt, see pre-[dash#6401](https://github.com/dashpay/dash/pull/6401) `develop` (6a51ab27)'s [build](https://github.com/dashpay/dash/actions/runs/11881892222/job/33106960691#step:7:725) compared against [build \#1](https://github.com/PastaPastaPasta/dash/actions/runs/11897504945/job/33152711720#step:7:1432) and [build \#2](https://github.com/kwvg/dash/actions/runs/11898510091/job/33156186503#step:7:1432) from [dash#6401](https://github.com/dashpay/dash/pull/6401)'s review process. This pull request aims to correct that regression. ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: PastaPastaPasta: utACK https://github.com/dashpay/dash/commit/9cc29a832ed7021f9f6c27ece6fa48899d29d777 UdjinM6: utACK 9cc29a832ed7021f9f6c27ece6fa48899d29d777 Tree-SHA512: 09663987696d29e12c98b48297960c7c1e6484e337ddc8311f340fee1d026ace572674e8cbca578ba743ff781caabb6fcc1853cee8ddff3e13af3fe3d0361776 --- .github/workflows/build.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 197426c657..7b9dbd8020 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,25 +86,20 @@ jobs: restore-keys: | depends-sources- - - name: Cache dependencies + - name: Cache depends uses: actions/cache@v4 with: path: | depends/built + depends/${{ matrix.host }} key: ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} restore-keys: | ${{ runner.os }}-depends-${{ matrix.build_target }}-${{ hashFiles('depends/packages/*') }} ${{ runner.os }}-depends-${{ matrix.build_target }} - - name: Build dependencies + - name: Build depends run: make -j$(nproc) -C depends HOST=${{ matrix.host }} - - name: Upload built depends - uses: actions/upload-artifact@v4 - with: - name: depends-${{ matrix.build_target }} - path: depends/${{ matrix.host }} - build: name: Build needs: [build-image, build-depends] @@ -146,11 +141,13 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Download built depends - uses: actions/download-artifact@v4 + - name: Restore depends cache + uses: actions/cache/restore@v4 with: - name: depends-${{ matrix.depends_on }} - path: depends/${{ matrix.host }} + path: | + depends/built + depends/${{ matrix.host }} + key: ${{ runner.os }}-depends-${{ matrix.depends_on }}-${{ hashFiles('depends/packages/*') }} - name: Determine PR Base SHA id: vars From 86105daab3a23069ffa01508d6bbef8be2630c19 Mon Sep 17 00:00:00 2001 From: pasta Date: Wed, 20 Nov 2024 11:28:35 -0600 Subject: [PATCH 05/10] Merge #6408: refactor: removed pre-MN_RR logic of validation of CL 3f2e064b18bdb47bbf0100307d2b339ebe124998 refactor: set `const auto& cbTx` to avoid using optional throughout method (pasta) 0c0d91e49189739c4ba1eb3a36d7586e2499a619 fix: functional test feature_llmq_chainlocks.py should activate MN_RR instead v20 (Konstantin Akimov) af93e877f29828bb268ab8b472192a47186160e1 refactor: removed pre-MN_RR logic of validation of CL (Konstantin Akimov) Pull request description: ## Issue being fixed or feature implemented The fork MN_RR is active awhile on testnet and mainnet and no more need legacy check ## What was done? Removes legacy version of checks for CL and related functional tests ## How Has This Been Tested? Run unit / functional test - DONE Reindex testnet - DONE Reindex mainnet - DONE ## Breaking Changes Removed pre-mn_rr version of checks for CL. It's no more relevant on mainnet and testnet. It affects behavior on new devnets and regtest for pre-mn_rr activation blocks. ## Checklist: - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone ACKs for top commit: UdjinM6: utACK 3f2e064b18bdb47bbf0100307d2b339ebe124998 Tree-SHA512: 8b4b3a20a54602f4df9d98e17c79004214493b15c0bce9c08c68d667a5cba86b817947f008d646c48ef9f2f86676c02085c7d0ed36e83548ef5425b64faffb89 --- src/evo/cbtx.cpp | 39 +++++++++++----------- src/evo/cbtx.h | 2 +- src/evo/specialtxman.cpp | 2 +- test/functional/feature_llmq_chainlocks.py | 33 ++++++------------ 4 files changed, 32 insertions(+), 44 deletions(-) diff --git a/src/evo/cbtx.cpp b/src/evo/cbtx.cpp index a9a5abe762..fc08bd5db5 100644 --- a/src/evo/cbtx.cpp +++ b/src/evo/cbtx.cpp @@ -332,7 +332,7 @@ bool CalcCbTxMerkleRootQuorums(const CBlock& block, const CBlockIndex* pindexPre } bool CheckCbTxBestChainlock(const CBlock& block, const CBlockIndex* pindex, - const llmq::CChainLocksHandler& chainlock_handler, BlockValidationState& state, const bool check_clhdiff) + const llmq::CChainLocksHandler& chainlock_handler, BlockValidationState& state) { if (block.vtx[0]->nType != TRANSACTION_COINBASE) { return true; @@ -342,44 +342,43 @@ bool CheckCbTxBestChainlock(const CBlock& block, const CBlockIndex* pindex, if (!opt_cbTx) { return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-payload"); } + const auto& cbTx = *opt_cbTx; - if (opt_cbTx->nVersion < CCbTx::Version::CLSIG_AND_BALANCE) { + if (cbTx.nVersion < CCbTx::Version::CLSIG_AND_BALANCE) { return true; } auto best_clsig = chainlock_handler.GetBestChainLock(); - if (best_clsig.getHeight() == pindex->nHeight - 1 && opt_cbTx->bestCLHeightDiff == 0 && opt_cbTx->bestCLSignature == best_clsig.getSig()) { + if (best_clsig.getHeight() == pindex->nHeight - 1 && cbTx.bestCLHeightDiff == 0 && cbTx.bestCLSignature == best_clsig.getSig()) { // matches our best clsig which still hold values for the previous block return true; } - if (check_clhdiff) { - auto prevBlockCoinbaseChainlock = GetNonNullCoinbaseChainlock(pindex->pprev); - // If std::optional prevBlockCoinbaseChainlock is empty, then up to the previous block, coinbase Chainlock is null. - if (prevBlockCoinbaseChainlock.has_value()) { - // Previous block Coinbase has a non-null Chainlock: current block's Chainlock must be non-null and at least as new as the previous one - if (!opt_cbTx->bestCLSignature.IsValid()) { - // IsNull() doesn't exist for CBLSSignature: we assume that a non valid BLS sig is null - return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-null-clsig"); - } - if (opt_cbTx->bestCLHeightDiff > prevBlockCoinbaseChainlock.value().second + 1) { - return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-older-clsig"); - } + const auto prevBlockCoinbaseChainlock = GetNonNullCoinbaseChainlock(pindex->pprev); + // If std::optional prevBlockCoinbaseChainlock is empty, then up to the previous block, coinbase Chainlock is null. + if (prevBlockCoinbaseChainlock.has_value()) { + // Previous block Coinbase has a non-null Chainlock: current block's Chainlock must be non-null and at least as new as the previous one + if (!cbTx.bestCLSignature.IsValid()) { + // IsNull() doesn't exist for CBLSSignature: we assume that a non valid BLS sig is null + return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-null-clsig"); + } + if (cbTx.bestCLHeightDiff > prevBlockCoinbaseChainlock.value().second + 1) { + return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-older-clsig"); } } // IsNull() doesn't exist for CBLSSignature: we assume that a valid BLS sig is non-null - if (opt_cbTx->bestCLSignature.IsValid()) { - int curBlockCoinbaseCLHeight = pindex->nHeight - static_cast(opt_cbTx->bestCLHeightDiff) - 1; - if (best_clsig.getHeight() == curBlockCoinbaseCLHeight && best_clsig.getSig() == opt_cbTx->bestCLSignature) { + if (cbTx.bestCLSignature.IsValid()) { + int curBlockCoinbaseCLHeight = pindex->nHeight - static_cast(cbTx.bestCLHeightDiff) - 1; + if (best_clsig.getHeight() == curBlockCoinbaseCLHeight && best_clsig.getSig() == cbTx.bestCLSignature) { // matches our best (but outdated) clsig, no need to verify it again return true; } uint256 curBlockCoinbaseCLBlockHash = pindex->GetAncestor(curBlockCoinbaseCLHeight)->GetBlockHash(); - if (chainlock_handler.VerifyChainLock(llmq::CChainLockSig(curBlockCoinbaseCLHeight, curBlockCoinbaseCLBlockHash, opt_cbTx->bestCLSignature)) != llmq::VerifyRecSigStatus::Valid) { + if (chainlock_handler.VerifyChainLock(llmq::CChainLockSig(curBlockCoinbaseCLHeight, curBlockCoinbaseCLBlockHash, cbTx.bestCLSignature)) != llmq::VerifyRecSigStatus::Valid) { return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-invalid-clsig"); } - } else if (opt_cbTx->bestCLHeightDiff != 0) { + } else if (cbTx.bestCLHeightDiff != 0) { // Null bestCLSignature is allowed only with bestCLHeightDiff = 0 return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-cbtx-cldiff"); } diff --git a/src/evo/cbtx.h b/src/evo/cbtx.h index cb8ab1f92c..ad6b74d10f 100644 --- a/src/evo/cbtx.h +++ b/src/evo/cbtx.h @@ -96,7 +96,7 @@ bool CalcCbTxMerkleRootQuorums(const CBlock& block, const CBlockIndex* pindexPre BlockValidationState& state); bool CheckCbTxBestChainlock(const CBlock& block, const CBlockIndex* pindexPrev, - const llmq::CChainLocksHandler& chainlock_handler, BlockValidationState& state, const bool check_clhdiff); + const llmq::CChainLocksHandler& chainlock_handler, BlockValidationState& state); bool CalcCbTxBestChainlock(const llmq::CChainLocksHandler& chainlock_handler, const CBlockIndex* pindexPrev, uint32_t& bestCLHeightDiff, CBLSSignature& bestCLSignature); diff --git a/src/evo/specialtxman.cpp b/src/evo/specialtxman.cpp index c8c84e84be..5ed1e08c10 100644 --- a/src/evo/specialtxman.cpp +++ b/src/evo/specialtxman.cpp @@ -188,7 +188,7 @@ bool CSpecialTxProcessor::ProcessSpecialTxsInBlock(const CBlock& block, const CB nTimeMerkle += nTime5 - nTime4; LogPrint(BCLog::BENCHMARK, " - CheckCbTxMerkleRoots: %.2fms [%.2fs]\n", 0.001 * (nTime5 - nTime4), nTimeMerkle * 0.000001); - if (fCheckCbTxMerkleRoots && !CheckCbTxBestChainlock(block, pindex, m_clhandler, state, DeploymentActiveAt(*pindex, m_consensus_params, Consensus::DEPLOYMENT_MN_RR))) { + if (fCheckCbTxMerkleRoots && !CheckCbTxBestChainlock(block, pindex, m_clhandler, state)) { // pass the state returned by the function above return false; } diff --git a/test/functional/feature_llmq_chainlocks.py b/test/functional/feature_llmq_chainlocks.py index 03807ddd2b..1714393939 100755 --- a/test/functional/feature_llmq_chainlocks.py +++ b/test/functional/feature_llmq_chainlocks.py @@ -15,12 +15,12 @@ from io import BytesIO from test_framework.messages import CBlock, CCbTx from test_framework.test_framework import DashTestFramework -from test_framework.util import assert_equal, assert_raises_rpc_error, force_finish_mnsync, softfork_active +from test_framework.util import assert_equal, assert_raises_rpc_error, force_finish_mnsync class LLMQChainLocksTest(DashTestFramework): def set_test_params(self): - self.set_dash_test_params(5, 4, [["-testactivationheight=mn_rr@1100"]] * 5) + self.set_dash_test_params(5, 4) def run_test(self): # Connect all nodes to node1 so that we always have the whole network connected @@ -31,8 +31,8 @@ class LLMQChainLocksTest(DashTestFramework): self.test_coinbase_best_cl(self.nodes[0], expected_cl_in_cb=False) - self.activate_v20(expected_activation_height=900) - self.log.info("Activated v20 at height:" + str(self.nodes[0].getblockcount())) + self.activate_mn_rr(expected_activation_height=900) + self.log.info("Activated MN_RR at height:" + str(self.nodes[0].getblockcount())) # v20 is active for the next block, not for the tip self.test_coinbase_best_cl(self.nodes[0], expected_cl_in_cb=False) @@ -243,14 +243,8 @@ class LLMQChainLocksTest(DashTestFramework): assert_equal(tip_1['cbTx']['bestCLSignature'], tip_0['cbTx']['bestCLSignature']) assert_equal(tip_1['cbTx']['bestCLHeightDiff'], tip_0['cbTx']['bestCLHeightDiff'] + 1) - self.log.info("Test that bestCLHeightDiff conditions are relaxed before mn_rr") - self.test_bestCLHeightDiff(False) - - self.activate_mn_rr(expected_activation_height=1100) - self.log.info("Activated mn_rr at height:" + str(self.nodes[0].getblockcount())) - - self.log.info("Test that bestCLHeightDiff conditions are stricter after mn_rr") - self.test_bestCLHeightDiff(True) + self.log.info("Test bestCLHeightDiff restrictions") + self.test_bestCLHeightDiff() def create_chained_txs(self, node, amount): txid = node.sendtoaddress(node.getnewaddress(), amount) @@ -293,11 +287,10 @@ class LLMQChainLocksTest(DashTestFramework): else: assert "bestCLHeightDiff" not in cbtx and "bestCLSignature" not in cbtx - def test_bestCLHeightDiff(self, mn_rr_active): + def test_bestCLHeightDiff(self): # We need 2 blocks we can grab clsigs from for _ in range(2): self.wait_for_chainlocked_block_all_nodes(self.generate(self.nodes[0], 1, sync_fun=self.no_op)[0]) - assert_equal(softfork_active(self.nodes[1], "mn_rr"), mn_rr_active) tip1_hash = self.nodes[1].getbestblockhash() self.isolate_node(1) @@ -339,10 +332,10 @@ class LLMQChainLocksTest(DashTestFramework): mal_block.hashMerkleRoot = mal_block.calc_merkle_root() mal_block.solve() result = self.nodes[1].submitblock(mal_block.serialize().hex()) - assert_equal(result, "bad-cbtx-older-clsig" if mn_rr_active else "bad-cbtx-invalid-clsig") + assert_equal(result, "bad-cbtx-older-clsig") assert_equal(self.nodes[1].getbestblockhash(), tip1_hash) - # Update the sig too and it should pass now when mn_rr is not active and fail otherwise + # Update the sig too and it should fail old_blockhash = self.nodes[1].getblockhash(self.nodes[1].getblockcount() - 1) cbtx.bestCLSignature = bytes.fromhex(self.nodes[1].getblock(old_blockhash, 2)["tx"][0]["cbTx"]["bestCLSignature"]) mal_block.vtx[0].vExtraPayload = cbtx.serialize() @@ -350,12 +343,8 @@ class LLMQChainLocksTest(DashTestFramework): mal_block.hashMerkleRoot = mal_block.calc_merkle_root() mal_block.solve() result = self.nodes[1].submitblock(mal_block.serialize().hex()) - if mn_rr_active: - assert_equal(result, "bad-cbtx-older-clsig") - assert_equal(self.nodes[1].getbestblockhash(), tip1_hash) - else: - assert_equal(result, None) - assert not self.nodes[1].getbestblockhash() == tip1_hash + assert_equal(result, "bad-cbtx-older-clsig") + assert_equal(self.nodes[1].getbestblockhash(), tip1_hash) self.reconnect_isolated_node(1, 0) self.sync_all() From 9fed4564f4aa979560a9446a40545bdb3ed85227 Mon Sep 17 00:00:00 2001 From: pasta Date: Wed, 20 Nov 2024 22:08:56 -0600 Subject: [PATCH 06/10] Merge #6407: fix: dataraces 5078baea2b1ca3684ea582eda6ac4cea0924ce43 fix(test): wait for chainlock before mining a block we expect to include said chainlock (pasta) f39c1e6f4c2f7595a0d8b369f9edf6bb0132c6ce fix: guard m_can_tx_relay behind m_tx_relay_mutex; make it private; add additional annotations (pasta) Pull request description: ## Issue being fixed or feature implemented See each commit; fixes two bugs, both discovered while running feature_llmq_chainlocks.py with tsan / debug. one a datarace in net_processing.cpp and the other in the test I was using to ensure this fix was correct, feature_llmq_chainlocks ## What was done? ### net_processing.cpp You can see the datarace here: https://gist.github.com/PastaPastaPasta/c966a9f805758b34524085e3d52ea7f8 We simply guard it with an existing mutex that is always locked in close proximity. ### feature_llmq_chainlocks.py Most of the time, while generating the cycle quorum, there is sufficient time to generate a chainlock; however, this is racey, and I've observed locally where the block gets generated before a chainlock is present and as such `test_coinbase_best_cl` fails. We should instead wait for the chainlock first, and then mine the block. This was we can ensure the mined block will include that chainlock. This was observed locally maybe 1/10 times or so ## How Has This Been Tested? ran feature_llmq_chainlocks.py ~40 times locally with tsan / debug ## Breaking Changes None ## 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 - [x] 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)_ ACKs for top commit: kwvg: utACK 5078baea2b1ca3684ea582eda6ac4cea0924ce43 knst: utACK 5078baea2b1ca3684ea582eda6ac4cea0924ce43 UdjinM6: utACK 5078baea2b1ca3684ea582eda6ac4cea0924ce43 Tree-SHA512: b346fc60809df72d0161f625073dce7062bd2641d35e4f80160fac9afeec63707de552e2856940ac2604875908ae3b98a225d352de36bfbfc6ee3fbe1e1538ff --- src/net_processing.cpp | 16 +++++++++------- test/functional/feature_llmq_chainlocks.py | 7 +++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 8676ad3371..b6f75dfa00 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -309,21 +309,23 @@ struct Peer { /** * (Bitcoin) Initializes a TxRelay struct for this peer. Can be called at most once for a peer. * (Dash) Enables the flag that allows GetTxRelay() to return m_tx_relay */ - TxRelay* SetTxRelay() + TxRelay* SetTxRelay() LOCKS_EXCLUDED(m_tx_relay_mutex) { + LOCK(m_tx_relay_mutex); Assume(!m_can_tx_relay); m_can_tx_relay = true; - return WITH_LOCK(m_tx_relay_mutex, return m_tx_relay.get()); + return m_tx_relay.get(); }; - TxRelay* GetInvRelay() + TxRelay* GetInvRelay() LOCKS_EXCLUDED(m_tx_relay_mutex) { return WITH_LOCK(m_tx_relay_mutex, return m_tx_relay.get()); } - TxRelay* GetTxRelay() + TxRelay* GetTxRelay() LOCKS_EXCLUDED(m_tx_relay_mutex) { - return m_can_tx_relay ? WITH_LOCK(m_tx_relay_mutex, return m_tx_relay.get()) : nullptr; + LOCK(m_tx_relay_mutex); + return m_can_tx_relay ? m_tx_relay.get() : nullptr; }; /** A vector of addresses to send to the peer, limited to MAX_ADDR_TO_SEND. */ @@ -353,8 +355,6 @@ struct Peer { * This field must correlate with whether m_addr_known has been * initialized.*/ std::atomic_bool m_addr_relay_enabled{false}; - /** Whether a peer can relay transactions */ - bool m_can_tx_relay{false}; /** Whether a getaddr request to this peer is outstanding. */ bool m_getaddr_sent GUARDED_BY(NetEventsInterface::g_msgproc_mutex){false}; /** Guards address sending timers. */ @@ -406,6 +406,8 @@ private: * (non-transaction relay should use GetInvRelay(), which will provide * unconditional access) */ std::unique_ptr m_tx_relay GUARDED_BY(m_tx_relay_mutex){std::make_unique()}; + /** Whether a peer can relay transactions */ + bool m_can_tx_relay GUARDED_BY(m_tx_relay_mutex) {false}; }; using PeerRef = std::shared_ptr; diff --git a/test/functional/feature_llmq_chainlocks.py b/test/functional/feature_llmq_chainlocks.py index 1714393939..599d350c75 100755 --- a/test/functional/feature_llmq_chainlocks.py +++ b/test/functional/feature_llmq_chainlocks.py @@ -56,11 +56,10 @@ class LLMQChainLocksTest(DashTestFramework): self.move_to_next_cycle() self.log.info("Cycle H+2C height:" + str(self.nodes[0].getblockcount())) self.mine_cycle_quorum(llmq_type_name="llmq_test_dip0024", llmq_type=103) - - - self.log.info("Mine single block, wait for chainlock") - self.generate(self.nodes[0], 1, sync_fun=self.no_op) self.wait_for_chainlocked_block_all_nodes(self.nodes[0].getbestblockhash()) + + self.log.info("Mine single block, ensure it includes latest chainlock") + self.generate(self.nodes[0], 1, sync_fun=self.sync_blocks) self.test_coinbase_best_cl(self.nodes[0]) # ChainLock locks all the blocks below it so nocl_block_hash should be locked too From 18f636f9a4c50981a80c4f2498a7f874a44d6eba Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 Nov 2024 08:25:57 -0600 Subject: [PATCH 07/10] Merge #6426: fix: respect SENDDSQUEUE message, move DSQ relay into net processing / peerman dafa7363a38f6ebe445461ff7d8a707f867bbc82 fix: respect SENDDSQUEUE message, move DSQ relay into net processing / peerman (pasta) Pull request description: ## Issue being fixed or feature implemented in #6148, I broke the functionality where a peer must opt in / opt out of DSQUEUE messages. This was mostly ok, and not immediately detected, as with this bug, simply everyone would receive DSQ messages over inventory (or classically, old proto versions were not affected by this bug). But this still would result in quite a bit of wasted bandwidth for peers which may not care about DSQ at all. ## What was done? This commit should restore the prior functionality, where a node should send the SENDDSQUEUE message if they wish to receive DSQs. Once they've sent that, depending on their protocol version, they will either have the messages pushed to them as available, or on modern protocols, they will thereafter receive DSQs over the inventory system. NOTE: I also refactor the code in this commit, moving some network proccessing into.... wait for it... net_processing.cpp! This allowed us to remove some dependencies in coinjoin.h. DSQ messages are now relayed to peers by calling peer_manager.RelayDSQ ## How Has This Been Tested? I have not yet mixed on testnet with this; we should include it in rc.2 and test ## Breaking Changes Slightly breaking for v22.0.x (so rc.1), as they in theory could be relying on this new logic of always receiving the DSQ inv. But I don't think anyone besides core is using this new protocol. ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [ ] 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 ACKs for top commit: UdjinM6: light ACK dafa7363a38f6ebe445461ff7d8a707f867bbc82 kwvg: utACK dafa7363a38f6ebe445461ff7d8a707f867bbc82 Tree-SHA512: 18f9b0dfe05cde19db451653db9bb9a00352efd1bc37adffd83f74958010475f2782b1111b1c0d2dd967e7a851c3c4795fa55033b4bd0cc810aa293e754ce314 --- src/coinjoin/client.cpp | 2 +- src/coinjoin/client.h | 1 + src/coinjoin/coinjoin.cpp | 14 ------------ src/coinjoin/coinjoin.h | 4 ---- src/coinjoin/server.cpp | 6 ++--- src/coinjoin/server.h | 1 + src/net_processing.cpp | 46 ++++++++++++++++++++++++++++++++++++++- src/net_processing.h | 4 ++++ 8 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/coinjoin/client.cpp b/src/coinjoin/client.cpp index 4c15f98f4a..9804b1be5b 100644 --- a/src/coinjoin/client.cpp +++ b/src/coinjoin/client.cpp @@ -132,7 +132,7 @@ PeerMsgRet CCoinJoinClientQueueManager::ProcessDSQueue(const CNode& peer, CDataS WITH_LOCK(cs_vecqueue, vecCoinJoinQueue.push_back(dsq)); } } // cs_ProcessDSQueue - dsq.Relay(connman, *peerman); + peerman->RelayDSQ(dsq); return {}; } diff --git a/src/coinjoin/client.h b/src/coinjoin/client.h index c4e22b7123..17239b9a71 100644 --- a/src/coinjoin/client.h +++ b/src/coinjoin/client.h @@ -28,6 +28,7 @@ class CMasternodeSync; class CNode; class CoinJoinWalletManager; class CTxMemPool; +class PeerManager; class UniValue; diff --git a/src/coinjoin/coinjoin.cpp b/src/coinjoin/coinjoin.cpp index 338b4cf054..74fc644a70 100644 --- a/src/coinjoin/coinjoin.cpp +++ b/src/coinjoin/coinjoin.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -71,19 +70,6 @@ bool CCoinJoinQueue::CheckSignature(const CBLSPublicKey& blsPubKey) const return true; } -bool CCoinJoinQueue::Relay(CConnman& connman, PeerManager& peerman) -{ - CInv inv(MSG_DSQ, GetHash()); - peerman.RelayInv(inv, DSQ_INV_VERSION); - connman.ForEachNode([&connman, this](CNode* pnode) { - CNetMsgMaker msgMaker(pnode->GetCommonVersion()); - if (pnode->fSendDSQueue && pnode->nVersion < DSQ_INV_VERSION) { - connman.PushMessage(pnode, msgMaker.Make(NetMsgType::DSQUEUE, (*this))); - } - }); - return true; -} - bool CCoinJoinQueue::IsTimeOutOfBounds(int64_t current_time) const { return current_time - nTime > COINJOIN_QUEUE_TIMEOUT || diff --git a/src/coinjoin/coinjoin.h b/src/coinjoin/coinjoin.h index 5680b8abc2..68e2f40c05 100644 --- a/src/coinjoin/coinjoin.h +++ b/src/coinjoin/coinjoin.h @@ -24,14 +24,12 @@ class CActiveMasternodeManager; class CChainState; -class CConnman; class CBLSPublicKey; class CBlockIndex; class ChainstateManager; class CMasternodeSync; class CTxMemPool; class TxValidationState; -class PeerManager; namespace llmq { class CChainLocksHandler; @@ -221,8 +219,6 @@ public: /// Check if we have a valid Masternode address [[nodiscard]] bool CheckSignature(const CBLSPublicKey& blsPubKey) const; - bool Relay(CConnman& connman, PeerManager& peerman); - /// Check if a queue is too old or too far into the future [[nodiscard]] bool IsTimeOutOfBounds(int64_t current_time = GetAdjustedTime()) const; diff --git a/src/coinjoin/server.cpp b/src/coinjoin/server.cpp index 856cf5fc7e..bb65990dd9 100644 --- a/src/coinjoin/server.cpp +++ b/src/coinjoin/server.cpp @@ -186,7 +186,7 @@ PeerMsgRet CCoinJoinServer::ProcessDSQUEUE(const CNode& peer, CDataStream& vRecv TRY_LOCK(cs_vecqueue, lockRecv); if (!lockRecv) return {}; vecCoinJoinQueue.push_back(dsq); - dsq.Relay(connman, *m_peerman); + m_peerman->RelayDSQ(dsq); } return {}; } @@ -519,7 +519,7 @@ void CCoinJoinServer::CheckForCompleteQueue() LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CheckForCompleteQueue -- queue is ready, signing and relaying (%s) " /* Continued */ "with %d participants\n", dsq.ToString(), vecSessionCollaterals.size()); dsq.Sign(*m_mn_activeman); - dsq.Relay(connman, *m_peerman); + m_peerman->RelayDSQ(dsq); } } @@ -732,7 +732,7 @@ bool CCoinJoinServer::CreateNewSession(const CCoinJoinAccept& dsa, PoolMessage& GetAdjustedTime(), false); LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CreateNewSession -- signing and relaying new queue: %s\n", dsq.ToString()); dsq.Sign(*m_mn_activeman); - dsq.Relay(connman, *m_peerman); + m_peerman->RelayDSQ(dsq); LOCK(cs_vecqueue); vecCoinJoinQueue.push_back(dsq); } diff --git a/src/coinjoin/server.h b/src/coinjoin/server.h index e7f3a2340b..c33e98fbf8 100644 --- a/src/coinjoin/server.h +++ b/src/coinjoin/server.h @@ -11,6 +11,7 @@ class CActiveMasternodeManager; class CCoinJoinServer; +class CConnman; class CDataStream; class CDeterministicMNManager; class CDSTXManager; diff --git a/src/net_processing.cpp b/src/net_processing.cpp index b6f75dfa00..0997044e50 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -366,6 +366,15 @@ struct Peer { /** Whether the peer has signaled support for receiving ADDRv2 (BIP155) * messages, indicating a preference to receive ADDRv2 instead of ADDR ones. */ std::atomic_bool m_wants_addrv2{false}; + + enum class WantsDSQ { + NONE, // Peer doesn't want DSQs + INV, // Peer will be notified of DSQs over Inventory System (see: DSQ_INV_VERSION) + ALL, // Peer will be notified of all DSQs, by simply sending them the DSQ + }; + + std::atomic m_wants_dsq{WantsDSQ::NONE}; + /** Whether this peer has already sent us a getaddr message. */ bool m_getaddr_recvd GUARDED_BY(NetEventsInterface::g_msgproc_mutex){false}; /** Number of addresses that can be processed from this peer. Start at 1 to @@ -607,6 +616,7 @@ public: void RelayInvFiltered(CInv &inv, const CTransaction &relatedTx, const int minProtoVersion) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void RelayInvFiltered(CInv &inv, const uint256 &relatedTxHash, const int minProtoVersion) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void RelayTransaction(const uint256& txid) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); + void RelayDSQ(const CCoinJoinQueue& queue) override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void SetBestHeight(int height) override { m_best_height = height; }; void Misbehaving(const NodeId pnode, const int howmuch, const std::string& message = "") override EXCLUSIVE_LOCKS_REQUIRED(!m_peer_mutex); void ProcessMessage(CNode& pfrom, const std::string& msg_type, CDataStream& vRecv, @@ -2276,6 +2286,34 @@ void PeerManagerImpl::RelayInv(CInv &inv, const int minProtoVersion) }); } +void PeerManagerImpl::RelayDSQ(const CCoinJoinQueue& queue) +{ + CInv inv{MSG_DSQ, queue.GetHash()}; + std::vector nodes_send_all; + { + LOCK(m_peer_mutex); + for (const auto& [nodeid, peer] : m_peer_map) { + switch (peer->m_wants_dsq) { + case Peer::WantsDSQ::NONE: + break; + case Peer::WantsDSQ::INV: + PushInv(*peer, inv); + break; + case Peer::WantsDSQ::ALL: + nodes_send_all.push_back(nodeid); + break; + } + } + } + for (auto nodeId : nodes_send_all) { + m_connman.ForNode(nodeId, [&](CNode* pnode) -> bool { + CNetMsgMaker msgMaker(pnode->GetCommonVersion()); + m_connman.PushMessage(pnode, msgMaker.Make(NetMsgType::DSQUEUE, queue)); + return true; + }); + } +} + void PeerManagerImpl::RelayInvFiltered(CInv &inv, const CTransaction& relatedTx, const int minProtoVersion) { // TODO: Migrate to iteration through m_peer_map @@ -3940,7 +3978,13 @@ void PeerManagerImpl::ProcessMessage( { bool b; vRecv >> b; - pfrom.fSendDSQueue = b; + if (!b) { + peer->m_wants_dsq = Peer::WantsDSQ::NONE; + } else if (pfrom.GetCommonVersion() < DSQ_INV_VERSION) { + peer->m_wants_dsq = Peer::WantsDSQ::ALL; + } else { + peer->m_wants_dsq = Peer::WantsDSQ::INV; + } return; } diff --git a/src/net_processing.h b/src/net_processing.h index a857201516..58925a6db7 100644 --- a/src/net_processing.h +++ b/src/net_processing.h @@ -16,6 +16,7 @@ class CActiveMasternodeManager; class AddrMan; class CTxMemPool; +class CCoinJoinQueue; class CDeterministicMNManager; class CMasternodeMetaMan; class CMasternodeSync; @@ -93,6 +94,9 @@ public: /** Broadcast inventory message to a specific peer. */ virtual void PushInventory(NodeId nodeid, const CInv& inv) = 0; + /** Relay DSQ based on peer preference */ + virtual void RelayDSQ(const CCoinJoinQueue& queue) = 0; + /** Relay inventories to all peers */ virtual void RelayInv(CInv &inv, const int minProtoVersion = MIN_PEER_PROTO_VERSION) = 0; virtual void RelayInvFiltered(CInv &inv, const CTransaction &relatedTx, From 3bbcd3d4f8b54af18ef8edc3ec4c699a44d75ab2 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 Nov 2024 08:26:58 -0600 Subject: [PATCH 08/10] Merge #6393: docs: mention building for some HOSTs only in `release-process.md` 87c31ad67a92f738e317f81ef9873a8fb80028f7 Update doc/release-process.md (UdjinM6) 55d74630b43058b51f22d3ac9da6f3d1295416a8 docs: mention building for some HOSTs only in `release-process.md` (UdjinM6) Pull request description: ## Issue being fixed or feature implemented https://github.com/dashpay/guix.sigs/pull/73 #6390 follow-up ## What was done? ## How Has This Been Tested? ## Breaking Changes ## Checklist: - [ ] 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 - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ Top commit has no ACKs. Tree-SHA512: b4a2cadf5899a8aea6612b4ff9c0e9f9c530a9e2344eb090967fbcf9a2ab219aff02f11f86434e4082f84c401d578cf2d033b6838c94705f532beca4ab604986 --- doc/release-process.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/release-process.md b/doc/release-process.md index 221da92d0d..6089e43eab 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -97,6 +97,8 @@ Follow the relevant Guix README.md sections: - [Building](/contrib/guix/README.md#building) - [Attesting to build outputs](/contrib/guix/README.md#attesting-to-build-outputs) +_Note: we ship releases for only some supported HOSTs so consider providing limited `HOSTS` variable or run `./contrib/containers/guix/scripts/guix-start` instead of `./contrib/guix/guix-build` when building binaries for quicker builds that exclude the supported but not shipped HOSTs_ + ### Verify other builders' signatures to your own. (Optional) Add other builders keys to your gpg keyring, and/or refresh keys: See `../dash/contrib/builder-keys/README.md`. From 02ad523a22fff8e475a80ed286d5bbeb893a143d Mon Sep 17 00:00:00 2001 From: pasta Date: Thu, 21 Nov 2024 14:29:19 -0600 Subject: [PATCH 09/10] Merge #6411: chore: update nMinimumChainWork, defaultAssumeValid, checkpointData, chainTxData for mainnet and testnet 31243ca313d52dd327d41ba1e7102ed4a6ee9b9b chore: update nMinimumChainWork, defaultAssumeValid, checkpointData, chainTxData for mainnet and testnet (pasta) Pull request description: ## Issue being fixed or feature implemented Bump chainparams in prep for v22 ## What was done? ## How Has This Been Tested? ## Breaking Changes ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [ ] 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)_ ACKs for top commit: UdjinM6: utACK 31243ca313d52dd327d41ba1e7102ed4a6ee9b9b Tree-SHA512: 6a01bbbaefb69437e053340b968e0ce68e2bd9e5e5fd2900864d88ffc21c5cd3f9c2a50d8f5b19f16515cd4c62a4a8fc2d981dd6d0456e86ef96f40e350e786a --- src/chainparams.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index eeab97c2c4..616f4e650f 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -219,10 +219,10 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; // The best chain should have at least this much work. - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000988117deadb0db9cd5b8"); // 2109672 + consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000009eb0f1d7fefc8750aebb"); // 2175051 // By default assume that the signatures in ancestors of this block are valid. - consensus.defaultAssumeValid = uint256S("0x000000000000001889bd33ef019065e250d32bd46911f4003d3fdd8128b5358d"); // 2109672 + consensus.defaultAssumeValid = uint256S("0x000000000000001cf26547602d982dcaa909231bbcd1e70c0eb3c65de25473ba"); // 2175051 /** * The message start string is designed to be unlikely to occur in normal data. @@ -332,6 +332,7 @@ public: {1969000, uint256S("0x000000000000000c8b7a3bdcd8b9f516462122314529c8342244c685a4c899bf")}, {2029000, uint256S("0x0000000000000020d5e38b6aef5bc8e430029444d7977b46f710c7d281ef1281")}, {2109672, uint256S("0x000000000000001889bd33ef019065e250d32bd46911f4003d3fdd8128b5358d")}, + {2175051, uint256S("0x000000000000001cf26547602d982dcaa909231bbcd1e70c0eb3c65de25473ba")}, } }; @@ -339,12 +340,12 @@ public: // TODO to be specified in a future patch. }; - // getchaintxstats 17280 000000000000001889bd33ef019065e250d32bd46911f4003d3fdd8128b5358d + // getchaintxstats 17280 000000000000001cf26547602d982dcaa909231bbcd1e70c0eb3c65de25473ba chainTxData = ChainTxData{ - 1721769714, // * UNIX timestamp of last known number of transactions (Block 1969000) - 53767892, // * total number of transactions between genesis and that timestamp + 1732068694, // * UNIX timestamp of last known number of transactions (Block 1969000) + 55191134, // * total number of transactions between genesis and that timestamp // (the tx=... number in the ChainStateFlushed debug.log lines) - 0.1580795981751139, // * estimated number of transactions per second after that timestamp + 0.1528060985790164, // * estimated number of transactions per second after that timestamp }; } }; @@ -416,10 +417,10 @@ public: consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; // The best chain should have at least this much work. - consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000031779704a0f54b4"); // 1069875 + consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000031ee38bc0876cef"); // 1143608 // By default assume that the signatures in ancestors of this block are valid. - consensus.defaultAssumeValid = uint256S("0x00000034bfeb926662ba547c0b8dd4ba8cbb6e0c581f4e7d1bddce8f9ca3a608"); // 1069875 + consensus.defaultAssumeValid = uint256S("0x000000eef20eb0062abd4e799967e98bdebb165dd1c567ab4118c1c86c6e948f"); // 1143608 pchMessageStart[0] = 0xce; pchMessageStart[1] = 0xe2; @@ -505,6 +506,7 @@ public: {905100, uint256S("0x0000020c5e0f86f385cbf8e90210de9a9fd63633f01433bf47a6b3227a2851fd")}, {960000, uint256S("0x0000000386cf5061ea16404c66deb83eb67892fa4f79b9e58e5eaab097ec2bd6")}, {1069875, uint256S("0x00000034bfeb926662ba547c0b8dd4ba8cbb6e0c581f4e7d1bddce8f9ca3a608")}, + {1143608, uint256S("0x000000eef20eb0062abd4e799967e98bdebb165dd1c567ab4118c1c86c6e948f")}, } }; @@ -512,12 +514,12 @@ public: // TODO to be specified in a future patch. }; - // getchaintxstats 17280 00000034bfeb926662ba547c0b8dd4ba8cbb6e0c581f4e7d1bddce8f9ca3a608 + // getchaintxstats 17280 000000eef20eb0062abd4e799967e98bdebb165dd1c567ab4118c1c86c6e948f chainTxData = ChainTxData{ - 1721770009, // * UNIX timestamp of last known number of transactions (Block 905100) - 6548039, // * total number of transactions between genesis and that timestamp + 1732068833, // * UNIX timestamp of last known number of transactions (Block 905100) + 6701197, // * total number of transactions between genesis and that timestamp // (the tx=... number in the ChainStateFlushed debug.log lines) - 0.0152605485140752, // * estimated number of transactions per second after that timestamp + 0.01528131540752872, // * estimated number of transactions per second after that timestamp }; } }; From 8b88ff7ed6085687e6b3a2e4248ff67663d445c0 Mon Sep 17 00:00:00 2001 From: pasta Date: Wed, 20 Nov 2024 13:59:00 -0600 Subject: [PATCH 10/10] Merge #6414: chore: bump seeds for v22 5741d5da28f9fb74256f3c636a3afcd87118bc8e chore: update seeds (Kittywhiskers Van Gogh) 2d732fc66e88ba6fb0af4c1c9c601f80a015b8a4 chore: drop defunct onion seeds, add new existing onion hosts as seeds (pasta) Pull request description: ## Issue being fixed or feature implemented Update onion seeds for upcoming version ## What was done? Update onion seeds to reflect latest status ## How Has This Been Tested? As of today, all of these are able to be connected to on port 9999; I've not actually connected to all of them and verified they're on latest core or something like that; but their addresses my core knows about, and are able to be trivially connected to ## 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)_ ACKs for top commit: kwvg: utACK 5741d5da28f9fb74256f3c636a3afcd87118bc8e UdjinM6: utACK 5741d5da28f9fb74256f3c636a3afcd87118bc8e Tree-SHA512: 541bcc510b2ebf6de08ac91f2b7e5b1c910536dca9bab0b38930d6e5cfa1cd05e8c014ba4c74c14c43ed211cda3275fffb5baaf1489bbd1221567130d804b0ec --- contrib/seeds/nodes_main.txt | 258 ++++++++++++++++++++++------------ contrib/seeds/onion_seeds.txt | 43 ++++-- src/chainparamsseeds.h | 258 ++++++++++++++++++++++------------ 3 files changed, 368 insertions(+), 191 deletions(-) diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt index 0078a96b72..1ec14942c3 100644 --- a/contrib/seeds/nodes_main.txt +++ b/contrib/seeds/nodes_main.txt @@ -1,170 +1,248 @@ -zmkohnwhp67nxtaspaudwvbac3r3oab4j36kxoo7ofk636wcd2bflxad.onion:9999 -yvcukkjk6vsjliszrlhh3f4qal76w6n2hoi4hl4edp6b5zyifhcixoyd.onion:9999 -v7ttoiov7rc5aut64nfomyfwxt424ihufwvr5ilf7moeg3fwibjpjcqd.onion:9999 +xmbwpdsrsn2gdamvofesyy5zrgqcswsoorrh25jx7qy4w2gftttga7ad.onion:9999 +xjn2wouhpr2jrqtqa3itkccjxfvrpvjgehgkrqltggnei5wl2535eiyd.onion:9999 +wzf6u7feqa65kyd5ooyyvw3rxozurmuzgzr4r3qrigne3xlj5tazwnyd.onion:9999 +wtby3fkid4eqaknfvmakg6vofvpda4ukhuec7k52no76n6szxcvf7pid.onion:9999 +uf3otvrjnj7grwm7skwslf6ltibo24hkolrwuyxyx7yzlalwnupw4bid.onion:9999 tuzjyti6guw32smcxgswmt2fkjlkyxnt47rtspvmqerbalzdeyguczyd.onion:9999 snu2xaql3crh2b4t6g2wxemgrpzmaxfxla4tua63bnp2phhxwr6hzzid.onion:9999 +rwl447roxllklmqkmbp5aq2bxj4vwzomx6ellodoguc5vegnrr6v3yyd.onion:9999 qkcdtz6ejiycge6i3g6uyf6m4ivby7t77syt7yezlwwhtmbsk37u74yd.onion:9999 +qbqa37m7uiie63723muhzgl4swqjvs6oddzhtzw5ke32t47am6lq5mad.onion:9999 +qaocy2qaktafiuzyd3i4apyukvr2hr6fwjet625cqwbwq5yr4qqocbid.onion:9999 pcabrbxdlxgybiyykuiccajsfzazmigvc7cemqbzpqw5du27iqaihmyd.onion:9999 -nl7j4rwrb2yemyn5meu64jfbfj5pkeuyo73afihtjdytsh6fpiibkrad.onion:9999 -njmniixuv2ji4an6lfqol6d3bqbijt7cko6wpfgc2wyxe2jg5htwoiad.onion:9999 -mn3zcamezyz5fryftzvmenv4vtbv5ki2eodxugq5gjwka7fft7po4uid.onion:9999 -l2ae5ngumxbcoqwpaxquxq7p6fwtvgfqbokrm7vqiaho4rkijd4ssmyd.onion:9999 +p2d6rg6vh5f3mjrb75l2ppxtbbpjbf45vteyp3c4u3nxfonwpezaq4ad.onion:9999 +mj5zq3oeodlwselk5bnx5lhiuhwuuz6xgmijx4kbnpnhamkf5t7aqcqd.onion:9999 +lqg6nfbek54fbsgdycq6rej7edqcg4ps6mqmvsqr645iecbt7cz7e5qd.onion:9999 k6bzqtkhtzyziethin3kkys342rlzcmqkrs5ibashqclcu23ehuz6oqd.onion:9999 +k5gdngvamlwymwh2an6qlazpgvlhkrukaso6nv56d35pentpfhimvayd.onion:9999 k532fqvgzqotj6epfw3rfc377elrj3td47ztad2tkn6vwnw6nhxacrqd.onion:9999 +jqssjynvlqwfiordnux2vqt6glnr3fypypfwasrizbpwhbj2lvtuzqqd.onion:9999 +jjjhwysk4t3i7nrjyxyrf4yjjqmole4doowga7nnkyjih3hmi7q2jsad.onion:9999 +iy6wzfp65f5peehquqchqperx5r4qsybfmvvdjhe2ak3ig6pt3a452yd.onion:9999 itkatc2gpfkuvbmjflxgranktjrsokc7wcunu25mq7ptqms7fwex6jyd.onion:9999 -iekgzhetngwhhf7rfxglb3mdwajtoikpcvg3e3etpx4ylku6chr6jrqd.onion:9999 +iddbcb6xzrbrjpzwbozhe3pztgrhkwjo76o4wkrpi43p5jya6jv6m7qd.onion:9999 i75yxbzhzkk6q55oig6xeidcexswpgcbquhjuxkkwehy6rvjq6sjxmad.onion:9999 +hu43stbffzpgfixmzgx4ae2sp65nrjui6kagzrhkpqhmgsk2kbnfs6id.onion:9999 +hsq4dkpmgc3yeirpiufopkonabxq62kl43vkzry65vhp7ctlyl3ngayd.onion:9999 +h4rycn3lgltahxvfxte6rzuyu3ooa3f3a5pcgzhkvh5baqei7s3w6yid.onion:9999 h2cpqmjd3rqehro52stehi4vnyofxymfqdsexchhf7dpbbkoqkmjjiyd.onion:9999 +ggyyhg4yr2cv4cbjedcs43ag3vh3qvynaptmlg6yzono5hhgjqif37yd.onion:9999 gbg2wd4uwc5k7w5j3w46zre6r5ioezulgjriketxv4qekybzg2zwdnid.onion:9999 -g6qaacqm3z6xup6kmprb2uvb5wtv3a4isflh4aege2yfgpuvaozfnkad.onion:9999 +g62ldh5nedukfk5hvokn6ztbhmql6q7qegrq6dbzyvzir72xerqba6yd.onion:9999 +fzo6z4dcjtfg5eg7absrzsskznto5ivgsqty23hmcvf6bjeg4mq2m6yd.onion:9999 +etiufki5csbodchyyoqv4bv4qm2xzaljidnst4khl632xkdrsiihulad.onion:9999 eee7cdynbju7pax44vm3bo7aazi72qbqgwktpvk37hoxg7jkqez2kcad.onion:9999 +dw4u6agw6gktz7ykmgxn7m3fmgnnybhhlnish3lvnuylcb5wcwzutdqd.onion:9999 cmhr5r3lqhy7ic2ebeil66ftcz5u62zq5qhbfdz53l6sqxljh7zxntyd.onion:9999 +c5qhh5xrwnonmtniag5r7bftfweniwt2f6fdixq37c7gnunbjzgx26qd.onion:9999 buo3et3xvzdjqkpx6iscjz4oexyurhpbpl3is46d653kfitl2gdzm6yd.onion:9999 +ayhwwpjq4rg3bslbtt7yejqyhucyaqsbb7tn45blh4r7xj62wfonryqd.onion:9999 5v5lgddolcidtt2qmhmvyka2ewht4mkmmj73tfwuimlckgmqb5lthtid.onion:9999 -467ho3bhmndzbktbqd3nxf64isib54umiis5xc5n2xnt35u2ofhs5gid.onion:9999 -2h6yzlqtogqkaj4yhrofsccntpjyafpjxwutti65dkpqliuzah3is7ad.onion:9999 +5gnyyuxpkwsqv6sm2ee2k6uaiuq5ayaipjm33n5pwe22uit37yozrcid.onion:9999 +542grzvty3cnbtzc3sjatubkmnhw22x5gfvnj2lromdparwlc4j7o4qd.onion:9999 +4da4s6fvz2wt672kxxqgra4iurots4jnzzmeplbdt7abix655fjn23qd.onion:9999 +3uvcjymiixi6n6m2p6fsgyjxkx2ceaesd7eopi3p7jn364i5z646koid.onion:9999 +3cova3snmiydrdaqrszj5krnujpwgkueh2kjodun4hvixk3y5l5zmgid.onion:9999 +2br37z5ilg3i3rawwkznmh6lhczboql5zdrfgmkaxns4tpfrxmu6s5yd.onion:9999 216.250.97.52:9999 216.238.75.46:9999 216.230.232.125:9999 -216.189.154.8:9999 -216.189.154.7:9999 -213.168.249.174:9999 +213.218.209.34:9999 +213.199.34.250:9999 +213.171.15.125:9999 +213.159.77.221:9999 +212.52.0.210:9999 212.24.110.128:9999 -212.24.107.223:9999 +209.145.48.154:9999 +209.141.36.206:9999 +209.58.164.42:9999 +208.87.102.91:9999 207.244.247.40:9999 -206.189.132.224:9999 -206.168.213.108:9999 -206.168.212.226:9999 -206.168.212.178:9999 -206.168.212.144:9999 -194.158.71.228:9999 +202.5.16.33:9999 +198.7.115.48:9999 +195.181.211.64:9999 +195.98.95.210:9999 194.135.81.214:9999 -193.164.149.50:9999 -193.31.30.55:9999 -188.208.196.183:9999 +194.5.157.214:9999 +192.169.6.87:9999 +188.127.237.243:9999 188.127.230.40:9999 -188.68.223.94:9999 +188.40.178.67:9999 185.243.115.219:9999 +185.228.83.156:9999 +185.217.127.139:9999 185.213.24.34:9999 +185.198.234.54:9999 +185.198.234.33:9999 +185.198.234.25:9999 +185.198.234.17:9999 +185.185.40.171:9999 +185.185.40.104:9999 +185.166.217.154:9999 185.165.171.117:9999 185.164.163.218:9999 185.164.163.85:9999 -185.135.80.200:9999 +185.158.107.124:9999 +185.155.99.34:9999 +185.142.212.144:9999 +185.112.249.49:9999 185.87.149.61:9999 178.208.87.226:9999 178.208.87.213:9999 -178.157.91.179:9999 -178.157.91.176:9999 -178.157.91.126:9999 +178.159.2.12:9999 +178.157.91.184:9999 +178.157.91.178:9999 +178.157.91.177:9999 178.63.121.129:9999 -176.126.127.16:9999 -176.126.127.15:9999 -174.34.233.207:9999 -174.34.233.206:9999 -174.34.233.205:9999 -174.34.233.202:9999 -173.249.21.122:9999 +176.102.65.145:9999 +174.34.233.212:9999 +174.34.233.211:9999 +174.34.233.209:9999 +174.34.233.204:9999 +172.104.145.166:9999 172.104.90.249:9999 +170.75.167.244:9999 +170.75.162.212:9999 168.119.80.4:9999 167.88.169.16:9999 +167.88.165.175:9999 165.22.234.135:9999 -159.89.124.102:9999 -155.133.23.221:9999 +163.172.66.41:9999 +163.172.20.210:9999 +163.172.20.209:9999 +163.172.20.205:9999 +162.250.191.31:9999 +162.246.17.248:9999 +159.75.121.163:9999 +157.173.202.14:9999 +157.66.81.162:9999 +157.10.199.82:9999 +157.10.199.79:9999 +157.10.199.77:9999 +154.127.57.63:9999 150.158.48.6:9999 -145.239.20.176:9999 -144.91.127.166:9999 -142.202.205.95:9999 -139.59.100.103:9999 +147.45.183.128:9999 +147.45.103.99:9999 +146.190.230.104:9999 +146.103.48.209:9999 +146.103.48.203:9999 +146.59.45.235:9999 +139.162.131.197:9999 +135.181.53.130:9999 +134.255.182.186:9999 133.18.228.84:9999 130.162.233.186:9999 +130.61.120.252:9999 123.193.64.166:9999 -109.235.70.100:9999 -109.235.69.170:9999 -109.235.65.226:9999 -109.235.65.95:9999 +109.235.69.82:9999 +109.173.240.233:9999 +107.189.3.74:9999 +107.170.254.160:9999 106.55.9.22:9999 -104.238.35.116:9999 -104.200.67.251:9999 +104.225.159.232:9999 104.200.24.196:9999 -103.160.95.219:9999 95.211.196.46:9999 +95.211.196.34:9999 95.211.196.32:9999 95.211.196.8:9999 -95.183.53.44:9999 95.183.51.141:9999 +95.171.21.131:9999 +95.169.181.71:9999 +94.172.109.161:9999 93.21.76.185:9999 +92.63.176.202:9999 +91.234.35.132:9999 +91.222.237.98:9999 +91.199.149.177:9999 89.179.73.96:9999 89.117.19.10:9999 +89.40.13.80:9999 +89.40.10.45:9999 +89.40.8.160:9999 +89.40.0.109:9999 +89.35.131.61:9999 +87.228.24.64:9999 +87.209.245.227:9999 +86.107.168.47:9999 +86.107.168.46:9999 +86.107.168.43:9999 +86.107.168.29:9999 85.215.107.202:9999 -85.209.241.190:9999 -85.209.241.188:9999 +85.209.241.185:9999 +85.209.241.86:9999 85.209.241.71:9999 85.209.241.35:9999 +84.242.179.204:9999 +84.9.50.17:9999 +83.239.99.40:9999 82.211.25.193:9999 82.211.25.105:9999 82.211.21.179:9999 82.211.21.23:9999 82.202.230.83:9999 81.227.250.51:9999 +80.249.147.8:9999 +80.240.132.231:9999 80.209.234.170:9999 78.83.19.0:9999 -77.232.132.89:9999 -77.232.132.4:9999 77.223.99.4:9999 +77.221.148.204:9999 +74.50.90.113:9999 +69.61.107.215:9999 +66.245.196.52:9999 66.244.243.70:9999 66.244.243.69:9999 -58.110.224.166:9999 -54.37.234.121:9999 +52.36.102.91:9999 52.33.9.172:9999 -51.158.243.250:9999 -51.158.169.237:9999 -51.79.160.197:9999 -51.68.155.64:9999 -51.15.117.42:9999 -51.15.96.206:9999 -47.109.109.166:9999 -46.254.241.21:9999 +51.38.142.66:9999 +51.38.142.62:9999 +51.38.142.61:9999 +47.110.184.170:9999 +46.254.241.9:9999 +46.254.241.8:9999 +46.254.241.7:9999 46.254.241.4:9999 46.36.40.242:9999 +46.30.189.251:9999 46.30.189.214:9999 +46.30.189.213:9999 46.30.189.116:9999 -46.4.162.127:9999 +45.153.186.100:9999 45.140.19.201:9999 -45.93.139.117:9999 +45.135.180.79:9999 45.91.94.217:9999 -45.85.117.169:9999 -45.85.117.40:9999 45.83.122.122:9999 -45.79.18.106:9999 45.76.83.91:9999 45.71.159.104:9999 45.71.158.108:9999 45.71.158.58:9999 -45.63.107.90:9999 -45.58.56.221:9999 +45.61.186.121:9999 +45.58.56.79:9999 45.32.159.48:9999 45.11.182.64:9999 -45.8.250.154:9999 44.240.99.214:9999 -37.77.104.166:9999 +43.229.77.46:9999 +43.167.244.109:9999 +43.167.240.90:9999 +43.163.251.51:9999 +43.128.72.114:9999 +38.99.82.230:9999 +38.99.82.21:9999 +38.91.101.92:9999 +38.91.100.202:9999 +38.88.125.51:9999 +38.88.125.50:9999 +37.97.227.21:9999 +35.174.217.98:9999 +34.246.176.25:9999 31.148.99.104:9999 +31.57.190.188:9999 +31.57.190.31:9999 31.10.97.36:9999 -23.163.0.203:9999 -23.163.0.175:9999 -13.251.11.55:9999 -5.252.21.24:9999 -5.189.253.252:9999 -5.189.239.52:9999 -5.189.145.80:9999 -5.181.202.15:9999 +5.255.106.192:9999 5.161.110.79:9999 -5.79.109.243:9999 -5.78.74.118:9999 -5.35.103.111:9999 -5.35.103.74:9999 -5.35.103.64:9999 -5.35.103.58:9999 -5.9.237.34:9999 +5.35.103.26:9999 +5.35.103.25:9999 +5.35.103.19:9999 5.2.73.58:9999 -3.35.224.65:9999 -2.56.213.221:9999 +2.233.120.35:9999 diff --git a/contrib/seeds/onion_seeds.txt b/contrib/seeds/onion_seeds.txt index 6833a1ce27..6dcd72828b 100644 --- a/contrib/seeds/onion_seeds.txt +++ b/contrib/seeds/onion_seeds.txt @@ -1,25 +1,46 @@ cmhr5r3lqhy7ic2ebeil66ftcz5u62zq5qhbfdz53l6sqxljh7zxntyd.onion:9999 k532fqvgzqotj6epfw3rfc377elrj3td47ztad2tkn6vwnw6nhxacrqd.onion:9999 -v7ttoiov7rc5aut64nfomyfwxt424ihufwvr5ilf7moeg3fwibjpjcqd.onion:9999 snu2xaql3crh2b4t6g2wxemgrpzmaxfxla4tua63bnp2phhxwr6hzzid.onion:9999 5v5lgddolcidtt2qmhmvyka2ewht4mkmmj73tfwuimlckgmqb5lthtid.onion:9999 -yvcukkjk6vsjliszrlhh3f4qal76w6n2hoi4hl4edp6b5zyifhcixoyd.onion:9999 k6bzqtkhtzyziethin3kkys342rlzcmqkrs5ibashqclcu23ehuz6oqd.onion:9999 -2h6yzlqtogqkaj4yhrofsccntpjyafpjxwutti65dkpqliuzah3is7ad.onion:9999 tuzjyti6guw32smcxgswmt2fkjlkyxnt47rtspvmqerbalzdeyguczyd.onion:9999 -467ho3bhmndzbktbqd3nxf64isib54umiis5xc5n2xnt35u2ofhs5gid.onion:9999 h2cpqmjd3rqehro52stehi4vnyofxymfqdsexchhf7dpbbkoqkmjjiyd.onion:9999 -l2ae5ngumxbcoqwpaxquxq7p6fwtvgfqbokrm7vqiaho4rkijd4ssmyd.onion:9999 eee7cdynbju7pax44vm3bo7aazi72qbqgwktpvk37hoxg7jkqez2kcad.onion:9999 qkcdtz6ejiycge6i3g6uyf6m4ivby7t77syt7yezlwwhtmbsk37u74yd.onion:9999 -g6qaacqm3z6xup6kmprb2uvb5wtv3a4isflh4aege2yfgpuvaozfnkad.onion:9999 buo3et3xvzdjqkpx6iscjz4oexyurhpbpl3is46d653kfitl2gdzm6yd.onion:9999 -iekgzhetngwhhf7rfxglb3mdwajtoikpcvg3e3etpx4ylku6chr6jrqd.onion:9999 -nl7j4rwrb2yemyn5meu64jfbfj5pkeuyo73afihtjdytsh6fpiibkrad.onion:9999 gbg2wd4uwc5k7w5j3w46zre6r5ioezulgjriketxv4qekybzg2zwdnid.onion:9999 pcabrbxdlxgybiyykuiccajsfzazmigvc7cemqbzpqw5du27iqaihmyd.onion:9999 -mn3zcamezyz5fryftzvmenv4vtbv5ki2eodxugq5gjwka7fft7po4uid.onion:9999 itkatc2gpfkuvbmjflxgranktjrsokc7wcunu25mq7ptqms7fwex6jyd.onion:9999 -zmkohnwhp67nxtaspaudwvbac3r3oab4j36kxoo7ofk636wcd2bflxad.onion:9999 -njmniixuv2ji4an6lfqol6d3bqbijt7cko6wpfgc2wyxe2jg5htwoiad.onion:9999 i75yxbzhzkk6q55oig6xeidcexswpgcbquhjuxkkwehy6rvjq6sjxmad.onion:9999 +ggyyhg4yr2cv4cbjedcs43ag3vh3qvynaptmlg6yzono5hhgjqif37yd.onion:9999 +g62ldh5nedukfk5hvokn6ztbhmql6q7qegrq6dbzyvzir72xerqba6yd.onion:9999 +5gnyyuxpkwsqv6sm2ee2k6uaiuq5ayaipjm33n5pwe22uit37yozrcid.onion:9999 +xmbwpdsrsn2gdamvofesyy5zrgqcswsoorrh25jx7qy4w2gftttga7ad.onion:9999 +qaocy2qaktafiuzyd3i4apyukvr2hr6fwjet625cqwbwq5yr4qqocbid.onion:9999 +2br37z5ilg3i3rawwkznmh6lhczboql5zdrfgmkaxns4tpfrxmu6s5yd.onion:9999 +3cova3snmiydrdaqrszj5krnujpwgkueh2kjodun4hvixk3y5l5zmgid.onion:9999 +iy6wzfp65f5peehquqchqperx5r4qsybfmvvdjhe2ak3ig6pt3a452yd.onion:9999 +k5gdngvamlwymwh2an6qlazpgvlhkrukaso6nv56d35pentpfhimvayd.onion:9999 +4da4s6fvz2wt672kxxqgra4iurots4jnzzmeplbdt7abix655fjn23qd.onion:9999 +uf3otvrjnj7grwm7skwslf6ltibo24hkolrwuyxyx7yzlalwnupw4bid.onion:9999 +dw4u6agw6gktz7ykmgxn7m3fmgnnybhhlnish3lvnuylcb5wcwzutdqd.onion:9999 +c5qhh5xrwnonmtniag5r7bftfweniwt2f6fdixq37c7gnunbjzgx26qd.onion:9999 +h4rycn3lgltahxvfxte6rzuyu3ooa3f3a5pcgzhkvh5baqei7s3w6yid.onion:9999 +mj5zq3oeodlwselk5bnx5lhiuhwuuz6xgmijx4kbnpnhamkf5t7aqcqd.onion:9999 +fzo6z4dcjtfg5eg7absrzsskznto5ivgsqty23hmcvf6bjeg4mq2m6yd.onion:9999 +3uvcjymiixi6n6m2p6fsgyjxkx2ceaesd7eopi3p7jn364i5z646koid.onion:9999 +wzf6u7feqa65kyd5ooyyvw3rxozurmuzgzr4r3qrigne3xlj5tazwnyd.onion:9999 +hu43stbffzpgfixmzgx4ae2sp65nrjui6kagzrhkpqhmgsk2kbnfs6id.onion:9999 +xjn2wouhpr2jrqtqa3itkccjxfvrpvjgehgkrqltggnei5wl2535eiyd.onion:9999 +hsq4dkpmgc3yeirpiufopkonabxq62kl43vkzry65vhp7ctlyl3ngayd.onion:9999 +ayhwwpjq4rg3bslbtt7yejqyhucyaqsbb7tn45blh4r7xj62wfonryqd.onion:9999 +iddbcb6xzrbrjpzwbozhe3pztgrhkwjo76o4wkrpi43p5jya6jv6m7qd.onion:9999 +542grzvty3cnbtzc3sjatubkmnhw22x5gfvnj2lromdparwlc4j7o4qd.onion:9999 +qbqa37m7uiie63723muhzgl4swqjvs6oddzhtzw5ke32t47am6lq5mad.onion:9999 +etiufki5csbodchyyoqv4bv4qm2xzaljidnst4khl632xkdrsiihulad.onion:9999 +lqg6nfbek54fbsgdycq6rej7edqcg4ps6mqmvsqr645iecbt7cz7e5qd.onion:9999 +rwl447roxllklmqkmbp5aq2bxj4vwzomx6ellodoguc5vegnrr6v3yyd.onion:9999 +p2d6rg6vh5f3mjrb75l2ppxtbbpjbf45vteyp3c4u3nxfonwpezaq4ad.onion:9999 +jqssjynvlqwfiordnux2vqt6glnr3fypypfwasrizbpwhbj2lvtuzqqd.onion:9999 +jjjhwysk4t3i7nrjyxyrf4yjjqmole4doowga7nnkyjih3hmi7q2jsad.onion:9999 +wtby3fkid4eqaknfvmakg6vofvpda4ukhuec7k52no76n6szxcvf7pid.onion:9999 diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index 8cebf2109c..734090de97 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -7,176 +7,254 @@ * Each line contains a BIP155 serialized (networkID, addr, port) tuple. */ static const uint8_t chainparams_seed_main[] = { - 0x04,0x20,0xcb,0x14,0xe3,0xb6,0xc7,0x7f,0xbe,0xdb,0xcc,0x12,0x78,0x28,0x3b,0x54,0x20,0x16,0xe3,0xb7,0x00,0x3c,0x4e,0xfc,0xab,0xb9,0xdf,0x71,0x55,0xed,0xfa,0xc2,0x1e,0x82,0x27,0x0f, - 0x04,0x20,0xc5,0x45,0x45,0x29,0x2a,0xf5,0x64,0x95,0xa2,0x59,0x8a,0xce,0x7d,0x97,0x90,0x02,0xff,0xeb,0x79,0xba,0x3b,0x91,0xc3,0xaf,0x84,0x1b,0xfc,0x1e,0xe7,0x08,0x29,0xc4,0x27,0x0f, - 0x04,0x20,0xaf,0xe7,0x37,0x21,0xd5,0xfc,0x45,0xd0,0x52,0x7e,0xe3,0x4a,0xe6,0x60,0xb6,0xbc,0xf9,0xae,0x20,0xf4,0x2d,0xab,0x1e,0xa1,0x65,0xfb,0x1c,0x43,0x6c,0xb6,0x40,0x52,0x27,0x0f, + 0x04,0x20,0xbb,0x03,0x67,0x8e,0x51,0x93,0x74,0x61,0x81,0x95,0x71,0x49,0x2c,0x63,0xb9,0x89,0xa0,0x29,0x5a,0x4e,0x74,0x62,0x7d,0x75,0x37,0xfc,0x31,0xcb,0x68,0xc5,0x9c,0xe6,0x27,0x0f, + 0x04,0x20,0xba,0x5b,0xab,0x3a,0x87,0x7c,0x74,0x98,0xc2,0x70,0x06,0xd1,0x35,0x08,0x49,0xb9,0x6b,0x17,0xd5,0x26,0x21,0xcc,0xa8,0xc1,0x73,0x31,0x9a,0x44,0x76,0xcb,0xd7,0x77,0x27,0x0f, + 0x04,0x20,0xb6,0x4b,0xea,0x7c,0xa4,0x80,0x3d,0xd5,0x60,0x7d,0x73,0xb1,0x8a,0xdb,0x71,0xbb,0xb3,0x48,0xb2,0x99,0x36,0x63,0xc8,0xee,0x11,0x41,0x9a,0x4d,0xdd,0x69,0xec,0xc1,0x27,0x0f, + 0x04,0x20,0xb4,0xc3,0x8d,0x95,0x48,0x1f,0x09,0x00,0x29,0xa5,0xab,0x00,0xa3,0x7a,0xae,0x2d,0x5e,0x30,0x72,0x8a,0x3d,0x08,0x2f,0xab,0xba,0x6b,0xbf,0xe6,0xfa,0x59,0xb8,0xaa,0x27,0x0f, + 0x04,0x20,0xa1,0x76,0xe9,0xd6,0x29,0x6a,0x7e,0x68,0xd9,0x9f,0x92,0xad,0x25,0x97,0xcb,0x9a,0x02,0xed,0x70,0xea,0x72,0xe3,0x6a,0x62,0xf8,0xbf,0xf1,0x95,0x81,0x76,0x6d,0x1f,0x27,0x0f, 0x04,0x20,0x9d,0x32,0x9c,0x4d,0x1e,0x35,0x2d,0xbd,0x49,0x82,0xb9,0xa5,0x66,0x4f,0x45,0x52,0x56,0xac,0x5d,0xb3,0xe7,0xe3,0x39,0x3e,0xac,0x81,0x22,0x10,0x2f,0x23,0x26,0x0d,0x27,0x0f, 0x04,0x20,0x93,0x69,0xab,0x82,0x0b,0xd8,0xa2,0x7d,0x07,0x93,0xf1,0xb5,0x6b,0x91,0x86,0x8b,0xf2,0xc0,0x5c,0xb7,0x58,0x39,0x3a,0x03,0xdb,0x0b,0x5f,0xa7,0x9c,0xf7,0xb4,0x7c,0x27,0x0f, + 0x04,0x20,0x8d,0x97,0xce,0x7e,0x2e,0xba,0xd6,0xa5,0xb2,0x0a,0x60,0x5f,0xd0,0x43,0x41,0xba,0x79,0x5b,0x65,0xcc,0xbf,0x88,0xb5,0xb8,0x6e,0x35,0x05,0xda,0x90,0xcd,0x8c,0x7d,0x27,0x0f, 0x04,0x20,0x82,0x84,0x39,0xe7,0xc4,0x4a,0x30,0x23,0x13,0xc8,0xd9,0xbd,0x4c,0x17,0xcc,0xe2,0x2a,0x1c,0x7e,0x7f,0xfc,0xb1,0x3f,0xe0,0x99,0x5d,0xac,0x79,0xb0,0x32,0x56,0xff,0x27,0x0f, + 0x04,0x20,0x80,0x60,0x0d,0xfd,0x9f,0xa2,0x10,0x4f,0x6f,0xfa,0xdb,0x28,0x7c,0x99,0x7c,0x95,0xa0,0x9a,0xcb,0xce,0x18,0xf2,0x79,0xe6,0xdd,0x51,0x37,0xa9,0xf3,0xe0,0x67,0x97,0x27,0x0f, + 0x04,0x20,0x80,0x1c,0x2c,0x6a,0x00,0x54,0xc0,0x54,0x53,0x38,0x1e,0xd1,0xc0,0x3f,0x14,0x55,0x63,0xa3,0xc7,0xc5,0xb2,0x49,0x3f,0x6b,0xa2,0x85,0x83,0x68,0x77,0x11,0xe4,0x20,0x27,0x0f, 0x04,0x20,0x78,0x80,0x18,0x86,0xe3,0x5d,0xcd,0x80,0xa3,0x18,0x55,0x10,0x21,0x01,0x32,0x2e,0x41,0x96,0x20,0xd5,0x17,0xc4,0x46,0x40,0x39,0x7c,0x2d,0xd1,0xd3,0x5f,0x44,0x00,0x27,0x0f, - 0x04,0x20,0x6a,0xfe,0x9e,0x46,0xd1,0x0e,0xb0,0x46,0x61,0xbd,0x61,0x29,0xee,0x24,0xa1,0x2a,0x7a,0xf5,0x12,0x98,0x77,0xf6,0x02,0xa0,0xf3,0x48,0xf1,0x39,0x1f,0xc5,0x7a,0x10,0x27,0x0f, - 0x04,0x20,0x6a,0x58,0xd4,0x22,0xf4,0xae,0x92,0x8e,0x01,0xbe,0x59,0x60,0xe5,0xf8,0x7b,0x0c,0x02,0x84,0xcf,0xe2,0x53,0xbd,0x67,0x94,0xc2,0xd5,0xb1,0x72,0x69,0x26,0xe9,0xe7,0x27,0x0f, - 0x04,0x20,0x63,0x77,0x91,0x01,0x84,0xce,0x33,0xd2,0xc7,0x05,0x9e,0x6a,0xc2,0x36,0xbc,0xac,0xc3,0x5e,0xa9,0x1a,0x23,0x87,0x7a,0x1a,0x1d,0x32,0x6c,0xa0,0x7c,0xa5,0x9f,0xde,0x27,0x0f, - 0x04,0x20,0x5e,0x80,0x4e,0xb4,0xd4,0x65,0xc2,0x27,0x42,0xcf,0x05,0xe1,0x4b,0xc3,0xef,0xf1,0x6d,0x3a,0x98,0xb0,0x0b,0x95,0x16,0x7e,0xb0,0x40,0x0e,0xee,0x45,0x48,0x48,0xf9,0x27,0x0f, + 0x04,0x20,0x7e,0x87,0xe8,0x9b,0xd5,0x3f,0x4b,0xb6,0x26,0x21,0xff,0x57,0xa7,0xbe,0xf3,0x08,0x5e,0x90,0x97,0x9d,0xac,0xc9,0x87,0xec,0x5c,0xa6,0xdb,0x72,0xb9,0xb6,0x79,0x32,0x27,0x0f, + 0x04,0x20,0x62,0x7b,0x98,0x6d,0xc4,0x70,0xd7,0x69,0x11,0x6a,0xe8,0x5b,0x7e,0xac,0xe8,0xa1,0xed,0x4a,0x67,0xd7,0x33,0x10,0x9b,0xf1,0x41,0x6b,0xda,0x70,0x31,0x45,0xec,0xfe,0x27,0x0f, + 0x04,0x20,0x5c,0x0d,0xe6,0x94,0x24,0x57,0x78,0x50,0xc8,0xc3,0xc0,0xa1,0xe8,0x91,0x3f,0x20,0xe0,0x23,0x71,0xf2,0xf3,0x20,0xca,0xca,0x11,0xf7,0x3a,0x82,0x08,0x33,0xf8,0xb3,0x27,0x0f, 0x04,0x20,0x57,0x83,0x98,0x4d,0x47,0x9e,0x71,0x94,0x12,0x67,0x43,0x76,0xa5,0x62,0x5b,0xe6,0xa2,0xbc,0x89,0x90,0x54,0x65,0xd4,0x04,0x12,0x3c,0x04,0xb1,0x53,0x5b,0x21,0xe9,0x27,0x0f, + 0x04,0x20,0x57,0x4c,0x36,0x9a,0xa0,0x62,0xed,0x86,0x58,0xfa,0x03,0x7d,0x05,0x83,0x2f,0x35,0x56,0x75,0x46,0x8a,0x04,0x9d,0xe6,0xd7,0xbe,0x1e,0xfa,0xf2,0x36,0x6f,0x29,0xd0,0x27,0x0f, 0x04,0x20,0x57,0x77,0xa2,0xc2,0xa6,0xcc,0x1d,0x34,0xf8,0x8f,0x2d,0xb7,0x12,0x8b,0x7f,0xf9,0x17,0x14,0xee,0x63,0xe7,0xf3,0x30,0x0f,0x53,0x53,0x7d,0x5b,0x36,0xde,0x69,0xee,0x27,0x0f, + 0x04,0x20,0x4c,0x25,0x24,0xe1,0xb5,0x5c,0x2c,0x54,0x3a,0x23,0x6d,0x2f,0xaa,0xc2,0x7e,0x32,0xdb,0x1d,0x97,0x0f,0xc3,0xcb,0x60,0x4a,0x28,0xc8,0x5f,0x63,0x85,0x3a,0x5d,0x67,0x27,0x0f, + 0x04,0x20,0x4a,0x52,0x7b,0x62,0x4a,0xe4,0xf6,0x8f,0xb6,0x29,0xc5,0xf1,0x12,0xf3,0x09,0x4c,0x18,0xe5,0x93,0x83,0x73,0xac,0x60,0x7d,0xad,0x56,0x12,0x83,0xec,0xec,0x47,0xe1,0x27,0x0f, + 0x04,0x20,0x46,0x3d,0x6c,0x95,0xfe,0xe9,0x7a,0xf2,0x10,0xf0,0xa4,0x04,0x78,0x3c,0x91,0xbf,0x63,0xc8,0x4b,0x01,0x2b,0x2b,0x51,0xa4,0xe4,0xd0,0x15,0xb4,0x1b,0xcf,0x9e,0xc1,0x27,0x0f, 0x04,0x20,0x44,0xd4,0x09,0x8b,0x46,0x79,0x55,0x4a,0x85,0x89,0x2a,0xee,0x68,0x81,0xaa,0x9a,0x63,0x27,0x28,0x5f,0xb0,0xa8,0xda,0x6b,0xac,0x87,0xdf,0x38,0x32,0x5f,0x2d,0x89,0x27,0x0f, - 0x04,0x20,0x41,0x14,0x6c,0x9c,0x93,0x69,0xac,0x73,0x97,0xf1,0x2d,0xcc,0xb0,0xed,0x83,0xb0,0x13,0x37,0x21,0x4f,0x15,0x4d,0xb2,0x6c,0x93,0x7d,0xf9,0x85,0xaa,0x9e,0x11,0xe3,0x27,0x0f, + 0x04,0x20,0x40,0xc6,0x11,0x07,0xd7,0xcc,0x43,0x14,0xbf,0x36,0x0b,0xb2,0x72,0x6d,0xf9,0x99,0xa2,0x75,0x59,0x2e,0xff,0x9d,0xcb,0x2a,0x2f,0x47,0x36,0xfe,0xa7,0x00,0xf2,0x6b,0x27,0x0f, 0x04,0x20,0x47,0xfb,0x8b,0x87,0x27,0xca,0x95,0xe8,0x77,0xae,0x41,0xbd,0x72,0x20,0x62,0x25,0xe5,0x67,0x98,0x41,0x85,0x0e,0x9a,0x5d,0x4a,0xb1,0x0f,0x8f,0x46,0xa9,0x87,0xa4,0x27,0x0f, + 0x04,0x20,0x3d,0x39,0xb9,0x4c,0x25,0x2e,0x5e,0x62,0xa2,0xec,0xc9,0xaf,0xc0,0x13,0x52,0x7f,0xba,0xd8,0xa6,0x88,0xf2,0x80,0x6c,0xc4,0xea,0x7c,0x0e,0xc3,0x49,0x5a,0x50,0x5a,0x27,0x0f, + 0x04,0x20,0x3c,0xa1,0xc1,0xa9,0xec,0x30,0xb7,0x82,0x22,0x2f,0x45,0x0a,0xe7,0xa9,0xcd,0x00,0x6f,0x0f,0x69,0x4b,0xe6,0xea,0xac,0xc7,0x1e,0xed,0x4e,0xff,0x8a,0x6b,0xc2,0xf6,0x27,0x0f, + 0x04,0x20,0x3f,0x23,0x81,0x37,0x6b,0x32,0xe6,0x03,0xde,0xa5,0xbc,0xc9,0xe8,0xe6,0x98,0xa6,0xdc,0xe0,0x6c,0xbb,0x07,0x5e,0x23,0x64,0xea,0xa9,0xfa,0x10,0x40,0x88,0xfc,0xb7,0x27,0x0f, 0x04,0x20,0x3e,0x84,0xf8,0x31,0x23,0xdc,0x60,0x43,0xc5,0xdd,0xd4,0xa6,0x43,0xa3,0x95,0x6e,0x1c,0x5b,0xe1,0x85,0x80,0xe4,0x4b,0x88,0xe7,0x2f,0xc6,0xf0,0x85,0x4e,0x82,0x98,0x27,0x0f, + 0x04,0x20,0x31,0xb1,0x83,0x9b,0x98,0x8e,0x85,0x5e,0x08,0x29,0x20,0xc5,0x2e,0x6c,0x06,0xdd,0x4f,0xb8,0x57,0x0d,0x03,0xe6,0xc5,0x9b,0xd8,0xcb,0x9a,0xee,0x9c,0xe6,0x4c,0x10,0x27,0x0f, 0x04,0x20,0x30,0x4d,0xab,0x0f,0x94,0xb0,0xba,0xaf,0xdb,0xa9,0xdd,0xb9,0xec,0xc4,0x9e,0x8f,0x50,0xe2,0x66,0x8b,0x32,0x62,0x85,0x12,0x77,0xaf,0x20,0x45,0x60,0x39,0x36,0xb3,0x27,0x0f, - 0x04,0x20,0x37,0xa0,0x00,0x0a,0x0c,0xde,0x7d,0x7a,0x3f,0xca,0x63,0xe2,0x1d,0x52,0xa1,0xed,0xa7,0x5d,0x83,0x88,0x91,0x56,0x7e,0x00,0x86,0x26,0xb0,0x53,0x3e,0x95,0x03,0xb2,0x27,0x0f, + 0x04,0x20,0x37,0xb4,0xb1,0x9f,0xad,0x20,0xe8,0xa2,0xab,0xa7,0xab,0x94,0xdf,0x66,0x61,0x3b,0x20,0xbf,0x43,0xf0,0x21,0xa3,0x0f,0x0c,0x39,0xc5,0x72,0x88,0xff,0x57,0x24,0x60,0x27,0x0f, + 0x04,0x20,0x2e,0x5d,0xec,0xf0,0x62,0x4c,0xca,0x6e,0x90,0xdf,0x00,0x65,0x1c,0xca,0x4a,0xcb,0x66,0xee,0xa2,0xa6,0x94,0x27,0x8d,0x6c,0xec,0x15,0x4b,0xe0,0xa4,0x86,0xe3,0x21,0x27,0x0f, + 0x04,0x20,0x24,0xd1,0x42,0xa9,0x1d,0x14,0x82,0xe1,0x88,0xf8,0xc3,0xa1,0x5e,0x06,0xbc,0x83,0x35,0x7c,0x81,0x69,0x40,0xdb,0x29,0xf1,0x47,0x5f,0xb7,0xab,0xa8,0x71,0x92,0x10,0x27,0x0f, 0x04,0x20,0x21,0x09,0xf1,0x0f,0x0d,0x0a,0x69,0xf7,0x82,0xfc,0xe5,0x59,0xb0,0xbb,0xe0,0x06,0x51,0xfd,0x40,0x30,0x35,0x95,0x37,0xd5,0x5b,0xf9,0xdd,0x73,0x7d,0x2a,0x81,0x33,0x27,0x0f, + 0x04,0x20,0x1d,0xb9,0x4f,0x00,0xd6,0xf1,0x95,0x3c,0xff,0x0a,0x61,0xae,0xdf,0xb3,0x65,0x61,0x9a,0xdc,0x04,0xe7,0x5b,0x51,0x23,0xed,0x75,0x6d,0x30,0xb1,0x07,0xb6,0x15,0xb3,0x27,0x0f, 0x04,0x20,0x13,0x0f,0x1e,0xc7,0x6b,0x81,0xf1,0xf4,0x0b,0x44,0x09,0x10,0xbf,0x78,0xb3,0x16,0x7b,0x4f,0x6b,0x30,0xec,0x0e,0x12,0x8f,0x3d,0xda,0xfd,0x28,0x5d,0x69,0x3f,0xf3,0x27,0x0f, + 0x04,0x20,0x17,0x60,0x73,0xf6,0xf1,0xb3,0x5c,0xd6,0x4d,0xa8,0x01,0xbb,0x1f,0x84,0xb3,0x2d,0x88,0xd4,0x5a,0x7a,0x2f,0x8a,0x34,0x5e,0x1b,0xf8,0xbe,0x66,0xd1,0xa1,0x4e,0x4d,0x27,0x0f, 0x04,0x20,0x0d,0x1d,0xb2,0x4f,0x77,0xae,0x46,0x98,0x29,0xf7,0xf2,0x24,0x24,0xe7,0x8e,0x25,0xf1,0x48,0x9d,0xe1,0x7a,0xf6,0x89,0x73,0xc3,0xf7,0x76,0xa2,0xa2,0x6b,0xd1,0x87,0x27,0x0f, + 0x04,0x20,0x06,0x0f,0x6b,0x3d,0x30,0xe4,0x4d,0xb0,0xc9,0x61,0x9c,0xff,0x82,0x26,0x18,0x3d,0x05,0x80,0x42,0x41,0x0f,0xe6,0xde,0x74,0x2b,0x3f,0x23,0xfb,0xa7,0xda,0xb1,0x5c,0x27,0x0f, 0x04,0x20,0xed,0x7a,0xb3,0x0c,0x6e,0x58,0x90,0x39,0xcf,0x50,0x61,0xd9,0x5c,0x28,0x1a,0x25,0x8f,0x3e,0x31,0x4c,0x62,0x7f,0xb9,0x96,0xd4,0x43,0x16,0x25,0x19,0x90,0x0f,0x57,0x27,0x0f, - 0x04,0x20,0xe7,0xbe,0x77,0x6c,0x27,0x63,0x47,0x90,0xaa,0x61,0x80,0xf6,0xdb,0x97,0xdc,0x44,0x90,0x1e,0xf2,0x8c,0x42,0x25,0xdb,0x8b,0xad,0xd5,0xdb,0x3d,0xf6,0x9a,0x71,0x4f,0x27,0x0f, - 0x04,0x20,0xd1,0xfd,0x8c,0xae,0x13,0x71,0xa0,0xa0,0x27,0x98,0x3c,0x5c,0x59,0x08,0x4d,0x9b,0xd3,0x80,0x15,0xe9,0xbd,0xa9,0x39,0xa3,0xdd,0x1a,0x9f,0x05,0xa2,0x99,0x01,0xf6,0x27,0x0f, + 0x04,0x20,0xe9,0x9b,0x8c,0x52,0xef,0x55,0xa5,0x0a,0xfa,0x4c,0xd1,0x09,0xa5,0x7a,0x80,0x45,0x21,0xd0,0x60,0x08,0x7a,0x59,0xbd,0xb7,0xaf,0xb1,0x35,0xaa,0x22,0x7b,0xfe,0x1d,0x27,0x0f, + 0x04,0x20,0xef,0x34,0x68,0xe6,0xb3,0xc6,0xc4,0xd0,0xcf,0x22,0xdc,0x92,0x09,0xd0,0x2a,0x63,0x4f,0x6d,0x6a,0xfd,0x31,0x6a,0xd4,0xe9,0x71,0x73,0x06,0xf0,0x46,0xcb,0x17,0x13,0x27,0x0f, + 0x04,0x20,0xe0,0xc1,0xc9,0x78,0xb5,0xce,0xad,0x3f,0x7f,0x4a,0xbd,0xe0,0x68,0x83,0x88,0xa4,0x5d,0x39,0x71,0x2d,0xce,0x58,0x47,0xac,0x23,0x9f,0xc0,0x14,0x5f,0xdd,0xe9,0x52,0x27,0x0f, + 0x04,0x20,0xdd,0x2a,0x24,0xe1,0x88,0x45,0xd1,0xe6,0xf9,0x9a,0x7f,0x8b,0x23,0x61,0x37,0x55,0xf4,0x22,0x00,0x92,0x1f,0xc8,0xe7,0xa3,0x6f,0xfa,0x5b,0xbf,0x71,0x1d,0xcf,0xb9,0x27,0x0f, + 0x04,0x20,0xd8,0x9d,0x50,0x6e,0x4d,0x62,0x30,0x38,0x8c,0x10,0x8c,0xb2,0x9e,0xaa,0x2d,0xa2,0x5f,0x63,0x2a,0x84,0x3e,0x94,0x97,0x0e,0x8d,0xe1,0xea,0x8b,0xab,0x78,0xea,0xfb,0x27,0x0f, + 0x04,0x20,0xd0,0x63,0xbf,0xe7,0xa8,0x59,0xb6,0x8d,0xc4,0x16,0xb2,0xb2,0xd6,0x1f,0xcb,0x38,0xb2,0x17,0x41,0x7d,0xc8,0xe2,0x53,0x31,0x40,0xbb,0x65,0xc9,0xbc,0xb1,0xbb,0x29,0x27,0x0f, 0x01,0x04,0xd8,0xfa,0x61,0x34,0x27,0x0f, 0x01,0x04,0xd8,0xee,0x4b,0x2e,0x27,0x0f, 0x01,0x04,0xd8,0xe6,0xe8,0x7d,0x27,0x0f, - 0x01,0x04,0xd8,0xbd,0x9a,0x08,0x27,0x0f, - 0x01,0x04,0xd8,0xbd,0x9a,0x07,0x27,0x0f, - 0x01,0x04,0xd5,0xa8,0xf9,0xae,0x27,0x0f, + 0x01,0x04,0xd5,0xda,0xd1,0x22,0x27,0x0f, + 0x01,0x04,0xd5,0xc7,0x22,0xfa,0x27,0x0f, + 0x01,0x04,0xd5,0xab,0x0f,0x7d,0x27,0x0f, + 0x01,0x04,0xd5,0x9f,0x4d,0xdd,0x27,0x0f, + 0x01,0x04,0xd4,0x34,0x00,0xd2,0x27,0x0f, 0x01,0x04,0xd4,0x18,0x6e,0x80,0x27,0x0f, - 0x01,0x04,0xd4,0x18,0x6b,0xdf,0x27,0x0f, + 0x01,0x04,0xd1,0x91,0x30,0x9a,0x27,0x0f, + 0x01,0x04,0xd1,0x8d,0x24,0xce,0x27,0x0f, + 0x01,0x04,0xd1,0x3a,0xa4,0x2a,0x27,0x0f, + 0x01,0x04,0xd0,0x57,0x66,0x5b,0x27,0x0f, 0x01,0x04,0xcf,0xf4,0xf7,0x28,0x27,0x0f, - 0x01,0x04,0xce,0xbd,0x84,0xe0,0x27,0x0f, - 0x01,0x04,0xce,0xa8,0xd5,0x6c,0x27,0x0f, - 0x01,0x04,0xce,0xa8,0xd4,0xe2,0x27,0x0f, - 0x01,0x04,0xce,0xa8,0xd4,0xb2,0x27,0x0f, - 0x01,0x04,0xce,0xa8,0xd4,0x90,0x27,0x0f, - 0x01,0x04,0xc2,0x9e,0x47,0xe4,0x27,0x0f, + 0x01,0x04,0xca,0x05,0x10,0x21,0x27,0x0f, + 0x01,0x04,0xc6,0x07,0x73,0x30,0x27,0x0f, + 0x01,0x04,0xc3,0xb5,0xd3,0x40,0x27,0x0f, + 0x01,0x04,0xc3,0x62,0x5f,0xd2,0x27,0x0f, 0x01,0x04,0xc2,0x87,0x51,0xd6,0x27,0x0f, - 0x01,0x04,0xc1,0xa4,0x95,0x32,0x27,0x0f, - 0x01,0x04,0xc1,0x1f,0x1e,0x37,0x27,0x0f, - 0x01,0x04,0xbc,0xd0,0xc4,0xb7,0x27,0x0f, + 0x01,0x04,0xc2,0x05,0x9d,0xd6,0x27,0x0f, + 0x01,0x04,0xc0,0xa9,0x06,0x57,0x27,0x0f, + 0x01,0x04,0xbc,0x7f,0xed,0xf3,0x27,0x0f, 0x01,0x04,0xbc,0x7f,0xe6,0x28,0x27,0x0f, - 0x01,0x04,0xbc,0x44,0xdf,0x5e,0x27,0x0f, + 0x01,0x04,0xbc,0x28,0xb2,0x43,0x27,0x0f, 0x01,0x04,0xb9,0xf3,0x73,0xdb,0x27,0x0f, + 0x01,0x04,0xb9,0xe4,0x53,0x9c,0x27,0x0f, + 0x01,0x04,0xb9,0xd9,0x7f,0x8b,0x27,0x0f, 0x01,0x04,0xb9,0xd5,0x18,0x22,0x27,0x0f, + 0x01,0x04,0xb9,0xc6,0xea,0x36,0x27,0x0f, + 0x01,0x04,0xb9,0xc6,0xea,0x21,0x27,0x0f, + 0x01,0x04,0xb9,0xc6,0xea,0x19,0x27,0x0f, + 0x01,0x04,0xb9,0xc6,0xea,0x11,0x27,0x0f, + 0x01,0x04,0xb9,0xb9,0x28,0xab,0x27,0x0f, + 0x01,0x04,0xb9,0xb9,0x28,0x68,0x27,0x0f, + 0x01,0x04,0xb9,0xa6,0xd9,0x9a,0x27,0x0f, 0x01,0x04,0xb9,0xa5,0xab,0x75,0x27,0x0f, 0x01,0x04,0xb9,0xa4,0xa3,0xda,0x27,0x0f, 0x01,0x04,0xb9,0xa4,0xa3,0x55,0x27,0x0f, - 0x01,0x04,0xb9,0x87,0x50,0xc8,0x27,0x0f, + 0x01,0x04,0xb9,0x9e,0x6b,0x7c,0x27,0x0f, + 0x01,0x04,0xb9,0x9b,0x63,0x22,0x27,0x0f, + 0x01,0x04,0xb9,0x8e,0xd4,0x90,0x27,0x0f, + 0x01,0x04,0xb9,0x70,0xf9,0x31,0x27,0x0f, 0x01,0x04,0xb9,0x57,0x95,0x3d,0x27,0x0f, 0x01,0x04,0xb2,0xd0,0x57,0xe2,0x27,0x0f, 0x01,0x04,0xb2,0xd0,0x57,0xd5,0x27,0x0f, - 0x01,0x04,0xb2,0x9d,0x5b,0xb3,0x27,0x0f, - 0x01,0x04,0xb2,0x9d,0x5b,0xb0,0x27,0x0f, - 0x01,0x04,0xb2,0x9d,0x5b,0x7e,0x27,0x0f, + 0x01,0x04,0xb2,0x9f,0x02,0x0c,0x27,0x0f, + 0x01,0x04,0xb2,0x9d,0x5b,0xb8,0x27,0x0f, + 0x01,0x04,0xb2,0x9d,0x5b,0xb2,0x27,0x0f, + 0x01,0x04,0xb2,0x9d,0x5b,0xb1,0x27,0x0f, 0x01,0x04,0xb2,0x3f,0x79,0x81,0x27,0x0f, - 0x01,0x04,0xb0,0x7e,0x7f,0x10,0x27,0x0f, - 0x01,0x04,0xb0,0x7e,0x7f,0x0f,0x27,0x0f, - 0x01,0x04,0xae,0x22,0xe9,0xcf,0x27,0x0f, - 0x01,0x04,0xae,0x22,0xe9,0xce,0x27,0x0f, - 0x01,0x04,0xae,0x22,0xe9,0xcd,0x27,0x0f, - 0x01,0x04,0xae,0x22,0xe9,0xca,0x27,0x0f, - 0x01,0x04,0xad,0xf9,0x15,0x7a,0x27,0x0f, + 0x01,0x04,0xb0,0x66,0x41,0x91,0x27,0x0f, + 0x01,0x04,0xae,0x22,0xe9,0xd4,0x27,0x0f, + 0x01,0x04,0xae,0x22,0xe9,0xd3,0x27,0x0f, + 0x01,0x04,0xae,0x22,0xe9,0xd1,0x27,0x0f, + 0x01,0x04,0xae,0x22,0xe9,0xcc,0x27,0x0f, + 0x01,0x04,0xac,0x68,0x91,0xa6,0x27,0x0f, 0x01,0x04,0xac,0x68,0x5a,0xf9,0x27,0x0f, + 0x01,0x04,0xaa,0x4b,0xa7,0xf4,0x27,0x0f, + 0x01,0x04,0xaa,0x4b,0xa2,0xd4,0x27,0x0f, 0x01,0x04,0xa8,0x77,0x50,0x04,0x27,0x0f, 0x01,0x04,0xa7,0x58,0xa9,0x10,0x27,0x0f, + 0x01,0x04,0xa7,0x58,0xa5,0xaf,0x27,0x0f, 0x01,0x04,0xa5,0x16,0xea,0x87,0x27,0x0f, - 0x01,0x04,0x9f,0x59,0x7c,0x66,0x27,0x0f, - 0x01,0x04,0x9b,0x85,0x17,0xdd,0x27,0x0f, + 0x01,0x04,0xa3,0xac,0x42,0x29,0x27,0x0f, + 0x01,0x04,0xa3,0xac,0x14,0xd2,0x27,0x0f, + 0x01,0x04,0xa3,0xac,0x14,0xd1,0x27,0x0f, + 0x01,0x04,0xa3,0xac,0x14,0xcd,0x27,0x0f, + 0x01,0x04,0xa2,0xfa,0xbf,0x1f,0x27,0x0f, + 0x01,0x04,0xa2,0xf6,0x11,0xf8,0x27,0x0f, + 0x01,0x04,0x9f,0x4b,0x79,0xa3,0x27,0x0f, + 0x01,0x04,0x9d,0xad,0xca,0x0e,0x27,0x0f, + 0x01,0x04,0x9d,0x42,0x51,0xa2,0x27,0x0f, + 0x01,0x04,0x9d,0x0a,0xc7,0x52,0x27,0x0f, + 0x01,0x04,0x9d,0x0a,0xc7,0x4f,0x27,0x0f, + 0x01,0x04,0x9d,0x0a,0xc7,0x4d,0x27,0x0f, + 0x01,0x04,0x9a,0x7f,0x39,0x3f,0x27,0x0f, 0x01,0x04,0x96,0x9e,0x30,0x06,0x27,0x0f, - 0x01,0x04,0x91,0xef,0x14,0xb0,0x27,0x0f, - 0x01,0x04,0x90,0x5b,0x7f,0xa6,0x27,0x0f, - 0x01,0x04,0x8e,0xca,0xcd,0x5f,0x27,0x0f, - 0x01,0x04,0x8b,0x3b,0x64,0x67,0x27,0x0f, + 0x01,0x04,0x93,0x2d,0xb7,0x80,0x27,0x0f, + 0x01,0x04,0x93,0x2d,0x67,0x63,0x27,0x0f, + 0x01,0x04,0x92,0xbe,0xe6,0x68,0x27,0x0f, + 0x01,0x04,0x92,0x67,0x30,0xd1,0x27,0x0f, + 0x01,0x04,0x92,0x67,0x30,0xcb,0x27,0x0f, + 0x01,0x04,0x92,0x3b,0x2d,0xeb,0x27,0x0f, + 0x01,0x04,0x8b,0xa2,0x83,0xc5,0x27,0x0f, + 0x01,0x04,0x87,0xb5,0x35,0x82,0x27,0x0f, + 0x01,0x04,0x86,0xff,0xb6,0xba,0x27,0x0f, 0x01,0x04,0x85,0x12,0xe4,0x54,0x27,0x0f, 0x01,0x04,0x82,0xa2,0xe9,0xba,0x27,0x0f, + 0x01,0x04,0x82,0x3d,0x78,0xfc,0x27,0x0f, 0x01,0x04,0x7b,0xc1,0x40,0xa6,0x27,0x0f, - 0x01,0x04,0x6d,0xeb,0x46,0x64,0x27,0x0f, - 0x01,0x04,0x6d,0xeb,0x45,0xaa,0x27,0x0f, - 0x01,0x04,0x6d,0xeb,0x41,0xe2,0x27,0x0f, - 0x01,0x04,0x6d,0xeb,0x41,0x5f,0x27,0x0f, + 0x01,0x04,0x6d,0xeb,0x45,0x52,0x27,0x0f, + 0x01,0x04,0x6d,0xad,0xf0,0xe9,0x27,0x0f, + 0x01,0x04,0x6b,0xbd,0x03,0x4a,0x27,0x0f, + 0x01,0x04,0x6b,0xaa,0xfe,0xa0,0x27,0x0f, 0x01,0x04,0x6a,0x37,0x09,0x16,0x27,0x0f, - 0x01,0x04,0x68,0xee,0x23,0x74,0x27,0x0f, - 0x01,0x04,0x68,0xc8,0x43,0xfb,0x27,0x0f, + 0x01,0x04,0x68,0xe1,0x9f,0xe8,0x27,0x0f, 0x01,0x04,0x68,0xc8,0x18,0xc4,0x27,0x0f, - 0x01,0x04,0x67,0xa0,0x5f,0xdb,0x27,0x0f, 0x01,0x04,0x5f,0xd3,0xc4,0x2e,0x27,0x0f, + 0x01,0x04,0x5f,0xd3,0xc4,0x22,0x27,0x0f, 0x01,0x04,0x5f,0xd3,0xc4,0x20,0x27,0x0f, 0x01,0x04,0x5f,0xd3,0xc4,0x08,0x27,0x0f, - 0x01,0x04,0x5f,0xb7,0x35,0x2c,0x27,0x0f, 0x01,0x04,0x5f,0xb7,0x33,0x8d,0x27,0x0f, + 0x01,0x04,0x5f,0xab,0x15,0x83,0x27,0x0f, + 0x01,0x04,0x5f,0xa9,0xb5,0x47,0x27,0x0f, + 0x01,0x04,0x5e,0xac,0x6d,0xa1,0x27,0x0f, 0x01,0x04,0x5d,0x15,0x4c,0xb9,0x27,0x0f, + 0x01,0x04,0x5c,0x3f,0xb0,0xca,0x27,0x0f, + 0x01,0x04,0x5b,0xea,0x23,0x84,0x27,0x0f, + 0x01,0x04,0x5b,0xde,0xed,0x62,0x27,0x0f, + 0x01,0x04,0x5b,0xc7,0x95,0xb1,0x27,0x0f, 0x01,0x04,0x59,0xb3,0x49,0x60,0x27,0x0f, 0x01,0x04,0x59,0x75,0x13,0x0a,0x27,0x0f, + 0x01,0x04,0x59,0x28,0x0d,0x50,0x27,0x0f, + 0x01,0x04,0x59,0x28,0x0a,0x2d,0x27,0x0f, + 0x01,0x04,0x59,0x28,0x08,0xa0,0x27,0x0f, + 0x01,0x04,0x59,0x28,0x00,0x6d,0x27,0x0f, + 0x01,0x04,0x59,0x23,0x83,0x3d,0x27,0x0f, + 0x01,0x04,0x57,0xe4,0x18,0x40,0x27,0x0f, + 0x01,0x04,0x57,0xd1,0xf5,0xe3,0x27,0x0f, + 0x01,0x04,0x56,0x6b,0xa8,0x2f,0x27,0x0f, + 0x01,0x04,0x56,0x6b,0xa8,0x2e,0x27,0x0f, + 0x01,0x04,0x56,0x6b,0xa8,0x2b,0x27,0x0f, + 0x01,0x04,0x56,0x6b,0xa8,0x1d,0x27,0x0f, 0x01,0x04,0x55,0xd7,0x6b,0xca,0x27,0x0f, - 0x01,0x04,0x55,0xd1,0xf1,0xbe,0x27,0x0f, - 0x01,0x04,0x55,0xd1,0xf1,0xbc,0x27,0x0f, + 0x01,0x04,0x55,0xd1,0xf1,0xb9,0x27,0x0f, + 0x01,0x04,0x55,0xd1,0xf1,0x56,0x27,0x0f, 0x01,0x04,0x55,0xd1,0xf1,0x47,0x27,0x0f, 0x01,0x04,0x55,0xd1,0xf1,0x23,0x27,0x0f, + 0x01,0x04,0x54,0xf2,0xb3,0xcc,0x27,0x0f, + 0x01,0x04,0x54,0x09,0x32,0x11,0x27,0x0f, + 0x01,0x04,0x53,0xef,0x63,0x28,0x27,0x0f, 0x01,0x04,0x52,0xd3,0x19,0xc1,0x27,0x0f, 0x01,0x04,0x52,0xd3,0x19,0x69,0x27,0x0f, 0x01,0x04,0x52,0xd3,0x15,0xb3,0x27,0x0f, 0x01,0x04,0x52,0xd3,0x15,0x17,0x27,0x0f, 0x01,0x04,0x52,0xca,0xe6,0x53,0x27,0x0f, 0x01,0x04,0x51,0xe3,0xfa,0x33,0x27,0x0f, + 0x01,0x04,0x50,0xf9,0x93,0x08,0x27,0x0f, + 0x01,0x04,0x50,0xf0,0x84,0xe7,0x27,0x0f, 0x01,0x04,0x50,0xd1,0xea,0xaa,0x27,0x0f, 0x01,0x04,0x4e,0x53,0x13,0x00,0x27,0x0f, - 0x01,0x04,0x4d,0xe8,0x84,0x59,0x27,0x0f, - 0x01,0x04,0x4d,0xe8,0x84,0x04,0x27,0x0f, 0x01,0x04,0x4d,0xdf,0x63,0x04,0x27,0x0f, + 0x01,0x04,0x4d,0xdd,0x94,0xcc,0x27,0x0f, + 0x01,0x04,0x4a,0x32,0x5a,0x71,0x27,0x0f, + 0x01,0x04,0x45,0x3d,0x6b,0xd7,0x27,0x0f, + 0x01,0x04,0x42,0xf5,0xc4,0x34,0x27,0x0f, 0x01,0x04,0x42,0xf4,0xf3,0x46,0x27,0x0f, 0x01,0x04,0x42,0xf4,0xf3,0x45,0x27,0x0f, - 0x01,0x04,0x3a,0x6e,0xe0,0xa6,0x27,0x0f, - 0x01,0x04,0x36,0x25,0xea,0x79,0x27,0x0f, + 0x01,0x04,0x34,0x24,0x66,0x5b,0x27,0x0f, 0x01,0x04,0x34,0x21,0x09,0xac,0x27,0x0f, - 0x01,0x04,0x33,0x9e,0xf3,0xfa,0x27,0x0f, - 0x01,0x04,0x33,0x9e,0xa9,0xed,0x27,0x0f, - 0x01,0x04,0x33,0x4f,0xa0,0xc5,0x27,0x0f, - 0x01,0x04,0x33,0x44,0x9b,0x40,0x27,0x0f, - 0x01,0x04,0x33,0x0f,0x75,0x2a,0x27,0x0f, - 0x01,0x04,0x33,0x0f,0x60,0xce,0x27,0x0f, - 0x01,0x04,0x2f,0x6d,0x6d,0xa6,0x27,0x0f, - 0x01,0x04,0x2e,0xfe,0xf1,0x15,0x27,0x0f, + 0x01,0x04,0x33,0x26,0x8e,0x42,0x27,0x0f, + 0x01,0x04,0x33,0x26,0x8e,0x3e,0x27,0x0f, + 0x01,0x04,0x33,0x26,0x8e,0x3d,0x27,0x0f, + 0x01,0x04,0x2f,0x6e,0xb8,0xaa,0x27,0x0f, + 0x01,0x04,0x2e,0xfe,0xf1,0x09,0x27,0x0f, + 0x01,0x04,0x2e,0xfe,0xf1,0x08,0x27,0x0f, + 0x01,0x04,0x2e,0xfe,0xf1,0x07,0x27,0x0f, 0x01,0x04,0x2e,0xfe,0xf1,0x04,0x27,0x0f, 0x01,0x04,0x2e,0x24,0x28,0xf2,0x27,0x0f, + 0x01,0x04,0x2e,0x1e,0xbd,0xfb,0x27,0x0f, 0x01,0x04,0x2e,0x1e,0xbd,0xd6,0x27,0x0f, + 0x01,0x04,0x2e,0x1e,0xbd,0xd5,0x27,0x0f, 0x01,0x04,0x2e,0x1e,0xbd,0x74,0x27,0x0f, - 0x01,0x04,0x2e,0x04,0xa2,0x7f,0x27,0x0f, + 0x01,0x04,0x2d,0x99,0xba,0x64,0x27,0x0f, 0x01,0x04,0x2d,0x8c,0x13,0xc9,0x27,0x0f, - 0x01,0x04,0x2d,0x5d,0x8b,0x75,0x27,0x0f, + 0x01,0x04,0x2d,0x87,0xb4,0x4f,0x27,0x0f, 0x01,0x04,0x2d,0x5b,0x5e,0xd9,0x27,0x0f, - 0x01,0x04,0x2d,0x55,0x75,0xa9,0x27,0x0f, - 0x01,0x04,0x2d,0x55,0x75,0x28,0x27,0x0f, 0x01,0x04,0x2d,0x53,0x7a,0x7a,0x27,0x0f, - 0x01,0x04,0x2d,0x4f,0x12,0x6a,0x27,0x0f, 0x01,0x04,0x2d,0x4c,0x53,0x5b,0x27,0x0f, 0x01,0x04,0x2d,0x47,0x9f,0x68,0x27,0x0f, 0x01,0x04,0x2d,0x47,0x9e,0x6c,0x27,0x0f, 0x01,0x04,0x2d,0x47,0x9e,0x3a,0x27,0x0f, - 0x01,0x04,0x2d,0x3f,0x6b,0x5a,0x27,0x0f, - 0x01,0x04,0x2d,0x3a,0x38,0xdd,0x27,0x0f, + 0x01,0x04,0x2d,0x3d,0xba,0x79,0x27,0x0f, + 0x01,0x04,0x2d,0x3a,0x38,0x4f,0x27,0x0f, 0x01,0x04,0x2d,0x20,0x9f,0x30,0x27,0x0f, 0x01,0x04,0x2d,0x0b,0xb6,0x40,0x27,0x0f, - 0x01,0x04,0x2d,0x08,0xfa,0x9a,0x27,0x0f, 0x01,0x04,0x2c,0xf0,0x63,0xd6,0x27,0x0f, - 0x01,0x04,0x25,0x4d,0x68,0xa6,0x27,0x0f, + 0x01,0x04,0x2b,0xe5,0x4d,0x2e,0x27,0x0f, + 0x01,0x04,0x2b,0xa7,0xf4,0x6d,0x27,0x0f, + 0x01,0x04,0x2b,0xa7,0xf0,0x5a,0x27,0x0f, + 0x01,0x04,0x2b,0xa3,0xfb,0x33,0x27,0x0f, + 0x01,0x04,0x2b,0x80,0x48,0x72,0x27,0x0f, + 0x01,0x04,0x26,0x63,0x52,0xe6,0x27,0x0f, + 0x01,0x04,0x26,0x63,0x52,0x15,0x27,0x0f, + 0x01,0x04,0x26,0x5b,0x65,0x5c,0x27,0x0f, + 0x01,0x04,0x26,0x5b,0x64,0xca,0x27,0x0f, + 0x01,0x04,0x26,0x58,0x7d,0x33,0x27,0x0f, + 0x01,0x04,0x26,0x58,0x7d,0x32,0x27,0x0f, + 0x01,0x04,0x25,0x61,0xe3,0x15,0x27,0x0f, + 0x01,0x04,0x23,0xae,0xd9,0x62,0x27,0x0f, + 0x01,0x04,0x22,0xf6,0xb0,0x19,0x27,0x0f, 0x01,0x04,0x1f,0x94,0x63,0x68,0x27,0x0f, + 0x01,0x04,0x1f,0x39,0xbe,0xbc,0x27,0x0f, + 0x01,0x04,0x1f,0x39,0xbe,0x1f,0x27,0x0f, 0x01,0x04,0x1f,0x0a,0x61,0x24,0x27,0x0f, - 0x01,0x04,0x17,0xa3,0x00,0xcb,0x27,0x0f, - 0x01,0x04,0x17,0xa3,0x00,0xaf,0x27,0x0f, - 0x01,0x04,0x0d,0xfb,0x0b,0x37,0x27,0x0f, - 0x01,0x04,0x05,0xfc,0x15,0x18,0x27,0x0f, - 0x01,0x04,0x05,0xbd,0xfd,0xfc,0x27,0x0f, - 0x01,0x04,0x05,0xbd,0xef,0x34,0x27,0x0f, - 0x01,0x04,0x05,0xbd,0x91,0x50,0x27,0x0f, - 0x01,0x04,0x05,0xb5,0xca,0x0f,0x27,0x0f, + 0x01,0x04,0x05,0xff,0x6a,0xc0,0x27,0x0f, 0x01,0x04,0x05,0xa1,0x6e,0x4f,0x27,0x0f, - 0x01,0x04,0x05,0x4f,0x6d,0xf3,0x27,0x0f, - 0x01,0x04,0x05,0x4e,0x4a,0x76,0x27,0x0f, - 0x01,0x04,0x05,0x23,0x67,0x6f,0x27,0x0f, - 0x01,0x04,0x05,0x23,0x67,0x4a,0x27,0x0f, - 0x01,0x04,0x05,0x23,0x67,0x40,0x27,0x0f, - 0x01,0x04,0x05,0x23,0x67,0x3a,0x27,0x0f, - 0x01,0x04,0x05,0x09,0xed,0x22,0x27,0x0f, + 0x01,0x04,0x05,0x23,0x67,0x1a,0x27,0x0f, + 0x01,0x04,0x05,0x23,0x67,0x19,0x27,0x0f, + 0x01,0x04,0x05,0x23,0x67,0x13,0x27,0x0f, 0x01,0x04,0x05,0x02,0x49,0x3a,0x27,0x0f, - 0x01,0x04,0x03,0x23,0xe0,0x41,0x27,0x0f, - 0x01,0x04,0x02,0x38,0xd5,0xdd,0x27,0x0f, + 0x01,0x04,0x02,0xe9,0x78,0x23,0x27,0x0f, }; static const uint8_t chainparams_seed_test[] = {