LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 【译文】闪电网络(二)

【译文】闪电网络(二)

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

2.3见证程序

scriptPubKey(或在BIP16/P2SH中定义的序列化脚本)由1字节的push操作码(0到16)和2到40字节之间的数据push组成,它有一个新的特殊含义。第一个push的值称为“版本字节”,随后的字节向量被称为“见证程序”。

触发见证验证逻辑的情况有两种。每种情况都确定见证版本字节和程序的位置,以及scriptSig的形式:

1.由scriptPubKey触发,它正好是版本字节的推送,加上见证程序的推送。scriptSig必须完全为空,否则验证失败。(“原生见证程序”)

2.当scriptPubKey是一个P2SH脚本时触发,scriptSig中推送的BIP16 序列化脚本正好是版本字节的推送加上见证程序的推送。scriptSig必须完全是BIP16 序列化脚本的推送,否则验证失败。(“P2SH见证程序”)

如果版本字节为0,见证程序为20字节:

l 它被解释为付费见证公钥哈希(P2WPKH)程序。

l 证人必须由两个项目组成(每个项目不超过520字节)。第一个是签名,第二个是公钥。

l 公钥的HASH160必须与20字节见证程序匹配。

l 正常脚本评估后,使用CHECKSIG操作根据公钥验证签名。验证必须在堆栈上产生一个TRUE。

如果版本字节为0,见证程序为36字节:

l 它被解释为付费见证脚本哈希(P2WSH)程序。

l 见证必须包含一个输入堆栈以返回到脚本,然后是序列化脚本(见证脚本)。

l 见证脚本(≤10000字节)从初始见证堆栈中弹出。见证脚本的SHA256必须与32字节见证程序匹配。

l 将见证脚本反序列化,并在使用剩余的见证堆栈(每个堆栈项不超过520字节)进行正常脚本评估后执行。

l 脚本不会失败,并且在堆栈上只产生一个TRUE。

如果版本字节为0,但见证程序既不是20字节也不是32字节,则脚本必然失败。[1]

如果版本字节为1到16,则不会进一步解释见证程序或见证堆栈,并且见证堆栈没有大小限制。这些版本是为将来的扩展保留的。[2]

2.4其他共识重要约束

2.4.1块大小

当前块的总大小限制为1000000字节(1MB)。我们将此限制更改如下:

块权重定义为基本大小*3+总大小。(根本原因[3])

基本大小是原始事务序列化的块大小(以字节为单位),没有任何与见证相关的数据,如未升级的节点所看到的。

全部大小是按BIP144所述序列化事务的块大小(字节),包括基础数据和见证数据。

新规则是块重≤4000000。

2.4.2Sigops

每个块的Sigops当前限制为20000。我们将此限制更改如下:

当前公钥脚本、签名脚本和P2SH 检查脚本中的Sigops按其先前值的4倍计数。Sigops限制同样是原来的四倍,达到了≤80000。

每个P2WPKH输入被计为1 sigop。此外,P2WSH见证脚本中的操作码与P2SH序列化脚本中的操作码计数相同。也就是说,根据参数,CHECKSIG仅计为1 sigop,CHECKMULTISIG计为1到20 sigop。此规则适用于原生见证程序和P2SH见证程序。

2.5附加定义

以下定义不用于共识限制,但建议提供与上述术语一致的语言。

2.5.1事务大小计算

事务权重定义为基本事务大小*3+总事务大小(即,与根据基本大小和总大小计算块权重的方法相同)。

虚拟事务大小定义为事务权重/4(四舍五入到下一个整数)。

基本事务大小是在删除见证数据的情况下序列化的事务的大小。

全部事务大小是按BIP144所述序列化的以字节为单位的事务大小,包括基础数据和见证数据。

2.6新脚本语义

尽管P2WPKH和P2WSH的脚本语言看起来非常类似于预先隔离的见证脚本,但是有几个显著的差异。用户不能假定在预隔离见证系统中可以使用的脚本也可以作为P2WPKH或P2WSH脚本使用。在生产网络中进行大规模部署之前,开发人员应该在默认中继策略打开的情况下在测试网上测试脚本,并在BIP141在主网上激活后用少量资金进行测试。

BIP143描述了共识级别上的一个主要区别,它是用于0版见证程序签名验证的一种新的事务摘要算法。

在参考实现版本0.13.1中,隔离见证的第一个版本中还包括三个中继和挖矿策略。基于这些政策的软分叉很可能在不久的将来被提出。为了避免交易确认的无限延迟和潜在的软分叉中的永久资金损失,用户必须仔细阅读新的语义:

1.在P2WPKH和P2WSH中只接受压缩的公钥(参见BIP143)

2.P2WSH中OP_IF/NOTIF的参数必须为最小[4]

3.如果OP_CHECKSIG或OP_CHECKMULTISIG失败(对于预隔离的见证脚本和P2WSH),则签名必须为空向量。见BIP146)

—-

编译者/作者:灰狼

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

LOADING...
LOADING...