Skip to content

Instantly share code, notes, and snippets.

@0xtav
Last active December 25, 2021 19:22
Show Gist options
  • Save 0xtav/392018b032c61ccb76d5b1910496309f to your computer and use it in GitHub Desktop.
Save 0xtav/392018b032c61ccb76d5b1910496309f to your computer and use it in GitHub Desktop.
Como funciona os Smart Contracts no Bitcoin?

Como funciona os Smart Contracts no Bitcoin?

Ao contrário do que é espalhado nas interwebs o Bitcoin possui smart contracts, porém os mesmos possuem certas limitações propositais, o modelo de segurança do Bitcoin exige que as coisas sejam simples, por isso não temos smart contracts Turing Complete.

Linguagem de programação

Há linguagem de programação do Bitcoin é chamado Bitcoin Script, esta linguagem é orientada á pilha, ou seja, o primeiro que entra na pilha é o último que sai, no exemplo abaixo você pode observar que existem 3 items no Script, o item 2 e 1 é colocado a pilha.

Script Pilha
OP_2 1
OP_1 2
OP_ADD

Então chega a vez do OP_ADD que executara uma operação de soma 1 + 2 = 3, o resultado desta equação é adicionado a pilha e OP_1 OP_2 e OP_ADD são removidos da pilha.

Script Pilha
OP_2 3
OP_1
OP_ADD

Transação Bitcoin

Antes de prosseguir aprenda oque é um UTXO, toda vez que uma transação Bitcoin é criada o que realmente esta acontecendo é atribuição de um Script de bloqueio na saida de uma transação, para que alguém gaste aquele fundos, é nescessario atender as condições imposta pelo script, o mais comum é o "Pay To Pubkey Hash" (P2PKH), você pode ver á ultilização destes script no exemplo abaixo em "scriptpubkey_asm" OP_DUP OP_HASH160 OP_PUSHBYTES_20 <PUBLIC_KEY_HASH> OP_EQUALVERIFY OP_CHECKSIG.

{
  "vin": [
    {
      "txid": "bcf8b61a72791d8b8b433e29b1653acbb0af4b3315ae2389cd280d7fd6645f9b",
      "vout": 0,
      "prevout": {
        "scriptpubkey": "76a91411b7eb8a3c1cc8a2a076c8ce916a4f0da3a18ab688ac",
        "scriptpubkey_asm": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 11b7eb8a3c1cc8a2a076c8ce916a4f0da3a18ab6 OP_EQUALVERIFY OP_CHECKSIG",
        "scriptpubkey_type": "p2pkh",
        "scriptpubkey_address": "12cgpFdJViXbwHbhrA3TuW1EGnL25Zqc3P",
        "value": 50152969
      },
      "scriptsig": "47304402201096406519f7d1f6edcab6e5a3b053f571efdd7937678eb0be22f34b21861d3d02207067d713bbe430116f37727cd8773a0e575a7422687d13aa17df6fa9f2ff5355012103a0c53fcc4704ba78331a896c3bd684328b44890b25f91cfb853ab0bb301c7875",
      "scriptsig_asm": "OP_PUSHBYTES_71 304402201096406519f7d1f6edcab6e5a3b053f571efdd7937678eb0be22f34b21861d3d02207067d713bbe430116f37727cd8773a0e575a7422687d13aa17df6fa9f2ff535501 OP_PUSHBYTES_33 03a0c53fcc4704ba78331a896c3bd684328b44890b25f91cfb853ab0bb301c7875",
      "is_coinbase": false,
      "sequence": 4294967295
    }
  ],
}

https://mempool.space/tx/d416d8854b6ad7f09a5944a97d7c7bb1bd42728eafa7a879c98010704154e941

Name Descrição
OP_DUP Duplique o último item da pilha
OP_HASH160 Pegue o último item da lista e calcule Hash160 RIPEMD160(SHA256()), e substitua pelo Hash160
OP_CHECKSIG Pegue os 2 primeiros items da pilha (Signature, PublicKey) e verifique assitura da transação
OP_EQUALVERIFY Pegue os 2 ultimos items da pilha e verifique se são iguais caso contrario falhe o script
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment