比特币改进协议BIP11(翻译)

来源:互联网 发布:淘宝如何设置快递模板 编辑:程序博客网 时间:2024/05/17 15:38

比特币改进协议BIP11(翻译)

英文原文地址:

https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki


摘要

该BIP提出交易需要用M中的N个私钥来签名(多重签名),并把它作为新的“标准”交易类型。

动机

启用安全的钱包,托管交易和其他使用情况等涉及资金的交易需要多于一个签名。

有一下几个使用场景:

由“钱包保护服务”(WPS)保护的钱包。将使用2-of-2签名其中的交易,一个来自(可能受损的)运行钱包程序的计算机,第二个签名来自WPS。当发送受保护的比特币时,用户的比特币客户端将与联系WPS,然后WPS联系用户以确认他们发起交易,并且交易详细信息是正确的。 客户和WPS的沟通方式的详细信息不在本BIP的范围之内。

附注:客户应该坚持认为,他们的钱包保护服务为他们提供用于确保他们可以安全地离线存储的钱包的私钥的副本,以便即使WPS停止服务也可以花费他们的比特币币。

三方托管(买方,卖方和受信任的代理人)。 将使用2/3的签名的交易。 买方,卖方和代理人各自提供公钥,然后买方将比特币发送到2/3的CHECKMULTISIG交易中,并向卖方和代理人发送交易ID。卖方将履行其义务,然后要求买方共同签署(已经由卖方签名)向其发送比特币(卖方)的交易。如果买方和卖方没有达成一致,代理人可以在买方或卖方的合作下决定交易的结果。买方,卖方和代理人如何通信采集签名或公钥不在本BIP的范围之内。

详细说明

有效的区块中,一个新的标准交易类型(锁定脚本)类似下面这样:

    m {pubkey}...{pubkey} n OP_CHECKMULTISIG

n的值小于等于3。

OP_CHECKMULTISIG交易还是使用标准的解锁脚本:

    OP_0 ...signatures...

(由于OP_CHECKMULTISIG中的错误而需要OP_0;它会从执行堆栈中弹出太多的条目,因此必须在堆栈上放置一个虚拟值)。

目前的中本聪比特币客户端不会使用大于200字节的scriptSigs用于交易; 为了适应多重签名交易,这将增加到500字节。

理论依据

OP_CHECKMULTISIG已经是一个可以使用的操作码,并且是支持一些重要使用场景的最直接的方法。

反对使用OP_CHECKMULTISIG的一个论点是,老客户和矿工将其统计为“20 sigops”,用于计算一个区块中有多少个签名操作,每个区块的硬限制为20,000个sigop - 意味着最多1,000个multisig 每个块。 使用多个OP_CHECKSIG操作创建多重签名交易可以允许每个区块可以有更多的交易。

相反的论据是这些新的多重签名交易将与OP_EVAL(参见OP_EVAL BIP)结合使用,并将被准确计数。在任何情况下,随着交易量的增加,必须解决硬编码的最大块大小,以及可以在当时用于计算一个区块中的签名操作的规则。

一个较弱的观点认为OP_CHECKMULTISIG不应该被使用,是因为它在验证期间从堆栈中弹出一个太多的条目。 这个有方法可以解决,向scriptSig添加一个额外的OP_0占位符,只为交易添加1个字节即可,避免OP_CHECKMULTISIG的替代方法至少添加了几个字节的操作码。

执行

旧客户端和矿工已经支持OP_CHECKMULTISIG作为非标准交易类型。

https://github.com/gavinandresen/bitcoin-git/tree/op_eval