Format for Bitcoin Outpoints
Ty Everett ([email protected])
Abstract
This document specifies the canonical portable format for representing a Bitcoin outpoint together with the minimum data required for interoperable validation and use. The format is intentionally narrow: it standardizes the identity of the output, its value, its optional locking script, and the transaction-validity payload required to verify the creating transaction. This specification aligns with the output model used by BRC-100 and current Wallet Toolbox implementations.
Motivation
Outputs are the fundamental bearer objects of Bitcoin. They are also the units tracked, discovered, moved, and reinterpreted by modern wallet software. Historically, some implementations represented outputs together with BRC-8 transaction envelopes and optional mAPI responses. That representation is no longer normative for interoperable wallet behavior.
Current interoperable wallet systems use the BRC-62 / BRC-95 BEEF family for transaction-validity data, and use compact output objects centered on the outpoint itself. This document updates BRC-36 to reflect that reality while preserving its original purpose: defining a portable and implementation-neutral baseline format for Bitcoin outputs.
Specification
Canonical JSON Object
A BRC-36 outpoint object is a JSON object with the following fields:
outpoint(required): The canonical identifier for the output, encoded as an outpoint string in the form<txid>.<vout>.satoshis(required): The number of satoshis contained in the output.lockingScript(optional): The hex-encoded Bitcoin locking script for the output.tx(required): The transaction-validity payload for the creating transaction, encoded in BRC-95 Atomic BEEF format.
Semantics
The
outpointfield is the canonical identifier of the output. Implementations MAY derivetxidandvoutfrom this field for internal use, but they are not part of the canonical BRC-36 object.The
lockingScriptfield is optional because some contexts only require identification and proof of the output, while others additionally require the locking script bytes.The
txfield is required. A BRC-36 object is intended to be self-contained with respect to transaction validation data.The
txfield MUST encode an Atomic BEEF whose subject transaction is the transaction identified by thetxidcomponent of theoutpoint.The Atomic BEEF payload MUST contain sufficient data to validate the subject transaction according to the rules of the BEEF family of specifications.
Explicit Replacement of Historical Assumptions
The following historical representations are not normative for BRC-36:
BRC-8 transaction envelopes
rawTx,inputs,proof, andmapiResponsesas BRC-36 fieldsmAPI-era output-sharing formats
Implementations MAY continue to support such formats for historical compatibility, but interoperable BRC-36 exchange is defined only by the object specified in this document.
Scope Boundaries
BRC-36 standardizes portable output facts only. It does not standardize wallet-internal state such as:
spendability flags
change classification
wallet-specific purpose or type labels
storage-layer IDs or offsets
basket assignment
tags or labels
custom spending metadata
These concerns are either internal to a wallet or defined by other standards such as BRC-37, BRC-46, and BRC-100.
Binary Profile
In addition to the canonical JSON object, BRC-36 defines a canonical standalone binary representation for a single outpoint object. This binary profile is designed to be independently usable while remaining aligned with the serialization conventions employed by BRC-100.
Binary Field Order
The binary representation of a BRC-36 object consists of the following fields in order:
outpoint(Byte Array): The outpoint, encoded as 32 bytes of TXID followed by the output index.satoshis(VarInt): The number of satoshis in the output.lockingScript(VarInt Length + Byte Array): The locking script, if present. If absent, encode-1.tx(VarInt Length + Byte Array): The required Atomic BEEF payload.
Binary Encoding Rules
The
outpointfield MUST use the same byte-level representation employed by BRC-100 for output objects.The
satoshisfield MUST be encoded as a VarInt.If
lockingScriptis absent, its length field MUST be encoded as-1.The
txfield MUST be present and MUST contain a valid BRC-95 Atomic BEEF byte sequence.The binary profile carries exactly the same semantics as the canonical JSON form and MUST NOT introduce transport-only framing fields.
Mapping to BRC-100
This specification is intentionally aligned with the output model used by BRC-100:
outpointaligns directly with the BRC-100 output identifier.satoshisaligns directly with the BRC-100 output amount.lockingScript, when included, aligns directly with the optional script-return behavior in BRC-100listOutputs.txcorresponds to the transaction-validity payload returned in BRC-100 contexts that include full transaction data, except that BRC-36 standardizes a single-output portable object and requires the payload to be an Atomic BEEF associated with that output's creating transaction.
Example
JSON Example
Binary Layout Example
Implementation
Implementations of BRC-36 should adhere to the following guidelines:
Treat
outpointas the canonical identifier at the interoperability boundary.Include
lockingScriptwhenever the recipient is expected to inspect or evaluate the script.Ensure the
txpayload is a valid Atomic BEEF for the transaction that created the output.When other standards extend this object, preserve the semantics of the four base fields defined here.
Last updated
Was this helpful?

