LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > 【译文】闪电网络(一)

【译文】闪电网络(一)

2020-01-20 灰狼 来源:区块链网络

原文地址:

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

摘要

本BIP定义了一个名为“witness”的新结构,该结构独立于事务merkle树提交给块。此结构包含检查事务有效性所需的数据,但不需要确定事务效果。特别是,脚本和签名被移动到这个新结构中。

在一个树中提交见证,该树通过coinbase事务嵌套到块的现有merkle根中,以便使BIP软分叉兼容。未来的硬分叉可以把这棵树放在它自己的分支上。

1.动机

交易的整体效果由产出消耗(支出)和新产出创造决定。其他交易数据,特别是签名,只需要验证区块链状态,而不是决定它。

通过从提交给事务merkle树的事务结构中删除此类数据,可以解决以下几个问题:

1.非意向延展性变得不可能。由于签名数据不再是事务哈希的一部分,因此对事务签名方式的更改不再与事务标识相关。作为事务扩展性的解决方案,这优于经典签名方法(BIP62):

l 只要所有输入都被签名(至少有一个CHECKSIG(检查签名)或CHECKMULTISIG(检查多签名)操作),它就可以防止任何类型脚本的非自愿事务延展性

l 在m-of-n CHECKMULTISIG脚本的情况下,只有在m个私钥持有者同意的情况下,交易才是可延展的(而BIP62只有1个私钥持有者)

l 它防止了由于未知的ECDSA特征延展性而导致的非自愿交易延展性

l 它允许在没有交易对手风险的情况下创建未经确认的交易依赖链,这是闪电网络等非链协议的一个重要特性

2.签名数据的传输成为可选的。只有当对等体试图验证事务而不是检查其存在时才需要。这减少了SPV证明的大小,并可能提高SPV客户端的隐私,因为它们可以使用相同的带宽下载更多的事务。

3.通过将部分事务数据移动到当前协议未知的结构,可以使用软分叉绕过某些约束,例如:

l 在计算块大小时,可以忽略/折算见证的大小,从而在一定程度上有效地增加块的大小

l 重编码常数,如最大数据推送大小(520字节)或sigops限制可被重新评估或移除。

l 新的脚本系统可以在不受现有脚本语义限制的情况下引入。例如,BIP143中描述了一种用于事务签名验证的新事务摘要算法

2.规范

2.1Transaction ID

定义了新的数据结构witness。每个事务都有两个id。

txid的定义保持不变:传统双SHA256序列化格式:、 [nVersion][txins][txouts][nLockTime]

一个新的wtxid被定义:具有见证数据的新序列化的双SHA256:

[nVersion][marker][flag][txins][txouts][witness][nLockTime]

nVersion, txins, txouts, 以及nLockTime的格式与传统的序列化相同。

标记必须是1字节的零值:0x00。

标志必须是1字节的非零值。目前,必须使用0x01。

witness是事务的所有见证数据的序列化。每个txin与见证字段关联。见证字段从变量_int开始,表征txin的堆栈项的数量。后面是堆栈项,每个项以var_int开头以指示长度。见证数据不是脚本。

非见证程序(以下定义)txin必须与空见证字段关联,由0x00表示。如果所有txin不是见证程序,则事务的wtxid等于其txid。

2.2提交结构

添加了一个新的块规则,它需要对wtxid的提交。coinbase事务的wtxid被假定为0x0000…0000。

一个见证根哈希是用所有这些wtxid作为叶子来计算的,类似于块头中的hashMerkleRoot。

提交记录在coinbase事务的scriptPubKey中。它必须至少为38字节,第一个6字节为0x6a24aa21a9ed,即:

1字节-计算返回(0x6a)

1字节-推后面的36字节(0x24)

4字节-提交头(0xaa21a9ed)

32字节-提交哈希:双-SHA256(见证根哈希|见证保留值)

第39字节以后:没有共识含义的可选数据

coinbase的输入的见证必须由一个32字节的数组组成,用于见证保留值。

如果有多个scriptPubKey与模式匹配,则假定输出索引最高的一个是提交。

如果块中的所有事务都没有见证数据,则提交是可选的。

—-

编译者/作者:灰狼

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...