Glossário / Referência do desenvolvedor
Protocolo de pagamento (BIP70)
Outros nomes: Protocolo de pagamento, BIP70.
- O que é o protocolo de pagamento (BIP70)?
- O protocolo de pagamento (BIP70) foi a tentativa do bitcoin de substituir endereços simples por solicitações de pagamento assinadas e respaldadas por certificados, e o Bitcoin Core removeu o último resquício de suporte a ele na versão 0.20.0.
Especificação no BIP-70.
Ambição e depois abandono. Gavin Andresen e Mike Hearn publicaram o BIP70 em 29 de julho de 2013, o Bitcoin Core o incluiu na versão 0.9.0 em março de 2014, o marcou como obsoleto na versão 0.19 em novembro de 2019 e o excluiu na versão 0.20.0 em 3 de junho de 2020. Se uma página de pagamento ainda pede que sua carteira fale esse protocolo, trate isso como um sinal de que ninguém toca nessa integração há anos.
Como funciona
Status: marcado como obsoleto no Bitcoin Core 0.19 e removido por completo na versão 0.20.0 em 3 de junho de 2020. Nenhuma carteira com manutenção ativa o implementa. O que se usa em seu lugar é um URI BIP21 simples para pagamentos on-chain, faturas BOLT11 ou BOLT12 na Lightning e pagamentos silenciosos BIP352 quando se quer um destino reutilizável.
O projeto era uma família de quatro BIPs. O BIP70 definiu as mensagens, o BIP71 registrou um tipo MIME para cada uma das três que trafegavam pela rede, o BIP72 acrescentou o parâmetro r= para que um URI pudesse apontar para uma solicitação, e o BIP73 cuidou da negociação de conteúdo para carteiras que não conseguiam interpretar o protocolo.
O fluxo funcionava como um terminal de cartão. Um comerciante servia um PaymentRequest assinado por HTTPS. A carteira do cliente o buscava, percorria a cadeia de certificados X.509 anexada até uma raiz em que já confiava e mostrava o nome de uma empresa em vez de uma sequência de caracteres. O cliente aprovava, a carteira transmitia a transação e também enviava de volta ao comerciante uma mensagem Payment com os bytes brutos da transação e um endereço de reembolso. O comerciante respondia com um PaymentACK, que servia como recibo.
Quatro motivos explicam o seu colapso, e vale a pena entendê-los porque cada um reaparece sempre que alguém propõe identidade sobre o bitcoin.
Ele tomava emprestada sua confiança das autoridades de certificação. Qualquer uma das centenas de CAs de um repositório de raízes típico pode emitir um certificado para qualquer nome, que é justamente o modo de falha que o bitcoin foi criado para evitar. O BIP70 também permitia um tipo de assinatura x509+sha1, e uma colisão prática de SHA-1 foi publicada em 23 de fevereiro de 2017.
Ele exigia o comerciante online. Um pagamento não podia ser construído se o endpoint HTTPS do comerciante não respondesse, de modo que uma indisponibilidade interrompia pagamentos que de outro modo teriam funcionado apenas com um endereço.
Ele vazava informações. A carteira fazia uma requisição de saída ao servidor do comerciante, expondo o endereço IP do cliente, e o campo de reembolso entregava um endereço novo pertencente ao pagador.
Ele oferecia muito pouco. O certificado provava que alguém controlava um nome de domínio, não que a fatura era legítima ou que a mercadoria era real.
Onde ele aparece
O principal motivo de o BIP70 ainda circular como termo é que a referência para desenvolvedores do bitcoin.org descreve o protocolo no presente, e essa referência não acompanha o Bitcoin Core há anos.
Além disso, o BIP70 aparece em código-fonte arquivado de carteiras, em guias de integração antigos escritos quando grandes processadores o promoviam e, ocasionalmente, em um arquivo .bitcoinpaymentrequest anexado a uma fatura de uma década atrás. Nada do que você compra hoje vai exigi-lo. Comerciantes que querem uma página de pagamento usam softwares como o BTCPay Server, que emite URIs BIP21 e faturas Lightning e não pede nada incomum à carteira do cliente.
Protocolo de pagamento (BIP70) vs PaymentRequest
O protocolo de pagamento é a troca inteira; PaymentRequest é uma mensagem dentro dele. Três mensagens trafegavam entre a carteira e o comerciante, e PaymentRequest era a primeira delas, o envelope assinado que o comerciante servia. Usar os dois nomes de forma indistinta torna a documentação antiga mais difícil de ler do que o necessário. Observe também que PaymentRequest é o nome de um padrão de navegador sem relação com este, voltado ao pagamento com cartão e carteira, então um desenvolvedor que usa a palavra hoje dificilmente está falando de bitcoin.