BEEF is the standardized binary format for peer-to-peer transaction exchange on BSV. It bundles a transaction with the Merkle proofs needed to verify its inclusion in the chain, enabling Simplified Payment Verification (SPV) without a full node.
Traditional transaction relay requires a recipient to either:
BEEF eliminates both requirements. The sender includes all proof material inline; the recipient validates against block headers it already has (from a Chaintracks server or equivalent).
A BEEF package always begins with the 4-byte version header 0100BEEF (little-endian 0xBEEF0001).
The payload is ordered specifically to support streaming validation:
[0100BEEF version header]
[BUMP structures — BSV Unified Merkle Paths (BRC-74)]
[Ancestor transactions — the minimal set of parents reaching a mined anchor]
[The final transaction being evaluated]
This ordering is deliberate: a recipient can begin verifying Merkle roots against its block header service as soon as the BUMPs arrive, before the full payload has been received.
A BUMP is an optimized Merkle proof format. Key properties:
The MerklePath class in @bsv/sdk implements BRC-74 encoding, decoding, and compound path operations.
BEEF includes the minimal set of parent transactions required to reach a mined anchor on the longest chain. Each included ancestor either:
This creates a proof chain: the final transaction → unconfirmed parents → confirmed ancestors with BUMPs.
BRC-95 is a revised BEEF format that extends BRC-62. Both versions are supported by @bsv/sdk. Check Beef.version to distinguish them at runtime.
The ordering of BEEF enables a pipeline:
Any failure in the chain aborts early without processing the remaining bytes.
import { Beef, MerklePath, Transaction, WhatsOnChain } from '@bsv/sdk'
declare const tx: Transaction
declare const bump: MerklePath
// Build a BEEF from a transaction and proof
const beef = new Beef()
beef.mergeTransaction(tx)
beef.mergeBump(bump)
const bytes = beef.toBinary()
// Parse and validate
const parsed = Beef.fromBinary(bytes)
const isValid = await parsed.verify(new WhatsOnChain())BEEF is used throughout the stack wherever transactions cross system boundaries:
createAction / internalizeAction — Actions return BEEF; the recipient wallet calls internalizeAction with the BEEF to credit funds.engine.submit() must be in BEEF format.internalizeAction and createAction use BEEFconformance/vectors/sdk/transactions/@bsv/sdk MerklePath and Beef classes