Saída (Output)
Um pacote de bitcoins criado em uma transação
Uma saída (output) é um pacote de bitcoins criado em uma transação.
Você pode criar várias saídas em uma transação, onde cada saída contém um valor de bitcoin e uma trava. Uma transação futura pode então gastar essas saídas (como entradas), destravando-as, e criar novas saídas com novas travas. Então as saídas são os blocos de construção para enviar e gastar dinheiro no bitcoin.
Uma transação só pode gastar saídas não gastas anteriormente, e, uma vez que uma saída foi gasta, ela não pode ser gasta de novo.
Cofres de Segurança
É mais fácil pensar em uma saída como um cofre de segurança. Ao fazer uma transação, você está selecionando um cofre existente, abrindo-o e movendo seu conteúdo para novos cofres. As travas que você coloca nesses cofres impedem que outra pessoa os abra (a não ser a pessoa para quem você quer "enviar" os bitcoins). Você pode pensar na blockchain como um grande cofre cheio de cofrinhos de segurança — ou, como os chamamos no Bitcoin, saídas.
Troco
Ao gastar uma saída, você precisa consumir o valor inteiro dela; não dá para abrir uma saída e gastar só parte dos bitcoins, deixando o resto travado na saída original. Então, se a saída contém mais bitcoins do que você quer enviar, você precisa criar uma saída de troco para enviar o restante de volta para você. A maioria das transações usa uma saída de troco (tipicamente a última saída da transação).
Qualquer quantidade de bitcoins que não seja travada em saídas é classificada como a taxa de transação e recolhida por um minerador. Então, se você esquecer de adicionar uma saída de troco, perderá alguns bitcoins.
Estrutura
O que uma saída de transação faz?
Uma saída em uma transação bruta é só um valor (um inteiro) junto com um script de travamento. A estrutura se repete para cada saída:
| Campo | Tamanho | Formato |
|---|---|---|
| Valor | 8 bytes | little-endian |
| Tamanho do ScriptPubKey | variável | compact size |
| ScriptPubKey | variável | bytes |
Valor
O campo valor tem 8 bytes e pode conter valores entre 0 e 18446744073709551615. Ele está em little-endian (os bytes aparecem "ao contrário" nos dados brutos) e é medido em satoshis (1 satoshi = 0,00000001 BTC).
Conversor de Unidades
O total das saídas de uma transação não pode exceder o total das entradas.
Tamanho do ScriptPubKey
Contém o tamanho do script de travamento a seguir. É um campo compact size, então normalmente tem 1 byte, mas pode se expandir para scripts grandes.
Compact Size
ScriptPubKey
O campo ScriptPubKey contém a trava que você quer colocar na saída. Há vários tipos de travas, mas a mais comum é travar a saída à chave pública de alguém (ou seja, ao endereço dela) — esses tipos de trava são chamados de P2PKH e P2WPKH.
É tecnicamente possível o campo ScriptPubKey estar vazio. Porém, isso significaria que não há trava na saída, então qualquer um poderia gastá-la.