Bitcoin do Zero: Desvendando a Arquitetura por Trás das Transações e Endereços
Explore a arquitetura fundamental do Bitcoin, desde o modelo UTXO e a mecânica das transações até os diferentes tipos de endereços e a evolução dos protocolos. Entenda como as taxas são formadas e por que as transações não são instantâneas.
MundiX News·26 de junho de 2026·3 min de leitura·👁 1 views
Neste artigo, examinaremos o Bitcoin como um sistema técnico, investigando a estrutura de suas transações, o que está por trás da misteriosa sigla UTXO, por que existem diferentes tipos de endereços, de onde vêm as taxas e quais decisões arquitetônicas ainda geram debates acirrados entre os usuários.
O dinheiro sempre foi emitido, contabilizado e controlado por alguém: um estado, um banco ou um sistema de pagamento. Isso foi assim até 2008, quando surgiu o Bitcoin, que pode ser considerado não apenas a criptomoeda mais popular do planeta, mas também um ousado experimento de engenharia que sobreviveu a inúmeras crises, proibições, hacks de exchanges e 'enterros' na imprensa. O Bitcoin é tradicionalmente considerado uma espécie de padrão ouro no mundo das criptomoedas modernas – todos os outros projetos que surgiram posteriormente se orientaram, em maior ou menor grau, a ele.
Ao mesmo tempo, existem muitos equívocos em torno do Bitcoin. Muitos o imaginam como uma espécie de 'moeda' virtual ou um conjunto de contas semelhantes às bancárias, mas, na verdade, sua estrutura é muito mais interessante. Para entender mais profundamente os princípios de funcionamento das criptomoedas em geral, vamos olhar para o Bitcoin como uma construção de engenharia complexa, mas fascinante.
Transações: Entradas e Saídas (UTXO)
Se você não vive em alguma ilha deserta no meio do Oceano Pacífico, você usa constantemente aplicativos bancários e sabe perfeitamente como eles funcionam: você se autentica no programa e vê o saldo de todas as suas contas e cartões ativos na tela do seu smartphone. Se necessário, você transfere parte do dinheiro para outra pessoa pelo número de telefone ou dados do cartão, ou paga por algum serviço, ou talvez por um produto comprado. Isso é chamado de 'modelo de saldo', e é nele que a maioria dos sistemas de pagamento bancário é construída: o banco armazena informações sobre quanto dinheiro está em cada conta, e uma transferência se resume a alterar dois números no banco de dados – a soma do remetente diminui, a do destinatário aumenta.
Uma carteira de criptomoeda, do ponto de vista do usuário, funciona de forma praticamente semelhante, mas com uma nuance técnica importante. Embora as carteiras também exibam o saldo familiar, a rede em si não armazena saldos. Não há um registro no blockchain do tipo 'Maria tem 3 BTC, Vasya tem 1 BTC'; em vez disso, o sistema opera com transações e seus resultados. Cada transferência recebida cria um novo fragmento de valor que pode ser posteriormente utilizado em outra transação.
Essa abordagem é baseada no modelo UTXO (Unspent Transaction Output) – saídas de transação não gastas. À primeira vista, isso parece um detalhe técnico insignificante, mas é nele que toda a economia do Bitcoin é construída, e é isso que o diferencia dos sistemas de pagamento tradicionais. Quando uma carteira exibe o saldo para o usuário, ela, na verdade, o calcula independentemente a cada vez, somando todos os UTXOs que o proprietário pode dispor naquele momento.
Cada transação no Bitcoin consiste em duas partes principais: entradas (inputs) e saídas (outputs). As entradas indicam quais UTXOs criados anteriormente serão gastos, e as saídas indicam a quem os novos UTXOs pertencerão após a conclusão da transferência. Suponha que alguém recebeu duas transferências: 0,3 BTC e 0,7 BTC. No blockchain, estes serão dois UTXOs independentes. Se o usuário então quiser enviar 0,8 BTC para alguém, a carteira terá que usar ambas essas saídas como entradas para a nova transação. Após isso, os UTXOs antigos serão considerados gastos e não poderão mais ser usados como entradas para novas transações, e em seu lugar surgirão novos.
Aqui surge uma característica importante. Uma transação deve gastar as entradas integralmente, ou melhor, os UTXOs incluídos nas entradas são gastos completamente. Se UTXOs com um valor total de 1 BTC são fornecidos como entrada, e outro usuário da rede precisa enviar apenas 0,8 BTC, o valor restante não pode simplesmente ser deixado 'na entrada'. Portanto, geralmente é criada uma saída adicional que retorna o saldo ao remetente. Isso é chamado de 'change output' – saída com troco. Como resultado, uma transação típica na rede Bitcoin não se parece com uma simples transferência de dinheiro de um usuário para outro, mas sim com uma operação de destruição de UTXOs antigos e criação de novos. É por isso que é impossível encontrar o saldo de qualquer endereço no blockchain em formato pronto: ele precisa ser calculado a cada vez a partir da totalidade das saídas ainda não gastas.
Essa tecnologia pode ser explicada de forma ilustrativa com um exemplo simples: digamos que alguém lhe pagou pelo trabalho com uma nota de 1000 rublos, e você precisa pagar uma dívida de 700 rublos a outra pessoa. Você não pode simplesmente arrancar um pedaço da nota de mil; em vez disso, você entrega a nota inteira ao credor e pede 300 rublos de troco. Assim, duas novas transações são formadas para você: 700 (dívida) e 300 (troco, change output), e esses 300 rublos voltam para você e podem ser usados na próxima transação. Ou seja, o troco se torna um novo UTXO pertencente ao remetente dos 1000 rublos, e este UTXO pode ser usado em futuras operações monetárias.
Claro, as transações reais na rede Bitcoin são frequentemente mais complexas do que nosso exemplo. Uma transação pode usar várias entradas e criar várias saídas para diferentes destinatários. No entanto, o princípio básico permanece o mesmo: UTXOs antigos são gastos inteiramente, e em troca surgem novos. Além disso, no exemplo da nota de mil rublos, não consideramos outro elemento importante de qualquer transação – a taxa de rede.
Na prática, a soma de todas as saídas é geralmente um pouco menor que a soma das entradas, e a diferença entre elas forma a taxa de transferência. Usuários de sistemas bancários estão acostumados a perceber a taxa como um pagamento discreto que o usuário envia diretamente ao banco ou sistema de pagamento pela execução da transação. No Bitcoin, a mecânica é um pouco diferente.
Quando você forma uma transação, você não especifica a taxa como um campo separado ou uma saída separada para o minerador. Você simplesmente cria uma soma na saída um pouco menor que a soma da entrada, e a diferença entre as entradas e saídas não é explicitamente registrada em lugar nenhum como 'taxa'. O minerador, ao montar o bloco, calcula essas diferenças 'não reivindicadas' de todas as transações e as apropria através de uma transação especial chamada coinbase. Em outras palavras, a taxa é uma propriedade emergente que surge da diferença de somas, e não um pagamento direcionado de um valor específico.
Sem dúvida, você pode solicitar que todo o troco seja devolvido até o último centavo, então a diferença entre as entradas e saídas será zero. Esta é uma transação absolutamente legal do ponto de vista do protocolo. Mas, neste caso, os nós da rede (nodes) podem se recusar a aceitá-la no mempool (fila de transações não confirmadas). A maioria das implementações de blockchain tem uma configuração de taxa mínima de retransmissão (relay fee) – por padrão, transações com taxa zero ou extremamente baixa por byte não serão reencaminhadas pela rede por muitos nós. Além disso, os mineradores não são obrigados a incluir tal transação em um bloco. O minerador escolhe quais transações do mempool colocar no bloco, e geralmente faz isso com base na taxa por byte (sat/vByte). Uma transação com taxa zero é desvantajosa e, com blocos cheios, será substituída por transações mais 'lucrativas'. Em última análise, tal transação pode ficar presa no mempool por muito tempo – às vezes dias, semanas ou nem mesmo entrar em um bloco, se for simplesmente removida do mempool por timeout.
Veja como, por exemplo, uma transação pode parecer no blockchain do Bitcoin: recebemos duas transferências de entrada nos valores de 0,3 e 0,7 BTC, transferimos 0,8 BTC para outro usuário, recebemos 0,1998 BTC de troco e pagamos 0,0002 BTC de taxa por toda essa história. Na verdade, recebemos 1 BTC e gastamos 1 BTC, e ao mesmo tempo, temos um saldo não gasto de 0,1998 BTC, que pode ser gasto na próxima vez.
Entradas:
0,3 BTC (UTXO #1)
0,7 BTC (UTXO #2)
Saídas:
0,8 BTC -> destinatário
0,1998 BTC -> troco para o remetente
Taxa:
0,0002 BTC
De onde a rede sabe quais moedas podem ser gastas?
Como você já entendeu, a entrada de uma transação não contém as moedas em si e nem mesmo armazena informações completas sobre a transferência anterior. Ela apenas se refere a uma saída específica de uma transação anterior que deve ser gasta. Essa referência consiste no identificador da transação anterior (txid) e no número da saída dentro dela (vout). Aqui surge a questão principal: de onde a rede sabe que a pessoa que está criando uma nova transação tem o direito de gastar essa saída?
A resposta está na própria estrutura do UTXO. Cada saída de transação é criada não apenas com um valor, mas com uma condição de gasto específica. No caso mais simples, essa condição é: 'esta saída só pode ser gasta por quem apresentar uma assinatura digital correspondente a uma chave pública específica'.
Quando o proprietário dos fundos cria uma nova transação, ele não apenas especifica uma referência a uma saída antiga. Ele adiciona dados que permitem verificar o cumprimento dessa condição: uma assinatura digital criada com sua própria chave privada. Isso resulta em um par peculiar: a saída anterior contém a regra, e a nova entrada contém a prova de que essa regra foi cumprida. Um script de bloqueio especial (locking script, também chamado de scriptPubKey) é responsável por isso – um fragmento de código na saída (output) da transação que define as condições sob as quais esses fundos podem ser gastos. Se as condições não forem cumpridas, os fundos permanecem inacessíveis.
Se a assinatura estiver correta, a rede aceita essa entrada e considera a saída gasta. Se a assinatura não corresponder ou a saída especificada já tiver sido usada anteriormente, a transação será rejeitada. É importante entender: a própria referência ao UTXO não dá o direito de dispor dos fundos. Ela apenas indica qual saída específica o usuário está tentando gastar. O direito de gasto é confirmado apenas por uma assinatura digital correta, que nas transações clássicas é armazenada em um campo especial scriptSig, e nas transações SegWit (uma atualização do protocolo Bitcoin introduzida em agosto de 2017) é movida para uma estrutura separada witness.
Em termos simples, cada entrada diz à rede: 'Eu quero usar esta saída específica, criada por esta transação'. Os nós da rede encontram o registro especificado no blockchain, verificam se essa saída realmente existe e ainda não foi gasta anteriormente, e então verificam se o remetente tem o direito de dispor dela.
É precisamente por isso que no Bitcoin, na verdade, não são as moedas em si que são transferidas, mas o direito de gastar uma saída criada anteriormente. Uma nova transação fecha obrigações antigas e cria novas – para os próximos proprietários. Ao mesmo tempo, existem várias opções de condições sob as quais uma saída pode ser gasta, e elas são determinadas pelo endereço do destinatário de cada saída específica, ou melhor, pelo tipo de endereço para o qual os fundos foram enviados.
Endereço no Bitcoin
Um endereço na rede Bitcoin não é um número de conta familiar, mas uma forma conveniente de transmitir as condições sob as quais uma saída criada poderá ser gasta. Diferentes formatos de endereço, na verdade, definem diferentes tipos de tais condições. Quando você inicia um programa em seu smartphone ou computador que gerencia sua carteira de criptomoeda, você vê seu saldo atual e um ou mais endereços para os quais pode receber transferências. Visualmente, isso realmente se assemelha a uma conta bancária – basta passar este endereço, que é uma string de caracteres, para outra pessoa, e ela poderá enviar fundos para você.
No entanto, dentro da rede, um endereço não é um identificador de conta onde as moedas estão, nem um registro no banco de dados do tipo 'este endereço pertence a tantos bitcoins' (tais registros não existem no blockchain). Como mencionei anteriormente, quando um usuário envia bitcoins para alguém, não é o endereço do destinatário que vai para o blockchain, mas a saída da transação (output) com um cenário de verificação específico. Em vez de transferir um longo conjunto de dados técnicos uns para os outros, o usuário envia uma string curta de um formato específico. A carteira a converte em um cenário de bloqueio correspondente chamado locking script, que é então gravado na transação. São os endereços que correspondem a diferentes tipos de cenários de gasto de fundos.
Endereços Legacy: o primeiro formato de massa
Os endereços mais antigos e ainda reconhecíveis são os do formato Legacy. Eles começam com o dígito 1. Aqui está, por exemplo, o endereço do primeiro bloco do Bitcoin, o chamado 'endereço de gênese', contendo a recompensa do bloco criado pelo próprio Satoshi Nakamoto:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Em nível técnico, tais endereços correspondem ao esquema P2PKH (Pay-to-Public-Key-Hash). Ao criar um pagamento, os fundos são bloqueados com a condição: somente quem apresentar uma assinatura digital correspondente à chave pública especificada poderá gastá-los.
O esquema funciona da seguinte forma: a partir da chave pública, através de operações criptográficas, obtém-se um hash, esse hash é codificado em um formato conveniente para o usuário e se torna o endereço. Quando outra pessoa envia bitcoins para este endereço, ela, na verdade, cria um UTXO associado a esse hash. Ao gastar posteriormente, o destinatário fornece a chave pública e a assinatura. A rede verifica se a chave pública corresponde ao endereço e se a assinatura foi realmente criada pelo proprietário da chave privada.
A desvantagem dos endereços Legacy é que eles usam o formato de transação antigo, onde assinaturas semelhantes ocupam um espaço considerável dentro da própria transação. Isso aumenta o tamanho das transferências e, consequentemente, as taxas em caso de alta carga na rede.
SegWit: endereços de nova geração
Em 2017, uma grande atualização do protocolo, Segregated Witness (SegWit), foi ativada na rede Bitcoin. Um de seus objetivos era alterar a estrutura das transações: os dados de assinatura foram separados da parte principal da transação e movidos para uma área especial witness.
Para os usuários, isso se manifestou, entre outras coisas, na forma de um novo formato de endereço, começando com bc1:
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080
Esses endereços geralmente correspondem aos esquemas P2WPKH (Pay-to-Witness-Public-Key-Hash). Eles permitem reduzir o tamanho das transações em comparação com o Legacy e, assim, diminuir as taxas. Ao mesmo tempo, a lógica de verificação do direito de gastar UTXO não mudou fundamentalmente. O que mudou foi o local onde os dados de verificação são armazenados e como eles são considerados ao calcular o tamanho da transação.
Quando alguém envia bitcoins para um endereço bc1q..., não é o endereço em si que vai para o blockchain, mas uma saída de transação com uma condição aproximadamente da seguinte forma: 'Este UTXO só pode ser gasto por quem apresentar a chave pública cujo hash é igual ao valor especificado, e uma assinatura correta criada com a chave privada correspondente'.
Continuação disponível apenas para membros
Materiais das últimas edições tornam-se disponíveis individualmente apenas dois meses após a publicação. Para continuar a leitura, é necessário tornar-se membro da comunidade 'Xakep.ru'.
Junte-se à comunidade 'Xakep.ru'!
O status de membro da comunidade durante o período especificado lhe dará acesso a TODO o material da 'Xakep', permitirá baixar edições em PDF, desativará a publicidade no site e aumentará seu desconto pessoal acumulado!
Sem cartão para começar · Planos a partir de R$49/mês
Neste artigo, examinaremos o Bitcoin como um sistema técnico, investigando a estrutura de suas transações, o que está por trás da misteriosa sigla UTXO, por que existem diferentes tipos de endereços, de onde vêm as taxas e quais decisões arquitetônicas ainda geram debates acirrados entre os usuários.
O dinheiro sempre foi emitido, contabilizado e controlado por alguém: um estado, um banco ou um sistema de pagamento. Isso foi assim até 2008, quando surgiu o Bitcoin, que pode ser considerado não apenas a criptomoeda mais popular do planeta, mas também um ousado experimento de engenharia que sobreviveu a inúmeras crises, proibições, hacks de exchanges e 'enterros' na imprensa. O Bitcoin é tradicionalmente considerado uma espécie de padrão ouro no mundo das criptomoedas modernas – todos os outros projetos que surgiram posteriormente se orientaram, em maior ou menor grau, a ele.
Ao mesmo tempo, existem muitos equívocos em torno do Bitcoin. Muitos o imaginam como uma espécie de 'moeda' virtual ou um conjunto de contas semelhantes às bancárias, mas, na verdade, sua estrutura é muito mais interessante. Para entender mais profundamente os princípios de funcionamento das criptomoedas em geral, vamos olhar para o Bitcoin como uma construção de engenharia complexa, mas fascinante.
Transações: Entradas e Saídas (UTXO)
Se você não vive em alguma ilha deserta no meio do Oceano Pacífico, você usa constantemente aplicativos bancários e sabe perfeitamente como eles funcionam: você se autentica no programa e vê o saldo de todas as suas contas e cartões ativos na tela do seu smartphone. Se necessário, você transfere parte do dinheiro para outra pessoa pelo número de telefone ou dados do cartão, ou paga por algum serviço, ou talvez por um produto comprado. Isso é chamado de 'modelo de saldo', e é nele que a maioria dos sistemas de pagamento bancário é construída: o banco armazena informações sobre quanto dinheiro está em cada conta, e uma transferência se resume a alterar dois números no banco de dados – a soma do remetente diminui, a do destinatário aumenta.
Uma carteira de criptomoeda, do ponto de vista do usuário, funciona de forma praticamente semelhante, mas com uma nuance técnica importante. Embora as carteiras também exibam o saldo familiar, a rede em si não armazena saldos. Não há um registro no blockchain do tipo 'Maria tem 3 BTC, Vasya tem 1 BTC'; em vez disso, o sistema opera com transações e seus resultados. Cada transferência recebida cria um novo fragmento de valor que pode ser posteriormente utilizado em outra transação.
Essa abordagem é baseada no modelo UTXO (Unspent Transaction Output) – saídas de transação não gastas. À primeira vista, isso parece um detalhe técnico insignificante, mas é nele que toda a economia do Bitcoin é construída, e é isso que o diferencia dos sistemas de pagamento tradicionais. Quando uma carteira exibe o saldo para o usuário, ela, na verdade, o calcula independentemente a cada vez, somando todos os UTXOs que o proprietário pode dispor naquele momento.
Cada transação no Bitcoin consiste em duas partes principais: entradas (inputs) e saídas (outputs). As entradas indicam quais UTXOs criados anteriormente serão gastos, e as saídas indicam a quem os novos UTXOs pertencerão após a conclusão da transferência. Suponha que alguém recebeu duas transferências: 0,3 BTC e 0,7 BTC. No blockchain, estes serão dois UTXOs independentes. Se o usuário então quiser enviar 0,8 BTC para alguém, a carteira terá que usar ambas essas saídas como entradas para a nova transação. Após isso, os UTXOs antigos serão considerados gastos e não poderão mais ser usados como entradas para novas transações, e em seu lugar surgirão novos.
Aqui surge uma característica importante. Uma transação deve gastar as entradas integralmente, ou melhor, os UTXOs incluídos nas entradas são gastos completamente. Se UTXOs com um valor total de 1 BTC são fornecidos como entrada, e outro usuário da rede precisa enviar apenas 0,8 BTC, o valor restante não pode simplesmente ser deixado 'na entrada'. Portanto, geralmente é criada uma saída adicional que retorna o saldo ao remetente. Isso é chamado de 'change output' – saída com troco. Como resultado, uma transação típica na rede Bitcoin não se parece com uma simples transferência de dinheiro de um usuário para outro, mas sim com uma operação de destruição de UTXOs antigos e criação de novos. É por isso que é impossível encontrar o saldo de qualquer endereço no blockchain em formato pronto: ele precisa ser calculado a cada vez a partir da totalidade das saídas ainda não gastas.
Essa tecnologia pode ser explicada de forma ilustrativa com um exemplo simples: digamos que alguém lhe pagou pelo trabalho com uma nota de 1000 rublos, e você precisa pagar uma dívida de 700 rublos a outra pessoa. Você não pode simplesmente arrancar um pedaço da nota de mil; em vez disso, você entrega a nota inteira ao credor e pede 300 rublos de troco. Assim, duas novas transações são formadas para você: 700 (dívida) e 300 (troco, change output), e esses 300 rublos voltam para você e podem ser usados na próxima transação. Ou seja, o troco se torna um novo UTXO pertencente ao remetente dos 1000 rublos, e este UTXO pode ser usado em futuras operações monetárias.
Claro, as transações reais na rede Bitcoin são frequentemente mais complexas do que nosso exemplo. Uma transação pode usar várias entradas e criar várias saídas para diferentes destinatários. No entanto, o princípio básico permanece o mesmo: UTXOs antigos são gastos inteiramente, e em troca surgem novos. Além disso, no exemplo da nota de mil rublos, não consideramos outro elemento importante de qualquer transação – a taxa de rede.
Na prática, a soma de todas as saídas é geralmente um pouco menor que a soma das entradas, e a diferença entre elas forma a taxa de transferência. Usuários de sistemas bancários estão acostumados a perceber a taxa como um pagamento discreto que o usuário envia diretamente ao banco ou sistema de pagamento pela execução da transação. No Bitcoin, a mecânica é um pouco diferente.
Quando você forma uma transação, você não especifica a taxa como um campo separado ou uma saída separada para o minerador. Você simplesmente cria uma soma na saída um pouco menor que a soma da entrada, e a diferença entre as entradas e saídas não é explicitamente registrada em lugar nenhum como 'taxa'. O minerador, ao montar o bloco, calcula essas diferenças 'não reivindicadas' de todas as transações e as apropria através de uma transação especial chamada coinbase. Em outras palavras, a taxa é uma propriedade emergente que surge da diferença de somas, e não um pagamento direcionado de um valor específico.
Sem dúvida, você pode solicitar que todo o troco seja devolvido até o último centavo, então a diferença entre as entradas e saídas será zero. Esta é uma transação absolutamente legal do ponto de vista do protocolo. Mas, neste caso, os nós da rede (nodes) podem se recusar a aceitá-la no mempool (fila de transações não confirmadas). A maioria das implementações de blockchain tem uma configuração de taxa mínima de retransmissão (relay fee) – por padrão, transações com taxa zero ou extremamente baixa por byte não serão reencaminhadas pela rede por muitos nós. Além disso, os mineradores não são obrigados a incluir tal transação em um bloco. O minerador escolhe quais transações do mempool colocar no bloco, e geralmente faz isso com base na taxa por byte (sat/vByte). Uma transação com taxa zero é desvantajosa e, com blocos cheios, será substituída por transações mais 'lucrativas'. Em última análise, tal transação pode ficar presa no mempool por muito tempo – às vezes dias, semanas ou nem mesmo entrar em um bloco, se for simplesmente removida do mempool por timeout.
Veja como, por exemplo, uma transação pode parecer no blockchain do Bitcoin: recebemos duas transferências de entrada nos valores de 0,3 e 0,7 BTC, transferimos 0,8 BTC para outro usuário, recebemos 0,1998 BTC de troco e pagamos 0,0002 BTC de taxa por toda essa história. Na verdade, recebemos 1 BTC e gastamos 1 BTC, e ao mesmo tempo, temos um saldo não gasto de 0,1998 BTC, que pode ser gasto na próxima vez.
Entradas:
0,3 BTC (UTXO #1)
0,7 BTC (UTXO #2)
Saídas:
0,8 BTC -> destinatário
0,1998 BTC -> troco para o remetente
Taxa:
0,0002 BTC
De onde a rede sabe quais moedas podem ser gastas?
Como você já entendeu, a entrada de uma transação não contém as moedas em si e nem mesmo armazena informações completas sobre a transferência anterior. Ela apenas se refere a uma saída específica de uma transação anterior que deve ser gasta. Essa referência consiste no identificador da transação anterior (txid) e no número da saída dentro dela (vout). Aqui surge a questão principal: de onde a rede sabe que a pessoa que está criando uma nova transação tem o direito de gastar essa saída?
A resposta está na própria estrutura do UTXO. Cada saída de transação é criada não apenas com um valor, mas com uma condição de gasto específica. No caso mais simples, essa condição é: 'esta saída só pode ser gasta por quem apresentar uma assinatura digital correspondente a uma chave pública específica'.
Quando o proprietário dos fundos cria uma nova transação, ele não apenas especifica uma referência a uma saída antiga. Ele adiciona dados que permitem verificar o cumprimento dessa condição: uma assinatura digital criada com sua própria chave privada. Isso resulta em um par peculiar: a saída anterior contém a regra, e a nova entrada contém a prova de que essa regra foi cumprida. Um script de bloqueio especial (locking script, também chamado de scriptPubKey) é responsável por isso – um fragmento de código na saída (output) da transação que define as condições sob as quais esses fundos podem ser gastos. Se as condições não forem cumpridas, os fundos permanecem inacessíveis.
Se a assinatura estiver correta, a rede aceita essa entrada e considera a saída gasta. Se a assinatura não corresponder ou a saída especificada já tiver sido usada anteriormente, a transação será rejeitada. É importante entender: a própria referência ao UTXO não dá o direito de dispor dos fundos. Ela apenas indica qual saída específica o usuário está tentando gastar. O direito de gasto é confirmado apenas por uma assinatura digital correta, que nas transações clássicas é armazenada em um campo especial scriptSig, e nas transações SegWit (uma atualização do protocolo Bitcoin introduzida em agosto de 2017) é movida para uma estrutura separada witness.
Em termos simples, cada entrada diz à rede: 'Eu quero usar esta saída específica, criada por esta transação'. Os nós da rede encontram o registro especificado no blockchain, verificam se essa saída realmente existe e ainda não foi gasta anteriormente, e então verificam se o remetente tem o direito de dispor dela.
É precisamente por isso que no Bitcoin, na verdade, não são as moedas em si que são transferidas, mas o direito de gastar uma saída criada anteriormente. Uma nova transação fecha obrigações antigas e cria novas – para os próximos proprietários. Ao mesmo tempo, existem várias opções de condições sob as quais uma saída pode ser gasta, e elas são determinadas pelo endereço do destinatário de cada saída específica, ou melhor, pelo tipo de endereço para o qual os fundos foram enviados.
Endereço no Bitcoin
Um endereço na rede Bitcoin não é um número de conta familiar, mas uma forma conveniente de transmitir as condições sob as quais uma saída criada poderá ser gasta. Diferentes formatos de endereço, na verdade, definem diferentes tipos de tais condições. Quando você inicia um programa em seu smartphone ou computador que gerencia sua carteira de criptomoeda, você vê seu saldo atual e um ou mais endereços para os quais pode receber transferências. Visualmente, isso realmente se assemelha a uma conta bancária – basta passar este endereço, que é uma string de caracteres, para outra pessoa, e ela poderá enviar fundos para você.
No entanto, dentro da rede, um endereço não é um identificador de conta onde as moedas estão, nem um registro no banco de dados do tipo 'este endereço pertence a tantos bitcoins' (tais registros não existem no blockchain). Como mencionei anteriormente, quando um usuário envia bitcoins para alguém, não é o endereço do destinatário que vai para o blockchain, mas a saída da transação (output) com um cenário de verificação específico. Em vez de transferir um longo conjunto de dados técnicos uns para os outros, o usuário envia uma string curta de um formato específico. A carteira a converte em um cenário de bloqueio correspondente chamado locking script, que é então gravado na transação. São os endereços que correspondem a diferentes tipos de cenários de gasto de fundos.
Endereços Legacy: o primeiro formato de massa
Os endereços mais antigos e ainda reconhecíveis são os do formato Legacy. Eles começam com o dígito 1. Aqui está, por exemplo, o endereço do primeiro bloco do Bitcoin, o chamado 'endereço de gênese', contendo a recompensa do bloco criado pelo próprio Satoshi Nakamoto:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Em nível técnico, tais endereços correspondem ao esquema P2PKH (Pay-to-Public-Key-Hash). Ao criar um pagamento, os fundos são bloqueados com a condição: somente quem apresentar uma assinatura digital correspondente à chave pública especificada poderá gastá-los.
O esquema funciona da seguinte forma: a partir da chave pública, através de operações criptográficas, obtém-se um hash, esse hash é codificado em um formato conveniente para o usuário e se torna o endereço. Quando outra pessoa envia bitcoins para este endereço, ela, na verdade, cria um UTXO associado a esse hash. Ao gastar posteriormente, o destinatário fornece a chave pública e a assinatura. A rede verifica se a chave pública corresponde ao endereço e se a assinatura foi realmente criada pelo proprietário da chave privada.
A desvantagem dos endereços Legacy é que eles usam o formato de transação antigo, onde assinaturas semelhantes ocupam um espaço considerável dentro da própria transação. Isso aumenta o tamanho das transferências e, consequentemente, as taxas em caso de alta carga na rede.
SegWit: endereços de nova geração
Em 2017, uma grande atualização do protocolo, Segregated Witness (SegWit), foi ativada na rede Bitcoin. Um de seus objetivos era alterar a estrutura das transações: os dados de assinatura foram separados da parte principal da transação e movidos para uma área especial witness.
Para os usuários, isso se manifestou, entre outras coisas, na forma de um novo formato de endereço, começando com bc1:
bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080
Esses endereços geralmente correspondem aos esquemas P2WPKH (Pay-to-Witness-Public-Key-Hash). Eles permitem reduzir o tamanho das transações em comparação com o Legacy e, assim, diminuir as taxas. Ao mesmo tempo, a lógica de verificação do direito de gastar UTXO não mudou fundamentalmente. O que mudou foi o local onde os dados de verificação são armazenados e como eles são considerados ao calcular o tamanho da transação.
Quando alguém envia bitcoins para um endereço bc1q..., não é o endereço em si que vai para o blockchain, mas uma saída de transação com uma condição aproximadamente da seguinte forma: 'Este UTXO só pode ser gasto por quem apresentar a chave pública cujo hash é igual ao valor especificado, e uma assinatura correta criada com a chave privada correspondente'.
Continuação disponível apenas para membros
Materiais das últimas edições tornam-se disponíveis individualmente apenas dois meses após a publicação. Para continuar a leitura, é necessário tornar-se membro da comunidade 'Xakep.ru'.
Junte-se à comunidade 'Xakep.ru'!
O status de membro da comunidade durante o período especificado lhe dará acesso a TODO o material da 'Xakep', permitirá baixar edições em PDF, desativará a publicidade no site e aumentará seu desconto pessoal acumulado!
Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.