您当前的位置:主页 > 区块链 >

Plasma Core的证明结构和检查

2019-04-19 19:43 来源:互联网 编辑:运营003
摘要: 
一个完整的证明包含了足够的信息来保证,如果以太坊链本身不分叉,那么令牌可以在主链上赎回。

与传统的区块链系统不同,完整的Plasma节点不存储每一个交易,它们只需要存储与其拥有的资产相关的信息。这意味着发送者必须向接收者证明发送者实际上拥有给定的范围。一个完整的证明包含了足够的信息来保证,如果以太坊链本身不分叉,那么令牌可以在主链上赎回。

必须根据操作员提交给主链上智能合约的块哈希检查包含根。通过追踪证明方案中验证的保管链,从代币的初始存款到目前为止,保证了赎回能力。

Plasma Core采用了一种相对简单的方法来验证传入的事务证明。本节介绍该方法。

证明格式(Proof Format)

历史证明包括一组存款记录和相应交易的长清单以及相应的TransctionProofs。

plasma-utils暴露一个静态checkTransactionProof(transaction,transactionProof,root)方法,Plasma-core通过调用ProofService来使用它。

交易证明(Transaction Proof)

TransactionProof对象包含检查给定Transaction的有效性的所有必要信息。也就是说,它只是一个TransferProof对象的数组。根据上面关于原子多重的一节,当且仅当所有的TransferProofs都有效时,给定的TransactionProof才有效。

转移证明(Transfer Proof)

TransferProofs包含在正确的块编号中恢复包含与事务中给定Transfer相对应的有效分支所需的所有必要信息。这构成:

1. Merkle sum tree的实际节点,代表分支的完整`inclusionProof`

2. 用于计算分支跟踪的二进制路径的叶的索引

3. 上面的sum树规范中描述的已解析的bottom.sum

4. 特定发件人的签名

就像plasma-utils架构一样:

Plasma Core的证明结构和检查

请注意,inclusionProof是一个可变长度数组,其大小取决于树的深度。

证明步骤(Proof steps)

从存款开始,验证过程的核心是将每个证明元素应用于当前“已验证”状态。如果任何证明元素没有导致有效的状态转换,我们必须拒绝证明。

应用每个证明元素的过程是公开的; 我们只是根据合同的监管规则要求在每个区块应用交易。

快照对象(Snapshot object)

我们跟踪历史拥有范围的方式称为快照。

快照代表了区块中范围的经过验证的所有者:

Plasma Core的证明结构和检查

存款记录(Deposit records)

每个收到的范围必须来自相应的存款。

存款记录由其令牌、开始、结束、存款人和块号组成。

对于每个存款记录,验证者必须仔细检查以太坊以确认所声称的存款确实发生,并且在此期间没有发生退出。

验证快照数组将初始化为这些存储,每个snapshot.owner都是存储者。

接下来,我们应用所有给定的事务证明,相应地更新已验证的快照。对于每个事务和相应的TransactionProof,验证程序执行以下步骤:

1. 验证给定的证明元素是否有效。如果没有,提示错误

2. 对于交易中的每次转移,请执行以下操作:

a.“拆分”在transfer.typedstart、transfer.typend、implicitstart和implicitend上更新的任何快照。

b.增加所有结果验证快照的.block编号,这些快照的block编号等于transaction.block number-1;

c.对于在transfer.start和transfer.end之间的每个拆分快照:

i.验证snapshot.owner==transfer.from。如果没有,抛出一个错误。

ii.设置snapshot.owner=transfer.sender。

TransactionProof必须应用于递增的BlockNumber中。

一旦该操作被递归地应用于所有交易证明,客户可以通过搜索已验证快照中的所有元素(块号等于当前Plasma块,所有者等于其地址)来检查自己现在拥有的新硬币。

交易证明有效性(TransactionProof Validity)

上述步骤1中的交易有效性检查等同于检查智能合约的有效性条件。基于上面的和树规范的基本有效性检查如下:

1.检查事务编码是否格式正确。

2.对于每次转移和相应的转移证明:

a.检查签名是否解析为其transfer.sender地址

b.验证inclusionproof的根是否等于该Plasma块的根哈希,以及leafindex定义的二进制路径。

c.计算分支的implicitstart和implicitend,并验证implicitstart<=transfer.start

[ 编辑: 运营BX01 ]

中国金融领域第一媒体

更多服务
友情链接

京ICP备11011451号-1

举报热线:(010)12377

举报邮箱:xinhua_ljzjr#ljzjr.cn(#替换@)

合作QQ:1447260813

中国金融时报网 版权所有 Copyright © 2010 - 2018 ljzjr.cn All Rights Reserved.