Basket and Custom Instructions Extension for Bitcoin Outpoints
Ty Everett ([email protected])
Abstract
This document defines a minimal extension to BRC-36 for associating a Bitcoin outpoint with a wallet basket and, optionally, with custom instructions whose meaning is defined by that basket. The purpose of this extension is to support interoperable wallet-managed output organization without standardizing wallet-internal classification systems or forcing a universal instruction schema.
Motivation
Modern wallets do more than merely store outputs. They organize outputs into permissioned collections, often called baskets, and attach application-relevant metadata needed to later interpret or spend those outputs. This pattern is reflected in BRC-46, BRC-100, and current Wallet Toolbox implementations.
The original version of BRC-37 used a broad spendingInstructions concept whose structure was left entirely to wallet software. That approach was too vague to provide meaningful interoperability. This revision keeps the extension intentionally small and precise: it standardizes basket association and optional custom instructions, while leaving basket-specific semantics to the basket itself and the higher-layer protocols that use it.
Specification
Extended Object
A BRC-37 object is a BRC-36 object extended with the following fields:
basket(required): The basket with which the outpoint is associated.customInstructions(optional): Basket-defined custom instructions associated with the outpoint.
Semantics
The
basketfield identifies the basket context in which the output is to be interpreted.The meaning of
customInstructions, when present, is determined by the basket named inbasket.BRC-37 does not define a universal schema for
customInstructions.BRC-37 does not require every basket to use
customInstructions.Software that understands a basket's semantics may interpret the corresponding
customInstructionsvalue. Software that does not understand that basket may still transport or store the value unchanged.
Scope Boundaries
BRC-37 does not standardize:
wallet-internal state such as
spendableorchangewallet-specific classification fields such as
purposeortypestorage relations such as spending links, sequence bookkeeping, or script offsets
a general schema for all possible spending metadata
Those concerns remain outside the scope of this specification unless separately standardized by another BRC.
Example Guidance
The following examples are non-normative and illustrative only.
Basket-Defined Meaning
A wallet may define a basket whose outputs all use the same customInstructions convention. Software that requests outputs from that basket can then interpret customInstructions according to the basket's documented semantics.
BRC-29 Example
In one possible implementation, outputs placed in the default basket may represent BRC-29 payments. In that context, customInstructions could contain a JSON-serialized object carrying payment-related context such as a sender identity key, derivation prefix, derivation suffix, or other information useful to the receiving wallet or application.
This example is illustrative only. BRC-37 does not require the default basket to behave this way, nor does it impose a universal JSON schema for such instructions.
Relationship to Other Standards
BRC-36 defines the portable base output object.
BRC-46 defines basket-oriented wallet behavior.
BRC-100 defines the current interoperable wallet interface through which basket-associated outputs are commonly exchanged.
Example
Implementation
Implementations of BRC-37 should adhere to the following guidelines:
Preserve unknown
customInstructionsvalues unchanged when transporting or storing BRC-37 objects.Define basket-specific semantics in the protocol or implementation documentation for that basket.
Avoid treating BRC-37 as a general container for arbitrary wallet-internal state.
Last updated
Was this helpful?

