Learning-Bitcoin-from-the-C.../pt/12_2_Using_Other_Script_Commands.md
2021-08-10 10:53:32 -03:00

3.9 KiB

12.2: Usando Outros Comandos no Script

Provavelmente já temos em mãos a maioria dos opcodes do Bitcoin Script que iremos usar na maioria dos nossos scripts. No entanto, o Bitcoin Script oferece muito mais opções, o que pode vir a ser exatamente o que precisamos para criar o instrumento financeiro dos nossos sonhos.

Devemos consultar a página do script do Bitcoin para termos uma lista mais completa de todos esses e muitos outros comandos. Esta seção destaca apenas os opcodes mais notáveis.

Entendendo os Opcodes Aritméticos

Os opcodes aritméticos manipulam ou testam números.

Manipulam um número:

  • OP_1ADD (0x8b) - Adiciona uma unidade;
  • OP_1SUB (0x8C) - Subtrai uma unidade;
  • OP_NEGATE (0x8f) - Inverte o sinal do número;
  • OP_ABS (0x90) - Torna o número positivo;
  • OP_NOT (0x91) - Troca 1 por 0, senão 0.

Veja também: OP_0NOTEQUAL (0x92).

Manipulam dois números matematicamente:

  • OP_ADD (0x93) - Adiciona dois números;
  • OP_SUB (0x94) - Subtrai dois números;
  • OP_MIN (0xA3) - Retorna o menor entre dois números;
  • OP_MAX (0xA4) - Retorna o maior entre dois números.

Manipulam dois números logicamente:

  • OP_BOOLAND (0x9a) - 1 se ambos os números não são 0, senão 0;
  • OP_BOOLOR (0x9B) - 1 se qualquer número não é 0, senão 0.

Testa dois números:

  • OP_NUMEQUAL (0x9C) - 1 se ambos os números forem iguais, senão 0;
  • OP_LESSTHAN (0x9f) - 1 se o primeiro número for menor que o segundo, senão 0;
  • OP_GREATERTHAN (0xA0) - 1 se o primeiro número for maior que o segundo, senão 0;
  • OP_LESSTHANOREQUAL (0xA1) - 1 se o primeiro número for menor ou igual ao segundo, senão 0;
  • OP_GREATERTHANOREQUAL (0xA2) - 1 se o primeiro número for maior ou igual a segundo, senão 0.

Veja também: OP_NUMEQUALVERIFY (0x9d) e OP_NUMNOTEQUAL (0x9e)

Testa três números:

  • OP_WITHIN (0xA5) - 1 se um número estiver no intervalo de dois outros números.

Compreendendo os Opcodes de Pilha

Há um número chocante de opcodes de pilha, mas além de OP_DROP, OP_DUP, e às vezes OP_SWAP, eles geralmente não serão necessários se tivermos cuidado com a ordem da pilha. No entanto, aqui estão alguns dos mais interessantes:

  • OP_DEPTH (0x74) - Aumenta o tamanho da pilha;
  • OP_DROP (0x75) - Retira o item superior da pilha;
  • OP_DUP (0x76) - Duplica o item superior da pilha;
  • OP_PICK (0x79) - Duplica o enésimo item da pilha começando pelo topo;
  • OP_ROLL (0x7a) - Move o enésimo item para o topo da pilha;
  • OP_SWAP(0x7C) - Troca os dois principais itens da pilha.

Veja também: OP_TOALTSTACK (0x6b), OP_FROMALTSTACK (0x6c), OP_2DROP (0x6d), OP_2DUP (0x6e), OP_3DUP (0x6f), OP_2OVER (0x70), OP_2ROT (0x71), OP_2SWAP (0x72), OP_IFDUP (0x73), OP_NIP (0x77), OP_OVER (0x78), OP_ROT (0x7b), e OP_TUCK (0x7d).

Compreendendo os Opcodes Criptográficos

Finalmente, uma variedade de opcodes para dar suporte ao hashing e à verificação de assinatura:

Hash:

  • OP_RIPEMD160 (0xa6) — RIPEMD-160;
  • OP_SHA1 (0xa7) — SHA-1;
  • OP_SHA256 (0xa8) - SHA-256;
  • OP_HASH160 (0xa9) — SHA-256 + RIPEMD-160;
  • OP_HASH256 (0xaa) — SHA-256 + SHA-256.

Verifica as assinaturas:

  • OP_CHECKSIG (0xac) - Verifica uma assinatura;
  • OP_CHECKMULTISIG (0xae) - Verifica um multisig m-de-n.

Veja também: OP_CODESEPARATOR (0xab), OP_CHECKSIGVERIFY (0xad), e OP_CHECKMULTISIGVERIFY (0xaf).

Resumo: Usando Outros Comandos no Script

O Bitcoin Script inclui uma ampla gama de opcodes aritméticos, de pilha e criptográficos. A maioria desses opcodes adicionais provavelmente não serão tão comuns quanto os discutidos nas seções anteriores, mas, no entanto, estão disponíveis caso precisemos utilizá-los para escrever nosso script!

O Que Vem Depois?

Vamos avançar "Expandindo os Scripts do Bitcoin" com o Capítulo 13: Projetando Scripts Reais no Bitcoin.