Beersy
BRC-48

Pay to Push Drop

Attaching data to an output normally makes it unspendable, so the data and the ownership cannot travel together. This describes a script that carries arbitrary data and leaves the output spendable, letting a token hold its own details.

Ty Everett2 min read
dataOP_DROPpubkeyOP_CHECKSIGpushverifylock

Summary

Why
Existing ways of writing data into a Bitcoin transaction made that data permanently unspendable, so tokens could not carry metadata and still be transferred.
What
BRC-48 is a script template for building outputs that carry arbitrary data alongside a standard public-key lock, so the resulting UTXO () can represent a data-rich token and still be spent by its owner.
How
A developer pushes one or more data elements onto the stack, drops them with OP_DROP or OP_2DROP, then adds a public key and OP_CHECKSIG so the owner can later sign to transfer or spend the token.

What this lets you do

  • Attach arbitrary metadata to a spendable output
  • Represent a token as a single UTXO with at least one
  • Transfer token ownership with a normal signature
  • Model tokens as nodes in a graph across an
  • Build higher-order token systems without redefining the base lock

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-48 accurately, including what it depends on.

The specification

Abstract

This standard provides a script template that enables data-rich tokens on the Bitcoin SV blockchain, while still allowing for the representation of transfers of ownership. By pushing arbitrary data into stack elements and subsequently dropping them, followed by adding a simple P2PK lock, this script template allows for the creation of tokens with metadata, which can be exchanged on . This standard facilitates improved scalability by representing tokens as UTXOs, which can be easily modeled and used in graph structures.

Motivation

The need for this standard arises from the growing demand for data-rich tokens in the ecosystem. Current tokenization methods such as lack output spendability and representation of ownership, making them unsuitable for many use cases. This standard allows developers to push arbitrary data onto the stack, while still enabling ownership transfer with a simple P2PK lock. This feature facilitates improved scalability by representing tokens as UTXOs, which can be more easily modeled and used in graph structures. Use-cases for these tokens are numerous, ranging from deeds to cars to metadata-rich digital assets. While it does not purport to solve every use-case, such as those requiring complicated spending constraints, this standard is a crucial step in the direction of enabling more sophisticated data-rich tokenization on the Bitcoin network.

Specification

We specify that output scripts must first push data onto the stack, followed by using OP_DROP and OP_2DROP to drop the pushed data. Next, the public key of the owner of the token is pushed, followed by OP_CHECKSIG. The comprises a digital signature from the owner's public key, which facilitates spending of the token. Each token output must contain at least one . This standard does not define specific forms of tokens or specific requirements for higher-order overlays with validation rules for their transfer and conveyance.

Example Output Script:

The following is an example output script for a token as defined by this standard:

<arbitrary data> <arbitrary data> <arbitrary data> OP_DROP OP_2DROP <public key> OP_CHECKSIG

Implementations

This script template has been implemented within the PushDrop JavaScript library.

How it Works

This script template enables tokenization on the Bitcoin SV blockchain by providing a simple and effective way to create data-rich tokens that are still spendable and locked to their owners. This is achieved by pushing arbitrary data onto the stack, dropping it with OP_DROP or OP_2DROP, and then adding a simple P2PK lock with a public key and OP_CHECKSIG.

When a token is created using this template, it is represented as an (UTXO) that contains at least one satoshi. This UTXO can then be transferred to another user by creating a transaction that spends the UTXO and includes the owner's digital signature in the unlocking script.

The template facilitates tokenization by allowing developers to specify any number of stack elements with arbitrary data, representing tokens on overlays, while still enabling spending and ownership with simple locks. This makes it easier to model and use tokens in graph structures, improving scalability and enabling a wide range of use-cases.

Was this helpful?

Search Beersy

Search standards by number, title, author or topic