Ejemplo de depósito en garantía de ScriptSig en bip65

En el bip65 hay un ejemplo de cómo se puede usar para depósito en garantía en combinación con un multisig. Ver: https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki#Escrow

Allí afirma que los fondos se pueden gastar con el siguiente scriptSig: 0 <Alice's signature> <Bob's signature> 0pero cuando se trabaja con el ejemplo, siempre parece que es uno 0para muchos. Soy consciente del error en el que se extrae un elemento de más de la pila, y es por eso que un script multisig generalmente tiene un 0 primero, pero ¿por qué este también tiene al final?

Respuestas (1)

La parte scriptSig es la primera en la pila, por lo que habría:

0 <Alice's signature> <Bob's signature> 0

y esto para el pago en la sucursal de CLTV:

0 <Alice/Bob's signature> <Lenny's signature> 1

Después de la firma, sigue el script de pubkey, con el primer código de operación "IF". Este "SI" verifica el valor anterior en la pila (que es "0" o "1" del sciptSig anterior), y se bifurca en consecuencia:

IF
   <now + 3 months> CHECKLOCKTIMEVERIFY DROP
   <Lenny's pubkey> CHECKSIGVERIFY
   1
ELSE
   2
ENDIF
<Alice's pubkey> <Bob's pubkey> 2 CHECKMULTISIG

Suponiendo que se elige la primera rama, entonces el último elemento en la cláusula if es un "1", seguido de la línea después de "ENDIF", por lo que se convierte en una multifirma 1 de 2, donde solo una persona debe firmar. Pero esta persona tiene que esperar el bloqueo de tiempo (a través del parámetro CSV). Aquí en el ejemplo: Lenny puede gastar después de que se alcanza el tiempo de espera.

Si hay un "0" en la pila antes de la cláusula IF, entonces se ejecuta la segunda parte y se convierte en un multigrado "2 de 2", lo que significa que Alice y Bob pueden gastar en cualquier momento.

Et voilà - contratos inteligentes fáciles :-)