Multisig

Endereços que exigem mais de uma assinatura para gastar

Esta página é um acréscimo de Eric de Castro à tradução — não faz parte do conteúdo original do Greg Walker.

Um endereço comum de Bitcoin é trancado por uma chave privada: quem tem essa chave gasta os fundos, com uma assinatura. Simples — e perigoso: se essa única chave for roubada ou perdida, acabou.

Um endereço multisig (multiassinatura) muda isso: ele exige mais de uma assinatura para ser gasto. É como um cofre com várias fechaduras, que só abre quando um número combinado de chaves vira ao mesmo tempo.

A ideia: "m-de-n"

Todo multisig é descrito por dois números, m-de-n:

O exemplo mais comum é o 2-de-3: existem 3 chaves, e quaisquer 2 delas, juntas, conseguem gastar. Nenhuma chave sozinha resolve nada.

Conceito de multisig 2-de-3: três chaves existem e quaisquer duas delas, juntas, abrem o cadeado; uma sozinha não abre.

Por que usar multisig

Como funciona: o script

No nível do Bitcoin, um multisig "puro" é um script P2MS (Pay to MultiSig). A trava (o script de bloqueio) lista as chaves públicas e diz quantas assinaturas são necessárias:

OP_2 <chave_pública_1> <chave_pública_2> <chave_pública_3> OP_3 OP_CHECKMULTISIG

Leia assim: "preciso de 2 (OP_2) assinaturas válidas, dentre estas 3 (OP_3) chaves". O opcode OP_CHECKMULTISIG é quem faz a verificação.

O script de bloqueio P2MS: OP_2, as três chaves públicas, OP_3 e OP_CHECKMULTISIG — a trava que exige 2 de 3 assinaturas.

Destravando: as assinaturas

Para gastar, o script de desbloqueio fornece m assinaturas (no nosso caso, 2). Um detalhe importante: as assinaturas precisam vir na mesma ordem em que as chaves correspondentes aparecem na trava — o OP_CHECKMULTISIG confere uma por uma, da esquerda para a direita.

OP_0 <assinatura_1> <assinatura_2>

Aquele OP_0 extra no começo não é um engano: o OP_CHECKMULTISIG tem um bug histórico (um "off-by-one") que faz ele consumir um item a mais da pilha. Esse OP_0 é só um valor de enchimento para alimentar o bug — e ficou para sempre no protocolo.

Desbloqueio do multisig 2-de-3: o script de desbloqueio fornece OP_0 e duas assinaturas, na ordem das chaves, que o OP_CHECKMULTISIG valida.

Veja o multisig sendo verificado passo a passo: clique em "Exemplo P2MS" e depois em Passo para acompanhar a pilha enquanto o OP_CHECKMULTISIG confere as assinaturas.

Ícone Ferramenta

Interpretador de Script

Execute um script passo a passo e veja a pilha mudar a cada opcode. O ScriptSig roda primeiro, depois o ScriptPubKey.

    Onde o script fica guardado: P2SH, P2WSH e P2TR

    Na prática, quase ninguém usa o P2MS "pelado". Em vez disso, o script multisig é embrulhado, e o que vira endereço é só um resumo (hash) dele. O script completo só é revelado na hora de gastar.

    Embrulho do multisig: o script de bloqueio é resumido por um hash que vira o endereço (P2SH/P2WSH); o script completo só é revelado na hora de gastar. Multisig com Taproot: as chaves são somadas via MuSig2 numa única chave, tornando o multisig indistinguível de um endereço comum na blockchain.

    Monte o seu próprio multisig: escolha o m-de-n, sorteie chaves de exemplo (ou cole as suas) e veja o script e os endereços P2SH e P2WSH gerados de verdade.

    Ícone Ferramenta

    Construtor de Multisig

    Defina quantas assinaturas são necessárias (m) e as chaves públicas (n). A ferramenta monta o script e os endereços reais.

    Como as assinaturas se juntam (na prática)

    Num multisig de verdade, as chaves costumam estar em dispositivos diferentes (idealmente air-gapped). Então as assinaturas não nascem todas de uma vez — elas são coletadas em rodadas, usando uma PSBT (transação parcialmente assinada):

    1. A carteira monta a transação como uma PSBT (ainda sem nenhuma assinatura).
    2. O primeiro dispositivo recebe a PSBT, confere os detalhes e adiciona a sua assinatura.
    3. A PSBT — agora com 1 assinatura — vai para o segundo dispositivo, que adiciona a dele.
    4. Quando juntou as m assinaturas necessárias, a transação está completa e pode ser transmitida para a rede.
    Coleta de assinaturas num multisig 2-de-3: a PSBT passa de um dispositivo air-gapped para outro, cada um adicionando a sua assinatura, até juntar as 2 necessárias e ser transmitida.

    Descriptors: a planta da carteira

    Para uma carteira multisig, guardar só as sementes não basta: é preciso saber também como as chaves se combinam (m, n, o tipo de embrulho e as chaves públicas estendidas de cada uma). Essa "planta" é o descriptor, algo como:

    wsh(multi(2, xpub_A/…, xpub_B/…, xpub_C/…))

    O erro clássico. Num multisig, você pode ter todas as sementes e ainda assim ter dificuldade de recuperar os fundos se perder o descriptor (ou os xpubs das outras chaves). Faça backup do descriptor junto com as sementes — e, idealmente, teste a recuperação antes de guardar quantias sérias.

    Montagens comuns

    Cuidados

    Multisig + air-gapped é considerado o padrão-ouro da auto-custódia: várias assinaturas, cada chave num dispositivo que nunca toca a internet. Junta o melhor das duas ideias — sem ponto único de falha e sem chave exposta à rede.