. #35758

pull sidhujag wants to merge 10000 commits into bitcoin:master from syscoin:br/nevm-connect-after-consensus changing 4671 files +1289731 −271308
  1. sidhujag commented at 9:01 PM on July 20, 2026: none

    .

  2. rm start dep on mod check for btc check d3ea7ab0d9
  3. Update feature_llmqchainlocks.py 7975dbf8f4
  4. Update feature_llmqchainlocks.py a3362fd792
  5. Update feature_llmqchainlocks.py da50e2bee5
  6. add btc prev commit to index, fix tests, add pending checkpoints 827b58f74c
  7. Update auxpow_mining.py b3d2ab2d8d
  8. Update feature_governance.py d54f7855ba
  9. Update validation_chainstatemanager_tests.cpp 5e1468969e
  10. fix coins cache resizing 3d865d4ad6
  11. feat: headeronly client for sentry nodes
    Introduce optional btcheadernode integration for sentry policy/signing, including watchdog restart/reindex recovery and deterministic Guix build plumbing. Package `bitcoind`/`bitcoin-cli` in Linux release artifacts and add end-to-end policy tests for fork, stall, and recovery behavior.
    e14d161f97
  12. fix bitcoin build ordering in make 2ae14fdd26
  13. compiler detection + boost prior to cmake 8d64a06591
  14. passthrough c flags 39059d7fd8
  15. Update build-bitcoin-header-node.sh 479355971a
  16. Update build-bitcoin-header-node.sh b967cceb2d
  17. add notarization docs e96d9e08b3
  18. fixes and cleanups
    -  (`fork` -> safer spawn): managed BTC node startup now uses `posix_spawn` in `src/validation.cpp` (with spawn attrs/file actions), not in-process `fork/exec`.
    -  (no shell-string command ambiguity): RPC invocation uses argv vectors via `RunCommandParseJSON(const std::vector<std::string>& ...)` in `src/common/run_command.*`, wired through `GetManagedBTCHeaderRPCCommandArgs` and `RunBTCHeaderRPCCommand`.
    - (recent-fork heuristic tuning): `recentForkDepth` is guarded by `> 0` and configurable via `-btcheaderrecentforkdepth`; default is `2` in `src/validation.h`.
    - (max lag guard): `-btcheadermaxlagblocks` is implemented (default `36`) with deny path `btc-candidate-too-old(...)` in `src/llmq/quorums_btccheckpoints.cpp`.
    - (continuity persistence across restart): continuity baseline is re-derived from chain state via `GetLatestOnChainBTCPREVCommitment`, and `lastSignedBTCHash/lastSignedBTCHeight` are initialized from that baseline.
    - (clock-skew mitigation): height-progress staleness check exists via `lastPolicyObservedTipHeight` / `lastPolicyTipProgressTime` plus `-btcheadertipmaxnoprogress` (default `1800`), alongside `tipmaxage`.
    a7b10635dc
  19. better continuity c8d65f1c40
  20. more lenient geth startup (in lieu of bootstrap loading/importing) 860de37d9f
  21. Update specialtx.cpp d620efcd43
  22. Validate BTCC signatures during IBD
    use check_sigs instead
    14a9f4a4ec
  23. Cache hit skips populating output parameter ret
    VerifyBTCCheckpointShare returns true early on a sigChecked cache hit without populating the ret output parameter. Callers like HandleNewRecoveredSig rely on ret.first to set the correct signer bit (share.signers[ret.first] = true) and on ret.second to key into bestShares. On a cache hit, ret retains its default-initialized values (first=0, second=nullptr), leading to the wrong signer bit being set and a nullptr key inserted into the shares map.
    208b7c046e
  24. allow clsig/btcc to propogate on request after mnsync b3b2fc5c87
  25. ensure max lag trigger reindex on start a534153140
  26. Update deterministicmns.h d38066e371
  27. Update chainparams.cpp 0d069bb1b7
  28. fix: Potential deadlock from lock ordering inversion in cache path
    VerifyBTCCheckpointShare's cache-hit path calls llmq::quorumManager->ScanQuorums() while holding cs. Comments in ProcessMessage explicitly document that cs_main must be acquired before cs (LOCK2 ordering). If ScanQuorums internally needs cs_main, the lock order cs → cs_main inverts the documented cs_main → cs order used elsewhere (e.g., consensus validation in ProcessSpecialTxsInBlock), creating an ABBA deadlock risk. The non-cache path correctly calls ScanQuorums outside the cs lock scope.
    21d18d2556
  29. fix: Duplicated RunCommandParseJSON overloads share identical stream logic
    The two RunCommandParseJSON overloads (string and vector forms) contain nearly identical implementations: the collect_stream lambda, thread-based stdout/stderr collection, c.wait() + join pattern, error checking, and JSON parsing are copy-pasted verbatim. A shared helper that accepts an already-constructed bp::child would eliminate the duplication and ensure bug fixes (e.g., to stream handling) apply to both paths.
    425aa0e1ae
  30. fix: Carrier offset check allows receipt requirement before signing window
    receiptRequired uses absolute modular arithmetic (height % BTCCHECK_PERIOD == BTCCHECK_CARRIER_OFFSET) with only height >= start gating. If nCLReceiptStartBlock falls between the sign offset and carrier offset within a period, the first carrier block after activation requires a receipt for a sign height that preceded activation — when no quorum would have been signing. Since the receipt cannot be null (it must pass ExtractBTCCReceipt), miners must include the magic bytes with a null-valued CBTCCheckpointSig, which is an undocumented requirement at activation boundaries.
    1c1bf3fc05
  31. fix test after ibd->check_sigs 7c7ed35313
  32. Update chainparams.cpp 709deacbcf
  33. fix: Guard change breaks external signer Boost Process dependency
    The preprocessor guard for Boost.Process was changed from ENABLE_EXTERNAL_SIGNER to HAVE_BOOST_PROCESS, but HAVE_BOOST_PROCESS is only defined when --with-boost-process resolves to yes. Since auto (the new default) resolves to no unless --enable-btcheadernode-build is set, builds with --enable-external-signer that previously worked will now hit the runtime exception path ("RunCommandParseJSON requires Boost::Process support") because HAVE_BOOST_PROCESS won't be defined. The old code compiled Boost.Process under ENABLE_EXTERNAL_SIGNER regardless of the --with-boost-process flag.
    585870467a
  34. Aggregate BLS verification skips signers beyond scanned quorum count
    VerifyAggregatedBTCCheckpointNoCache checks that quorums_scanned is non-empty but does not verify its size equals signingActiveQuorumCount. The threshold check on line 709 counts declared signers from btcsig.signers, but the verification loop only iterates over quorums_scanned.size(), which ScanQuorums may return fewer of than requested. Signers at indices beyond quorums_scanned.size() are silently ignored during BLS verification, allowing the threshold check to pass with fewer cryptographically verified signers than declared.
    9fac66be8a
  35. fix: CDiskBlockIndex always writes btcpPrevCommitment even when null
    DUMMY_VERSION and DISK_INDEX_VERSION_BTCPREV are both set to 260000, so the btcpPrevCommitment field is unconditionally serialized for every block index record written after this change, including the vast majority of blocks that have a null commitment. Since the version check is _nVersion >= DISK_INDEX_VERSION_BTCPREV and _nVersion is always initialized to DUMMY_VERSION, every newly written record includes the extra 32-byte field regardless of whether it carries meaningful data. This inflates the block index database for all records.
    8bffb301de
  36. fix: Last-occurrence magic-byte search may match inside payload
    ExtractBTCCReceipt and ExtractBTCPREVCommitment search for the last occurrence of their 4-byte magic sequences in the coinbase payload. If the serialized CBTCCheckpointSig (which contains a 48-byte BLS signature of essentially random bytes) or the uint256 hash happens to contain the magic byte sequence (btcc or btcp), the search finds that false match inside the payload, deserialization starts from the wrong offset, and the function returns false. Since this is a consensus-critical check (bad-btcc-missing / bad-btcp-missing), a valid block would be rejected by all nodes. The existing GetNEVMData function uses first-occurrence search, which avoids this class of issue.
    00666b3d48
  37. Update feature_btcheader_policy_auxpow.py 29be3b719b
  38. Update feature_btcheader_policy_auxpow.py 6beda8119d
  39. Update chain.h a3a7e8083e
  40. fix: Unnecessary exposure of private class constants
    The public: label added before DISK_SNAPSHOT_PERIOD exposes all three constants (DISK_SNAPSHOT_PERIOD, DISK_SNAPSHOTS, and LIST_CACHE_SIZE) when only LIST_CACHE_SIZE is needed externally (in init.cpp). The private: label follows later but the two intermediate constants become part of the public API unnecessarily, increasing the class's public surface area.
    c26e502254
  41. fix: harden BTCC continuity rebaseline and signing lock ordering
    Deny signing for the current Syscoin height after continuity rebaseline when the previously signed BTC hash is no longer in the active BTC chain, preventing same-height sign/deny oscillation. Also queue AsyncSignIfMember outside CBTCCheckpointsHandler::cs to avoid cs/cs_main lock-order inversion under DEBUG_LOCKORDER.
    233f5ecc81
  42. fix: make btcheadernode helper rebuilds deterministic
    Always clean the helper Bitcoin CMake build directory before configure to avoid cache drift (e.g. stale ENABLE_IPC). Expand the build fingerprint to include compiler paths/flags and script digest so environment or script changes reliably trigger rebuilds.
    c01b32f554
  43. getblockhash output fails JSON parsing, blocking signing
    The continuity guard in CheckBTCHeaderSigningPolicy calls RunBTCHeaderRPCCommand({"getblockhash", ...}). bitcoin-cli getblockhash N outputs a bare hex string (e.g. 0000abcd...) without JSON quotes, which is not valid JSON. RunCommandParseJSON / WaitParseJsonFromChild calls UniValue::read() on this output and throws, causing RunBTCHeaderRPCCommand to return false. This makes the continuity guard always fail after the first successful signing cycle, permanently blocking subsequent BTCC signing with deny reason btc-prev-signed-active-chain-lookup-failed.
    57f5c24432
  44. Unjoinable threads cause crash if process.wait() throws
    In WaitCollectOutputFromChild, std::thread objects stdout_reader and stderr_reader are created before process.wait() is called. If process.wait() throws (e.g., std::system_error from an OS-level waitpid failure or signal interruption), stack unwinding destroys the still-joinable threads, and std::thread's destructor calls std::terminate(), crashing the process. A RAII wrapper or try/catch around process.wait() that joins the threads before re-throwing would prevent this.
    65f73b3bf2
  45. fi: Error message misleadingly says RunCommandParseJSON in shared helper
    WaitCollectOutputFromChild hardcodes "RunCommandParseJSON error" in its error message, but it's also called by the new RunCommand overloads. When a non-JSON command fails, the error message incorrectly attributes the failure to RunCommandParseJSON, which could confuse debugging of BTC header node RPC command failures.
    74fd116224
  46. use descriptor wallets for sentry nodes + fix dbcrash test 5febff235c
  47. Duplicated boilerplate across four RunCommand function variants
    The four RunCommand/RunCommandParseJSON variants (string-based and vector-based, raw and JSON) each duplicate the same ~12-line boilerplate for stream declarations, empty-input guard, stdin piping, and pipe close. The string and vector variants differ only in how bp::child is constructed; the JSON and raw variants differ only in whether ParseJSONResult wraps the output. A single internal template helper parameterized on child-construction and result-processing would eliminate roughly 40 lines of redundant logic and reduce the risk of future inconsistencies when the pattern needs updating.
    a7cf73eeb0
  48. Update feature_nevm_data.py ccf44a2eee
  49. clean up cl recovery in test 0ee764ac69
  50. fix: Deferred BTC header failure wastes hours before abort
    When DoBTCHeaderStartupProcedure fails, btc_header_policy_ready is set to false immediately, but the fatal InitError is deferred until after the geth startup loop, which can block for up to gethstartuptimeout seconds (default 14400 = 4 hours). A masternode operator whose BTC header backend is misconfigured could wait hours only to see an abort that was already determined at the start. Moving the policy-ready check before the geth wait loop (or returning early) would give faster user feedback.
    74466a42d6
  51. optimize: Redundant GetSyscoinData call before ExtractBTCCReceipt
    In ProcessSpecialTxsInBlock, GetSyscoinData is called at line 160 and its vchData result is only used for a data_size log message. Then ExtractBTCCReceipt is called at line 168, which internally calls GetSyscoinData again on the same coinbase transaction. The first extraction is redundant — passing vchData directly into the tag-search logic or extracting once and reusing would avoid duplicate coinbase parsing on every carrier-height block.
    f87dcd3a21
  52. fix: Makefile missing patch file as build dependency
    The $(BTCHEADERNODE_BIN_STAMP) target depends only on the build script and bitcoin.lock, but not on the actual patch file referenced by BITCOIN_PATCH in the lock file (contrib/btcheadernode/patches/headers-only.diff). If the patch file content changes without bitcoin.lock or the build script changing, make won't re-invoke the build script, leaving stale bitcoind/bitcoin-cli binaries. The build script's internal fingerprint would detect the stale state only on a forced re-run, not during a normal make.
    df58904906
  53. fix: BTC header mainnet P2P port conflicts with Bitcoin regtest
    DEFAULT_BTC_HEADER_MAINNET_P2P_PORT (18444) and DEFAULT_BTC_HEADER_MAINNET_RPC_PORT (18443) are identical to Bitcoin Core's regtest default P2P and RPC ports. While this avoids conflicts with a Bitcoin mainnet node running on the same machine, any operator also running a Bitcoin Core regtest instance will experience port conflicts. This is the default-on configuration for masternodes (DEFAULT_BTC_HEADER_MANAGED is true), meaning a managed bitcoind will silently fail to start if those ports are occupied, potentially causing BTCC signing to stall.
    66fa648771
  54. fix: compact EvoDB DMN snapshots on forced flush
    Prevent the DMN EvoDB from growing across repeated shutdowns when the dirty
    cache is below the 1728-snapshot retention window.
    
    On forced flush, merge persisted snapshots with dirty in-memory entries and
    rewrite only the newest 1728 live snapshots when the combined set exceeds the
    retention limit. Add a regression test covering the shutdown-growth case and
    verifying the compacted window is preserved.
    c1a8548c33
  55. Preserve failed write chunk in pending state + Retain failed erase chunk for subsequent flush
    If SubmitBatch() fails inside the items == CHUNK_ITEMS branch, this line drops pending.writes up to write_it before restoring state, which removes the currently failing chunk as well. In a boundary case (for example, 4 pending writes with CHUNK_ITEMS=2 and the second batch failing), the uncommitted keys from that failed batch are permanently lost instead of being retried.
    
    On a batch failure in the erase loop, this code erases pending.erases through next before restoring, which also removes erase intents from the failed chunk. If failure happens exactly on a chunk boundary (e.g., 4 queued erases with CHUNK_ITEMS=2, second erase batch fails), those keys are no longer queued and will remain on disk after retry.
    e9dd82e593
  56. fix: Avoid wiping EvoDB before compacted snapshot writes succeed
    When forced flush enters the compaction path (total_live_snapshots > LIST_CACHE_SIZE), RewriteSnapshotWindow calls ResetDB() before any replacement batches are durably written. If a later WriteBatch fails (disk/full I/O error), the function returns false after the existing persisted snapshot set has already been deleted, leaving the DMN snapshot DB empty or partially rebuilt. This is a destructive failure mode introduced by the new compaction logic; the reset needs to happen only after successful persistence of the replacement window (or via an atomic swap strategy).
    f88c7f0211
  57. Update deterministicmns.h ffa1dc2104
  58. fix: Keep flush-on-read check and read under one lock
    ReadCache/ExistsCache now call MaybeFlushOnRead() before taking cs, which introduces a TOCTTOU window: another thread can run EraseCache and set bFlushOnNextRead after MaybeFlushOnRead() returns but before the read path acquires the lock, so the erase is not flushed and the code can return stale on-disk data that was just logically erased. I checked this against the LLMQ path where UndoBlock erases commitments (src/llmq/quorums_blockprocessor.cpp:280) while HasMinedCommitment/GetMinedCommitment read through ExistsCache/ReadCache (:349, :355), so this race can transiently resurrect reverted commitments.
    6189a83b09
  59. fix: Roll back rewritten EvoDB when batch write throws
    After RewriteSnapshotWindow() has renamed the live DB to .rewrite-backup, it writes the compacted window via SubmitBatchForTesting(). In production this path calls WriteBatch(), which throws dbwrapper_error on LevelDB errors; because these calls are not wrapped in a try/catch, an exception skips restore_original() entirely and leaves the main DB path partially rewritten (or empty) while the valid data is stranded in the backup directory. Since there is no recovery path for *.rewrite-backup elsewhere in the repo, an I/O failure during forced flush can cause persisted DMN snapshots to be lost on restart.
    c4dd5c55ca
  60. fix: Serialize erase-triggered flush with concurrent reads
    When bFlushOnNextRead is set, this path now unlocks cs before calling FlushCacheToDisk(). In the new flush implementation, pending erases are moved out of shared state up front, so another thread can enter ReadCache/ExistsCache during that window, observe bFlushOnNextRead already cleared, and read stale data from LevelDB before the erase batch commits. This is a regression from the previous behavior where flush work stayed under the same lock and prevented that interleaving.
    35c6aa9146
  61. fix: Avoid waiting on flush CV while outer lock is held
    ForEachCachedEntry waits on m_read_flush_cv while using cs, but CDeterministicMNManager::DoMaintenance already holds m_evoDb->cs before calling this method (src/evo/deterministicmns.cpp, forced-flush path). With a recursive mutex, condition_variable_any::wait only unlocks one recursion level, so the outer DoMaintenance lock remains held; if another thread is in ReadCache/ExistsCache with m_read_flush_in_progress=true, it cannot reacquire cs to clear the flag and notify, causing a deadlock when forced maintenance overlaps an erase-triggered read flush.
    69ac8420ab
  62. fix: Add BTCCSIG to inventory command mapping
    MSG_BTCCSIG is introduced as a known inventory type (including IsKnownType), but CInv::GetCommand() in src/protocol.cpp still has no branch for it, so GetCommand() throws std::out_of_range for a valid type. This leaves inventory handling internally inconsistent and will trigger exception paths anywhere GetCommand() is used directly for BTCCSIG (debug/tooling today, and networking code paths as they evolve).
    b1788fe37b
  63. revert evodb optimizations a5b9fa0011
  64. Update evodb.h 5657f3298b
  65. Update deterministicmns.h 84c6788d13
  66. fix: Avoid wiping EvoDB before compacted snapshot writes succeed 6cb717ee20
  67. fix: Roll back rewritten EvoDB when batch write throws
    After RewriteSnapshotWindow() has renamed the live DB to .rewrite-backup, it writes the compacted window via SubmitBatchForTesting(). In production this path calls WriteBatch(), which throws dbwrapper_error on LevelDB errors; because these calls are not wrapped in a try/catch, an exception skips restore_original() entirely and leaves the main DB path partially rewritten (or empty) while the valid data is stranded in the backup directory. Since there is no recovery path for *.rewrite-backup elsewhere in the repo, an I/O failure during forced flush can cause persisted DMN snapshots to be lost on restart.
    41adcfa3f5
  68. fix: Preserve old DB until compaction rewrite is durable
    The rewrite path moves the live EvoDB directory to *.rewrite-backup before any compacted snapshot batch is durably written, so a process crash/power loss in the rewrite window can leave m_path containing only a partially rebuilt DB while the complete data sits in the backup directory that startup never restores automatically. In DoMaintenance forced-flush compaction, this can silently drop deterministic MN snapshots after an unclean shutdown; write into a temp DB and atomically swap only after success (or add startup recovery from the backup path).
    a695483693
  69. Handle backup cleanup failure after successful rewrite + Avoid deleting live DB before backup rename succeeds
    After a successful compacting rewrite, this call drops the .rewrite-backup directory without checking whether it succeeded. If deletion fails (or the process stops before cleanup), RecoverRewriteBackupIfPresent will later treat that leftover backup as authoritative and replace the current DB with stale data on restart, potentially discarding snapshots that were just persisted during the rewrite. Please treat backup-cleanup failure as a real failure path instead of silently proceeding.
    
    Recovery currently deletes db_params.path and only then attempts to rename the backup into place. If that rename fails (e.g., transient filesystem error or lock), the existing DB is already gone and startup continues with an empty freshly created DB, turning a recoverable backup issue into data loss. The replacement should be made atomic or rollback-safe so a failed rename cannot erase the active database.
    e866e38814
  70. fix: Create rewrite marker before moving EvoDB directory
    The rewrite flow renames the live DB to *.rewrite-backup before creating *.rewrite-in-progress, so a crash/power loss between those two steps leaves only a backup directory; on restart, RecoverRewriteBackupIfPresent treats backup && !marker as stale and deletes it, which can drop the entire snapshot set and reopen an empty EvoDB. This affects any forced-flush compaction interrupted in that small window, and is a data-loss regression in the new crash-recovery path.
    df4babacf8
  71. Keep rewrite marker if backup recovery rename fails
    When startup recovery detects both backup and marker, it removes the marker even if fs::rename(backup_path, db_params.path, ec) failed. In that failure case, the next startup enters the has_backup-only branch and deletes the backup as "stale", which can discard the only intact snapshot set after an interrupted rewrite. Only clear the marker after a successful restore (or keep both artifacts for retry).
    2fac853c74
  72. fix: Avoid deleting backup when crash marker may be missing
    This startup cleanup deletes *.rewrite-backup whenever the marker file is absent, but WriteRewriteMarker only creates the marker with std::ofstream and never fsyncs it; after a power loss, it is possible to persist the directory rename (db -> backup) while losing the marker file. In that crash window, restart will treat the backup as stale and remove the only consistent snapshot set, causing silent data loss instead of recovery.
    6e41bca134
  73. fix: Preserve completed rewrites during backup recovery
    The recovery path unconditionally deletes the live EvoDB and restores *.rewrite-backup whenever both backup and marker exist. If the process crashes after all compacted batches were written but before RemoveRewriteMarker() runs, restart will hit this branch and roll back a fully written DB, dropping the newest snapshots that were just persisted during forced flush. This creates avoidable state regression after unclean shutdowns; recovery should distinguish "rewrite incomplete" from "rewrite complete but marker not cleaned" before deleting the live DB.
    89a1933d4b
  74. fix: Make rewrite marker crash-durable before rewriting DB
    WriteRewriteMarker only calls std::ofstream::flush(), which does not durably commit the marker file to disk. If power is lost after the old DB is renamed to .rewrite-backup and the new DB rewrite has begun, the marker can be missing on restart even though a rewrite was in progress; RecoverRewriteBackupIfPresent then treats this as an unmatched backup and keeps the possibly partial live DB instead of restoring the backup. This can silently drop DMN snapshots after an unclean shutdown, so the marker write needs a durable fsync (and directory sync) or recovery should not trust a live DB when a backup exists without a complete marker.
    70f9c6412d
  75. Merge pull request #559 from syscoin/evodb-prune
    fix: compact EvoDB DMN snapshots on forced flush
    eeb79ca933
  76. fix: Validate 3-arg getauxblock submissions correctly
    The RPC signature now advertises three optional arguments (btcprevhash, hash, auxpow), so a 3-argument call passes parameter checking, but the handler logic only branches on size == 0 || size == 1 for create and otherwise falls into the legacy submit path that reads params[0] as block hash and params[1] as auxpow. In practice, getauxblock(btcprevhash, hash, auxpow) misinterprets the arguments and ignores the real auxpow instead of handling (or rejecting) the call deterministically.
    9f513c1ef9
  77. cleanup start stop header node a55c70622e
  78. fix: Validate btcprevhash input before calling SetHex
    The createauxblock(address, btcprevhash) path accepts any string and feeds it directly to SetHex, which silently accepts partial/invalid hex and zero-fills the rest. At BTCPREV-required heights this can generate templates with malformed/null commitments that are guaranteed to fail consensus (bad-btcp-*) only after miners spend work, instead of rejecting the RPC request up front.
    bf4ff42e83
  79. fix: Derive BTCPREV requirement from the actual template tip
    btcpRequired is computed from a tip snapshot taken before getCurrentBlock(...), but getCurrentBlock may rebuild the template on a newer tip if a block arrives in between. Around sign-offset boundaries, this can flip the requirement and cause the returned auxpow template to miss a required BTCPREV commitment (later rejected as bad-btcp-missing in contextual validation) or require one unnecessarily. This race is reachable whenever tip changes between these two steps.
    0c3d43ee72
  80. fix: Sign governance votes with the original key type
    Using CTxDestination(WitnessV0KeyHash(keyID)) here forces CWallet::SignHash to resolve signing data for a P2WPKH script, which can fail even when the voting key exists (for example, keys managed under legacy/pkh() paths). In that case gobject_vote_many/gobject_vote_alias now return signing failures for valid masternode voting keys, whereas the previous direct-key path worked regardless of address encoding.
    f37efe8e3b
  81. Merge pull request #558 from syscoin/clreceipt
    Clreceipt
    c048f8b974
  82. fix: Bound ChainLocks reorgs to one sign window
    Reject CLSIGs whose candidate block diverged before the previous sign-window
    anchor on the active chain.
    
    This closes the deep private-fork salvage case where a minority branch at the
    current signing height could be chainlocked even after the network had moved on
    well past its fork point. The new check is fully chain-derived, so it does not
    depend on in-memory ChainLock state surviving restart or propagation gaps.
    
    Add functional coverage that asserts deep-diverged current-height chainlocks are
    rejected with clsig-window-ancestor-mismatch and that nodes stay on the longer
    local branch until normal chain-work later wins.
    90c639dbcb
  83. Merge pull request #560 from syscoin/cl-diverge
    fix: Bound ChainLocks reorgs to one sign window
    3b5ffac4d5
  84. test: deep fork rejection 201ef752c2
  85. update to v5.1.0 5c8cbe7e6d
  86. Update sysgeth 9ad30baef4
  87. fix mnsync regression 5b95b07a93
  88. Update evodb.h edfe95db2e
  89. avoid double dmn write c8294f599a
  90. Update sysgeth e38a785f65
  91. add bootstrap settings in core node to bypass zmq io d1a61314be
  92. fix build 9d37e5b1e9
  93. feat: BitcoinDA - blake2s
    add blake2s DA hash, with zkSYS this will be a 500x improvement (reduction of circuit size and risc v cycles for DA commitments). 9 blobs of KZG = ~540m, wrt keccak ~160m, wrt blake2s ~300k.
    
    Use b2s256 from relic as optimized implementation. Benchmarks show it to be 4x faster than keccak/sha256.
    e611bf485c
  94. hash_type default to keccak 30d70196d2
  95. fix: syscoincreaterawnevmblob accepting hash_type param a81b7412c9
  96. fix: Update Qt link order for new blake2s dependency
    This change introduces a new external symbol dependency (md_map_b2s256) in nevm/sha3.cpp, but only some link targets were updated to place $(LIBDASHBLS) after $(LIBNEVM). I checked the Qt link lines and they still have $(LIBDASHBLS) before $(LIBNEVM) (src/Makefile.qt.include:339-341, src/Makefile.qttest.include:57-60), which is order-sensitive for static archives and can leave md_map_b2s256 unresolved when ENABLE_QT is on.
    3f3509d213
  97. Accept legacy positional args in NEVM blob RPCs
    Adding hash_type as argument index 2 breaks existing positional callers that previously passed conf_target in that slot (for example ... 6 economical 25), because this code now unconditionally treats param 2 as a string hash type and rejects numeric values with RPC_INVALID_PARAMS. The same regression pattern is present in both blob creation RPCs, so existing automation/scripts will fail after upgrade unless they are rewritten to include hash_type explicitly.
    af8baff86d
  98. fix: Keep legacy positional arg conversion working
    Moving conf_target/fee_rate conversion to indexes 3/5 causes syscoin-cli legacy positional calls (e.g. ... "data" true 6 economical 25) to send argument 2 as a raw string, because only indexed entries in vRPCConvertParams are JSON-parsed (RPCConvertValues uses ArgToUniValue by index). In this commit, the wallet handlers treat string param 2 as hash_type and reject values like "6", so existing scripts for both syscoincreaterawnevmblob and syscoincreatenevmblob now fail instead of following the intended “legacy positional compatibility” path.
    199f386e9d
  99. rm unused params in create blob rpcs 0bcfe92bd2
  100. Persist DMN snapshots incrementally after IBD
    Move DMN EvoDB maintenance out of the shutdown rewrite path and keep the authoritative 1728-snapshot window pruned on disk during post-IBD flushes. Shrink the hot in-memory cache to 128 after initialization so older quorum lookups still work via disk fallback without the shutdown RAM spike.
    7c9a6f961c
  101. rm unused code cb4d855eae
  102. fix: Gate DMN window bootstrap before DIP0003 activation
    In Chainstate::FlushStateToDisk, dmn_window_init_needed is keyed only on !HasPersistentWindow(), so on chains/heights before DIP0003 activates this stays true forever (no DMN snapshots exist yet, so the flag never flips). That forces the if (fDoFullFlush || fPeriodicWrite || dmn_window_init_needed) path on every periodic call, causing repeated block-index/DB flush work even when nothing else requires it. This is a performance regression for pre-DIP contexts (notably regtest/new deployments) introduced by the new bootstrap trigger.
    2b72163157
  103. add sys_sync_flush, reduce writes with fsync until FlushStateMode::ALWAYS (force flush to disk) 50b3f5dfab
  104. Merge pull request #562 from syscoin/evodb-prune-retake
    Evodb prune retake
    52276260c0
  105. Merge pull request #561 from syscoin/blake2s
    feat: BitcoinDA - blake2s
    9ef0da32df
  106. fix: Enforce btcheader-backed BTCPREV sourcing for auxpow mining
    Auto-source btcprevhash from the configured BTC header backend on BTCPREV-required heights (including policy-on-demand), and fail closed when the backend is unavailable or still in IBD. Also align getauxblock submit arg ordering with miner compatibility and extend tests for BTCPREV template regeneration and btcheader-backed createauxblock autofill.
    ab76f77343
  107. avoid startup arg mutations c5684ac96d
  108. fix: Gate BTCC backend requirement on NEVM actually being enabled
    The startup requirement now triggers whenever a miner fee-recipient flag appears in -gethcommandline, but this check runs before -hrp handling later disables NEVM (fNEVMConnection = false). In a run configured with -hrp (testing mode) plus a leftover miner flag, the node can abort on missing BTCC backend even though NEVM is intentionally disabled in the same init path, which is an avoidable startup regression introduced here.
    c646773d84
  109. Update feature_btcheader_policy_auxpow.py 3544a4dc64
  110. fix autofill init logic 36e0619c55
  111. auxpow btcprev named arg expansion b20e4ab769
  112. ensure polls will update cached template across prev btc hash updates
    Because we can update template based on BTC prev hash changing we need to do away with try_emplace which will not update if scriptID exists, the scriptID in the cases where BTC prev hash updates is not expected to change, therefor we should replace the curBlocks mapping to the new block with injected BTC hash.
    6a4878a57f
  113. Limit btcheader backend init to nodes that actually need it
    By setting init_btcheader_backend from btcheader_policy_active_chain, startup now runs BTC header backend initialization on essentially every non-mine-blocks-on-demand chain, even when the node is neither a masternode nor NEVM miner-configured. This introduces new startup overhead and backend-failure/logging paths for ordinary nodes that never use auxpow creation RPCs, which is a broad behavior regression from the previous role-gated initialization.
    5f50c94ad2
  114. fix: Recompute btcheader requirement after NEVM startup
    require_btcheader_backend is derived from fNEVMConnection before DoGethStartupProcedure() runs, but DoGethStartupProcedure() can later set fNEVMConnection = false. In that case, the node can still hit the hard failure at startup based on the stale precomputed requirement, so a non-masternode with miner fee-recipient flags may abort on missing btcheader backend even after NEVM was already disabled. This makes startup behavior depend on outdated state and should be gated on the post-startup NEVM status.
    cc5ac2a76f
  115. fix: Re-evaluate sign-offset before deciding btcprev autofill
    createAuxBlock() decides whether to auto-fetch btcprevhash using a height snapshot, then later getCurrentBlock() recomputes sign-offset requirements from the (possibly newer) tip. If the tip advances between these two checks to a sign-offset height, no autofill is attempted and the later path throws "btcprevhash is required at this height", causing intermittent RPC failures when callers omit btcprevhash even though a btcheader backend is configured. The requirement check and autofill need to be based on the same final height decision.
    0c78bf427e
  116. Handle one-arg createauxblock without parsing btcprevhash
    This branch now treats any single non-null argument as btcprevhash, but createauxblock passes the payout address as its only positional argument when btcprevhash is omitted. As a result, a normal call like createauxblock("<valid address>") now runs through ParseHashV(..., "btcprevhash") and fails with a length/hex error instead of creating a block template, which breaks the documented optional-btcprevhash flow for callers that don't provide a second argument.
    55f15b25bf
  117. fix: Keep AuxpowMiner state locked through response assembly/Return autofilled btcprevhash to make templates solvable bb94a32d6a
  118. fix: Remove unused AppInitMain local to keep werror builds passing
    AppInitMain adds nevm_enabled_for_mining_checks but never reads it, which triggers -Wunused-variable under normal warning flags; in this repo, CI jobs that pass --enable-werror (for example ci/test/06_script_a.sh and ci/test/06_script_b.sh) promote that warning to a hard error, so this change can break compile/test pipelines even though runtime behavior is unchanged.
    fe53fba860
  119. add _btcprevhash to aux return obj 077e864424
  120. Update auxpow_mining.py 2938fe0829
  121. Merge pull request #563 from syscoin/mining-headernode
    Mining headernode
    32620f18a5
  122. Harden LLMQ aggregate signature cache checks
    Require aggregate-shaped signer sets before trusting cached verification results so share cache entries cannot substitute for aggregate BLS verification.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    4428641170
  123. Stabilize shallow ChainLock submit test
    Wait for the receiving node's active height window before submitting the recovered ChainLock so the test does not race the height gate.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    89403f3264
  124. Merge pull request #564 from syscoin/harden-llmq-aggregate-cache
    Harden LLMQ aggregate signature cache checks
    09d3179010
  125. Cache rejected LLMQ signature messages
    Remember peer-delivered ChainLock and BTC checkpoint objects that reach BLS verification and fail so repeated announcements do not trigger repeated signature work.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    78605ad0d6
  126. Gate CLSIG peer punishment on BLS verification
    Only score peer-delivered invalid CLSIGs when processing reached signature verification, avoiding penalties for transient missing quorum context.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    956b69bb10
  127. Merge pull request #565 from syscoin/cache-invalid-clsig-signatures
    Cache rejected LLMQ signature messages
    df8c5e29e2
  128. llmq: accept higher-signer commitments in ProcessMessage 3dfd711ea5
  129. Merge pull request #566 from syscoin/br/fix-early-return-logic-in-quorum-processing
    llmq: fix early-return signer comparison in quorum commitment handling
    ab59ecf48b
  130. Initialize BufferedFile serialization type from source stream 4242154e7a
  131. Merge pull request #567 from syscoin/br/fix-uninitialized-type-in-bufferedfile
    Initialize BufferedFile type to avoid uninitialized serialization flags
    eb8e792285
  132. qt: auto-disconnect wallet menu/action lambdas on controller teardown 94c315d95e
  133. qt: connect wallet action handlers after controller setup
    Move wallet-controller-dependent action connections out of createActions() so Qt receives a valid controller context and can still auto-disconnect on teardown.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    cebf4370c5
  134. Update syscoingui.cpp a74f764aaf
  135. Merge pull request #568 from syscoin/br/propose-fix-for-wallet-controller-dereference-issue
    qt: auto-disconnect wallet menu/action lambdas on controller teardown
    b97178a370
  136. test: avoid mutating const chain params in auxpow test 0757641930
  137. Merge pull request #569 from syscoin/br/fix-test-only-const_cast-issue
    test: avoid mutating const chain params in auxpow test
    64ad0b2766
  138. Update setup_common.cpp d01bcfaa75
  139. Update setup_common.cpp a5c7ecf28e
  140. fix tests 1110f179dd
  141. shutdown: avoid early-signal crash before kernel context init bc6c892768
  142. Update shutdown.cpp 4b68425628
  143. Merge pull request #570 from syscoin/br/fix-crash-on-early-sigterm-reception
    shutdown: avoid early-signal crash before kernel context init
    150549577a
  144. fuzz: use actual wire message strings for process_message targets f60933850f
  145. Update test_runner.py bb58896980
  146. Merge pull request #571 from syscoin/br/fix-fuzz-runner-per-message-target-generation
    fuzz: fix process_message per-target message type mapping
    12d453d1b2
  147. wallet: avoid out_of_range when bump fee map is incomplete e2a5175074
  148. Update spend.cpp 86a6d92351
  149. Merge pull request #572 from syscoin/br/fix-wallet-crash-due-to-utxo-cluster
    wallet: avoid out_of_range when bump fee map is incomplete
    a91539379b
  150. evo: make NEVM diff emission order deterministic 6218dee8bb
  151. Merge pull request #573 from syscoin/br/propose-fix-for-nevm-diff-ordering-issue
    evo: make NEVM diff emission order deterministic
    427dd995c6
  152. validation: keep local undo during NEVM startup rollback
    Separate external NEVM disconnect verification from local special transaction state updates so startup rollback can repair quorum cache without touching geth.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    cd98bf67cc
  153. Merge pull request #574 from syscoin/br/fix-startup-rollback-quorum-cache
    validation: keep local undo during NEVM startup rollback
    e1c328d914
  154. llmq: lock active masternode info in key share check 6071b09d4b
  155. Merge pull request #575 from syscoin/br/fix-data-race-on-activemasternodeinfo
    Fix data race in CQuorum::SetSecretKeyShare
    dc32115072
  156. build: restore getrandom feature detection
    Keep configure-time getrandom detection aligned with random.cpp so Linux builds use the intended OS entropy path.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    2d478b01b4
  157. Merge pull request #576 from syscoin/br/fix-getrandom-detection
    build: restore getrandom feature detection
    f7da0ed81b
  158. validation: sync NEVM mint uniqueness flushes
    Keep minted NEVM transaction records durable because they enforce consensus-critical uniqueness and do not have a crash replay marker.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    8f6f49fefb
  159. Merge branch 'master' of https://github.com/syscoin/syscoin into br/fix-nevm-mintdb-sync 6be48b6f96
  160. validation: avoid refreshing duplicate PoDA blob metadata
    Co-authored-by: Cursor <cursoragent@cursor.com>
    a7036717f7
  161. validation: verify supplied PoDA blob bytes
    Co-authored-by: Cursor <cursoragent@cursor.com>
    135ffaef4e
  162. Merge pull request #577 from syscoin/br/fix-poda-duplicate-metadata
    validation: avoid refreshing duplicate PoDA blob metadata
    b4c2ecee9d
  163. validation: validate mint log asset topic width
    Reject malformed mint log topics before decoding the indexed asset GUID so validation cannot read past the RLP topic buffer.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    48627e0aef
  164. validation: ignore unrelated short mint log topics
    Preserve log scanning behavior by skipping non-freeze topic lists before enforcing the freeze-event topic shape.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    fa9febde33
  165. Merge pull request #578 from syscoin/br/fix-mint-log-topic-bounds
    validation: harden width
    35b5faef27
  166. Avoid TOCTOU failure path in FillNEVMData cd51d9217b
  167. Tighten FillNEVMData blob read
    Co-authored-by: Cursor <cursoragent@cursor.com>
    25deb95c60
  168. net: cap non-tx inv relay by broadcast_max 810fc61027
  169. Merge pull request #579 from syscoin/br/propose-fix-for-toctou-in-fillnevmdata
    Avoid TOCTOU-triggered block read failure in FillNEVMData
    8611203935
  170. guix: verify macOS SDK archive
    Validate the downloaded or cached macOS SDK archive before extraction so containerized Guix builds do not silently trust tampered SDK inputs.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    9b4b5ebf60
  171. Merge pull request #580 from syscoin/br/propose-fix-for-dos-vulnerability
    net: cap non-transaction inventory relay per send cycle
    2f8a043b94
  172. Merge pull request #581 from syscoin/br/verify-guix-macos-sdk
    guix: verify macOS SDK archive
    1c90e84c29
  173. Revert "validation: verify supplied PoDA blob bytes"
    This reverts commit 135ffaef4ee8083ef2da8e22bd17a24ecc381e30.
    b39c923c8e
  174. validation: separate mempool and block PoDA ownership
    Co-authored-by: Cursor <cursoragent@cursor.com>
    9c2a3ce2df
  175. validation: require PoDA size match for metadata refresh
    Co-authored-by: Cursor <cursoragent@cursor.com>
    f296222a7b
  176. rm EraseNEVMData 41c24c66c1
  177. validation: classify PoDA sidecar failures as auxiliary
    Co-authored-by: Cursor <cursoragent@cursor.com>
    071ff2b412
  178. test: cover PoDA duplicate metadata refresh rules
    Co-authored-by: Cursor <cursoragent@cursor.com>
    b19d0b8d7d
  179. test: cover PoDA validation classification in unit tests
    Move duplicate metadata refresh coverage out of the chainlock-heavy functional path and add focused unit tests for auxiliary-data classification and metadata refresh rules.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    4cd30bacc7
  180. validation: preserve block-owned PoDA metadata on mempool erase
    When stale mempool metadata is superseded by a block-owned cache entry, keep the blob and immediately persist the newer metadata so disk and cache remain consistent.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    d4eb2ede36
  181. Merge remote-tracking branch 'origin/master' into br/fix-poda-known-blob-poisoning cc6c4776d9
  182. validation: read PoDA metadata without existence prechecks
    Use metadata reads directly where the value is needed so cache and disk handling does not branch on stale existence checks.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    d13c990f1e
  183. validation: classify PoDA aux failures as mutated blocks
    Use the invalid-block path for malformed auxiliary PoDA sidecars without marking the committed block hash permanently failed.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    91bdb69ee8
  184. Merge pull request #582 from syscoin/br/fix-poda-known-blob-poisoning
    validation: avoid invalidating blocks on PoDA sidecar mismatch
    b1d8bb3827
  185. validation: verify supplied PoDA sidecars
    Co-authored-by: Cursor <cursoragent@cursor.com>
    24daef4b01
  186. ci: harden Guix GHCR workflow
    Remove privileged pull_request_target execution so untrusted PR code cannot access GHCR package credentials, and scope workflow permissions to the jobs that need them.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    db936f5ec8
  187. ci: drop privileged ASan container access
    Use the narrower ptrace capability for ASan CI instead of privileged container access with a writable kernel mount.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    e60fd0ef62
  188. Merge pull request #583 from syscoin/br/fix-poda-sidecar-validation
    validation: verify supplied PoDA sidecars
    77d57e0184
  189. nevm: avoid managed geth startup and shutdown stalls
    Co-authored-by: Cursor <cursoragent@cursor.com>
    6e27f71edc
  190. validation: drain script checks before block failure returns
    Keep queued script validation work bounded by its referenced transaction data when block connection exits through validation failure paths.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    08b12c547c
  191. Merge pull request #585 from syscoin/br/fix-validation-checkqueue-drain
    validation: drain script checks before block failure returns
    7e12693657
  192. nevm: avoid shutdown reject reasons in ZMQ validation callbacks
    Co-authored-by: Cursor <cursoragent@cursor.com>
    f5ec49c817
  193. nevm: skip external validation notifies during shutdown
    Co-authored-by: Cursor <cursoragent@cursor.com>
    7919af87ae
  194. nevm: abort external validation during shutdown
    Co-authored-by: Cursor <cursoragent@cursor.com>
    9384915dd2
  195. nevm: use chainstate interrupt for shutdown aborts
    Co-authored-by: Cursor <cursoragent@cursor.com>
    e97a02f43c
  196. Merge pull request #584 from syscoin/br/fix-managed-geth-startup-shutdown
    nevm: avoid managed geth startup and shutdown stalls
    54c6eb62b5
  197. add doc BTC-header-backend.md 0e57d2ca38
  198. Merge pull request #586 from Frank-GER/master
    add doc BTC-header-backend.md
    25ef169100
  199. Harden managed geth bootstrap startup
    Co-authored-by: Cursor <cursoragent@cursor.com>
    02685743a4
  200. Bound bootstrap startup wait
    Keep the long sysgeth wait only for a live state bootstrap, remove the unshipped EvoDB rewrite marker leftovers, and add missing BTCC lock annotations.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    75a6a49486
  201. Reduce bootstrap startup wait
    Use a two-hour default for active state bootstrap instead of preserving the old four-hour startup budget.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    4c0947d0ed
  202. Remove obsolete EvoDB rewrite tests
    Drop tests for the unshipped RewriteSnapshotWindow marker recovery path now that EvoDB maintenance relies on incremental pruning and reindex recovery.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    eda1853fc5
  203. Merge pull request #587 from syscoin/br/fix-managed-geth-bootstrap-startup
    Harden managed geth bootstrap startup
    6c1cd97dfc
  204. Harden managed geth ZMQ handling
    Co-authored-by: Cursor <cursoragent@cursor.com>
    565a36814d
  205. Fail closed when required NEVM is unavailable
    Co-authored-by: Cursor <cursoragent@cursor.com>
    568e9d1ad9
  206. Preserve optional NEVM for non-masternodes
    Co-authored-by: Cursor <cursoragent@cursor.com>
    ed2c22649e
  207. Merge pull request #588 from syscoin/br/harden-managed-geth-zmq
    Harden managed geth ZMQ handling
    6d73e68707
  208. Update sysgeth 069dfd22b4
  209. nCLReceiptStartBlock 5ffd9ea24c
  210. Fix BTCC receipt tail parsing DoS
    Bound BTCC/BTCPREV tagged-tail parsing to the maximum serialized payload size and avoid per-candidate suffix copies while preserving ambiguity rejection.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    a33d86c8b0
  211. Merge pull request #589 from syscoin/br/fix-btcc-tail-parser
    Fix BTCC receipt tail parsing DoS
    c0af3d1302
  212. Update sysgeth c9da322a32
  213. Update serialize_tests.cpp c2d68b2ae9
  214. Update sysgeth 58533ab363
  215. Harden asset allocation bridge validation
    Reject non-canonical asset allocation commitments after CL receipt activation so bridge burns and mints cannot rely on ambiguous asset/output mappings.
    32bdba938a
  216. Complete bridge proof and parser hardening
    Validate authenticated mint fields and canonical burn commitments at the bridge boundary while preserving pre-activation behavior and rejecting malformed proof structures safely.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    bf7a7e2d89
  217. Harden ChainLock publication and signing
    Serialize first-winner publication with chain-state revalidation and prevent stale alternative targets from consuming quorum signing attempts.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    542d43c8aa
  218. Isolate ChainLock winner ancestry regression
    Make the signing candidate satisfy the active anchor first so the test specifically proves rejection of a non-ancestor lower winner.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    ab24f31139
  219. Keep alternative ChainLocks on one quorum set
    Only follow a competing signing target when both branches derive the same DKG-base ancestry, preventing signatures under a quorum vector from the wrong branch.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    8a2b0863bc
  220. Bind ChainLocks to exact quorum commitments
    Prevent reorged commitment caches and alternative branches from making ChainLock quorum interpretation depend on node history.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    7180471686
  221. Bind cached signatures to quorum context
    Close reorg races in signature caching, local signing, and quorum cache publication while preserving first-share convergence.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    ed9ee5a931
  222. Allow safe ChainLock tip advancement
    Track the active block at the signing height so ordinary tip extensions do not invalidate an otherwise stable quorum context.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    25aa5f8e54
  223. Clear stale ChainLock peer requests
    Allow peers to reannounce a valid ChainLock after a transient quorum-context rejection.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    d454791cd9
  224. Exercise quorum replacement through cache misses
    Cover production quorum construction, stale same-base eviction, and replacement cache reuse instead of preloading both cache entries.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    80ae9c74f8
  225. Reject signatures before quorum commitment mining
    Align the functional RPC expectation with commitment-aware quorum ancestry by rejecting a signing height at the DKG base before its final commitment exists.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    e6b1100845
  226. Declare cs_main for ChainLock annotations
    Include the lock declaration required for Clang thread-safety analysis so sanitizer builds compile the new quorum-context contract.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    d958a39c6d
  227. Merge pull request #591 from syscoin/br/harden-chainlock-publication
    Harden ChainLock publication and signing
    65b939a235
  228. Merge pull request #590 from syscoin/br/harden-asset-allocation-validation
    Harden asset allocation bridge validation
    aed8b0c004
  229. Align recovered signature verification offsets
    Reconstruct the same current and prior quorum sets used during signing after commitment-ancestry filtering.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    4143a51863
  230. Keep nevmminttx wipe aligned with chainstate rebuilds
    Only clear the NEVM mint-replay database on -reindex /
    -reindex-chainstate, not when reconstructible NEVM auxiliary
    databases are reinitialized during a continued reindex.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    b52e286132
  231. Clear nevmminttx when coins view is empty during continued reindex
    If the reindex marker is set but the UTXO set is empty, reconstructible
    NEVM DBs are already wiped via effective_reindex_geth while the
    coinsViewEmpty full-recreate path is skipped. Explicitly recreate
    nevmminttx in that case so mint-replay state matches the empty chainstate.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    eec46d17c0
  232. Skip VerifyDB while a reindex is in progress
    Continued reindex preserves nevmminttx with the existing UTXO tip.
    Level-4 verification reconnects those blocks and treats already-applied
    mint markers as mint-exists. Defer VerifyDB until reindex completes;
    normal startups still fully verify.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    6bb1c4fa83
  233. Clamp VerifyDB to level 3 during continued reindex
    Keep read/undo/disconnect checks while suppressing only the
    level-4 reconnect path that conflicts with preserved mint markers.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    a8faf73d35
  234. Trim mint-replay markers above the durable coins tip
    FlushStateToDisk writes nevmminttx before CoinsTip. After an
    interrupted reindex, remove markers from previously-connected
    blocks above the loaded coins tip so reconnect can proceed.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    8da68f654f
  235. Require BLOCK_VALID_SCRIPTS when trimming mint markers
    nChainTx is set at block-data receipt, before coins connect.
    Only erase markers from blocks that were actually connected so
    unconnected descendants cannot remove still-valid tip markers.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    c93a69df2f
  236. Reconcile mint-replay ahead of tip on every nonempty startup
    Drop the disk_reindexing gate so ordinary crash recovery also trims
    markers above the active CoinsTip, and narrow the VerifyDB level-4
    clamp to continued reindex with preserved mint state.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    dedca88e3d
  237. Update chainstate.cpp 8544012d0b
  238. Order mint-replay durability around UTXO connect/disconnect
    Persist mint markers before durable UTXO commits on connect and
    ReplayBlocks, and flush CoinsTip before erasing markers on disconnect.
    Add a VerifyDB consume-once overlay so level-4 reconnect does not
    false-fail on already-applied markers.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    521d342a1c
  239. Fix VerifyOverlay set assignment for SaltedTxidHasher
    NEVMMintTxSet is not copy-assignable; clear and insert instead.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    2adb748c77
  240. Avoid sync mint flush on every ConnectTip
    FlushStateToDisk already persists nevmminttx before CoinsTip; staging
    markers in cache is enough on the hot connect path.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    6b627f373f
  241. Reconcile side-branch mint markers on startup
    After a ReplayBlocks crash between UTXO commit and disconnect erase,
    stale markers can remain on blocks off the active tip. Trim those as
    well as ahead-of-tip markers, while keeping any hash still covered by
    an active-chain mint at or below the durable tip.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    18c0aeb390
  242. Avoid full-index mint reconciliation on ordinary startup
    Keep ahead-of-tip trimming cheap, and recover ReplayBlocks
    disconnect erases via a tip-gated pending record instead of scanning
    every script-valid block on restart.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    9aaee94e25
  243. Trim recent side-branch mint markers on startup
    Periodic nevmminttx writes without a coins flush can leave markers on
    an in-memory reorg branch. Bound the scan to a recent off-active window
    and keep any hash still present on the durable active tip.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    7e08b85d71
  244. Reduce mint-replay fix to ordered durability only
    Keep wipe policy and connect/disconnect write ordering so a crash can
    leave extra markers but not a durable mint without a marker. Remove the
    startup scan, pending journal, and VerifyDB consensus overlay; cap
    check level at 3 and document reindex-chainstate for liveness recovery.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    cb6c83158e
  245. Trim ahead-of-tip mint markers when continuing reindex
    Preserved nevmminttx across an interrupted reindex can retain markers
    written before a CoinsTip flush. Remove only active-chain descendants
    above the durable tip so reconnect can proceed without a full wipe.
    
    Co-authored-by: Cursor <cursoragent@cursor.com>
    f51c2bb3a4
  246. Revert "Trim ahead-of-tip mint markers when continuing reindex"
    This reverts commit f51c2bb3a481c1e5bb774e0613893f03933ef1aa.
    7ce77ad652
  247. Merge pull request #592 from syscoin/br/nevmminttx-wipe-policy
    Keep nevmminttx wipe aligned with chainstate rebuilds
    44ea151f4e
  248. Update feature_init.py fdfcb134b9
  249. Align asset amount range checks with native totals
    Co-authored-by: Cursor <cursoragent@cursor.com>
    76d3bee520
  250. Merge pull request #593 from syscoin/br/harden-asset-amount-range-checks
    Harden SPT amount tallies
    052ed88a9d
  251. Defer NEVM connect until after consensus checks
    Co-authored-by: Cursor <cursoragent@cursor.com>
    92a6319f45
  252. sidhujag commented at 9:02 PM on July 20, 2026: none

    Opened against wrong repository; closing.

  253. DrahtBot commented at 9:03 PM on July 20, 2026: contributor

    📁 Archived release notes are archived and should not be modified.

  254. bitcoin locked this on Jul 21, 2026
  255. bitcoin deleted a comment on Jul 21, 2026
  256. bitcoin deleted a comment on Jul 21, 2026
  257. fanquake renamed this:
    (fix) ordering of checks (ignore)
    .
    on Jul 21, 2026
Contributors

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-07-21 12:50 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me