P2MS

Pay To Multisig — trava bitcoins a múltiplas chaves públicas

BIP 11: M-of-N Standard Transactions

P2MS (Pay To Multisig) é um padrão de script que permite travar bitcoins a múltiplas chaves públicas e exigir assinaturas de algumas (ou todas) dessas chaves para destravá-lo.

A notação geral para scripts multisig é "m-de-n":

Por exemplo, um script 2-de-3 exige 2 assinaturas de 3 chaves públicas para ser destravado.

Embora o P2MS seja um script padrão, é mais comum embrulhar esse tipo de script em um P2SH ou P2WSH.

Script Legado. Este é um padrão de script legado e raramente usado diretamente nas saídas.

Uso

Como o P2MS funciona?

ScriptPubKey (trava)

Para criar um script P2MS, você inclui no ScriptPubKey:

  1. Um opcode numérico M para indicar quantas assinaturas são exigidas.
  2. Cada uma das chaves públicas.
  3. Um opcode numérico N para indicar quantas chaves públicas há.
  4. O opcode OP_CHECKMULTISIG no fim.

Então, em um script 2-de-3, são exigidas OP_2 assinaturas para destravar as OP_3 chaves públicas:

OP_2 <chave pública 1> <chave pública 2> <chave pública 3> OP_3 OP_CHECKMULTISIG

Um P2MS pode conter chaves públicas comprimidas (33 bytes) e não comprimidas (65 bytes).

O P2MS é um script padrão para até 3 chaves públicas. É possível criar um multisig com mais chaves, mas ele será considerado não padrão e não será retransmitido pelos nós. Porém, você pode usar até 15 chaves públicas se embrulhar o P2MS dentro de um P2SH.

ScriptSig (destrava)

Para destravar um P2MS, você fornece o número exigido de assinaturas. Para o exemplo 2-de-3, são 2 assinaturas:

OP_0 <assinatura 1> <assinatura 2>

Bug do OP_CHECKMULTISIG.

Este opcode tem um bug em que ele retira um elemento a mais da pilha do que precisa (erro de "off-by-one"). É por isso que adicionamos um "valor dummy" no início do ScriptSig, para compensar isso e evitar que o script falhe.

Desde a BIP 147, esse valor dummy precisa ser OP_0 ao usar o P2MS diretamente, ou o byte vazio 00 ao usar o P2MS embrulhado em um P2WSH.

Você precisa fornecer as assinaturas correspondentes na mesma ordem das chaves públicas no ScriptPubKey.

Execução

Quando o script executa, todas as assinaturas e chaves públicas são empurradas para a pilha. O OP_CHECKMULTISIG então verifica cada assinatura contra as chaves públicas (na ordem), e empurra um OP_1 para a pilha se o número exigido de assinaturas for válido.

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