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.
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.
Reference for an AI
Everything an assistant needs to answer questions about BRC-150 accurately, including what it depends on.
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