Glossário / Referência do desenvolvedor
Valor PP
- O que é o valor PP?
- O valor PP era o campo em satoshis dentro de uma saída do BIP70, definido como zero quando o comerciante queria que o pagador escolhesse quanto enviar.
Especificação no BIP-70.
As unidades são a origem dos erros de pagamento. O valor no BIP70 era uma contagem de satoshis de 64 bits, enquanto o parâmetro amount em um URI BIP21 é bitcoin decimal, então um mesmo pagamento é escrito como 250000 no primeiro e como 0,0025 no segundo. Quem move dinheiro entre sistemas deve verificar qual unidade um campo espera antes de confiar em um total.
Como funciona
Status: histórico. O campo pertencia ao BIP70, que o Bitcoin Core tornou obsoleto na versão 0.19 e removeu na versão 0.20.0 em 3 de junho de 2020.
Dois campos compunham um Output dentro de uma mensagem PaymentDetails: um script que diz para onde o dinheiro vai e um valor que diz quanto. O valor era um inteiro sem sinal de 64 bits em satoshis, com padrão zero, e o zero tinha um significado específico. Não significava pagar nada. Significava que o comerciante se recusava a indicar uma cifra e que a carteira deveria perguntar ao cliente, que é como funcionavam as páginas de doações.
Várias saídas podiam aparecer em uma mesma solicitação, cada uma com seu próprio valor, e a carteira que pagava tinha que atender a todas elas em uma única transação. Isso é mais útil do que parece. Um comerciante podia encaminhar parte de uma venda direto para o armazenamento a frio, parte para uma carteira quente para reembolsos e parte para um afiliado, tudo sem que o cliente fizesse três pagamentos ou soubesse que a divisão existia.
O intervalo nunca foi uma limitação. Um inteiro sem sinal de 64 bits chega no máximo a 18.446.744.073.709.551.615 satoshis, aproximadamente 8.800 vezes os 2.100.000.000.000.000 satoshis que vão existir. A fronteira interessante estava no outro extremo. Um valor abaixo do limite de poeira produzia uma saída que a rede não retransmitiria, e a política do Bitcoin Core coloca esse limite em 546 satoshis para uma saída legada pay-to-public-key-hash e em 294 para uma saída segwit de chave única.
Onde você vê isso
Nada implementa hoje o campo de valor do BIP70, mas a confusão de unidades por trás dele está bem viva.
Três especificações, três unidades. Os URIs BIP21 expressam valores em bitcoin. O BIP70 os expressava em satoshis. As faturas BOLT11 da Lightning são ainda mais finas e expressam valores em milissatoshis, um milésimo de um satoshi. Em seguida, as interfaces das carteiras acrescentam uma configuração de exibição por cima, então o mesmo saldo aparece como 0,00250000 ou como 250.000 dependendo de uma preferência que você definiu uma vez e esqueceu.
O custo prático de errar isso é dinheiro real. As estimativas de taxa chegam em satoshis por byte virtual, então um gasto segwit de uma entrada e duas saídas, de cerca de 141 vbytes, custa 705 satoshis a 5 sat/vB. Leia essa cifra como bitcoin e você pensaria que uma transação rotineira custaria mais do que a maioria das pessoas gasta em taxas em um ano inteiro.
Dois hábitos resolvem isso. Escolha uma denominação nas configurações da sua carteira e deixe-a lá, para que o número de dígitos que você espera nunca mude. E leia o rótulo da unidade em qualquer tela de saque antes de ler o número, porque os mínimos das corretoras, as taxas de rede e o seu saldo são frequentemente expressos em unidades diferentes na mesma página.
Valor PP vs valor do URI de Bitcoin
Um valor do BIP70 era um inteiro em satoshis; um valor do BIP21 é um decimal em bitcoin, e o fator entre eles é 100.000.000. Essa é toda a diferença, e isso já basta para ter importância. Um campo que contém 0,0025 em um formato contém 250000 no outro, e um software que passa de um para o outro sem converter produz um erro de oito ordens de magnitude em qualquer direção para a qual ele por acaso penda. O formato moderno venceu, então o número que você encontra hoje em um link de pagamento está em bitcoin, a menos que algo diga explicitamente sats.