EP
← All projectsElements Project

Elements

Consensus node software underlying Liquid and other Elements-based Bitcoin sidechains.

BitcoinBitcoin sidechainsCryptographic librariesNode implementationsActive incident
Repository coverage

116 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

34security candidates25second-pass queue59AI analyses
36commits · 30 days
47commits · 60 days
85commits · 180 days
115commits · 365 days
Backfill bands
Sep 7 → Mar 1129 seen5 candidatesComplete
Mar 11 → Jul 938 seen7 candidatesComplete
Jul 9 → Aug 82 seen0 candidatesComplete
Aug 8 → Sep 738 seen13 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

62/100 average clarity
26Strong · 80–100
32Adequate · 60–79
48Thin · 40–59
10Opaque · 0–39
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Byron Hambly462227371
Tom Trevethan37414152
merge-script944191
Ruslan Kasheparov827042
Pablo Greco814045
ivanlele111058
Abdullah1738200057
nazarevsky101035
Pieter Wuille100091
Hennadii Stepanov100045
Russell O'Connor101068
fanquake100080
Analysis record

Published AI watches

Last scanned 5 minutes ago

Moderate 64 AI analysisMessage 91 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Merge ElementsProject/elements#1604: [master] sigcache: harden range proof cache keys and add -norangeproofcache option

This commit fixes a cache-key collision bug in Elements' range-proof and surjection-proof validation caches. Previously, the cache key was built by simply concatenating raw bytes, so two different sets of inputs could accidentally produce …

Cache key collision resistance hardened by length-prefixing all fieldsSurjection-proof cache key now includes vTags, fixing a missing-input vulnerabilityNew runtime option to disable range-proof cache without recompilation
301acc64by merge-script+270−335 files
Vendor flagged security relevance
Informational 18 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

init: add -norangeproofcache startup option to disable range proof cache

This commit adds a new command-line option `-norangeproofcache` that lets node operators turn off an internal performance cache used when validating confidential transaction range proofs. It is a debug/test option, not a security fix. Ther…

No security-relevant signal in commit message or diffNew debug/test startup option onlyNo validation logic change; only cache lookup/store paths are bypassed
53167b1fby Byron Hambly+13−52 files
No security note in commit
Moderate 68 AI analysisMessage 83 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

sigcache: harden proof cache keys with length-prefixed hashing

This commit fixes a cache-key collision bug in Elements' proof verification caches. Previously, the cache key for range proofs and surjection proofs was built by simply concatenating raw bytes, so two different sets of inputs could acciden…

Cache-key collision in proof verification cache could allow bypass of cryptographic verificationRaw concatenation of variable-length fields in cache-key constructionMissing input (vTags) in surjection-proof cache key
b0a27528by Byron Hambly+92−282 files
Vendor flagged security relevance
Moderate 59 AI analysisMessage 100 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Merge ElementsProject/elements#1593: Fix RPC return errors for psbt and invalid rangeproofs

This update fixes several ways that malformed transaction data could crash Elements nodes or trick wallet users into signing bad transactions. The main changes turn internal 'assert' crashes into proper error returns when creating confiden…

assert-to-error conversion in rangeproof generationPSBT explicit output data now required before signing blinded outputspeg-in witness stack length and deserialization hardening
4ddaefc8by merge-script+221−4515 files
No security note in commit
High 72 AI analysisMessage 91 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Merge ElementsProject/elements#1592: blind/blindpsbt fixes

This merge commit fixes several security and robustness bugs in Elements' confidential-transaction blinding code and in its dynamic-federated (dynafed) header handling. The most user-visible issues are in 'blindpsbt': malformed PSET inputs…

Replacement of assertion failures with recoverable error returns in attacker-influenced PSET blinding pathsOut-of-bounds read prevention by requiring 33-byte Pedersen commitments before passing buffers to libsecp256k1Range-proof equality verification now checks both min and max bounds, closing a proof-forgery window
31e8f27fby merge-script+86−189 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 96 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Merge ElementsProject/elements#1576: Fix intermittent failure in feature_pegin_subsidy.py

This commit only updates test scripts to fix flaky automated tests. It changes how test code calculates expected pegin subsidy values and how test nodes bind to network ports when using Bitcoin Core as a parent chain. No production node co…

No changes to production source codeChanges limited to test/functional/ Python test scriptsTest assertion hardening: dynamic subsidy computation instead of hardcoded constants
bad8ca42by merge-script+154−382 files
No security note in commit
Moderate 60 AI analysisMessage 50 · Thin
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

PartiallySignedTransaction::SetupFromTx indexes vtxinwit checked

This commit hardens how Elements handles 'peg-in' transactions—transfers of assets from a parent blockchain into a sidechain. It adds size checks for witness data fields and wraps decoding in error handling so malformed inputs are rejected…

Out-of-bounds array access fixed in PSBT peg-in setupMissing length validation added for pegin witness stack elementsException handling added around deserialization of pegin witness components
ffd91c05by Tom Trevethan+57−332 files
No security note in commit
High 72 AI analysisMessage 50 · Thin
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Return error for psbt if explicit amounts/assets deleted

This commit fixes a security bug in how the Elements wallet signs partially-signed Bitcoin transactions (PSBTs) for confidential (blinded) payments. Previously, a malicious counterparty could remove the plain-text amount and asset fields f…

Missing input validation on attacker-controlled PSBT dataBlinding proof verification relied on explicit fields that could be omitted by a counterpartyAssertions replaced with safe error returns for off-host data
3a8dec12by Tom Trevethan+18−73 files
No security note in commit
Moderate 60 AI analysisMessage 45 · Thin
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

Return error for invalid rangproof amounts

This commit fixes a crash bug in the Elements blockchain wallet software. When creating a confidential (blinded) transaction, the code could hit an internal 'assert' and abort the program if it tried to generate a rangeproof for a zero-amo…

Removal of assert() on cryptographic operation result in transaction blinding codeConversion of abort-on-failure into error-return for rangeproof generation failuresNew explicit validation rejecting zero-amount spendable outputs in PSBT blinding
4e5ca94fby Tom Trevethan+99−54 files
No security note in commit
High 74 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

blindpsbt: return error instead of asserting on surjection proof failure

This commit fixes a denial-of-service bug in Elements' confidential asset handling. Previously, a malformed transaction file (PSET) could trigger a hard program crash (assert/abort) by feeding in mismatched cryptographic tags. The patch tu…

assert-to-error conversiondenial-of-service vector from untrusted PSET inputsurjection proof failure on attacker-chosen tags/generators
b0aba619by Byron Hambly+9−21 file
Vendor flagged security relevance
Moderate 62 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

blindpsbt: refuse to blind a PSET output with no amount

This commit fixes a crash/undefined-behavior bug in the Elements wallet's confidential-transaction blinding code. When processing a specially crafted Partially Signed Elements Transaction (PSET), the software would blindly use an output am…

Undefined behavior from dereferencing a disengaged std::optionalMissing input validation on optional PSET fieldPotential denial-of-service/crash via crafted PSET
066ecf6eby Byron Hambly+8−01 file
Vendor flagged security relevance
Moderate 63 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

headerssync: retain Elements identity and proof fields

This commit fixes a bug in how Elements nodes temporarily store block headers during initial sync. The node was stripping out Elements-specific fields (block height, proof, dynamic federation parameters, and signblock witness) when compres…

Header integrity loss in sync path: reconstructed header hash would not match received headerLoss of proof and signblock witness data needed for signed/dynafed validationPotential denial-of-service via sync failure or validation rejection of otherwise valid headers
fef1a30bby Byron Hambly+26−32 files
No security note in commit
High 74 AI analysisMessage 85 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

blindpsbt: require both range bounds to match claim in VerifyBlindValueProof

This commit fixes a bug in how Elements verifies confidential transaction value proofs. Previously, the software only checked the lower bound of a mathematical range proof against the amount shown in a transaction. That meant a proof could…

Understated output values in PSET blind value proofsIncomplete range-proof bound verificationConfidential transaction amount mismatch risk
34be37f3by Byron Hambly+5−11 file
Vendor flagged security relevance
Low 48 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

validation: always validate and retain dynafed header block_height

This patch fixes a bug in the Elements blockchain where dynamic-federation (dynafed) block headers could contain an incorrect block height and still be accepted, and where stored header records could be rebuilt with a different hash than t…

Header hash mismatch between accepted and reconstructed dynafed headers when legacy option disabledMissing height validation for dynafed headers when -con_blockheightinheader option is offPotential for accepting dynafed headers with incorrect block_height
c7ec63c5by Byron Hambly+12−32 files
No security note in commit
Moderate 62 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

blindpsbt: reject off-curve blinding pubkey before ECDH

This commit fixes a crash bug in Elements' confidential-transaction blinding code for PSBTs (Partially Signed Bitcoin Transactions). A malformed, attacker-chosen 'blinding public key' that is not actually a valid point on the cryptographic…

Off-curve / invalid elliptic-curve public key reaches ECDHAssertion abort (DoS / process termination) via crafted inputMissing input validation in PSBT blinding path compared to non-PSBT path
f634a3a4by Byron Hambly+7−01 file
Vendor flagged security relevance
Moderate 60 AI analysisMessage 78 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

dynafed: require at least four-fifths approval for parameter transition

This commit fixes a voting threshold bug in Elements' dynamic federation (dynafed) feature. The code was supposed to require at least 80% (four-fifths) of recent blocks to approve a change to federation parameters, but due to integer divis…

Consensus threshold under-approximation due to integer floor divisionPotential for dynafed parameter transition with less than intended 80% block approvalOverflow-safe ceiling formula used as remediation
bdedb12eby Byron Hambly+5−21 file
Vendor flagged security relevance
Moderate 62 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

blindpsbt: require genuine commitments in VerifyBlindValueProof

This commit fixes a bug in the way confidential transaction value proofs are validated. Previously, the code accepted an explicit 9-byte value or an empty field where a 33-byte cryptographic commitment was expected. It then passed that sho…

Out-of-bounds read in cryptographic proof verificationInsufficient input validation before passing buffer to libsecp256k1Confidential value/asset commitment type confusion
6f1a5131by Byron Hambly+5−11 file
Vendor flagged security relevance
Informational 12 AI analysisMessage 95 · Strong
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

test: assert wallet default commits rangeproofs post-dynafed

This commit only adds a new test to the project's test suite. It checks that the wallet's default signing behavior correctly includes (or excludes) a special 'rangeproof' flag depending on whether a network upgrade called 'dynafed' is acti…

Adds functional test coverage for SIGHASH_RANGEPROOF default behaviorVerifies pre-dynafed wallet default does not set SIGHASH_RANGEPROOF bitNo modification to signing, consensus, or mempool code
a1aacfaaby Byron Hambly+45−01 file
No security note in commit
Moderate 64 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

wallet: default to rangeproof-committing sighash when dynafed active

This commit changes the Elements wallet so that, when a newer consensus feature called 'DynaFed' is active, any transaction the wallet signs without an explicit signature mode will automatically include the transaction's confidential outpu…

Fixes a known malleability vector: pre-Taproot rangeproof/witness malleabilityChanges wallet default sighash only when dynafed is activeDoes not override explicit user sighash choices
ce342f58by Byron Hambly+12−33 files
Vendor flagged security relevance
Low 33 AI analysisMessage 73 · Adequate
EP Elements ProjectElements BitcoinBitcoin sidechainsCryptographic librariesNode implementations

rpc: default raw signing to rangeproof-committing sighash when dynafed active

This commit changes how the Elements blockchain software creates and checks digital signatures for raw transactions. Once a network upgrade called 'dynafed' is active, the software now defaults to a signature type that also commits to conf…

New consensus-relevant sighash default gated by dynafed activationVerification flag added to accept previously rejected signature typeRaw transaction signing behavior change for RPC callers
f5e2b1f5by Byron Hambly+27−84 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-prioritytest: fix fedpeg test to work with bitcoind parentby Byron Hambly · 45fd28fc · Sep 1, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Byron Hambly

test: fix fedpeg test to work with bitcoind parent

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritytest: fix pegin subsidy test to work with bitcoind parentby Byron Hambly · 22bb2774 · Sep 1, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Byron Hambly

test: fix pegin subsidy test to work with bitcoind parent

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritybroaden the CMake guard for simplicity to also match Clang on any platformby Tom Trevethan · 665d8738 · Aug 31, 2026 · 2 filesMessage 75 · AdequateTriage 0Details
Commit message · Tom Trevethan

broaden the CMake guard for simplicity to also match Clang on any platform

fix is_valid() in test framework for elements amounts

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Lower-prioritybuild: add simplicity/cmr.c to src/CMakeLists.txtby Byron Hambly · 04aa60ca · Aug 28, 2026 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · Byron Hambly

build: add simplicity/cmr.c to src/CMakeLists.txt

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-prioritydoc: release note for default rangeproof-committing sighashby Byron Hambly · feb50a3f · Aug 26, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Byron Hambly

doc: release note for default rangeproof-committing sighash

Document the new default pre-Taproot sighash (SIGHASH_ALL |
SIGHASH_RANGEPROOF), its scope (wallet + raw RPC + bitcoin-tx), and the
activation/chain-params gating.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Security candidatetest: assert wallet default commits rangeproofs post-dynafedby Byron Hambly · a1aacfaa · Aug 26, 2026 · 1 fileMessage 95 · StrongInformational 12Details
Commit message · Byron Hambly

test: assert wallet default commits rangeproofs post-dynafed

Extend feature_sighash_rangeproof.py with a case asserting that the
wallet's default sign path (no explicit sighash arg) produces signatures
that commit to output rangeproofs once dynafed is active.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundary
AI analysis · Informational 12/100

This commit only adds a new test to the project's test suite. It checks that the wallet's default signing behavior correctly includes (or excludes) a special 'rangeproof' flag depending on whether a network upgrade called 'dynafed' is active. There is no change to wallet, node, or consensus code—only a new automated test is introduced.

Lower-prioritybitcoin-tx: default to rangeproof-committing sighash via chain paramsby Byron Hambly · 5ed683cb · Aug 26, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Byron Hambly

bitcoin-tx: default to rangeproof-committing sighash via chain params

elements-tx has no chainstate, so gate the default sighash on chain
parameters via CChainParams::SighashRangeproofActiveByParams(): commit to
rangeproofs by default on chains where dynafed is known active (including
liquidv1), otherwise use the historical SIGHASH_ALL default so
offline-built txs stay standard and valid. Normalize SIGHASH_DEFAULT to
SIGHASH_ALL for the legacy tool path; explicit sighash=... still
overrides.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Security candidaterpc: default raw signing to rangeproof-committing sighash when dynafed activeby Byron Hambly · f5e2b1f5 · Aug 26, 2026 · 4 filesMessage 73 · AdequateLow 33Details
Commit message · Byron Hambly

rpc: default raw signing to rangeproof-committing sighash when dynafed active

Default the raw signing RPCs to commit to output rangeproofs when dynafed
is active at the current tip. The SignTransaction util gains a
sighash_rangeproof_active parameter and, when no sighash is supplied,
resolves the default via DefaultSighashType. Wire this through
signrawtransactionwithkey and descriptorprocesspsbt using
DeploymentActiveAfter(DEPLOYMENT_DYNA_FED) for tip activation. Explicit
user-supplied sighash types are left untouched.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 33/100

This commit changes how the Elements blockchain software creates and checks digital signatures for raw transactions. Once a network upgrade called 'dynafed' is active, the software now defaults to a signature type that also commits to confidential transaction rangeproofs. It also fixes verification so signatures using that new default are accepted instead of rejected. The change is a protocol-alignment fix; it does not appear to introduce a security vulnerability, but it prevents a functional break where valid wallet signatures would be considered invalid.

Security candidatewallet: default to rangeproof-committing sighash when dynafed activeby Byron Hambly · ce342f58 · Aug 26, 2026 · 3 filesMessage 73 · AdequateModerate 64Details
Commit message · Byron Hambly

wallet: default to rangeproof-committing sighash when dynafed active

Change the wallet's default pre-Taproot sighash to commit to output
rangeproofs when dynafed is active at the current tip, closing the
pre-Taproot rangeproof (witness) malleability gap. Route the default
through DefaultSighashType(chain().isSighashRangeproofActive()) in
CWallet::SignTransaction and in the signrawtransactionwithwallet /
walletprocesspsbt RPCs when the caller does not supply a sighash.
Explicit user-supplied sighash types are left untouched.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 64/100

This commit changes the Elements wallet so that, when a newer consensus feature called 'DynaFed' is active, any transaction the wallet signs without an explicit signature mode will automatically include the transaction's confidential output proofs ('rangeproofs') in the signature. Previously, those proofs could be changed by a third party after the transaction was signed, which could let someone mangle a transaction's witness data without invalidating the signature. The fix only changes the default behavior; users who explicitly pick a signature mode are unaffected.

Lower-prioritychainparams: add SighashRangeproofActiveByParams() for offline gatingby Byron Hambly · 3587d770 · Aug 26, 2026 · 2 filesMessage 83 · StrongTriage 0Details
Commit message · Byron Hambly

chainparams: add SighashRangeproofActiveByParams() for offline gating

Add a CChainParams helper that decides, from chain parameters alone
(without a chain tip), whether SIGHASH_RANGEPROOF can be assumed active.
This is true when dynafed is configured ALWAYS_ACTIVE, or on liquidv1
where dynafed is height-activated (not the ALWAYS_ACTIVE sentinel) but is
long since active on the live chain. This is the chainstate-less gating
source used by elements-tx.

Add a unit test covering liquidv1 (active by chain type, nStartTime !=
ALWAYS_ACTIVE), liquidv1test (active via ALWAYS_ACTIVE override), and
regtest (inactive).

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Lower-prioritySquashed 'src/simplicity/' changes from 49b96499a6..abede47eb8by Byron Hambly · e15a6259 · Aug 25, 2026 · 12 filesMessage 81 · StrongTriage 0Details
Commit message · Byron Hambly

Squashed 'src/simplicity/' changes from 49b96499a6..abede47eb8

abede47eb8 Merge BlockstreamResearch/Simplicity#324: Bitcoin Application for Simplicity
eae2b6f2fd misc: minor changes from #324 review
b2b8577164 cmake: add cmr and bitcoin/cmr to build
df01c33990 Add basic CMake build support for libBitcoinSimplicity
4924ea7c6c Implementation of cmr.c for bitcoin
9782370700 Implementation of exec.c for bitcoin
512feba872 Add SIMPLICITY_FALLTHROUGH macro and enable -Wimplicit-fallthrough in CI

git-subtree-dir: src/simplicity
git-subtree-split: abede47eb835f5d39568cc705cefe5bf9e6ee769

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Security candidatenode: expose Chain::isSighashRangeproofActive() (tip-based dynafed check)by Byron Hambly · be15b069 · Aug 18, 2026 · 2 filesMessage 73 · AdequateInformational 17Details
Commit message · Byron Hambly

node: expose Chain::isSighashRangeproofActive() (tip-based dynafed check)

Add a Chain interface method that reports whether SIGHASH_RANGEPROOF is
active for signing at the current chain tip, mirroring the mempool
standardness check (DeploymentActiveAfter for DEPLOYMENT_DYNA_FED). This
is the live-tip gating source used by the wallet and wallet-backed RPC to
decide the default pre-Taproot sighash.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundary
AI analysis · Informational 17/100

This commit adds a small internal helper that lets the wallet ask the node whether a particular Elements feature (SIGHASH_RANGEPROOF) is active at the current chain tip. It is purely an exposure of existing chain-state information through a programming interface; it does not change consensus rules, transaction validation, or network behavior. There is no obvious security bug here.

Security candidatescript: add SIGHASH_ALL_WITH_RANGEPROOF and DefaultSighashType; strip rangeproof bit for Taproot signingby Byron Hambly · 6a531c26 · Aug 18, 2026 · 4 filesMessage 73 · AdequateLow 35Details
Commit message · Byron Hambly

script: add SIGHASH_ALL_WITH_RANGEPROOF and DefaultSighashType; strip rangeproof bit for Taproot signing

Add a named default constant SIGHASH_ALL_WITH_RANGEPROOF (SIGHASH_ALL |
SIGHASH_RANGEPROOF) and a DefaultSighashType() helper that selects the
default pre-Taproot sighash based on whether SIGHASH_RANGEPROOF is active
for the target chain.

Strip the 0x40 (SIGHASH_RANGEPROOF) bit when computing Schnorr
signatures, since the BIP341-style sighash always commits to rangeproofs
and rejects the bit. This keeps SIGHASH_ALL_WITH_RANGEPROOF a valid
universal default for both pre-Taproot and Taproot signing.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 35/100

This commit adds a new default signature mode for the Elements sidechain that includes 'rangeproof' data in signatures for older-style (pre-Taproot) transactions. It also makes sure that when Taproot/Schnorr signing is used, the extra rangeproof bit is stripped away because Taproot already commits to rangeproofs in a different way and would reject the bit. The change is defensive: it closes a 'rangeproof malleability gap' where transaction witnesses could potentially be altered without invalidating signatures, but only on chains where the relevant feature (dynafed) is active. It is not a fix for an active exploit, but a hardening/correctness improvement.

Lower-prioritytest: ruff format for feature_sighash_rangeproof.pyby Byron Hambly · 529eaa1f · Aug 18, 2026 · 1 fileMessage 72 · AdequateTriage 0Details
Commit message · Byron Hambly

test: ruff format for feature_sighash_rangeproof.py

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Lower-priorityFix intermittent failure in feature_pegin_subsidy.pyby Tom Trevethan · c6692e16 · Aug 17, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Tom Trevethan

Fix intermittent failure in feature_pegin_subsidy.py

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidateSquashed 'src/secp256k1/' changes from 95b983597a..a2b001cc20by Byron Hambly · 55ca0291 · Aug 14, 2026 · 3205 filesMessage 96 · StrongModerate 63Details
Commit message · Byron Hambly

Squashed 'src/secp256k1/' changes from 95b983597a..a2b001cc20

a2b001cc20 Merge elementsproject/secp256k1-zkp#369: surjection: bind genrand nonce to the full statement
f8841c14d5 Merge elementsproject/secp256k1-zkp#370: rangeproof: warn that nonce must not be reused across differing arguments
cde28971a2 rangeproof: warn that nonce must not be reused across differing arguments
65093e1444 surjection: prevent s-value reuse for different proof inputs
2af926dc30 Merge BlockstreamResearch/secp256k1-zkp#366: Upstream PRs 1851, 1852, 1861, 1855, 1864, 1867, 1860, 1865, 1859, 1879, 1881, 1845, 1877, 1882, 1884
217fe59bbf tests: register run_util_tests and run_ec_commit, remove dead print_vector
b1f9e6e360 Merge branch 'master' into sync-ebf59432
ebf594320d Merge bitcoin-core/secp256k1#1884: SECURITY.md: remove Jonas Nick from trusted keys
21645c03a2 SECURITY.md: remove Jonas Nick from trusted keys
b90075a074 Merge bitcoin-core/secp256k1#1882: scalar: correct `_scalar_get_bits_{limb32,var}` input condition docs
5a8a411425 Merge bitcoin-core/secp256k1#1877: field: correct `fe_equal` magnitude bound for `b`
6a599a4428 scalar: correct `_scalar_get_bits_{limb32,var}` input condition docs
994b35010d field: correct fe_equal's b magnitude bound
2ce4f71dc5 Merge bitcoin-core/secp256k1#1845: Improve checks for scalar _get_bits methods
68b45fd4e2 Merge bitcoin-core/secp256k1#1881: tests: Fix GCC 17 snapshot warning
9d75769dec tests: Fix GCC 17 snapshot warning
9e3a165ad0 Merge bitcoin-core/secp256k1#1879: ci: add 'brew trust' invocation to macOS CI
66260b78a2 ci: add 'brew trust' invocation to macOS CI
bd0287d650 Merge bitcoin-core/secp256k1#1859: field: force-inline 5x52 mul and sqr
fdcf2d41e2 Merge bitcoin-core/secp256k1#1865: test: enable -Wunused-function in test suite (Fix #1831)
b2d2bd362d Merge bitcoin-core/secp256k1#1860: cmake: Emulate Libtool's behavior on NetBSD and OpenBSD
87bec430bf Merge bitcoin-core/secp256k1#1867: test: musig: fix dead "aggnonce encodes two points at infinity" check
71fcd8410e field: force-inline 5x52 mul and sqr
a77dacad9a test: enable -Wunused-function in test suite (Fix #1831)
aea86bc350 Merge bitcoin-core/secp256k1#1864: test: refactor: simplify tests by using `_ecmult_gen_ge` helper, add test
2ee79e77e6 test: add unit test for `_ecmult_gen_ge`
d7125e517d test: musig: fix dead "aggnonce encodes two points at infinity" check
1eab757207 cmake: Fix shared library versioning on OpenBSD
a401c5145a cmake: Fix shared library versioning on NetBSD
8a0f4002c7 cmake, refactor: Improve documenting in `SetLibtoolAbiVersion` module
acf2084aa7 cmake, refactor: Introduce `SetLibtoolAbiVersion` module
0f4a7e6bf9 Merge bitcoin-core/secp256k1#1855: bench: add internal benchmark for `secp256k1_fe_normalize_var`
ca68daf8e1 test: refactor: simplify tests by using `_ecmult_gen_ge` helper
13db747f2b Merge bitcoin-core/secp256k1#1861: refactor: introduce `_ecmult_gen_ge` helper (preventing accidental gej leaks)
9e017e5062 refactor: rename `_ecmult_gen` -> `_ecmult_gen_gej` for consistency
a3296d5e23 refactor: introduce `_ecmult_gen_ge` helper (preventing accidental gej leaks)
c63062380f Merge bitcoin-core/secp256k1#1852: Add exhaustive test for ECDH module
240578eef5 bench: add internal benchmark for `secp256k1_fe_normalize_var`
5698e66c64 Add exhaustive test for ECDH module
a39093de15 Merge bitcoin-core/secp256k1#1851: doc: correct API docs for ECDSA signing out-params (s/array/signature object/)
40a0d874a6 doc: correct API docs for ECDSA signing out-params (s/array/signature object/)
0cad3df503 Improve checks for scalar _get_bits methods

git-subtree-dir: src/secp256k1
git-subtree-split: a2b001cc20c11f3b06985b87da9f7be942250ed0

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Moderate 63/100

This commit is a large subtree update that pulls in many upstream secp256k1-zkp changes. The most security-relevant parts are fixes for two cryptographic proof modules used in Elements' confidential transactions: surjection proofs and range proofs. The commit message says the fixes prevent reusing random-looking proof values ('s-values' and nonces) across different proof statements, which is a known way cryptographic proofs can be forged or leak secrets. However, the actual code changes for those fixes are not shown in the supplied diff; only repository-wide metadata and build/CI file changes are visible. So while the topic is security-sensitive, we cannot directly verify the cryptographic details from the materials provided.

Lower-priorityAdd test that sighash midstate cache treats the SIGHASH_RANGEPROOF bit as part of its keyby Tom Trevethan · ec89c800 · Aug 14, 2026 · 2 filesMessage 60 · AdequateTriage 0Details
Commit message · Tom Trevethan

Add test that sighash midstate cache treats the SIGHASH_RANGEPROOF bit as part of its key

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Lower-prioritytests: add sighash caching tests to feature_taprootby Pieter Wuille · 1484750d · Aug 13, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Pieter Wuille

tests: add sighash caching tests to feature_taproot

Github-Pull: #32473
Rebased-From: 9014d4016ad9351cb59b587541895e55f5d589cc
(cherry picked from commit 5a0506eea03e423121dd2112c2ba5fb4320022e3)
(cherry picked from commit b4780f0d87b173f6ca4a14104e127aa8dfe75208)

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Lower-priorityELEMENTS: backport per-txin sighash midstate cache with SIGHASH_RANGEPROOF keyingby Tom Trevethan · 903be1e5 · Aug 13, 2026 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · Tom Trevethan

ELEMENTS: backport per-txin sighash midstate cache with SIGHASH_RANGEPROOF keying

Backport of bitcoin/bitcoin#32473 as integrated on elements-23.x
(eb64d2486f54), reapplied against master's tree.

The SIGHASH_RANGEPROOF (0x40) bit changes the sighash preimage: segwit v0
appends hashRangeproofs, and the legacy serializer appends each output's
rangeproof and surjectionproof. It is therefore part of the cache key, and
the table has 16 entries rather than upstream's 6. Dropping that term is a
consensus split with deployed elements-23.x in both directions.

Upstream added SigHashCache as a pure addition, so a merge of this file will
auto-merge without prompting for the Elements adaptation. Hence the explicit
markers.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Lower-prioritybuild(secp256k1): force surjectionproof moduleby Abdullah1738 · 68affce5 · Aug 12, 2026 · 1 fileMessage 57 · ThinTriage 0Details
Commit message · Abdullah1738

build(secp256k1): force surjectionproof module

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
documentation-only discount
Lower-priorityfeat(rpc): expose effective fee assetby Abdullah1738 · 13d830f5 · Aug 5, 2026 · 3 filesMessage 57 · ThinTriage 0Details
Commit message · Abdullah1738

feat(rpc): expose effective fee asset

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Security candidatefix: range proof cache bind to asset and scriptpubkeyby Byron Hambly · c26d719c · Aug 3, 2026 · 2 filesMessage 62 · AdequateCritical 87Details
Commit message · Byron Hambly

fix: range proof cache bind to asset and scriptpubkey

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
consensus or confidential-proof validation
AI analysis · Critical 87/100

This commit changes how Elements (the software behind the Liquid sidechain) remembers whether it has already checked a 'range proof'—a cryptographic receipt that helps keep transaction amounts private. Previously, the cache key was built only from the proof and the value commitment. The patch adds the asset commitment and the output's scriptPubKey to that key. An independent researcher argues that an earlier version of this same fix introduced a cache-key collision that was exploited to withdraw roughly 4,000 BTC from Liquid's federation wallet. The commit itself is a narrow code change; the exploit claim comes from outside analysis, not from the commit message or a vendor root-cause report.

AI review queuedlinter: remove trailing whitespaceby Tom Trevethan · 85be2cc6 · Jul 10, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Tom Trevethan

linter: remove trailing whitespace

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit removes a single trailing space at the end of a comment line in a Python test file. It is a cosmetic linting cleanup with no functional change to the software and no security relevance.

AI review queuedfix RPC documentation inconsistenciesby Tom Trevethan · e5d02b9f · Jul 9, 2026 · 8 filesMessage 35 · OpaqueInformational 19Details
Commit message · Tom Trevethan

fix RPC documentation inconsistencies

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 19/100

This commit fixes mistakes in the text descriptions and type labels shown by several command-line/RPC commands. Most changes are cosmetic documentation corrections, such as fixing typos, marking fields as optional, and correcting error messages. The only functional change is a small update to the `combineblocksigs` command so its optional `witnessScript` argument behaves as documented for both old-style and dynamic-federation blocks, plus a regression test for that behavior. There is no direct security vulnerability being patched.

AI review queuedadd linter check to CIby Tom Trevethan · 713da864 · Jul 7, 2026 · 3 filesMessage 38 · OpaqueInformational 15Details
Commit message · Tom Trevethan

add linter check to CI

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit adds a code-style linter to the project's continuous integration (CI) pipeline and makes two small supporting changes: it tells the shell linter to ignore a specific quoting warning in build scripts, and it adds a parameter to a test helper function with a note explaining it is used by a currently disabled test. There is no security-relevant code change here.