Glossário / Protocolo e atualizações
Covenant
- O que é um covenant?
- Um covenant é uma regra de gasto que limita para onde o bitcoin pode ir depois, e não apenas quem pode movê-lo, e hoje nenhum opcode do Script do Bitcoin consegue impor uma.
Todo script na cadeia responde a uma pergunta: este gasto está autorizado? Um covenant permitiria que o script fizesse uma segunda pergunta sobre a transação que o gasta, e as propostas para permitir isso (BIP-119, BIP-118, BIP-345, BIP-347) estão todas sem ativação há anos. Nada do que você guarda hoje é afetado, mas os produtos de cofre e de herança que as pessoas não param de pedir dependem disso.
Como funciona
Status: nenhum opcode de covenant está ativo na mainnet do Bitcoin. Todos os projetos abaixo são propostas, e nenhuma tem parâmetros de ativação integrados ao Bitcoin Core.
A capacidade que falta tem um nome preciso: introspecção. Quando um nó executa um script, o script pode examinar assinaturas, hashes, timelocks e a pilha, mas não consegue ler as saídas da transação que está gastando a saída. Esse único ponto cego é a razão pela qual o bitcoin consegue expressar “duas destas três pessoas precisam concordar” e não consegue expressar “este dinheiro só pode ir para aquele endereço”.
As propostas fecham essa lacuna de duas formas diferentes, e a diferença entre elas é o centro do debate.
A abordagem de modelo fixa de antemão um hash de toda a transação de gasto. O OP_CHECKTEMPLATEVERIFY funciona assim: a saída guarda um hash de 32 bytes, e o gasto falha a menos que o hash da transação tenha o mesmo valor. É estreita, é barata de verificar e, como o compromisso não pode descrever outro compromisso, a restrição não pode se repetir indefinidamente.
A abordagem de introspecção dá ao script as peças e deixa que ele faça aritmética. Combinar o OP_CAT com uma verificação de assinatura, ou acrescentar o OP_CHECKSIGFROMSTACK, permite que um script reconstrua o hash de assinatura da transação a partir de peças da pilha e o verifique, e a partir daí o script pode exigir o que quiser sobre as saídas. Isso é geral, e é recursivo: um covenant pode insistir que a próxima saída carregue o mesmo covenant.
A recursão é a objeção que travou tudo. Bitcoins presos em uma regra que se perpetua poderiam, em princípio, ficar onerados para sempre, o que levanta questões sobre fungibilidade e sobre emissores que poderiam tornar a regra obrigatória. O contra-argumento é que um grupo de pessoas já consegue imitar um covenant ao pré-assinar o único gasto permitido e destruir a chave, então a capacidade existe na prática, e a imposição pelo consenso sobretudo elimina a necessidade de confiar que a chave realmente foi destruída.
Onde você encontra isso
Covenants já estão implantados em cadeias que copiam o motor de script do bitcoin, que é a forma mais barata de ver o que eles fazem.
A Liquid, a sidechain baseada no Elements, executa um tapscript com opcodes de introspecção que leem diretamente as saídas da transação de gasto, e sua federação os usa para a sua ancoragem. Qualquer pessoa também pode testar os opcodes propostos para o bitcoin em signets personalizadas antes de decidir se os quereria na mainnet.
Na mainnet, o substituto é uma transação pré-assinada com uma chave excluída. Um provedor de cofres gera a chave de depósito, assina o único saque que permitirá algum dia e então destrói a chave, para que nenhum outro gasto possa ser criado. Esse é um covenant imposto por uma promessa em vez de pela rede, e a promessa é exatamente o que um opcode de covenant de verdade tornaria desnecessário. Vale saber disso se um serviço vender um cofre para você: pergunte qual dos dois é.
Covenant vs contrato de depósito em garantia
Um covenant restringe o destino; um contrato de depósito em garantia restringe os signatários. Eles resolvem metades diferentes da mesma preocupação, e só uma das duas está disponível.
Um contrato de depósito em garantia é uma multiassinatura comum com um terceiro no quórum, normalmente dois de três, e funciona no bitcoin hoje: um marketplace guarda uma chave, e o comprador e o vendedor podem liquidar sem ela ou chamá-la para resolver uma disputa. O que o depósito em garantia não consegue fazer é restringir o resultado. No momento em que se forma um quórum de gasto, os bitcoins podem ir para qualquer lugar, inclusive para o árbitro. Um covenant fixaria o destino de antemão e tiraria a discricionariedade do árbitro do projeto por completo.