用户登陆
正在加载
Substrate高阶概览和在ChainX系统中的应用
互联网 · 2020-07-23 11:52:45

讲者:金程鑫,ChainX核心开发者,原金链盟FISCO-BCOS核心开发者。

作为以太坊的隐形大脑,Gavin Wood曾经为以太坊模型构建做出了巨大贡献,以太坊的许多模型体系实际上是由Gavin Wood提出。在substrate中,Gavin Wood延续了以太坊中的很多设计。对于整个发张体系,可以总结为: 以太坊的“账户状态区块链”到substrate的“状态区块链”,而使用substrate开发的区块链比如ChainX,称为“功能区块链”。

对于以太坊这样在区块链体系上提出图灵完备的运行体系,运行DApp,我们将其称呼为具备逻辑功能的区块链。 将这类区块链与计算机程序相比,可以总结为: 计算机程序由 指令和数据 组成,程序运行于操作系统当中,接受输入并产生输出 而这类区块链与计算机程序的结构相对应,由 链上代码和链上存储 组成,运行于区块链的平台上,一般使用虚拟机作为运行环境,接受交易的调用作为输入,由于是异步的,用户可以查询执行后的数据作为输出 区块链节点下层则封装好分布式系统需要的组件,连接其所有的区块链节点。

因此将上页提出的结构与实际使用的区块链进行对应,以太坊的链上代码就是智能合约,链上存储就是世界状态,substrate在此基础上进一步抽象,其链上代码就是substrate的runtime,链上存储就是substrate维护的数据状态。而Runtime和数据状态共同构成了使用substrate开发的链的功能。

以太坊作为账户状态区块链,其存储状态的结构称为“世界状态”,由于以太坊中账户与合约都是账户,所以世界状态分为上层的账户数与合约内部存储的存储树,如图所示在从区块1000到1001的过程中,其中合约1下的存储的kv有变化,账户2的状态如以太坊数量等有变化。

在以太坊一笔交易的执行过程中,首先要区分其是账户或是合约,然后分别执行相应功能。

在substrate中对其做了抽象,移除了账户的概念,只保留了状态树。而状态树就是用来存储 k-v的数据,换句话说,可以把substrate的状态存储看做一个 k-v数据库 从区块链1000到1001的过程中, key1 和 key3产生了变化,因此在1001块的时候存储了新的key1和key3对应的值。

在交易执行中,不再区分账户合约的概念,直接使用交易(extrinsic) 调用了 Runtime的接口。

总结以上概念,可以看出在 链上存储部分, substrate与以太坊相比移除了账户的概念,直接抽象成为了 k-v 存储的概念,方便开发人员开发。 对于链上代码而言,substrate将其放在了核心的地位,而不是像以太坊一样只有合约才具备链上功能。 因此substrate比以太坊的抽象层次更高 那么substrate提出的Runtime就是一个实现链上功能的概念,甚至连原来以太坊智能合约的概念也可以纳为Runtime中的一个组件。

而ChainX就是在Runtime中开发了自己的功能。例如ChainX中由图中的这些模块组成。

这里择几个简单的例子介绍。 如在资产模块中,可以看到我们使用 AssetBalance 这个 map 的k-v管理的用户的资产数据 对外的接口提供了 register_asset注册资产,transfer转账等等。

比特币轻节点中,存储了比特币的区块头与相关的交易对外提供了一些相应的接口。

而在substrate中一些模型不符合我们的需求,我们对其进行了适配,比如我们将手续费单独成为一个模块进行处理,并且在交易中添加了类似gasprice的“手续费加速”的概念。

substrate的rpc提供可访问的部分比较底层,因此我们对其进行了改造,使ChainX能够提供我们这条链独有的rpc接口。

由于许多第三方如区块链,钱包等需要保留一份链外的全局状态数据,因此我们修改了一些substrate的源码,使其能在运行过程中将转台数据导出来如存储到redis当中。

此外还有许多改造,篇幅受限,只展示了部分。

免责声明:
本网站所提供的所有信息仅供参考,不构成任何投资建议。用户在使用本网站的信息时应自行判断和承担风险。币界网不对用户因使用本网站信息而导致的任何损失负责。用户在进行任何投资活动前应自行进行调查和研究,并谨慎决策。币界网不对用户基于本网站信息做出的任何投资决策负责。用户在本网站发布的任何内容均由其个人负责,与币界网无关。
免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。币界网对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。币界网用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与币界网无关。币界网不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。
s_logo
App内打开