Pular para o conteúdo
buybitcoinsmart

Glossário / Referência do desenvolvedor

Ordem de bytes RPC

O que é a ordem de bytes RPC?
A ordem de bytes RPC é a forma invertida como o software de bitcoin exibe hashes de 32 bytes, e é a forma de todo ID de transação que você copia de uma carteira ou de um explorador de blocos.

A cadeia de 64 caracteres que sua carteira chama de ID de transação não é a ordem que esses bytes assumem em qualquer outro lugar. O Bitcoin Core guarda um hash em um tipo que o imprime com o byte mais significativo primeiro, todo explorador copiou o hábito, e a convenção agora é permanente. Isso é inofensivo quando você cola um identificador em uma caixa de busca e custa caro quando você o cola em código.

Como funciona

A ordem de bytes RPC é uma transformação de exibição aplicada na saída de um nó, não um hash diferente.

Um resumo sai do SHA-256 como 32 bytes sem nenhuma direção inerente. O Bitcoin Core o guarda em um contêiner que modela esses bytes como um único número muito grande, e imprimir um número coloca a parte mais significativa à esquerda, o que inverte o vetor de bytes. Todo campo JSON que nomeia um bloco ou uma transação sai assim: o hash de getblockhash, o txid de getrawtransaction, o merkleroot de getblock, o previousblockhash que liga um bloco ao seu bloco pai.

Uma consequência aparece na página inicial de todo explorador. A prova de trabalho produz resumos que começam, nessa direção impressa, com uma longa sequência de zeros. Esses zeros ficam na extremidade oposta dos bytes brutos. Os alvos de mineração são mais fáceis de raciocinar na forma impressa, e é em parte por isso que a convenção permaneceu em vez de ser corrigida.

A inversão se aplica apenas a hashes. Chaves públicas, assinaturas, scripts e itens de testemunha são todos impressos em sua ordem real, então um script de decodescript pode ser comparado diretamente com a transação bruta, enquanto um txid não pode. Misturar essas duas regras é onde o código que funciona costuma falhar.

Uma única resposta pode até conter as duas convenções ao mesmo tempo. Peça uma transação com saída detalhada e o campo txid aparece invertido, enquanto o campo hex ao lado dele é a serialização intacta que contém o mesmo hash na ordem contrária.

Onde você vê isso

A ordem de bytes RPC é a única forma de um hash que a maioria das pessoas chega a manusear.

É o que uma corretora coloca em um e-mail de confirmação de saque, o que um explorador de blocos espera em uma URL, o que um agente de suporte pede que você envie e o que o bitcoin-cli imprime. Pedir a um nó o primeiro bloco de todos com getblockhash 0 retorna 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f, e colar essa cadeia em qualquer explorador leva ao bloco minerado em 3 de janeiro de 2009.

O modo de falha é restrito e consistente. Alguém calcula um identificador de transação por conta própria, aplicando SHA-256 duas vezes à serialização, compara o resultado com um explorador e não encontra nenhuma semelhança. As duas cadeias são os mesmos 32 bytes e uma delas precisa ser invertida. A mesma correção vale quando um script extrai um txid de uma entrada bruta e o procura em uma tabela de identificadores coletados de uma API.

Há um hábito de dois segundos que vale a pena adotar. Se um hash que alguém enviou a você não leva a lugar nenhum, tente-o ao contrário antes de concluir que a transação não existe. Os tópicos de suporte estão cheios de hashes copiados de dados brutos em vez de uma carteira, e eles parecem completamente válidos até você invertê-los.

Não confundir com

Perguntas frequentes

O ID de transação que minha corretora me deu está em ordem de bytes RPC?

Sim. Toda carteira, corretora e explorador de blocos exibe hashes nessa ordem de exibição invertida, então a cadeia que você recebeu pode ser colada diretamente em um explorador de blocos sem nenhuma conversão.

Meu txid calculado não corresponde ao do explorador. O que deu errado?

Quase certamente nada além da ordem dos bytes. Aplicar SHA-256 duas vezes a uma transação serializada dá o resumo em ordem interna, e você precisa inverter os 32 bytes antes de comparar com qualquer coisa que um nó ou um explorador tenha impresso.

Termos relacionados

Mais em Referência do desenvolvedor

Ler esta página em inglês