Pular para o conteúdo
buybitcoinsmart

Glossário / Protocolo e atualizações

SegWit

Outros nomes: Testemunha segregada, BIP141.

O que é o SegWit?
O SegWit tirou os dados de assinatura da parte da transação que o txid fixa, corrigindo a maleabilidade de transações e aumentando a capacidade dos blocos sem alterar o limite base de um megabyte.

Especificação no BIP-141.

A mudança foi estrutural, não cosmética. As assinaturas passaram para uma seção de testemunha que os nós antigos nunca baixam, o que permitiu entregar um aumento de capacidade como um soft fork, e cada byte de testemunha custa uma unidade de peso em vez de quatro. Por isso, gastar a partir de um endereço bc1q custa aproximadamente metade do que custa uma entrada legada.

Como funciona

O Segregated Witness divide uma transação em duas partes e calcula o hash de cada uma separadamente.

A parte base contém a versão, as entradas, as saídas e o locktime. A parte de testemunha contém, para cada entrada, a pilha de itens que a autoriza, tipicamente uma assinatura e uma chave pública. O identificador da transação é calculado apenas sobre a parte base, então nada na testemunha pode alterá-lo. Um segundo identificador, o wtxid, cobre as duas partes, e a raiz de Merkle de todos os wtxid de um bloco é fixada dentro da transação coinbase, de modo que os dados da testemunha também não podem ser adulterados.

A capacidade decorre de uma mudança na contabilidade, não de uma mudança no limite. Cada byte fora da testemunha custa quatro unidades de peso, cada byte dentro custa uma, e um bloco pode conter 4.000.000 unidades de peso. Os dados que não são de testemunha, portanto, continuam sem poder exceder 1.000.000 bytes, exatamente como antes, enquanto as assinaturas seguem no orçamento restante. Um nó anterior a 2017 que mede da forma antiga vê um bloco válido e não faz objeção, e é precisamente por isso que a atualização não precisou de um hard fork.

O BIP-143 reescreveu como uma entrada de testemunha é assinada, e o ganho prático é maior do que parece. O antigo algoritmo de hash de assinatura recalculava o hash de partes da transação uma vez por entrada, então assinar uma transação com muitas entradas crescia de forma quadrática. O novo reutiliza hashes pré-calculados e, o que é decisivo, fixa o valor que está sendo gasto. Antes disso, uma carteira de hardware podia receber informação falsa sobre quanto valia uma entrada e ser levada a autorizar uma taxa enorme.

O SegWit também numerou seus tipos de saída. A versão de testemunha 0 abrange P2WPKH e P2WSH; a versão de testemunha 1 ficou vazia e mais tarde foi ocupada pelo Taproot. Agora é possível adicionar novos tipos de saída sem precisar de um novo debate sobre o formato de endereço a cada vez.

Por que isso importa quando você compra bitcoin

Três coisas no seu próprio uso do bitcoin remontam diretamente a esta atualização.

A primeira é o que você paga para mover bitcoins. Uma entrada SegWit nativa tem cerca de 68 vbytes contra aproximadamente 148 de uma entrada legada, então uma carteira que gasta três entradas com uma taxa de 20 sat/vB economiza vários milhares de satoshis em uma única transação. Essa economia aparece quando você gasta, não quando recebe, então o que importa é o tipo de endereço que sua própria carteira usa, não aquele de onde sua corretora faz o saque.

A segunda é o que sua carteira de hardware pode informar com segurança. Como o BIP-143 fixa o valor da entrada, a taxa mostrada na tela de uma Trezor ou de uma Ledger é derivada de dados que o dispositivo pode verificar, e não de dados que o computador conectado afirma. Isso fechou um ataque real, e é por isso que assinar uma entrada legada ainda exige entregar ao dispositivo toda a transação anterior para que ele mesmo confira o valor.

A terceira é a Lightning e, portanto, qualquer corretora construída sobre ela. A Strike move valor pela Lightning por padrão, e os canais Lightning são financiados em saídas SegWit porque o protocolo não consegue funcionar sem um txid estável. Sem SegWit, não há canais, nem qualquer produto de liquidação instantânea sobre eles.

O bug de maleabilidade que precisou morrer primeiro

A maleabilidade de transações parece um caso extremo e foi o maior obstáculo para construir qualquer coisa sobre o bitcoin.

Uma assinatura ECDSA tem mais de uma codificação válida. Antes do SegWit, um terceiro que observasse a mempool podia pegar uma transação não confirmada, recodificar uma assinatura sem invalidá-la e retransmiti-la. Os bitcoins continuavam indo para o mesmo lugar pelo mesmo valor. Só o identificador da transação mudava, e qualquer software que tivesse registrado o identificador original agora acreditava que o pagamento havia desaparecido. A Mt. Gox culpou publicamente a maleabilidade pela suspensão dos saques em fevereiro de 2014, uma alegação que outros desenvolvedores contestaram na época, mas a falha de fundo era real.

Os canais de pagamento tornaram a maleabilidade fatal em vez de incômoda. Um canal funciona guardando uma transação de reembolso assinada que gasta uma saída de financiamento identificada por seu txid, antes mesmo de essa transação de financiamento ser transmitida. Se o txid mudar, o reembolso se torna impossível de gastar, deixando uma das partes capaz de manter o dinheiro da outra como refém. O artigo de 2015 sobre a Lightning Network, de Joseph Poon e Thaddeus Dryja, apontava em seu próprio texto uma correção da maleabilidade como pré-requisito.

O SegWit eliminou o problema pela raiz ao tirar as assinaturas da pré-imagem do identificador. Qualquer entrada que gasta uma saída de testemunha tem um txid que nenhum terceiro pode alterar, e os protocolos de canais finalmente puderam ser construídos como foram projetados.

SegWit vs dados de testemunha

SegWit é a atualização; os dados de testemunha são a estrutura que ela criou. O primeiro é um evento com data, 24 de agosto de 2017, e uma especificação, o BIP-141. O outro é um campo que existe na maioria das transações da rede hoje, que carrega assinaturas e scripts e que tem sua própria serialização e seu próprio peso com desconto. Dizer que uma transação “usa SegWit” é uma forma abreviada de dizer que ela gasta entradas cuja autorização está nesse campo.

SegWit vs Taproot

Dois soft forks, com quatro anos de diferença, ambos sobre testemunhas. O SegWit criou a estrutura de testemunha e definiu os tipos de saída da versão 0, aqueles cujos endereços começam com bc1q. O Taproot ocupou a versão 1, adicionou as assinaturas Schnorr e mudou como os scripts dentro de uma testemunha são avaliados, produzindo endereços que começam com bc1p. O Taproot só pôde ser implantado com um custo tão baixo porque o SegWit já havia construído o esquema de versionamento, e é por isso que os dois devem ser lidos como um único projeto realizado por etapas.

Não confundir com

Perguntas frequentes

É preciso fazer algo para usar o SegWit?

Basta escolher o endereço de recebimento correto. A maioria das carteiras hoje usa por padrão um endereço que começa com bc1q, que é uma saída SegWit nativa, e a economia de taxas chega quando você depois gasta a partir dele, não quando recebe.

O SegWit é a mesma coisa que um endereço bech32?

Não. O SegWit é a mudança de consenso; o bech32 é a codificação de texto criada junto com ele para os endereços que ele criou. Um endereço SegWit aninhado começa com 3 e não é bech32 de forma alguma, mas mesmo assim gasta entradas de testemunha.

O SegWit elevou o tamanho do bloco para 4 MB?

Não do modo que esse número sugere. Os blocos têm um limite de 4.000.000 unidades de peso, e apenas um bloco preenchido quase inteiramente com dados de testemunha chegaria perto de 4 MB. O tráfego comum de pagamentos produz blocos mais próximos de 1,5 MB.

Leia a seguir

Termos relacionados

Mais em Protocolo e atualizações

Ler esta página em inglês