This guide explains BIP 74 Allow zero value OP_RETURN in Payment Protocol in plain English. It covers the problem behind the BIP, why it matters and whether the proposal is part of Bitcoin today.
TL;DR
- What it is: BIP 74 proposed changing BIP 70 Payment Requests so wallets retained zero-value OP_RETURN outputs rather than ignoring them or attaching spendable value. At least one payable output remained mandatory.
- Why it matters: BIP 74 tried to avoid wasting value when legacy Payment Requests carried OP_RETURN data. Its safeguards are instructive, but current applications should use maintained payment flows and explicit metadata consent.
- Current position: The specification is Closed and its recorded comments discouraged implementation, so it is legacy Payment Protocol history rather than a current wallet feature.
BIP 74 Allow zero value OP_RETURN in Payment Protocol in simple English
BIP 74 Allow zero value OP_RETURN in Payment Protocol: BIP 70 serialised one or more outputs but ignored zero-value outputs. A merchant adding OP_RETURN metadata therefore risked assigning positive value to an unspendable output.
Simple example
A node operator is checking BIP 74 Allow zero value OP_RETURN in Payment Protocol. If total payable value was zero, the user selected an amount distributed only among payable outputs.
Key terms in plain English
- BIP:
- Bitcoin Improvement Proposal: a document describing a proposed rule, standard or process. Its status must be checked separately.
- Consensus:
- The shared rules full nodes use to decide whether blocks and transactions are valid.
- UTXO:
- An unspent transaction output: a piece of bitcoin that can be used as an input to a later transaction.
- Node:
- A computer running Bitcoin software that checks data and communicates with other peers.
The value-destruction problem
BIP 70 serialised one or more outputs but ignored zero-value outputs. A merchant adding OP_RETURN metadata therefore risked assigning positive value to an unspendable output. BIP 74 proposed retaining the script while forcing its amount to zero, matching OP_RETURN’s intended unspendable-data role.
Payable output requirement
A request containing only OP_RETURN was forbidden. If total payable value was zero, the user selected an amount distributed only among payable outputs. If non-zero payable values existed, zero-value OP_RETURN outputs stayed in the constructed transaction but received no satoshis. Wallet logic needed to separate script inclusion from value assignment.
Merchant metadata use
An invoice hash could link a transaction to an off-chain record without giving the merchant server a spending key. The wallet might relay application metadata it did not understand. That flexibility is also a consent hazard: the signer must see that extra data will be published permanently and know it is not required by Bitcoin consensus.
Privacy and permanence
OP_RETURN data is provably unspendable and does not add a spendable UTXO, but it consumes block space and is globally replicated. An invoice hash can become identifying when the invoice is disclosed later. Zero value prevents coin burning; it does not make arbitrary metadata private, reversible or free.
Parser and signing boundary
A Payment Request is untrusted structured input. Bound output count, script size, total fee and metadata preview before signing. Reject non-OP_RETURN zero outputs according to the specified legacy behaviour and never let a server-supplied script bypass the wallet’s network, destination or fee confirmation.
Closed legacy context
BIP 74 depended on the BIP 70 ecosystem and was not adopted as a current universal standard. Modern wallets may not parse Payment Requests at all. A historical integration should not claim compatibility without exact product tests, maintained certificate validation and an explicit migration path.
How specialists test it
Developers test the proposal with made-up data on an isolated test network. They check normal cases and deliberately invalid cases. Different implementations should reach the same result before anyone relies on the proposal.
Frequently asked questions
What is the main point of BIP 74 Allow zero value OP_RETURN in Payment Protocol?
BIP 74 Allow zero value OP_RETURN in Payment Protocol: BIP 70 serialised one or more outputs but ignored zero-value outputs.
For BIP 74 Allow zero value OP_RETURN in Payment Protocol, what should a beginner know about the value-destruction problem?
BIP 70 serialised one or more outputs but ignored zero-value outputs.
For BIP 74 Allow zero value OP_RETURN in Payment Protocol, what should a beginner know about payable output requirement?
A request containing only OP_RETURN was forbidden. If total payable value was zero, the user selected an amount distributed only among payable outputs.
For BIP 74 Allow zero value OP_RETURN in Payment Protocol, what should a beginner know about merchant metadata use?
An invoice hash could link a transaction to an off-chain record without giving the merchant server a spending key.
Conclusion
BIP 74 tried to avoid wasting value when legacy Payment Requests carried OP_RETURN data. Its safeguards are instructive, but current applications should use maintained payment flows and explicit metadata consent.
Primary sources
Check the current specification status and the documentation for the exact implementation you operate before moving production funds or changing a mining node.
Join the ASIC Mining Discussion
Members can read and join the discussion
Log in to read comments from other miners. Create a free account if you would like to ask a question or share your experience.
Membership helps us protect the discussion from spam and keep answers useful.