脚本化的多重签名

多重签名脚本设置了一个条件,其中 k 个公钥被记录在脚本中,至少其中的 t 个必须提供签名才能花费资金,称为 t-of-k。 例如,一个 2-of-3 多重签名是指列出了三个潜在签名者的公钥,并且至少必须使用其中的两个来为有效交易创建签名以花费资金。

一些比特币文档,包括本书早期的版本,使用术语“m-of-n”来表示传统的多重签名。然而,当它们被说出时,“m”和“n”很难区分,因此我们使用替代的 t-of-k。这两个短语都指的是相同类型的签名方案。

设置 t-of-k 多重签名条件的输出脚本的一般形式是:

t <Public Key 1> <Public Key 2> ... <public Key k> k OP_CHECKMULTISIG

其中,k 是列出的公钥总数,t 是需要的签名门槛,以花费输出。

一个设置 2-of-3 多重签名条件的输出脚本如下所示:

2 <Public Key A> <Public Key B> <Public Key C> 3 OP_CHECKMULTISIG

前面的输出脚本可以通过包含签名的输入脚本满足:

<Signature B> <Signature C>

或者是来自所列的3个公钥对应的任意两个私钥的签名组合。

两个脚本一起形成组合验证脚本:

<Sig B> <Sig C> 2 <Pubkey A> <Pubkey B> <Pubkey C> 3 OP_CHECKMULTISIG

执行此组合脚本时,如果输入脚本具有与设置为限制条件的三个公钥中的两个相对应的两个有效签名,则评估结果将为TRUE。

目前,Bitcoin Core的交易中继策略将多重签名输出脚本限制为最多三个列出的公钥,这意味着您可以在范围内执行从1-of-1到3-of-3的任何操作,或者在该范围内的任何组合。您可能希望检查IsStandard()函数,以查看网络当前接受的内容。请注意,三个密钥的限制仅适用于标准(也称为“裸”)多重签名脚本,而不适用于包含在其他结构(如P2SH、P2WSH或P2TR)中的脚本。P2SH多重签名脚本受到政策和共识的限制,最多可包含15个密钥,允许最多15-of-15的多重签名。我们将在“支付到脚本哈希”中了解有关P2SH的信息。所有其他脚本根据每个OP_CHECKMULTISIG或OP_CHECKMULTISIGVERIFY操作码的共识限制为20个密钥,尽管一个脚本可能包含多个这些操作码。

Last updated