Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 writesdoubleSpendon 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-leandocs/p0/l2-67.md, implemented nowhere.🤖 Generated with Claude Code