Node trust and purchase safety
The wallet checks content-addressed state witnesses against the block supplied by the node. This verifies the witness’s internal consistency. It is not independent header-chain, proof-of-work or finality verification. Balance, nonce, transaction inclusion and discovery answers still depend on the chosen operator. Agreement between two URLs is not proof of independent operators.
Purchases through any node that is not on this computer require an explicit acknowledgement on each purchase review that you trust the displayed parent and child operators. A stored cookie for such a node does not change this. This is operator-trusted mode, not independent consensus verification. A dishonest or stale operator can cause loss of the irreversible parent payment. Pairing authenticates access; it does not establish consensus. Paired/own-node mode also relies on the operators’ honesty. The current parent-to-child lookup is operator-supplied JSON, not an authenticated commitment. State proofs, stable-tip reads, offer rechecks and price protection remain required in public mode; acknowledgement never bypasses them. No trust acknowledgement is stored or imported from an order request.
Saved signed transactions remain recoverable after all submission errors, including HTTP refusals. A refusal describes the latest delivery, not whether an earlier delivery was admitted. Exact rebroadcast reuses the account nonce and CID. A newly signed payment at a later nonce is a different payment and may pay twice. Pending transfers prompt for a separate acknowledgement before signing another payment.
Transactions → Increase fee signs an ordinary transfer replacement with the same sender, recipient, amount, chain and nonce, and a strictly higher fee. The node’s mempool may replace the lower-fee attempt; the original may still confirm first. Both signed attempts are saved before submission and retained on refusal or uncertainty. Cross-chain deposits and purchase receipts are not reinterpreted as transfers. Withdrawal replacement remains in purchase recovery. Transaction details show the full IDs, terms and saved signed payload; displayed confirmations are node-reported, not independently established finality.
Depth-based completion moves recovery payloads into local confirmed archives; it does not erase them. A node’s inclusion answer can be wrong or reorged. Manual dismissal remains a deliberate loss of local recovery data, not cancellation of a signed transaction. Seed-only restoration cannot recover these records without node-side discovery.
A buy request names the exact sell deposits to buy; the wallet does not choose offers or apply a price rule. Each named deposit must be proven in the child node’s current state with exactly the stated amount and have no receipt on the parent chain, or the whole request is refused before review and again before signing. All of them are paid for in one transaction, which the parent chain rejects entirely if any one already has a receipt. The request and the page that produced it are untrusted: they select, the wallet verifies. Always review the displayed terms.
See network binding for same-path replay across separate networks. No protocol change or expiry field is introduced by these wallet changes.
Child state is read at the child node’s own tip, not at the block its parent last committed. A child advances on work that meets its own target without meeting its parent’s, so between parent blocks its tip is ahead of that block, usually by many blocks; requiring the two to be equal would refuse almost every read. The wallet instead requires the child node’s chain to contain the parent-committed block (the block it serves by that hash is the one it has at that height). This shows the two nodes agree on the child’s history up to that block. It is not proof of either node, and says nothing about the child blocks after it.
Source: selfhold-wallet/docs/node-trust.md at fce4540d077f