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 de bitcoin, você está selecionando um cofre de segurança existente, abrindo-o e movendo o 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).
Então você pode pensar na blockchain como um grande cofre cheio de cofres de segurança. Ou, como os chamamos no Bitcoin, saídas.
Troco
Ao gastar uma saída em uma transação, você precisa consumir o valor inteiro dela; não dá para abrir uma saída e gastar só parte dos bitcoins contidos nela, deixando o resto travado na saída original.
Então, se a saída contém mais bitcoins do que você gostaria de enviar para alguém, você precisa criar uma saída de troco extra para enviar o restante dos bitcoins de volta para você.
A maioria das transações usa uma saída de troco.
Não há uma saída específica que você tenha que usar para o troco. Você poderia construir a transação de modo que a primeira saída contenha o seu troco (e a segunda saída seja o pagamento que você está fazendo), ou até ter várias saídas de troco. Não há regra fixa, e você é livre para criar quantas saídas quiser, na ordem que quiser.
Mesmo assim, a saída de troco normalmente é a última saída de uma transação.
Qualquer quantidade de bitcoins restante que não for travada em saídas será classificada como a taxa de transação e recolhida por um minerador. Então, se você esquecer de adicionar uma saída de troco à sua transação, perderá alguns bitcoins.
Estrutura
O que uma saída de transação faz?
Uma saída dentro de uma transação bruta é só um valor (um inteiro) junto com um script de travamento:
| Campo | Exemplo | Tamanho | Formato | Descrição |
|---|---|---|---|---|
| Valor | e99e060000000000 | 8 bytes | Little-Endian | O valor da saída em satoshis. |
| Tamanho do ScriptPubKey | 19 | variável | Compact Size | O tamanho em bytes do ScriptPubKey seguinte. |
| ScriptPubKey | [script] | variável | Script | O código de travamento desta saída. |
Esta estrutura se repete para cada saída.
Então, em um nível técnico, as saídas são bem simples.
Valor
O campo valor tem 8 bytes de tamanho, então pode conter valores entre 0 (0x0000000000000000) e 18446744073709551615 (0xffffffffffffffff). O campo também está em little-endian, então os bytes aparecem "ao contrário" dentro dos dados brutos da transação.
O valor também é medido em satoshis (1 satoshi = 0,00000001 BTC).
Conversor de Unidades
Little Endian
Esse valor máximo equivale a 184.467.440.737,09551615 BTC, que é mais BTC do que existe.
O campo valor de uma saída pode ser zero, se você quiser.
O valor total das saídas de uma transação não pode exceder o valor total das entradas.
Tamanho do ScriptPubKey
Este campo contém o tamanho do script de travamento a seguir.
Ele também é um campo compact size, então, embora normalmente tenha 1 byte, ele pode se expandir se estiver indicando um script de travamento muito grande a seguir. Estes são os campos compact size dos scripts de travamento mais comuns:
| Tipo | Compact Size | Tamanho do Script |
|---|---|---|
| P2PK | 23 ou 43 | 35 ou 67 bytes |
| P2PKH | 19 | 25 bytes |
| P2SH | 17 | 23 bytes |
| P2WPKH | 16 | 22 bytes |
| P2WSH | 22 | 34 bytes |
Compact Size
ScriptPubKey
O campo ScriptPubKey contém a trava que você quer colocar na saída.
Há vários tipos diferentes de travas que você pode colocar em uma saída, mas o tipo mais comum é travar a saída à chave pública de outra pessoa (ou seja, ao endereço dela). Esses tipos de trava são chamados de P2PKH e P2WPKH.
Script
É 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.
Exemplos
Como são as saídas de uma transação?
1 Saída
01000000011fde77dd3bc6640714747f158e88260efe7f40236ee0446aca1a0808aec2caab010000006b483045022100f2c45824f970775daa1264f7b0779ee5df86359fab9ef47a0fee85ec97d46c0502201e1efe643c6c2bc56cced92a25c74158b01a5bfd06197a77851795a59fe5d80c0121034fb95ed3287f94561aa26df5ad19bb24762808ba278f7b26d1c85848f86a7ec4ffffffff0100e1f505000000001976a914299da5537e8b65bf45c70a9ece75988ebfca86b588ac00000000 {
"version": "01000000",
"inputcount": "01",
"inputs": [
{
"txid": "1fde77dd3bc6640714747f158e88260efe7f40236ee0446aca1a0808aec2caab",
"vout": "01000000",
"scriptsigsize": "6b",
"scriptsig": "483045022100f2c45824...848f86a7ec4",
"sequence": "ffffffff"
}
],
"outputcount": "01",
"outputs": [
{
"amount": "00e1f50500000000",
"scriptpubkeysize": "19",
"scriptpubkey": "76a914299da5537e8b65bf45c70a9ece75988ebfca86b588ac"
}
],
"locktime": "00000000"
} Transação: 2c5ae87c8f15d1b7432358212dbe6ee51b8e24c6f071b0d708647611000510f7
Esta é uma transação bem básica que contém apenas uma saída:
| Saída | Valor (sats) | Tipo de Script |
|---|---|---|
| 0 | 100000000 | P2PKH |
O campo valor é 00e1f50500000000 e, se convertermos isso de little-endian para big-endian, obtemos 0000000005f5e100; e, se convertermos isso de hexadecimal para decimal, obtemos 100000000.
Little Endian
Esta saída também tinha um script de travamento P2PKH clássico, que tem sempre 25 bytes de tamanho. Conseguimos identificá-lo como um script P2PKH porque eles têm um padrão fixo.
Script
Além disso, se conferirmos a transação anterior, vemos que a única entrada tinha um valor de 100050000 sats. Então o restante de 50000 foi contado como a taxa de transação.
As entradas em uma transação bruta não informam o seu valor. Então, para descobrir o valor de uma entrada, você precisa voltar à transação anterior que criou a saída e pegar o valor de lá.
Essas transações de uma saída são bem raras (fora as transações coinbase), pois basicamente movem todos os bitcoins de um endereço para outro.
2 Saídas
01000000011cc6d0c72e9b8311c675ce9157c385ee939568965b9609d1ced52b7bdf356e15040000006b483045022100bcbe87cdc8aaf78e89c373a1528abd9fec9f45e78bc699e13b569a4c854b719d02206ffdeb0af05b61e7c81d4b8648339a3edbb6b23598233e7f6ab2aa5415816f2301210277f43598c17f8163d33167b79793722dda1115bbc68e03a0f354c8b162bd1d80ffffffff02e2b3190000000000160014af267b26ef0ebd333b80dac1546f7db5d048d0274814de0c000000001976a914ff1a978dd905cf676b2ee8870ba47728294e609588ac00000000 {
"version": "01000000",
"inputcount": "01",
"inputs": [
{
"txid": "1cc6d0c72e9b8311c675ce9157c385ee939568965b9609d1ced52b7bdf356e15",
"vout": "04000000",
"scriptsigsize": "6b",
"scriptsig": "483045022100bcbe87cd...162bd1d80",
"sequence": "ffffffff"
}
],
"outputcount": "02",
"outputs": [
{
"amount": "e2b3190000000000",
"scriptpubkeysize": "16",
"scriptpubkey": "0014af267b26ef0ebd333b80dac1546f7db5d048d027"
},
{
"amount": "4814de0c00000000",
"scriptpubkeysize": "19",
"scriptpubkey": "76a914ff1a978dd905cf676b2ee8870ba47728294e609588ac"
}
],
"locktime": "00000000"
} Transação: 4b5c918e95b98843a8340a6bb2dd61b4eee73ea632db85fb9a7eb538fd355588
Esta é uma transação mais típica. Ela contém 2 saídas:
| Saída | Valor (sats) | Tipo de Script |
|---|---|---|
| 0 | 1684450 | P2WPKH |
| 1 | 215880776 | P2PKH |
Então, presumivelmente, a entrada (217582852 sats) foi dividida em duas: a primeira saída sendo o pagamento a outra pessoa, e a segunda saída sendo o troco travado de volta ao dono original.
Não podemos ter certeza de que a segunda saída era o troco, pois não há uma forma designada de definir a saída de troco em uma transação. Mas, normalmente, a maioria das carteiras define a saída de troco como a última saída de uma transação.
3 Saídas
0100000002ec517e7b4c707c5e3afaf693aacbbd4ebe7d0d5c645381258c72e0e183b929d5000000008b483045022100afcc65e5ed4284de7229320007b3938d443721cf4c3a8be221e7d872c637e550022070e9fd53679633d5421024952960fa47403c91170a68aeb9193f19c8959b7f39014104f4c33b57af42019e38a756163d20f08da3d7e55b6810ed3c3d5355bff563573bf06c1900d65cea45583599e5ad966565695198239345fd04ea1a4ad3b13ad8d0ffffffff02d90d933c1d2f7a2283b9404de6a85c9aef9f4cbc96a212214c99c631a66e74010000008b483045022100c01185dc7196b0de04fba00a8e964e8ad98cd2a4516784c7f5312c887c45b27d0220700b2a9f8c4b845e7bfc703927a85c1ce0f52d10266996304ea1295ab0fca40f0141049a3d95bc9711a3fe30f98790d179caea0ef7ba5a683c3555a566687659e21b3c2c83a7db8267353cf2ddeb8f521d8c1d4f6dc8bc5fcc4e1534623a9d6c0675c5ffffffff03801a0600000000001976a914c0ea92934c59cf1bfa8db64deab8faac2b108ee588ac20a10700000000001976a914b58e94278b9dc5b3ca3d8337876bd747bb365e5388ac70900000000000001976a914b3c61b2cd26075419cb0302d1af241b8c7db62ed88ac00000000 {
"version": "01000000",
"inputcount": "02",
"inputs": [
{ "txid": "ec517e7b...83b929d5", "vout": "00000000", "scriptsigsize": "8b", "scriptsig": "483045...3b13ad8d0", "sequence": "ffffffff" },
{ "txid": "02d90d93...31a66e74", "vout": "01000000", "scriptsigsize": "8b", "scriptsig": "483045...6c0675c5", "sequence": "ffffffff" }
],
"outputcount": "03",
"outputs": [
{ "amount": "801a060000000000", "scriptpubkeysize": "19", "scriptpubkey": "76a914c0ea92934c59cf1bfa8db64deab8faac2b108ee588ac" },
{ "amount": "20a1070000000000", "scriptpubkeysize": "19", "scriptpubkey": "76a914b58e94278b9dc5b3ca3d8337876bd747bb365e5388ac" },
{ "amount": "7090000000000000", "scriptpubkeysize": "19", "scriptpubkey": "76a914b3c61b2cd26075419cb0302d1af241b8c7db62ed88ac" }
],
"locktime": "00000000"
} Transação: 79b8222bfac163571bbe31fcaecd69f703ff5f575fd778d6633005f3662e4aa7
Esta é uma transação mais complexa, com 2 entradas e 3 saídas:
| Saída | Valor (sats) | Tipo de Script |
|---|---|---|
| 0 | 400000 | P2PKH |
| 1 | 500000 | P2PKH |
| 2 | 36976 | P2PKH |
Esta transação poderia estar enviando bitcoins para duas pessoas diferentes ao mesmo tempo, e então usando a terceira saída como troco.
Você pode criar quantas saídas quiser em uma transação (desde que a transação caiba dentro de um bloco), então você não está limitado a criar apenas 1 ou 2 saídas por vez. Portanto, você pode enviar dinheiro para muitas pessoas diferentes em uma única transação. As transações de bitcoin são muito flexíveis.
O maior número de saídas que já vi em uma transação é 13.107: dd9f6bbf80ab36b722ca95d93268667a3ea6938288e0d4cf0e7d2e28a7a91ab3
Valor Zero
0100000001e44e51e602eb117e8fa18e0e970ef530a399eaabefd69c5f89dbfdb0569a7cc701000000fd1b0100473044022057f6e6461cfdbaa55521b556e79ac23db4214ffda337d0bf5a41e791b1d2499c0220282ab1a6d485faf195d3f58d26a9c97bcf6c9fba1af454c45798321d1456081801483045022100ac33c53170c6db0984775810e77d0a31c35ce5592c5ab8b7c9489b11c90f221e02200ca5dcfe598ca1007cad4e41880c225f0de6061b337922304c05f10575a14616014c875241047bfd3c3a7abc765c34304d880435aeb7bf766ec2af7452d3b2667c71c9cb05303b124737ef401aed8b2977ac37f931b51e95601bad5047af9569338b4b064e92410455cf4a3ab68a011b18cb0a86aae2b8e9cad6c6355476de05247c57a9632d127084ac7630ad89893b43c486c5a9f7ec6158fb0feb708fa9255d5c4d44bc0858f852aeffffffff0290ecf032000000001976a914bcefb891e8ecd882fd9785e24258bad9b7b96e0788ac000000000000000017a914465a5922d985b0ab3f155e638ec5630ad5fffa448700000000 {
"version": "01000000",
"inputcount": "01",
"inputs": [
{ "txid": "e44e51e6...569a7cc7", "vout": "01000000", "scriptsigsize": "fd1b01", "scriptsig": "0047304402...64e92...852ae", "sequence": "ffffffff" }
],
"outputcount": "02",
"outputs": [
{ "amount": "90ecf03200000000", "scriptpubkeysize": "19", "scriptpubkey": "76a914bcefb891e8ecd882fd9785e24258bad9b7b96e0788ac" },
{ "amount": "0000000000000000", "scriptpubkeysize": "17", "scriptpubkey": "a914465a5922d985b0ab3f155e638ec5630ad5fffa4487" }
],
"locktime": "00000000"
} Transação: 3ef405a8b0f3404e9c0c65e18776f19a3f213bd358566434d9313223be58d225
Este é um exemplo de uma transação com uma saída que contém um valor de 0 satoshis.
Não sei por que esta transação criou uma saída vazia, mas estou usando-a apenas como exemplo para mostrar que você pode definir o valor de uma saída como zero, se quiser.
ScriptPubKey Vazio
0100000002a08d75950a62c4a7d3b2ce5d5d451f340d26e27ab88c8d1d6a4d1e875846035a00000000fd600100493046022100f078988f0448183b2439e6a210420a0cf6bd62b11fe6b1ec5bfe8366a28cfac4022100f6ef61d2888b74dd4d3eb065a853644f9dbd372e312d25f89eb339b7081ca4bc01493046022100c99192c8eb5fc7da5a73136e92ecb38e20541a3fbb31cd7a488c8182e899cef7022100a9427dbe6c878fffb0ece6cf7f89250e46f6f4582f809bc18fecfe273f5138a9014cc9524104a7a95441bb281f9f851556b8dcae7d5d85746e4382a852dcc8faa3a2320f442fed7d5b4f50d368cf4e18fb1642cfc4a5091e54d240aba9aeb74b07bcf95ad1d4410417b756f5562aa8b48d38fa25614391904dbfd7ef5a56e1d8b1e1c0b31200852a0ae3689350ed38be3d6de0c2472205f5ad697208784aa54174660cdf0b649b814104e35613163e133615ab272c30532c137f61344e14f36a146c3d4461863e5e5fcdc430206d08119771a18977d3a476f4889e5fb6c6eb5fbdd6ab7519e66b096fdb53aeffffffff4ba60a7b2dc4ba89f10bb7939a9b8a6d6735642e655ca173625594432a006acd01000000fd5e0100493046022100b7aa571bfb81fa57e0d366f41be7e1d451fbf9529cbb5b5f0df3e2b9edc59ad6022100c02138c790e4c84288a7f9338f217a035fb87c4c0716c2dcc3d4a950704f323001473044022041c21d0fa28adeab92a355b285f62fdc2b1bee4f16b0d78aac0d3be2c6e986b102202e73c88015ae7966aa3fd0e06d7f0bb1d2e231c502ee333cd1f5f3c5f6f3a320014cc9524104a7a95441bb281f9f851556b8dcae7d5d85746e4382a852dcc8faa3a2320f442fed7d5b4f50d368cf4e18fb1642cfc4a5091e54d240aba9aeb74b07bcf95ad1d4410417b756f5562aa8b48d38fa25614391904dbfd7ef5a56e1d8b1e1c0b31200852a0ae3689350ed38be3d6de0c2472205f5ad697208784aa54174660cdf0b649b814104e35613163e133615ab272c30532c137f61344e14f36a146c3d4461863e5e5fcdc430206d08119771a18977d3a476f4889e5fb6c6eb5fbdd6ab7519e66b096fdb53aeffffffff0100000000000000000000000000 {
"version": "01000000",
"inputcount": "02",
"inputs": [
{ "txid": "a08d7595...5846035a", "vout": "00000000", "scriptsigsize": "fd6001", "scriptsig": "00493046...b096fdb53ae", "sequence": "ffffffff" },
{ "txid": "4ba60a7b...2a006acd", "vout": "01000000", "scriptsigsize": "fd5e01", "scriptsig": "00493046...b096fdb53ae", "sequence": "ffffffff" }
],
"outputcount": "01",
"outputs": [
{ "amount": "0000000000000000", "scriptpubkeysize": "00", "scriptpubkey": "" }
],
"locktime": "00000000"
} Transação: 87d8ed6aae8ad82b01e2b9d7d7ca21e55e83e8fa2ae587892f12b06d3a12253c
Esta transação tem uma saída com o ScriptPubKey vazio.
Normalmente essa saída seria gastável por qualquer um (porque não há trava nela), mas o valor da saída é zero, então não há valor em gastá-la.
Então, basicamente, esta transação deu todos os satoshis das entradas (100000 sats + 100000 sats) ao minerador como taxa de transação.
Resumo
Esta é a explicação do Satoshi sobre por que usamos saídas no Bitcoin:
Embora fosse possível lidar com as moedas individualmente, seria impraticável fazer uma transação separada para cada centavo em uma transferência. Para permitir que o valor seja dividido e combinado, as transações contêm múltiplas entradas e saídas. Normalmente haverá uma única entrada de uma transação anterior maior, ou múltiplas entradas combinando valores menores, e no máximo duas saídas: uma para o pagamento e outra devolvendo o troco, se houver, ao remetente.
Então, é isso: as saídas são apenas pequenos cofres de segurança digitais.