Tipo de transações Bitcoin – Parte 1

Este artigo pressupõe que você tenha algum conhecimento de como as transações em Bitcoin funcionam. Se você é novo no mundo das criptomoedas, sugiro que você inicie esta página inicial ou este incrível vídeo.

Terminologia

Vamos supor que Alice já tenha recebido algumas moedas de uma transação anterior e agora queira enviar algumas para Bob.

No Bitcoin, cada transação tem dois atributos importantes. O scriptPubKey (também conhecido como script de saída ou bloqueio) e o scriptSig (script de entrada/desbloqueio). Alice decide, a seu critério, como será o scriptPubKey. Ela usa uma linguagem de Turing incompleta e parecida com a pilha chamada Script (sim, que ótimo nome) para definir as condições que Bob precisa cumprir para gastar essas moedas em outra ocasião.

Alice geralmente cria o scriptPubKey com base em alguns dados que Bob envia para ela. Chamamos esses dados de endereço e, em uma transação simples, você pode pensar neles como um número de conta bancária. Esse endereço geralmente é a parte principal do scriptPubKey, acompanhada de algumas outras instruções de script .

Quando a saída da transação está prestes a ser gasta, o outro script – scriptSig – é a prova de que as condições scriptPubKey da transação anterior foram atendidas.

À medida que a rede Bitcoin evoluiu, ocorreu o número padrão de pares scriptPubKey/scriptSig e é exatamente isso que abordaremos neste artigo.

P2PK (Pay-to-Public-Key)

No momento que o White Paper do Bitcoin foi elaborado em 2008, havia apenas um tipo de transação única. O scriptPubKey é igual à chave pública do destinatário e o scriptSig é apenas uma assinatura. A assinatura corresponde à chave pública do scriptPubKey de uma transação anterior. A assinatura sempre corresponde ao scriptPubKey da transação anterior – é assim que você prova que pode gastá-la.

ScriptPubKey: <Bob's PublicKey> OP_CHECKSIG
ScriptSig:<Alice's Signature>

Durante a validação, isso é encadeado para <Assinatura> <Chave Pública>OP_CHECKSIG e executado [1] . O OP_CHECKSIG verifica a assinatura com a chave pública. Se avaliada como verdadeira, a transação é válida.

 

P2PKH (Hash de pagamento para chave pública)

O tipo P2PKH está atualmente obsoleto.

Na transação P2PKH anterior, o dinheiro é “enviado para uma chave pública”. Essa chave pública é, portanto, visível no blockchain e a defesa que impede que Alice roube o dinheiro de Bob é o algoritmo de assinatura ECDSA, a inviabilidade de derivar uma chave privada da chave pública, em particular.

O que acontece se essa criptografia falhar no futuro? Os computadores quânticos estão chegando (bem, talvez?) E o problema de logaritmo discreto subjacente do ECDSA não se aplica aos computadores quânticos (consulte o algoritmo de Shor). Aqueles com posse de computadores quânticos seriam teoricamente capazes de derivar chaves privadas das chaves públicas visíveis no blockchain. Isso é péssimo.

Para mitigar isso, os criadores de Bitcoin apresentaram uma melhoria simples. Alice recebe apenas um hash da chave pública de Bob. Não há algoritmos quânticos conhecidos que derrotem o SHA-256 no momento. Os scripts têm a seguinte aparência:

ScriptPubKey: OP_DUP OP_HASH160 <PublicKeyHash> OP_EQUALVERIFY OP_CHECKSIG
ScriptSig:<Signature> <PublicKey>

Como você pode ver, a chave pública ainda está visível na blockchain (no scriptSig). Precisa ser, porque os nós (ou nodes) do Bitcoin não poderiam validar a assinatura caso contrário. A grande melhoria é que a chave pública está no scriptSig, o que significa que ela será publicada apenas se as moedas forem gastas, mas não quando recebidas.

Se você quiser entender por que o script é assim, veja como ele é avaliado. O livro Mastering Bitcoin oferece uma boa visualização passo a passo .

P2PKH é o tipo de transação mais popular atualizado e representa a situação típica “Alice paga a Bob”. Se você já experimentou bitcoin, é mais provável que tenha usado. O Bitcoin, no entanto, oferece mais opções e não se limita a esses cenários.

Os endereços P2PKH começam com “1” e são conhecidos como Endereços legacy e é ainda o endereço mais implementado e suportado na grande maioria das Bitcoin wallets por ser o mais antigo.

P2PSH (pagamento para script-Hash)

Um dos cenários mais complicados é o P2SH introduzido em 2012 (BIP 16). Os endereços P2PSH começam com “3”.

ScriptPubKey: OP_HASH160 <redeemScriptHash> OP_EQUAL
ScriptSig:<Signature> <PubKey> <redeemScript>

Um redeem script (ou script de resgate) é outro script de script. Ele define as condições em vez do scriptPubKey e é incorporado ao scriptSig. Bob é responsável por criar o script, mas não o envia para Alice na íntegra. Ele prefere fazer o hash e envia o hash para Alice. Alice então inclui o hash no scriptPubKey.

Somente durante os gastos, Bob revela o script em scriptSig. O script de resgate (redeem script) pode parecer de qualquer maneira, um exemplo disso é:

redeem script: 2 <PubKey1> <PubKey2> <PubKey3> <PubKey4> <PubKey5> 5 OP_CHECKMULTISIG

Esse também é muito comum no P2SH, o multisig. Mesmo que P2SH! = Multisig, seja o seu uso mais popular atualmente.

Observe que a terminologia aqui fica realmente confusa. De repente, o scriptPubKey não tem uma chave pública, mas um hash estranho e existe outro script – o script de resgate. O nome scriptPubKey é histórico (fazia sentido com o P2PK, não é?), O script de entrada ou bloqueio seria uma escolha melhor.

Dito isto, estou mantendo scriptPubKey e scriptSig para maior clareza.

Multisig

As transações multisig eram um tipo diferente por si só, mas eram rejeitadas e as transações multisig são feitas atualmente usando P2SH.

OP_RETURN

As transações OP_RETURN são usadas para descarregar dados arbitrários na blockchain. Não é abordado aqui mais adiante.

OP_RETURN: Um script normalmente chamado apenas de OP_RETURN devido ao uso deste opcode de mesmo nome é utilizado para criar um output chamado de provably unspendable (ou provadamente não gastável) e normalmente associado com algum dado. Um dos exemplos comuns de uso deste operador é a prova de existência, em que se grava o hash de aguma informação para ser adicionado na blockchain e comprovar que tal informação existia, pelo menos, a partir daquele ponto em que foi escrita na blockchain; criando, assim, uma prova matematicamente verificável por qualquer um com acesso à blockchain de que uma informação realmente existia naquele ponto da história em que esta transação foi adicionada à blockchain. Um exemplo deste script ficaria assim:

OP_RETURN <informação a ser gravada; normalmente um *hash* feito a partir de uma informação (como um arquivo) devido ao limite de 40 *bytes*>

Dois exemplos de utilização desta capacidade da linguagem de script são os sites Proof of Existence e o brasileiro OriginalMy que geram provas de existência da informação suprida.

 

Como validar essas informações?

 

Utilize o endereço abaixo e preencha com as informações, conforme exemplo:

https://www.verifybitcoinmessage.com/

Ao preencher as informações, clique em VERIFY, caso a mensagem apresentada seja “Valid signature” a validação foi feita com sucesso.

Provando asim que, os dados foram validados com a chave privada.

 

Seu próprio

Observe que, teoricamente, o scriptPubKey pode estar dentro dos limites de script. Se você deseja criar uma transação com alguma condição boba, pode! Nós poderíamos criar totalmente um scriptPubKey com uma condição1 OP_EQUAL. O correspondentescriptSigé então apenas um número1para validar como verdadeiro. Com esse scriptPubKey, qualquer usuário pode gastar as moedas apenas fornecendo1, o que não parece muito útil. De maneira semelhante, você pode fornecer um script que 1 2 OP_EQUALproiba qualquer um de gastar ainda mais o dinheiro, tornando-o assim indesejável.

Embora você possa criar essa transação, ainda é necessário envolvê-la em um script de resgate e usar um P2SH. Atualmente, apenas um conjunto de transações padrão é permitido, a maioria delas listadas neste ou no seguinte artigo[2].

  1. Por motivos de segurança, os dois scripts são realmente executados separadamente com o montante transferido, mas esse é um detalhe de implementação que podemos omitir.
  2. Historicamente, não havia uma transação padrão e o scriptPubKey podia ser arbitrário. Então o Bitcoin decidiu implementar algumas restrições e introduziu transações padrão nas quais os scripts de resgate do P2SH também eram verificados se são padrão ou não. Em 2014, isso foi relaxado, permitindo que o script de resgate seja arbitrário (ainda existem alguns limites)

fonte: blog.susanka.eu

Hardware Wallets

Vale Presente

R$100,00R$6.495,09
-28%
Lançamento

Hardware Wallets

Ledger Stax

R$2.799,00
-40%

Hardware Wallets

Ledger Nano X

R$1.499,00
-40%

Hardware Wallets

Trezor T – Pré Venda

R$1.499,00
-53%
Lançamento

Hardware Wallets

Ledger Nano S Plus

R$799,00
-54%
Lançamento

Hardware Wallets

Trezor Safe 3

R$777,00
-46%
Lançamento

Hardware Wallets

SecuX V20

R$699,00
-70%
Lançamento
R$599,00
-70%
Lançamento
R$599,00
-40%

Hardware Wallets

SecuX W20

R$599,00
-53%
Fora de estoque
Elementor PROWP RocketCrocoblockCheckout Woocommerce