EOS 块数据结构:块内通信和跨链(二)

区块链研究实验室

技术开发 | 咨询 | 孵化 | 资本对接

继续我们上部分的EOS块数据结构的内容,在第一章节我们已经块的主要结构,Cycle结构和transaction结构都给过一遍,下面我们继续剩余的2部分的结构解说。

四、 Message 结构

请点击输入图片描述

Message 用于记录交易的主要内容,包含了 4 个参数。

code

code 指向了执行这个消息的智能合约。比如“eos”是指 EOS 自身自带的智能合约,在前面系列指南里进行 eos 转账的操作,出发的就是这个合约。

type

type 指向需要执行的智能合约里的方法,比如“eos”里面的转账操作“transfer”。

authorization

authorization 记录了处理该消息所需要的权限。EOS 里面目前设计了三种权限:owner、active 和 recovery。owner 权限可以做所有事情,active 权限可以做出了更改所有者之外的所有操作。recovery 可用于 EOS 用户在密钥被盗时恢复其账户控制。

data

data 里面则存储了这个消息的其他参数。

五、 MessageOutput 结构

请点击输入图片描述

当智能合约处理一笔 SignedTransaction 时,有可能会生成一笔新的交易GeneratedTransaction,它将被存储 MessageOutput 结构体中。

MessageOutput 包含了被通知对象集合 notify,在完成通知以后被应用了的ProcessedTransaction 集合 sync_transactions,以及由智能合约生成的不带签名的交易 GeneratedTransaction 集合 async_transactions。

通知对象集合结构 NotifyOutput 里面包含了被通知的对象 name 和一个输出消息 MessageOutput。这和前面形成了一个嵌套关系,因为被通知的对象(合约)还有可能生成新的交易,如此递归下去。

由于 EOS 代码中对 MessageOutput 和 NotifyOutput 的处理还没有完全完成,我们会在后面的系列文章中做更详细的解释和分析。

六、 总结

EOS 在块内设计了 cycle 结构,实现了块内的通信,这样账户(合约)之间的通信将变得更加快捷。

在设计上,EOS 是模块化的,每个人不应该运行所有的东西,因此不能假定另一个账户(合约)的状态在同一台机器上是可访问的,这就意味着如果允许一个合约同步调用另一个合约,但如果这个合约不在内存中,系统将会崩溃。因此,EOS 要求所有账户间的通信都必须通过区块链上的交易进行传递。

为了实现跨链机制,EOS 特别设计了不带签名即可完成验证的交易机制,这种验证是通过状态信任链来完成的:第一个带签名的交易触发合约产生了第二个不带签名的交易,该交易同时顺序产生了第三个不带签名的交易,依次下去,最后所有的交易的验证都依赖于第一个交易的签名,和每一次合约执行后的状态。

从对 EOS 块数据的分析,我们可以看到 EOS 在设计上就已经考虑了高速、融汇、跨链等区块链未来的发展方向,我们有理由相信 EOS 代表了区块链的一种新的未来。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180512A0B92O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券