Glossary / Developer reference
PP amount
- Definition
- PP amount was the satoshi-denominated field inside a BIP70 output, set to zero when the merchant wanted the payer to choose how much to send.
Specified in BIP-70.
Units are where payment bugs come from. The BIP70 amount was a 64-bit count of satoshis, while the amount parameter in a BIP21 URI is decimal bitcoin, so one payment is written 250000 in the first and 0.0025 in the second. Anyone moving money between systems should check which unit a field expects before trusting a total.
How it works
Status: historical. The field belonged to BIP70, which Bitcoin Core deprecated in 0.19 and removed in 0.20.0 on June 3, 2020.
Two fields made up an Output inside a PaymentDetails message: a script saying where the money goes, and an amount saying how much. The amount was an unsigned 64-bit integer of satoshis with a default of zero, and zero had a specific meaning. It did not mean pay nothing. It meant the merchant was declining to name a figure and the wallet should ask the customer, which is how donation pages worked.
Several outputs could appear in one request, each with its own amount, and a paying wallet had to satisfy every one of them in a single transaction. That is more useful than it sounds. A merchant could route part of a sale straight to cold storage, part to a hot wallet for refunds, and part to an affiliate, all without the customer sending three payments or knowing the split existed.
The range was never a constraint. A 64-bit unsigned integer tops out at 18,446,744,073,709,551,615 satoshis, roughly 8,800 times the 2,100,000,000,000,000 satoshis that will ever exist. The interesting boundary sat at the other end. An amount below the dust threshold produced an output the network would not relay, and Bitcoin Core's policy puts that threshold at 546 satoshis for a legacy pay-to-public-key-hash output and 294 for a single-key segwit one.
Where you see it
Nothing implements the BIP70 amount field today, but the unit confusion behind it is thoroughly alive.
Three specifications, three units. BIP21 URIs quote bitcoin. BIP70 quoted satoshis. Lightning BOLT11 invoices go finer still and quote millisatoshis, a thousandth of a satoshi. Wallet interfaces then add a display setting on top, so the same balance appears as 0.00250000 or as 250,000 depending on a preference you set once and forgot.
The practical cost of getting this wrong is real money. Fee estimates arrive in satoshis per virtual byte, so a one input, two output segwit spend of about 141 vbytes costs 705 satoshis at 5 sat/vB. Read that figure as bitcoin instead and you would think a routine transaction cost more than most people ever spend on fees in a year.
Two habits fix it. Pick one denomination in your wallet settings and leave it there, so the number of digits you expect never changes. And read the unit label on any withdrawal screen before you read the number, because exchange minimums, network fees and your balance are frequently quoted in different ones on the same page.
PP amount vs Bitcoin URI amount
A BIP70 amount was an integer of satoshis; a BIP21 amount is a decimal of bitcoin, and the factor between them is 100,000,000. That is the whole difference, and it is enough to matter. A field holding 0.0025 in one format holds 250000 in the other, and software crossing between the two without converting produces an error of eight orders of magnitude in whichever direction it happens to lean. The modern format won, so the number you meet in a payment link today is bitcoin unless something explicitly says sats.