1Sat Provenance Remittance for Basket `1sat`
Proving an item is the genuine one, and not a copy of it, means tracing it back to where it began. This packages that trail so it can be checked without asking any service for help.
Reference for an AI
Everything an assistant needs to answer questions about BRC-150 accurately, including what it depends on.
Summary
- Why
- Display labels claiming a collectible's origin are just attached text and can be forged, so senders and receivers need a way to prove the link between a current holding and its true point of creation without relying on a possibly-wrong external indexer.
- What
- BRC-150 defines a verifiable proof package, called provenance, that ties a 1-satoshi Bitcoin output to the original inscription it descended from, carried inside the customInstructions field used by the `1sat` basket.
- How
- A sender builds a package containing the outpoint chain from current tip back to origin plus a BEEF or AtomicBEEF transaction bundle proving each spend, and a receiver independently checks the chain, the spends, the 1-satoshi values, and the origin's inscription envelope before trusting any origin label.
What this lets you do
- Attach a verifiable origin proof to a 1-satoshi output
- Verify a received tip actually descends from a claimed origin without an indexer
- Detect forged or unverifiable origin tags before trusting them
- Bundle BEEF or AtomicBEEF transaction evidence covering the whole outpoint chain
- Reject truncated or partial proofs instead of accepting weak evidence
Written by claude-sonnet-5 from the specification text. Where the two differ, the original is correct.
The specification
Abstract
This BRC defines the provenance remittance carried in BRC-37 customInstructions for outputs in the companion basket profile 1sat (BRC-147). It specifies an offline-verifiable package that binds a current 1-sat outpoint (tip) to a 1Sat Ordinals origin, using BEEF or AtomicBEEF plus local verification of the first ord inscription envelope.
Together with BRC-147, this enables interoperable 1Sat hold/transfer while preventing forgeable origin: tags from being treated as proof. Verification does not require a global ordinals indexer.
Motivation
BRC-147 documents how wallets hold and transfer 1Sat tips and how they attach display metadata. Those metadata fields remain claims: a malicious or buggy sender can attach another inscription’s origin to an unrelated 1-sat UTXO. Indexer-only checks help UX but introduce a trust dependency when the indexer is wrong, lagging, or unavailable.
BRC-62 / BRC-95 already provide SPV transaction ancestry packages. This BRC applies those formats to the 1Sat tip→origin path and adds the local script rule that the origin locking script contains a valid first ord envelope (1Sat Ordinals, aligned with BRC-67 SPV principles).
Specification
Scope
This remittance applies when:
- The output is associated with basket
1satas defined in BRC-147 (after BRC-46 name normalization), and - The tip being transferred or internalized is a 1-satoshi output.
Out of scope: OrdLock marketplace contracts, BSV-20/21, minting APIs, redefinition of 1Sat origin theory, and basket naming/tags (see BRC-147).
Transport
Provenance is embedded as the provenance field of the basket profile’s customInstructions JSON object (BRC-37). Display fields (origin, name, app) remain as defined by BRC-147 and MUST NOT be treated as proven unless this remittance verifies.
Wallets that do not implement this BRC MUST still store and forward unknown customInstructions unchanged (BRC-37).
Provenance object (v2)
{
"v": 2,
"origin": "<txid_vout>",
"tip": "<txid_vout>",
"path": ["<tip>", "…", "<origin>"],
"beefB64": "<base64>",
"contentType": "<optional string>"
}
| Field | Type | Requirement | Description |
|---|---|---|---|
v | number | MUST | Schema version. This BRC defines 2. |
origin | string | MUST | Inscription origin outpoint in underscore form txid_vout. |
tip | string | MUST | Current outpoint being proven, underscore form. MUST equal path[0]. |
path | string[] | MUST | Ordered outpoints tip → … → origin, inclusive. Length ≥ 1. |
beefB64 | string | MUST | Base64 encoding of AtomicBEEF (BRC-95) preferred, rooted at the tip transaction id; or BEEF (BRC-62) covering all transactions required to validate path. |
contentType | string | OPTIONAL | Hint from the origin ord envelope content-type field when known. |
Outpoint normalization (dot ↔ underscore) follows BRC-147.
Non-conforming versions
Provenance objects with v !== 2, or path-only packages without beefB64, are not defined by this BRC and MUST NOT be considered conforming remittances. Implementations MAY use private fallbacks for local UX; they MUST NOT advertise those fallbacks as this BRC.
Sender requirements
A conforming sender transferring a 1sat tip under BRC-147 SHOULD:
- Determine the true
originof the tip (indexer-assisted discovery is allowed for building the package). - Construct
pathtip→origin such that each consecutive pair with different transaction ids is related by a spend of the parent outpoint as an input to the child transaction. - Assemble
beefB64covering every transaction id appearing inpath. - Prefer AtomicBEEF (BRC-95) whose subject txid is the tip transaction.
- Self-verify using the Receiver rules below before broadcast.
- If a valid v2 package cannot be produced, the sender MUST NOT claim a verified origin via tags alone. The sender MAY omit
provenance; receivers MUST then treat identity as unverified per BRC-147.
Senders MUST NOT embed full inscription content solely for this remittance; envelope presence at origin is sufficient.
Receiver requirements
Given a candidate tip outpoint T and customInstructions.provenance with v === 2, a conforming receiver MUST verify as follows. On any failure, the receiver MUST treat origin identity as unproven and MUST NOT adopt sender name / app / origin: tags as authoritative for that tip (BRC-147 claims rule).
-
Parse — Decode
beefB64as BEEF (BRC-62) or AtomicBEEF (BRC-95). Failure → unproven. -
Structure — The BEEF MUST pass structural validation (e.g.
Beef.verifyValid). Use of txid-only entries (BRC-96) is allowed only when the receiver already trusts those transactions by other means. -
Atomic subject (when AtomicBEEF) — If the bytes are AtomicBEEF, the subject txid MUST equal the tip’s transaction id.
-
Tip binding —
provenance.tipandpath[0]MUST equal tip outpointTafter normalization. -
Origin binding —
path[path.length - 1]MUST equalprovenance.origin. -
Ancestry — For each consecutive pair
(child, parent)inpathwith different transaction ids, the child transaction in the BEEF MUST spendparentas an input. -
One-sat — For each outpoint in
pathpresent in the BEEF with a known satoshi value, that value MUST be1. -
Inscription — The locking script of
originMUST contain a valid firstordenvelope as defined by 1Sat Ordinals:OP_FALSE OP_IF <"ord"> … OP_ENDIFon a 1-sat output. Subsequent envelopes on the same sat MUST be ignored for origin identity (1Sat rule).
-
Headers (RECOMMENDED) — Receivers SHOULD confirm BEEF merkle roots against a header source / ChainTracker per BRC-67 when available.
On success, the receiver MAY treat provenance.origin as the proven origin for tip T and MAY use indexer metadata keyed by that origin for display.
Relationship to BRC-147
| Concern | Defined by |
|---|---|
Basket name 1sat, tags, display customInstructions, createAction / internalizeAction flows | BRC-147 |
provenance object schema + verify/build rules | This BRC |
Whether unproven tips may be shown with sender name/app | BRC-147 (claims); this BRC (when proof fails) |
Compatibility
- This BRC does not alter BRC-62/95 encodings; it only constrains how they are used inside
customInstructions.provenance. - Deep histories may produce large remittances. Implementations SHOULD prefer AtomicBEEF and MAY refuse to embed packages above an implementation-defined size, falling back to “unproven” rather than truncated proofs.
- Partial BEEF (structurally valid but missing a path transaction) MUST fail verification.
Security considerations
- Tag spoofing — Without this remittance,
origin:tags are forgeable. Receivers that skip verification reintroduce the attack. - Indexer divergence — Indexers may lag or err. A verified remittance is authoritative for tip↔origin binding; indexers remain useful for discovery and media URLs.
- Burn / re-origin — If a sat is packed into a multi-sat output, 1Sat origin tracking ends. Remittances MUST NOT invent a continuous path across a burn.
- Oversized remittance — Truncating
pathorbeefB64to fit a size budget invalidates the proof; omit provenance instead. - Unspent status — This remittance proves tip→origin identity. Proving the tip remains unspent requires the same network / UTXO checks as accepting any BSV payment.
Implementations
- HandCash Desktop (reference): builds and verifies provenance v2 on collectable send / list.
Source:src/wallet/oneSatProvenance.ts,src/wallet/oneSatInscription.tsin HandCash/HANDCASH-DESKTOP.
References
- BRC-147 — 1Sat Ordinals Basket Profile for BRC-46 / BRC-100
- 1Sat Ordinals protocol — https://docs.1satordinals.com
- BRC-37 — Basket and Custom Instructions Extension for Bitcoin Outpoints
- BRC-46 — Wallet Transaction Output Tracking (Output Baskets)
- BRC-62 — Background Evaluation Extended Format (BEEF) Transactions
- BRC-67 — Simplified Payment Verification
- BRC-95 — Atomic BEEF Transactions
- BRC-96 — BEEF V2 Txid Only Extension
- BRC-100 — Unified Open BSV Wallet-to-Application Interface