Segregated Witness é uma proposta (BIP-141) projetada para resolver o problema de maleabilidade de transações do blockchain Bitcoin.


1. O que é maleabilidade de transação?

Ou seja, o conteúdo da transação não mudou, mas o ID da transação mudou. Devido à simetria da curva elíptica no algoritmo de assinatura ECDSA usado na rede Bitcoin, duas assinaturas válidas sempre podem ser calculadas ao assinar uma transação, e essas duas assinaturas válidas também podem ser calculadas uma da outra. Depois de transmitir uma transação, publique uma transação com o mesmo conteúdo usando assinaturas diferentes. As duas transações têm o mesmo conteúdo, mas IDs de transação diferentes, o que enganará os participantes da rede.


2. A extensão da transação altera a assinatura, mas o conteúdo da transação não muda. No final, a rede ainda confirmará o conteúdo da transação. A segunda transação com uma assinatura diferente, mas o mesmo conteúdo da transação também será invalidada. Isso não tem impacto na segurança da transação e não é realmente um problema na rede. Não haverá problema de gasto duplo (o mesmo dinheiro é gasto duas vezes), então o que a extensão da transação realmente afetará?

Na verdade, isso ocorre principalmente porque muitos serviços de Bitcoin (como exchanges e serviços de automação on-chain de terceiros) dependem de IDs de transação como identificadores de transação. Por exemplo, Xiao A inicia uma retirada da bolsa e, em seguida, sua transação de retirada é transmitida. Antes que sua transação seja verificada pelo nó, Xiao A realiza um ataque de escalabilidade e a nova transação é confirmada primeiro e a nova transação será permitir que ele obtenha as moedas, enquanto a transação antiga será rejeitada pela rede. No entanto, Xiao A reclamou à exchange que não recebeu as moedas. A exchange viu que a transação anterior para transferir moedas para Xiao A foi de fato rejeitada, então transferiu outra quantia de moedas para ele.


3. Parece que o problema é realmente causado pelo ID da transação sendo usado como um identificador de transação. É possível não usar o ID da transação como um identificador de transação?

Analisar o conteúdo no bloco BTC, como usar altura do bloco + posição da transação para determinar o identificador? Ou determinar a identidade você mesmo com base no hash de entrada+saída da transação? Eles podem, de fato, ser usados ​​como identificadores exclusivos, mas são ineficientes na prática ou não são tão convenientes e seguros quanto os IDs de transação (os IDs de transação são registrados diretamente no conteúdo do bloco e nunca podem ser alterados após serem carregados na cadeia).


4. Como o segwit resolve o problema de escalabilidade de transações?

O Segwit resolve esse problema efetivamente separando os dados da assinatura da transação (testemunha) do bloco, de modo que a alteração da assinatura não afetará mais o ID da transação. Ao mesmo tempo, o Segwit também reduz o tamanho do bloco até certo ponto e melhora os recursos de processamento de transações (por exemplo, o SPV pode processar mais conteúdo de transações com a mesma largura de banda).

segwit


5. Como esse problema era resolvido antes do segwit?

Após uma transação falhar, é necessário verificar as informações de erro de falha de transação no blockchain e se tal transação foi iniciada na rede dentro de um curto período de tempo para determinar se ela foi atacada pela extensão de transação. Ao mesmo tempo, você também deve tentar evitar aplicar lógica a transações não confirmadas ou transações que foram confirmadas por um pequeno número de blocos. Mas esses métodos não resolvem o problema fundamentalmente.

#BTC☀ #SegWit #技术学习

BTC
BTC
81,932
-1.00%