P2MS

Pay To Multisig — bloquea bitcoins a múltiples claves públicas

BIP 11: M-of-N Standard Transactions

P2MS (Pay To Multisig) es un patrón de script que permite bloquear bitcoins a múltiples claves públicas y exigir firmas de algunas (o todas) de esas claves para desbloquearlo.

La notación general para scripts multisig es "m-de-n":

Por ejemplo, un script 2-de-3 requiere 2 firmas de 3 claves públicas para ser desbloqueado.

Aunque P2MS es un script estándar, es más común envolver este tipo de script en un P2SH o P2WSH.

Script legado. Este es un patrón de script legado y rara vez se usa directamente en salidas.

Uso

¿Cómo funciona P2MS?

ScriptPubKey (bloqueo)

Para crear un script P2MS, incluyes en el ScriptPubKey:

  1. Un opcode numérico M para indicar cuántas firmas se requieren.
  2. Cada una de las claves públicas.
  3. Un opcode numérico N para indicar cuántas claves públicas hay.
  4. El opcode OP_CHECKMULTISIG al final.

Entonces, en un script 2-de-3, se requieren OP_2 firmas para desbloquear las OP_3 claves públicas:

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

Un P2MS puede contener claves públicas comprimidas (33 bytes) y no comprimidas (65 bytes).

P2MS es un script estándar para hasta 3 claves públicas. Es posible crear un multisig con más claves, pero será considerado no estándar y no será retransmitido por los nodos. Aun así, puedes usar hasta 15 claves públicas si envuelves P2MS dentro de P2SH.

ScriptSig (desbloqueo)

Para desbloquear un P2MS, proporcionas el número requerido de firmas. Para el ejemplo 2-de-3, son 2 firmas:

OP_0 <firma 1> <firma 2>

Bug de OP_CHECKMULTISIG.

Este opcode tiene un bug en el que retira un elemento más de la pila de lo necesario (error de "off-by-one"). Por eso añadimos un "valor dummy" al inicio del ScriptSig, para compensarlo y evitar que el script falle.

Desde la BIP 147, ese valor dummy debe ser OP_0 cuando usas P2MS directamente, o el byte vacío 00 cuando usas P2MS envuelto en P2WSH.

Necesitas proporcionar las firmas correspondientes en el mismo orden que las claves públicas en el ScriptPubKey.

Ejecución

Cuando el script se ejecuta, todas las firmas y claves públicas se empujan a la pila. El OP_CHECKMULTISIG entonces verifica cada firma contra las claves públicas (en orden), y empuja un OP_1 a la pila si el número requerido de firmas es válido.

Intérprete de Script

Ejecute un script paso a paso y vea la pila cambiar con cada opcode. El ScriptSig corre primero, luego el ScriptPubKey.