Multi-Signature

如何為以下 1-of-2 multisig P2SH 腳本編寫 OP_CHECKMULTISIG

  • June 11, 2019
OP_IF
 OP_SHA256
 <hash of secret>
 OP_EQUALVERIFY
 <pubKey of swap>
 OP_CHECKSIG
OP_ELSE
 <relative locktime>
 OP_CHECKSEQUENCEVERIFY
 OP_DROP
 <pubKey of refund>
 OP_CHECKSIG
OP_ENDIF

我用於上述腳本的實際程式碼是

const script = this.app.env.bitcoin.script.compile([
     hashOpcode,
     Buffer.from(secretHash, "hex"),
     this.app.env.bitcoin.opcodes.OP_EQUALVERIFY,
    Buffer.from(recipientPublicKey, "hex"),
     this.app.env.bitcoin.opcodes.OP_EQUAL,
     this.app.env.bitcoin.opcodes.OP_IF,                   
     Buffer.from(recipientPublicKey, "hex"),
     this.app.env.bitcoin.opcodes.OP_CHECKSIG,
    this.app.env.bitcoin.opcodes.OP_ELSE,
   this.app.env.bitcoin.script.number.encode(lockTime),
     this.app.env.bitcoin.opcodes.OP_CHECKSEQUENCEVERIFY,
     this.app.env.bitcoin.opcodes.OP_DROP,
     Buffer.from(ownerPublicKey, "hex"),
     this.app.env.bitcoin.opcodes.OP_CHECKSIG,
     this.app.env.bitcoin.opcodes.OP_ENDIF
   ]);

正如我們看到的,這個腳本只有一個公鑰(交換的 pubKey)來簽名。但我想用兩個公鑰簽名。我搜尋了它,但沒有找到,有人可以指導我嗎?

我只想遵循這種模式

OP_0 [Sig 1] OP_1 [PK 1][PK 2] OP_2 OP_CHECKMULTISIG

根據我從您的問題中了解到的情況(如果我錯了,請糾正我),您希望有一個腳本,該腳本OP_IF部分支付 1-of-2 公鑰。您可以嘗試以下腳本:

OP_IF
 OP_SHA256
 OP_DATA (0x20)
 <hash of secret>
 OP_EQUALVERIFY
 OP_1 
 OP_DATA (0x21) 
 <pubKey of swap1>
 OP_DATA (0x21)
 <pubkey of swap2>
 OP_2
 OP_CHECKMULTISIG
OP_ELSE
 OP_DATA (size of relative_locktime)
 <relative locktime>
 OP_CHECKSEQUENCEVERIFY
 OP_DROP
 OP_DATA (0x21)
 <pubKey of refund>
 OP_CHECKSIG
OP_ENDIF

您可以將此腳本用於:<0> <sig1> <secret> 1

引用自:https://bitcoin.stackexchange.com/questions/88297