Pular para o conteúdo
buybitcoinsmart

Glossário / Protocolo e atualizações

OP_CHECKTEMPLATEVERIFY

Outros nomes: CTV, BIP119.

O que é OP_CHECKTEMPLATEVERIFY?
OP_CHECKTEMPLATEVERIFY é um opcode proposto que permitiria que uma saída fixasse de antemão a transação exata autorizada a gastá-la, até suas saídas e seus valores.

Especificação no BIP-119.

O BIP-119 o descreve, Jeremy Rubin publicou o primeiro rascunho em janeiro de 2020 e a rede não o adotou. O opcode pegaria um hash de 32 bytes da pilha e falharia a menos que um hash do modelo da transação que gasta, ou seja, sua versão, seu locktime, o número de entradas, as sequências, as saídas e o índice da entrada, coincidisse. Nada na sua carteira o usa, e nada o usará até que um soft fork o ative.

Como funciona

Status: proposto, não ativado. O BIP-119 é um rascunho desde 2020, uma ativação proposta em 2022 atraiu objeções suficientes para ser arquivada, e o Bitcoin Core não contém parâmetros de implantação para ele.

O projeto reutiliza um velho truque de atualização. O opcode 179, antes OP_NOP4, atualmente não faz absolutamente nada, então um script que o contém é válido para todos os nós da rede. Um soft fork redefiniria esse byte para que os nós atualizados fizessem a verificação enquanto os antigos continuassem deixando o script passar, o mesmo caminho que o CLTV seguiu com OP_NOP2 e o CSV com OP_NOP3.

O que entra no hash é escolhido com um cuidado incomum. O modelo cobre as saídas, os valores, o número de entradas e seus números de sequência, mas deixa de fora deliberadamente os outpoints, ou seja, os txids das saídas que estão sendo gastas. Deixá-los de fora tem duas consequências sobre as quais toda a proposta se apoia. Primeiro, é possível calcular o hash antes de a transação de financiamento existir, e é isso que permite construir uma cadeia de gastos futuros e depois financiá-la. Segundo, um modelo não pode conter um compromisso consigo mesmo, então a restrição não pode ser feita para se repetir para sempre, e é por isso que seus defensores o chamam de covenant estreito.

O resultado é um gasto cujo txid é conhecido antes de acontecer. Uma carteira pode lhe entregar um recibo de um pagamento que existirá mais tarde e provar que nenhum outro gasto dessa saída é possível.

Onde você o encontra

OP_CHECKTEMPLATEVERIFY não roda em lugar nenhum na mainnet, então o lugar de olhar é o conjunto de aplicativos construídos sobre signets personalizadas que seriam lançados se o opcode fosse ativado.

O controle de congestionamento é o mais citado. Uma corretora diante de um pico de taxas paga 1.000 saques em uma única saída que fixa uma árvore de pagamentos posteriores; cada usuário pode depois expandir seu próprio ramo e receber os fundos quando as taxas caírem, e a corretora gastou uma saída em vez de mil. Os cofres são o segundo: um saque precisa primeiro chegar a uma saída intermediária com um atraso, o que lhe dá uma janela para trazer os fundos de volta ao armazenamento a frio se a solicitação não foi sua. Pools de pagamento e o financiamento não interativo de canais Lightning usam o mesmo formato de fixar primeiro e expandir depois.

Para quem compra bitcoin, a posição honesta é que isso não muda nada que você possa colocar em prática. Vale a pena reconhecer a sigla porque ela aparece constantemente em discussões sobre o que bitcoin deveria se tornar, e porque os recursos de cofre que alguns serviços de custódia anunciam seriam de fato exigíveis se ela algum dia fosse ativada.

OP_CHECKTEMPLATEVERIFY vs OP_CHECKLOCKTIMEVERIFY

OP_CHECKTEMPLATEVERIFY restringe o formato da transação que gasta, enquanto OP_CHECKLOCKTIMEVERIFY restringe quando um gasto pode acontecer e não diz nada sobre para onde vai o dinheiro. Os nomes quase idênticos fazem os dois serem confundidos o tempo todo.

A outra diferença é o status, e é a que importa. OP_CHECKLOCKTIMEVERIFY é exigido desde o bloco 388.381, em 14 de dezembro de 2015, e é usado todos os dias pela Lightning, por scripts de depósito em garantia e por carteiras de herança. OP_CHECKTEMPLATEVERIFY nunca foi exigido por um único nó na mainnet. Se um serviço lhe diz que seus bitcoins estão protegidos por um compromisso de modelo, ele está descrevendo algo que a rede atualmente não verifica.

Não confundir com

Perguntas frequentes

O OP_CHECKTEMPLATEVERIFY está ativo no bitcoin?

Não. É uma proposta em rascunho que ocupa um opcode que atualmente não faz nada, então nenhum nó o exige. Qualquer ativação precisaria de um soft fork com parâmetros que não foram integrados ao Bitcoin Core.

A CTV permitiria covenants recursivos?

Não, e esse é o objetivo do projeto. O compromisso é um hash plano de um modelo de transação e não pode conter outro compromisso, então uma restrição não pode voltar a se fixar a cada gasto futuro.

Leia a seguir

Termos relacionados

Mais em Protocolo e atualizações

Ler esta página em inglês