Paymail BEEF Transaction
The readable-name payment scheme was built before there was a good way to send verifiable transactions. This updates it to carry the newer self-verifying bundle instead of bare transaction bytes.
Summary
- Why
- A paymail server receiving a transaction had no standard way to also receive the proof data needed to verify it without extra lookups.
- What
- BRC-70 is a paymail capability extension that lets a sender deliver a BEEF-encoded transaction, instead of plain raw transaction hex, to a receiving paymail server.
- How
- A paymail server advertises a delivery endpoint under the capability label 5c55a7fdb7bb, and a client POSTs a JSON body containing BEEF transaction hex, sender metadata, and a payment reference, with the server replying with the accepted transaction ID.
What this lets you do
- advertise a BEEF delivery endpoint in paymail capabilities
- send a BEEF transaction to a paymail handle via POST
- attach sender metadata like pubkey, signature and a note
- receive back an accepted transaction ID from the server
- let the receiver run SPV checks without a separate lookup
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-70 accurately, including what it depends on.
The specification
Abstract
We specify a paymail capability extension which supports the passing of BEEF Transactions between hosts. The procedure for service discovery and requesting outputs is not detailed, rather this proposal contains only a recommendation to replace BRC-12 RawTx hex data with BRC-62 BEEF hex data.
Motivation
We propose that p2p destination and receive raw transaction functionality between hosts to include the data required for the counterparty to run SPV on the transaction.
BRFCID
A random ID was generated in order to avoid label collisions in the capability document of a paymail server.
brfcid: 5c55a7fdb7bb
title: Background Evaluation Extended Format Transaction
author: Darren Kellenschwiler
version: 1.0.0
Specification
Status Note
BRC-70 is a Paymail capability extension and is external to the current bsv-blockchain/ts-sdk / bsv-blockchain/wallet-toolbox BRC-100 wallet implementation. It remains useful for Paymail-specific interoperability, but current SDK/toolbox payment flows should not be expected to expose this capability unless a Paymail integration is added explicitly.
We specify that an endpoint for delivery of transaction data ought to be added to the capabilities object in the .well-known response of a paymail service with the label: 5c55a7fdb7bb.
<!-- capabilities document of the host -->
{
"capabilities": {
"5c55a7fdb7bb": "https://paymail.domain.tld/api/v1/beef/{alias}@{domain.tld}",
<!-- ...others -->
}
}
Client Request
The sender must replace the {alias} and {domain.tld} placeholders in the URI template provided by capabilities.5c55a7fdb7bb with a valid Paymail handle. The client must then perform a POST HTTP request with the following body:
{
"beef": "<beef_transaction_hex>", <!-- note the label is different >
"metadata": {
"sender": "<sender_paymail>",
"pubkey": "<sender_public_key>",
"signature": "<signature_of_txid>",
"note": "<optional_human_readable_note>"
},
"reference": "<payment_reference>"
}
BEEF transaction hex is a string encoding of the binary format detailed in BRC-62.
Server Response
The server must validate the transaction and respond with the accepted transaction ID and an optional human-readable note.
{
"txid": "<accepted_txid>",
"note": "<optional_human_readable_note>"
}
Swimlanes
A swimlanes diagram is included here for further clarification: https://swimlanes.io/u/6J2q8QCEb
