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.
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 |
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 |