A sua carteira mostra um saldo, mas o Bitcoin em si não tem contas. Tem moedas, chamadas UTXOs, e transações que destroem umas moedas e criam outras novas.
A estrutura
- Version (4 bytes).
- Entradas: cada uma nomeia uma moeda a gastar com um outpoint (txid + índice de saída), um scriptSig e um campo nSequence de 4 bytes.
- Saídas: cada uma tem um valor em satoshis (8 bytes) e um script de bloqueio, o scriptPubKey, que diz o que é preciso para gastá-la.
- nLockTime (4 bytes): o bloco ou momento mais cedo em que a transação pode ser minerada.
- Witness (só SegWit): assinaturas e scripts, fora do txid.
As moedas gastam-se inteiras
Um UTXO não se pode dividir enquanto está lá. Se você tem uma moeda de 0,5 BTC e quer pagar 0,2 BTC, gasta a moeda inteira e cria duas saídas: 0,2 BTC ao receptor e cerca de 0,3 BTC de volta a si como «troco», normalmente para um endereço novo da sua própria carteira.
A taxa é invisível
Nenhum campo diz «taxa». A taxa é simplesmente as entradas menos as saídas. No exemplo acima, se as saídas somam 0,4999 BTC, o minerador pode reivindicar os 0,0001 BTC restantes. Esqueça a saída de troco e toda a diferença vai para o minerador.
O que um nó verifica
- Cada entrada gasta uma moeda que existe e ainda não foi gasta.
- O script de cada entrada, junto com o script de bloqueio da moeda (e o witness), corre com sucesso.
- As saídas não somam mais do que as entradas.
- Os timelocks estão satisfeitos.
Cunhar moedas novas
A única exceção a «entradas pagam saídas» é a transação coinbase, a primeira de cada bloco, que cria a recompensa de bloco do nada. As suas saídas só podem ser gastas após mais 100 blocos.
Limites de política
O Bitcoin Core também aplica regras de relay além do consenso. Uma transação standard pode ter no máximo 400.000 weight units. Saídas que custam mais a gastar do que valem chamam-se dust e não são retransmitidas. Na feerate de dust por omissão, isso é abaixo de 546 satoshis para uma saída legacy P2PKH e abaixo de 294 satoshis para uma saída SegWit nativa P2WPKH.
Conclusão
Cada bitcoin que você possui é uma saída específica de uma transação passada, bloqueada por um script que só a sua chave pode satisfazer.