Pular para o conteúdo
buybitcoinsmart

Glossário / Transações e taxas

Outpoint

O que é um outpoint?
Um outpoint é o ponteiro de 36 bytes que identifica exatamente uma saída de transação, combinando o id de 32 bytes da transação que a criou com o índice de 4 bytes de sua posição.

O Bitcoin não tem números de conta, então todo gasto deve declarar precisamente qual bitcoin está sendo gasto. Escrito para humanos, o ponteiro tem a forma de um id de transação, dois pontos e um número, e serve como chave primária de todo o banco de dados de saídas não gastas que cada nó completo mantém. Se duas transações nomearem o mesmo outpoint, apenas uma delas pode ser válida, e essa única regra é o que impede que um bitcoin seja gasto duas vezes.

Como funciona

O outpoint fica na frente de toda entrada de transação, e é a primeira coisa que um nó consulta ao verificar se um gasto é permitido.

No protocolo são dois campos sem separador: 32 bytes de hash da transação e depois um índice de 4 bytes armazenado em little-endian. O hash é escrito na ordem interna de bytes, que é o inverso da ordem que você vê em um explorador de blocos, então uma transação bruta em hexadecimal parece referenciar um id de transação escrito ao contrário. Isso confunde todo mundo que lê hexadecimal bruto pela primeira vez e é puramente uma convenção de exibição, não uma diferença nos dados.

Os índices começam em zero. A primeira saída de uma transação é o índice 0, a segunda é o índice 1, e um bitcoin descrito como terminando em :2 é a terceira saída. O campo tem 4 bytes, então o teto teórico é 4.294.967.295, ao qual nenhuma transação real chega perto.

Um valor é reservado. Uma transação coinbase, a que paga o minerador, tem uma única entrada cujo outpoint são 32 bytes zero com o índice todo em uns, 0xffffffff. Essa combinação não aponta para nada e sinaliza que essa entrada cria valor em vez de movê-lo.

A unicidade teve que ser exigida por regra em vez de presumida. Duas transações coinbase com conteúdo idêntico produziriam ids idênticos e, portanto, outpoints duplicados, o que aconteceu duas vezes no início da história do bitcoin. O BIP30 proibiu esse padrão diretamente, e o BIP34 passou a exigir que toda coinbase inclua a altura do bloco em seu script de entrada, garantindo conteúdos diferentes. O BIP34 passou a ser exigido no bloco 227.931, em março de 2013.

Onde você o vê

O outpoint é o identificador que você usa sempre que fala com precisão de um bitcoin específico, e não de um saldo.

As telas de controle de moedas das carteiras listam as reservas como id de transação e índice. A interface RPC do Bitcoin Core recebe os dois campos como um par: listunspent os retorna, gettxout consulta um deles, e createrawtransaction os espera. A Lightning Network usa o outpoint da transação de financiamento como nome permanente de um canal, e é por isso que os identificadores de canal no software de nó parecem um hash seguido de um número pequeno.

Também é o que convém citar em uma disputa. Um endereço pode ter recebido dezenas de pagamentos e uma transação pode ter dezenas de saídas, mas um outpoint nomeia um único pagamento de um único valor em um único momento, sem ambiguidade para discutir. Se uma corretora pedir que você comprove um depósito específico, esse é o nível de precisão que encerra a conversa.

Outpoint vs índice de saída

O índice de saída é um campo dentro de um outpoint, não um nome mais curto para ele. Por si só, um índice não carrega informação alguma, porque dezenas de milhões de transações têm uma saída no índice 0 e o número não diz nada sobre qual delas é a certa. A confusão vem das interfaces dos exploradores de blocos, que rotulam o índice como "vout" e o exibem em destaque, então as pessoas passam a chamar o ponteiro inteiro de vout. Mantenha os dois separados quando anotar algo: o id de transação diz qual transação, e o índice diz qual saída dentro dela, e só os dois juntos identificam um bitcoin.

Não confundir com

Perguntas frequentes

Por que o id de transação em uma transação bruta é escrito ao contrário?

Porque o outpoint armazena o hash na ordem interna de bytes, enquanto os exploradores de blocos e as carteiras o exibem invertido. Os dois se referem aos mesmos 32 bytes, e toda ferramenta que lida com transações brutas faz a inversão para você.

O que significa um bitcoin descrito como um hash seguido de dois pontos e um número?

É um outpoint. O hash identifica a transação que criou esse bitcoin e o número é a posição desse bitcoin na lista de saídas da transação, contada a partir de zero. Juntos, eles nomeiam um bitcoin específico que pode ser gasto.

Termos relacionados

Mais em Transações e taxas

Ler esta página em inglês