Skip to content

respend: the host's deliberate competitor for a transaction a broadcaster accepted that never mines (bsv-stack-lean #67; the tracker rule) - #16

Merged
Calgooon merged 3 commits into
mainfrom
l2/L2-67
Oct 12, 2026
Merged

Calgooon merged 3 commits into
mainfrom
l2/L2-67

Conversation

@Calgooon

Copy link
Copy Markdown
Contributor

Under the tracker rule no host path retires a transaction a broadcaster took, and the toolbox writes no word on a broadcaster's word; a transaction that can never mine therefore kept its inputs locked and its change selectable, re-posted every 64 minutes without end (bsv-stack-lean #67, left by the 0.7.3 lane). The exit the rule allows is the host's own competitor: respend <txid> builds a replacement spending exactly the phantom's inputs to one freshly derived wallet change output at the wallet's fee policy, records it durably, and posts it through the same send machinery as every send (hint-tracked, retained for the cadence); it refuses while any status source still holds the phantom, when a lookup cannot complete, when the phantom is proven or already has a competitor's proof, or when an input is not ours. No hand writes a status: the existing checked competitor-proof path alone writes doubleSpend on the phantom when the replacement mines, and a bounded reconciliation then assigns the locked inputs to the replacement. The reference exposes no such act at the pin; the name is the charter's.

The witness (tests/respend_witness.rs): red at 0.7.3 (no act; a holding source), green with it: the phantom's inputs released only by the replacement's checked proof; controls for a holding source, an unavailable source, foreign inputs, an already proven phantom and a proof off our headers. One fix beside it: the aggregate broadcast memory markers now ask the current status (22515b4).

Gate (the lane, then the captain in a detached worktree): fmt, clippy --all-targets --all-features -D warnings, the suite 364 passed, the vectors. CHANGELOG under Unreleased; no version bump (0.7.4 carries it with the re-pin to bsv-rs 0.4.5). The age-of-silence hold on unproven change is a policy question for the owner, stated in bsv-stack-lean docs/p0/l2-67.md, implemented nowhere.

🤖 Generated with Claude Code

@Calgooon
Calgooon merged commit 6fce90b into main Oct 12, 2026
6 checks passed
@Calgooon
Calgooon deleted the l2/L2-67 branch October 12, 2026 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant