security: harden Basis state, signing, and settlement boundaries - #12
Closed
a-shannon wants to merge 43 commits into
Closed
security: harden Basis state, signing, and settlement boundaries#12a-shannon wants to merge 43 commits into
a-shannon wants to merge 43 commits into
Conversation
Fail closed on partial generation state, expose validated roots only through the tracker actor, and hold a monotonic lease across signing and broadcast. Port the overlapping public tombstones from containment commit 2c85486 without importing its unrelated CLI and documentation changes.
kushti
pushed a commit
that referenced
this pull request
Aug 12, 2026
Author
|
Closing this draft. Follow-up fixes will be submitted as smaller, independently reviewable PRs against the current master branch. |
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.
Summary
This supersedes the original narrow aggregate-debt draft with the full reviewed
Basis remediation stack. The follow-up audit found that acceptance, persistent
state, legacy redemption, tracker publication, signing, and confirmation share
the same safety boundary and should not be merged as independent partial fixes.
The paired ChainCash contract-generation PR is
BetterMoneyLabs/chaincash#20.
This is hardening for the current testing-stage codebase. No fund loss is known
or claimed.
Findings addressed
of the issuer's projected cumulative liabilities;
progress could be advanced without confirmed-chain evidence;
reciprocal integrity/restart joins, allowing stale or mismatched roots to be
treated as authoritative;
authoritative empty snapshot;
bounded;
and trusted wallet-list JSON independently from the exact raw boxes supplied
to the prover;
inclusion, selected-chain ancestry, policy depth, freshness, or rollback;
reserve generations, while malformed or oversized v2 admission data and
output values needed fail-closed bounds.
Changes
Persistent state and publication
manifests, strict restart replay, and terminal quarantine on unknown durable
outcomes;
confirmed projection, chain evidence, policy identity, and rollback state;
negative fixtures;
updater exit or integrity failure.
Chain confirmation and service bounds
pinned node-v6 transaction Merkle semantics, full-block inclusion, linked
headers, selected-chain tips, depth/freshness policy, and durable reorg
rollback;
connect timeout, 15-second total timeout, and checked 2 MiB response cap;
preserve the previous authoritative snapshot.
Signing boundary
never serialized into a transaction artifact or sent to the node;
exactly to API id, value, ErgoTree, assets, registers, and height;
to that owner;
order, checked value arithmetic, post-sign context validation, broadcast
bytes, returned transaction id, and journal bytes are cross-bound.
Legacy retirement and dormant v2 foundation
HTTP 410; the obsolete CLI, TUI, actor commands, builders, and global reserve
AVL surface are removed;
BNS2/BRS2 state, Schnorr/claim primitives, and bounded manifest admission are
installed;
wallet signer, submitter, broadcaster, or public activation constructor.
Validation
Exact final tip:
9b7ebc74acf2b3880a18b29066a1f2ea9e04d6eb.basis_server: 192/192basis_storeon the unchanged reviewed integration parent: 253 passed,3 network tests ignored
cargo check: passpublication guards: pass
169211b9b59d12eb9b66ecb4fdb0d95699d194fathrough transient Cargo overrides;no local dependency path is added by this PR
The broader all-target check still reaches an unrelated existing benchmark
error where
secret_bytes()is called on[u8; 32]; that benchmark blob isbyte-identical on
masterand this branch.Boundaries and maintainer decisions
run was performed.
SPV or multi-source verifier.
the confirmation/retirement horizon.
to consume only the validated manifest and the exact bound reserve/funding
boxes.
decision; this PR does not silently rewrite them.
Suggested review order