BT
← All projectsbtcsuite

btcd

Alternative full-node Bitcoin implementation written in Go.

BitcoinNode implementationsNormal
Repository coverage

198 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.

43security candidates20second-pass queue43AI analyses
31commits · 30 days
65commits · 60 days
177commits · 180 days
198commits · 365 days
Backfill bands
Aug 5 → Feb 621 seen1 candidatesComplete
Feb 6 → Jun 6112 seen7 candidatesComplete
Jun 6 → Jul 634 seen13 candidatesComplete
Jul 6 → Aug 530 seen7 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.

68/100 average clarity
61Strong · 80–100
75Adequate · 60–79
57Thin · 40–59
5Opaque · 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.
Lrifton92433186
Erick Cestari811177
Boris Nagaev461515060
Olaoluwa Osuntokun561111073
Oliver Gugger1344047
MPins333079
Drake Thomsen222091
Eric Grill311086
Julio Cesar111045
Jacob Schuler111088
Kim111045
Calvin Kim4300072
Analysis record

Published AI watches

Last scanned 20 minutes ago

Informational 15 AI analysisMessage 85 · Strong
BT btcsuitebtcd BitcoinNode implementations

build: pin tagged submodules and remove local replacements

This commit is a routine build housekeeping change. It updates two internal Go module dependencies to newly published tagged versions and removes local directory overrides so that everyone builds with the same published code. There is no i…

3d3b5e8aby Olaoluwa Osuntokun+8−82 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
BT btcsuitebtcd BitcoinNode implementations

rpcclient: add tests for DisableAuth header behavior

This commit only adds new unit tests for an existing feature. It does not change any production code, so it cannot introduce a security vulnerability or fix one directly. The tests verify that an existing option called DisableAuth correctl…

9b849c17by Drake Thomsen+109−01 file
No security note in commit
Informational 21 AI analysisMessage 86 · Strong
BT btcsuitebtcd BitcoinNode implementations

rpcclient: make HTTP Basic Auth optional via DisableAuth

This change adds a new optional setting called DisableAuth to the btcd RPC client. When a user turns it on, the client will not send username/password credentials automatically. This is meant to let users connect to external Bitcoin API se…

New opt-in configuration flag that disables authentication headersDefault behavior unchanged; authentication still required unless user explicitly disables itNo validation added to ensure alternative authentication is present when DisableAuth is true
5d22b395by Drake Thomsen+25−131 file
No security note in commit
Informational 12 AI analysisMessage 83 · Strong
BT btcsuitebtcd BitcoinNode implementations

rpcclient: harden DisableAuth transport tests

This commit only changes tests and clarifies a public comment. It does not alter the actual authentication behavior of the btcd RPC client. The code already only suppresses the internally generated Basic auth header when DisableAuth is tru…

No functional code change; only tests and commentsComment clarification that DisableAuth only suppresses generated Basic auth, not caller-provided Authorization headersTests now cover WebSocket handshake, cookie bypass, and caller-provided headers
52d2fadeby Olaoluwa Osuntokun+186−1272 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
BT btcsuitebtcd BitcoinNode implementations

rpcclient: wrap DisableAuth tests to 80 columns

This commit only reformats an existing test file. It wraps long lines to 80 columns, splits nested code into separate variables, and adjusts whitespace. No production code was changed, and no security behavior is altered.

fe84a0e1by Olaoluwa Osuntokun+83−521 file
No security note in commit
Low 48 AI analysisMessage 78 · Adequate
BT btcsuitebtcd BitcoinNode implementations

v2transport: restore responder handshake progress

This commit fixes a deadlock risk in btcd's new Bitcoin v2 transport handshake. Previously, the responder waited until it had received the initiator's full 64-byte key before doing any work, which could cause both sides to sit waiting for …

BIP324 handshake deadlock avoidanceCPU admission lease split to prevent resource exhaustion / lock holding across network I/OResponder now sends key material before full initiator key is received
09717871by Olaoluwa Osuntokun+231−862 files
No security note in commit
Low 41 AI analysisMessage 78 · Adequate
BT btcsuitebtcd BitcoinNode implementations

psbt: decode base64 packets incrementally

This commit changes how btcd reads base64-encoded PSBT (Partially Signed Bitcoin Transaction) data. Previously, the code read the entire base64 input into memory before decoding, and it wrongly applied the Bitcoin P2P wire message size lim…

Removes an incorrect size bound that caused base64 PSBT parsing to reject valid large packets (denial-of-service / interoperability issue)Switches from full in-memory base64 decode to incremental streaming, reducing peak memory for large base64 PSBTsRetains strict base64 alphabet checks and rejects trailing data after the PSBT packet
e333817dby Olaoluwa Osuntokun+129−602 files
No security note in commit
Moderate 60 AI analysisMessage 68 · Adequate
BT btcsuitebtcd BitcoinNode implementations

psbt: reject nil taproot pointer fields

This commit fixes a class of crash bugs in btcd's PSBT (Partially Signed Bitcoin Transaction) handling for Taproot transactions. Previously, if certain Taproot-related lists contained a nil (empty) entry, the code would panic when trying t…

nil-pointer dereference / panic prevention in Taproot PSBT finalizernil-pointer dereference / panic prevention in PSBT serializationinput validation added before sort.Slice and pointer dereference
1ead5ba3by Olaoluwa Osuntokun+171−165 files
Vendor flagged security relevance
Moderate 50 AI analysisMessage 78 · Adequate
BT btcsuitebtcd BitcoinNode implementations

peer: close late connections after disconnect

This commit fixes a race condition in btcd's peer networking code. If a peer was told to disconnect before a network socket had been attached, the socket could later be attached but never closed, leaking the connection. The fix adds a lock…

Connection leak / resource exhaustion due to missing close pathRace condition between connection association and disconnectionAtomic flag published before connection state is fully initialized
617ebe2bby Boris Nagaev+111−72 files
No security note in commit
Moderate 64 AI analysisMessage 73 · Adequate
BT btcsuitebtcd BitcoinNode implementations

psbt: avoid blocking reads and unbounded allocations in NewFromRawBytes

This commit fixes two problems in the way btcd reads Partially Signed Bitcoin Transactions (PSBTs). First, the parser could hang forever when reading from a network connection or pipe because it tried to read one extra byte to check for le…

Denial-of-service via blocking read on open stream (potential infinite hang)Denial-of-service via unbounded memory allocation on base64 input before validationStrict parsing hardening for PSBT base64 decoding
2ddf73f3by Olaoluwa Osuntokun+87−283 files
Vendor flagged security relevance
Moderate 58 AI analysisMessage 45 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: reject trailing final witness data

This change tightens how a Bitcoin PSBT library extracts final witness data when turning a partially-signed transaction into a finished transaction. Previously, extra bytes after the declared witness stack were silently ignored. Now the li…

strict parsing of serialized witness datarejection of trailing bytes in PSBT final script witnesspotential malleability / ambiguity reduction in PSBT extraction
468853e4by Boris Nagaev+13−91 file
No security note in commit
Low 38 AI analysisMessage 55 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: test final witness trailing data rejection

This commit adds a new test to the btcd PSBT (Partially Signed Bitcoin Transaction) library. The test checks that when extracting a final Bitcoin transaction from a PSBT, the library rejects a final witness value that has extra trailing by…

Strict parsing of final witness data to reject malformed/trailing bytesPrevents creation of transactions with non-standard witness encodingTest-only commit implies behavior enforcement elsewhere in the codebase
c87168ebby Boris Nagaev+26−01 file
No security note in commit
Moderate 64 AI analysisMessage 88 · Strong
BT btcsuitebtcd BitcoinNode implementations

btcec/schnorr: reject s >= group order in ParseSignature

This commit fixes a bug in how btcd parses Schnorr (BIP-340) digital signatures. The code was supposed to reject signatures whose 's' number was larger than the allowed group order, but instead it silently wrapped the value around (modulo …

BIP-340 signature parsing non-compliancesilent modulo reduction of s componentsignature malleability risk from non-canonical encodings
83d081a5by Lrifton92+42−12 files
Vendor flagged security relevance
Low 25 AI analysisMessage 80 · Strong
BT btcsuitebtcd BitcoinNode implementations

psbt: compact witness utxo scripts after parsing

This commit fixes a memory-usage issue, not a security vulnerability. When reading PSBT data, the code was keeping a pointer to a large 4 MiB internal memory block even for tiny scripts. The patch copies the small script into its own compa…

memory retention reductionno input validation changeno cryptographic change
b0ab66feby Boris Nagaev+10−12 files
No security note in commit
Informational 12 AI analysisMessage 55 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: add strict tx value regression test

This commit only adds a new test file. It does not change any production code. The test checks that the PSBT parser rejects transaction fields that have extra trailing bytes. Because no actual parser logic is modified, this commit by itsel…

Regression test added for strict parsing of transaction-valued PSBT fieldsNo production code changes
0293b6e0by Boris Nagaev+117−01 file
No security note in commit
Informational 12 AI analysisMessage 55 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: test witness utxo txout strict parsing

This commit only adds new test code for the PSBT (Partially Signed Bitcoin Transaction) package. It does not change any production code. The tests verify that WitnessUtxo fields are parsed strictly and correctly, including rejecting extra …

Strict parsing tests for WitnessUtxo transaction outputsRejection of trailing data after serialized txOutCorrect handling of multi-byte CompactSize script lengths
40ad9117by Boris Nagaev+79−01 file
No security note in commit
Informational 12 AI analysisMessage 60 · Adequate
BT btcsuitebtcd BitcoinNode implementations

musig2: test partial signature short reads

This commit only adds a new unit test that checks whether the MuSig2 partial signature decoder correctly rejects empty or too-short inputs. It does not change any production code, so by itself it cannot introduce or fix a security vulnerab…

4a7a9feaby Boris Nagaev+21−01 file
No security note in commit
Low 36 AI analysisMessage 45 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: add reader exhaustion helper

This commit adds a new helper function to the PSBT (Partially Signed Bitcoin Transaction) package that checks whether a data reader still has leftover bytes after parsing. Leftover bytes could mean a malformed or malicious PSBT file was no…

New validation helper for trailing/leftover data in a binary parserLocated in PSBT parsing utilities, an area where malformed input handling mattersNo caller added in this commit, so defensive effect is not yet active
da5792a8by Boris Nagaev+25−01 file
No security note in commit
Low 28 AI analysisMessage 55 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: test strict base64 packet decoding

This commit only adds new test code to check that the PSBT (Partially Signed Bitcoin Transaction) parser rejects malformed base64 input such as whitespace, bad padding, or extra bytes. It does not change the actual parser logic. The tests …

strict base64 decoding validationPSBT packet format hardeningrejection of non-canonical base64 input
0a33cceaby Boris Nagaev+56−01 file
No security note in commit
Low 46 AI analysisMessage 45 · Thin
BT btcsuitebtcd BitcoinNode implementations

psbt: parse witness utxo txouts strictly

This commit tightens how a Bitcoin-related library reads transaction outputs stored inside PSBT (Partially Signed Bitcoin Transaction) data. Previously, the code read the output value and script in a loose, hand-rolled way that ignored ext…

Strict canonical parsing of serialized transaction outputsRemoval of hand-rolled length handling that ignored script length byteAddition of full-consumption check on parsed witness UTXO data
b4c5cf16by Boris Nagaev+11−91 file
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.

AI review queuedserver: fix linter issueby Oliver Gugger · 9dfa926f · May 15, 2026 · 1 fileMessage 28 · OpaqueTriage 0Details
Commit message · Oliver Gugger

server: fix linter issue

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Security candidatepsbt: move to top-level module, use v2, remove btcutil depby Oliver Gugger · c0db6dfa · May 15, 2026 · 22 filesMessage 50 · ThinInformational 15Details
Commit message · Oliver Gugger

psbt: move to top-level module, use v2, remove btcutil dep

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarycryptography-sensitive pathsigning or wallet pathboot or update path
AI analysis · Informational 15/100

This commit is a routine code reorganization: it moves the PSBT (Partially Signed Bitcoin Transaction) package from a nested location under btcutil to a top-level module, updates internal import paths to use v2 module versions, and removes a dependency on btcutil. The diff shows files being deleted from btcutil/psbt and equivalent files being added under psbt/. There is no indication of a security bug fix, vulnerability patch, or behavior change intended to address an exploit.

Security candidatebtcutil: remove circular dependency, use v2by Oliver Gugger · e9ec6ec5 · May 15, 2026 · 52 filesMessage 45 · ThinInformational 18Details
Commit message · Oliver Gugger

btcutil: remove circular dependency, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathboot or update path
AI analysis · Informational 18/100

This commit is a routine internal restructuring of the btcd project's Go module layout. It switches the btcutil package and its subpackages from the old module path to a new 'v2' path, and updates imports throughout the code to point at newly split-out submodules (address, chaincfg, chainhash, txscript, wire). It also copies one small helper function (HashMerkleBranches) into the bloom package to avoid depending on the blockchain package. There is no indication in the commit of any security bug being fixed.

AI review queuedtxscript: turn into own module, use v2by Oliver Gugger · 55a463a3 · May 15, 2026 · 26 filesMessage 45 · ThinTriage 12Details
Commit message · Oliver Gugger

txscript: turn into own module, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI review queuedaddress: move to top-level module, use v2by Oliver Gugger · 3000c455 · May 15, 2026 · 25 filesMessage 45 · ThinTriage 0Details
Commit message · Oliver Gugger

address: move to top-level module, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: unusually broad change
AI review queuedwire: make own module, use v2by Oliver Gugger · 039baa25 · May 15, 2026 · 32 filesMessage 45 · ThinTriage 0Details
Commit message · Oliver Gugger

wire: make own module, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: unusually broad change
Lower-prioritychaincfg: add own module, use v2by Oliver Gugger · bd65d6d6 · May 15, 2026 · 9 filesMessage 45 · ThinTriage 0Details
Commit message · Oliver Gugger

chaincfg: add own module, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Security candidatebtcec: use new chainhash/v2 moduleby Oliver Gugger · bf8006d8 · May 15, 2026 · 8 filesMessage 45 · ThinInformational 18Details
Commit message · Oliver Gugger

btcec: use new chainhash/v2 module

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 18/100

This commit is a routine dependency update inside the btcd cryptocurrency project. It changes the btcec cryptographic package to use a newer version (v2) of the internal chainhash module instead of the older v1 path. No security bug is fixed or introduced in the visible code; it is purely an import-path and module-reference change.

Lower-prioritychainhash: move to top-level module, use v2by Oliver Gugger · 28c77e7d · May 15, 2026 · 8 filesMessage 45 · ThinTriage 0Details
Commit message · Oliver Gugger

chainhash: move to top-level module, use v2

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedmulti: appease go 1.26 vet for non-const format + goroutine Fatalfby Olaoluwa Osuntokun · 62cc0a6b · May 15, 2026 · 2 filesMessage 83 · StrongTriage 0Details
Commit message · Olaoluwa Osuntokun

multi: appease go 1.26 vet for non-const format + goroutine Fatalf

In this commit, we fix two go vet errors that go 1.26 now treats as
hard failures during test compilation.

In btcjson/help.go, the final result row of a complex help description
was emitted via fmt.Fprintf with a non-constant format string (the
result text could contain '%' chars). Switch to fmt.Fprint, since
there are no format args here anyway.

In btcec/schnorr/musig2/musig2_test.go, the nonce-registration loop
ran inside a goroutine and called t.Fatalf on failure. Fatalf only
exits the calling goroutine, so the test goroutine would keep running
with stale state. Use t.Errorf + return so the failure is recorded
correctly and the goroutine exits cleanly.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI review queuedmulti: bump Go toolchain to 1.25, build CI with 1.26.3by Olaoluwa Osuntokun · 1863073c · May 15, 2026 · 11 filesMessage 81 · StrongTriage 12Details
Commit message · Olaoluwa Osuntokun

multi: bump Go toolchain to 1.25, build CI with 1.26.3

In this commit, we update every in-tree go.mod to declare go 1.25 and
have CI build with 1.26.3 (Dockerfile uses the golang:1.26-alpine base).
Docs that mention the minimum required Go version are aligned with the
new floor as well.

Fixes #2527, which flagged the README.md / go.mod version mismatch (the
README claimed 1.22 while the root + v2transport go.mod files already
required 1.23.2).

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
Security candidatemulti: bump in-tree go.mod files to newly tagged submodule versionsby Olaoluwa Osuntokun · e59dfeb9 · May 15, 2026 · 10 filesMessage 73 · AdequateInformational 15Details
Commit message · Olaoluwa Osuntokun

multi: bump in-tree go.mod files to newly tagged submodule versions

In this commit, we pin every in-tree go.mod to the freshly cut submodule
tags ahead of a btcd point release: btcec/v2.4.0, btcutil/v1.2.0,
btcutil/psbt/v1.2.0, and chaincfg/chainhash/v1.2.0. The btcec bump also
drags secp256k1 up to v4.4.0 (and blake256 to v1.1.0 transitively) for
every module that imports btcec.

v2transport stays at v1.0.1 since no v2transport code changed since the
last tag, but its go.mod is bumped here so the workspace resolves to a
consistent set of internal deps.

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

This commit only updates version numbers in Go package files (go.mod and go.sum) to prepare for a new release. It does not change any actual program code, fix a bug, or alter behavior. There is no direct security issue visible in this change.

Lower-prioritygithub: cross-compile android/arm64 in CIby Olaoluwa Osuntokun · 2c056924 · May 14, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Olaoluwa Osuntokun

github: cross-compile android/arm64 in CI

Add a build step to the existing Build job that cross-compiles both the
top-level module and btcutil for GOOS=android GOARCH=arm64.

This catches regressions in the android-specific build path (e.g. the
net_android.go wrapper around anet.InterfaceAddrs) without needing an
emulator or NDK toolchain - android/arm64 builds without cgo.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
Lower-prioritybtcutil: rename interfaceAddrs to InterfaceAddrs in appengine variantby Olaoluwa Osuntokun · 73af4d6f · May 14, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Olaoluwa Osuntokun

btcutil: rename interfaceAddrs to InterfaceAddrs in appengine variant

The previous commit exported the interfaceAddrs helper in net.go but
missed the parallel definition in net_noop.go (build tag: appengine),
which left builds with -tags appengine broken with:

./certgen.go:79:16: undefined: InterfaceAddrs

Rename the appengine no-op variant to match, restoring the appengine
build.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Lower-prioritymain: use btcutil.InterfaceAddrby Calvin Kim · 589d7c0a · May 14, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Calvin Kim

main: use btcutil.InterfaceAddr

We use this as the net.InterfaceAddr is broken from android 11.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI review queuedbtcutil: export interfaceAddrby Calvin Kim · c90e88ee · May 14, 2026 · 2 filesMessage 35 · OpaqueTriage 0Details
Commit message · Calvin Kim

btcutil: export interfaceAddr

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
Lower-prioritybtcutil: use anet instead of net for android buildsby Calvin Kim · 153bf6d8 · May 14, 2026 · 4 filesMessage 85 · StrongTriage 0Details
Commit message · Calvin Kim

btcutil: use anet instead of net for android builds

Golang's net package has been broken for android since android 11
and the node will not be able to call net.InterfaceAddr() without
root.

For android builds, we use anet so that the btcd node can be used
without root.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-prioritymain: update go.mod and go.sumby Calvin Kim · 0f603fef · May 14, 2026 · 2 filesMessage 80 · StrongTriage 0Details
Commit message · Calvin Kim

main: update go.mod and go.sum

We update go.mod and go.sum to point to the local btcutil library.

This commit should be updated later on so that we do it right.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Security candidaterpcclient: compute httpURL once at construction timeby Jacob Schuler · 807cbce3 · May 14, 2026 · 2 filesMessage 88 · StrongLow 29Details
Commit message · Jacob Schuler

rpcclient: compute httpURL once at construction time

httpURL was being recomputed on every JSON-RPC POST. It went through
ParseAddressString to discriminate Unix sockets from TCP, which
called net.ResolveTCPAddr and triggered a DNS lookup whose result
was thrown away.

Both inputs (config.Host and config.DisableTLS) are immutable after
New, so the URL is constant for the life of the Client. Compute it
once and store it on the Client, mirroring the parsedDialAddr cache
already in newHTTPClient.

The httpURL method now uses HasPrefix and runs exactly once per
Client. Drop its (string, error) signature — with the resolve gone
nothing can fail. Add table coverage for the URL strings, plus a
wiring test that catches refactors of New silently dropping the
assignment to Client.httpURL.

88/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Low 29/100

This change is a performance and reliability fix, not a typical security patch. The Bitcoin RPC client was rebuilding the server URL on every request, and that rebuild triggered an unnecessary DNS lookup whose result was discarded. The patch computes the URL once when the client is created and reuses it. That removes a source of DNS failures, request delays, and potential information leakage to DNS resolvers, but it does not by itself fix an exploitable vulnerability.

Lower-priorityserver: document peerLifecycle channel buffer sizingby Olaoluwa Osuntokun · f2a24d41 · May 12, 2026 · 1 fileMessage 85 · StrongTriage 0Details
Commit message · Olaoluwa Osuntokun

server: document peerLifecycle channel buffer sizing

The peerLifecycle channel is sized cfg.MaxPeers*2 because each
peer can emit two lifecycle events (peerAdd followed by peerDone).
Without an inline comment a future reader could "simplify" the
factor to cfg.MaxPeers and tighten back-pressure under normal
connect/disconnect churn, causing peerLifecycleHandler goroutines
to block.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Lower-priorityserver: gate handleDonePeerMsg on peerAdded, not VerAckReceivedby Olaoluwa Osuntokun · e6f589e5 · May 12, 2026 · 1 fileMessage 73 · AdequateTriage 0Details
Commit message · Olaoluwa Osuntokun

server: gate handleDonePeerMsg on peerAdded, not VerAckReceived

peer.processRemoteVerAckMsg sets verAckReceived=true *before* it
invokes the OnVerAck listener that closes verAckCh. If the peer
disconnects in that window, the peerLifecycleHandler select may
pick Peer.Done() over verAckCh and skip the peerAdd send -- yet
VerAckReceived() still returns true. handleDonePeerMsg would then
call syncManager.DonePeer for a peer that was never NewPeer'd
(sync manager logs a warning and discards).

Add an explicit peerAdded atomic.Bool on serverPeer. Set it in
peerLifecycleHandler after peerAdd has been enqueued. Gate the
syncManager.DonePeer + orphan eviction in handleDonePeerMsg on
peerAdded.Load() so those side effects only fire for peers that
were actually registered.

This tightens the "peerAdd precedes peerDone, or peerAdd is
skipped entirely" invariant from this PR into something explicit
rather than something derived from a flag that races OnVerAck.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedserver: guard OnVerAck with sync.Onceby Olaoluwa Osuntokun · f1b95f8f · May 12, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Olaoluwa Osuntokun

server: guard OnVerAck with sync.Once

The prior select/default+close() guard on verAckCh is correct only
under the invariant that OnVerAck is invoked from a single goroutine
(peer.processRemoteVerAckMsg on the input handler). The two steps
are not atomic: any future change that invokes listeners off the
input goroutine would let two concurrent callers both observe
default and panic on double-close.

Replace the guard with sync.Once. This makes the close-once
contract obviously correct rather than correct-by-distant-invariant
and drops the dead "called more than once" log path.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
Lower-prioritybtcutil: add new AddressPayToAnchor addr typeby Olaoluwa Osuntokun · 939b9394 · May 12, 2026 · 6 filesMessage 45 · ThinTriage 0Details
Commit message · Olaoluwa Osuntokun

btcutil: add new AddressPayToAnchor addr type

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-prioritytxscript: recognize P2A scripts in ParsePkScriptby Olaoluwa Osuntokun · f26e6bb7 · May 12, 2026 · 1 fileMessage 45 · ThinTriage 0Details
Commit message · Olaoluwa Osuntokun

txscript: recognize P2A scripts in ParsePkScript

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Lower-priorityrpctest: add new e2e test for new P2A behaviorby Olaoluwa Osuntokun · de921aee · May 12, 2026 · 1 fileMessage 70 · AdequateTriage 0Details
Commit message · Olaoluwa Osuntokun

rpctest: add new e2e test for new P2A behavior

We make sure it'll be accepted into the mempool, and can be spent
without a witness.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification