Moonbeam 技术解读|Frontier介绍、使用和未来(上)

图片

Polkadot旨在构建一个由不同结构但相互连接的区块链网络,其设计核心是兼容性和互操作性。通过将不同的社区、经济体和企业连接到一个共享的生态系统里,为互联、去中心化网络和DApp的未来铺平了道路。不仅包括以Substrate构建的公共、私有和联盟链,还包括已经存在的区块链网络。

基于Substrate的Wasm原生合约模块有很多好处,包括原生速度、平台独立性以及多种语言编写合约的能力。但以太坊作为世界上第二大的区块链网络,也是最大的智能合约平台,许多开发者通过以太坊和solidity智能合约进入区块链世界。很多区块链开发者都在使用以太坊智能合约以及相关的工具进行项目开发。Parity作为以太坊生态系统的长期支持者和建设者,兼容以太坊生态是一件必要的事情。

Frontier 介绍与原理

Frontier是Substrate的以太坊兼容层,其目标是最大程度的兼容以太坊DApp在所有基于Substrate链上的运行,并实现以太坊Solidity编程语言支持的任何工具,包括MetaMask、Truffle和任何其他使用Web3 RPC的工具。

图片

Frontier由EVM虚拟机模块、Ethereum模拟器模块和Wrapper馈送模块所构成,其中:

  • EVM虚拟机模块提供一套完整Solidity合约执行环境,允许基于Substrate区块链能够完成以太坊状态转换功能,并使得与其他Substrate链上pallet互操作成为可能,包括模块间调用、余额转移和链间消息传递;

  • Ethereum模拟器模块提供一套完整的以太坊网络模拟环境,能够将完成的以太坊区块在Substrate内部进行模拟出块,传统以太坊的交易也会被处理和验证,从而提供基于以太坊的RPC外部调用接口;

  • Wrapper馈送模块计划实现一个合适的共识引擎,使得一个以太坊区块能够精准对应一个Substrate区块,相比Ethereum模拟器模块提供的以太坊区块生成,Wrapper能够完整封装以太坊区块头进行区块生成,借助可配置Child trie和Custom indexing来实现不同区块头的结构配置,这样的Frontier节点具备成为一个真实的以太坊客户端,或添加许多Frontier节点实现对以太坊硬分叉的功能。

图片

Moonbeam是波卡生态中最大的兼容以太坊智能合约平台,将Frontier作为其以太坊兼容层解决方案。同时,Moonbeam是Frontier项目最大的开源贡献者,推进Frontier成为跨平台兼容项目。目前Frontier已支持以太坊、币安链、BandChain、Kava和Harmony,并在未来支持Solana、Elrond、波卡、Kusama、StaFi、Edgeware及其自己开发的公链Frontier Chain。

Frontier 组装设计

通常Substrate Node Template由RPC Server、Runtime组件、共识组件、通信组件和Prometheus所构成。如下图所示,RPC Server提供用户与区块链网络交互能力,有HTTP和WebSocket RPC两种服务;Runtime提供一个可插拔、无分叉升级能力的模组, 提供Runtime API方便进行跨Runtime/WASM调用;共识组件提供出块、交易池、存储等功能,通信组件允许客户端与其他节点/网络进行通信。

图片

接下来,按照Runtime Module、RPC Server、底层组件等顺序组建一个完整的Frontier节点。

pallet_evm

pallet_evm允许在基于Substrate开发的区块链中执行未经修改的EVM代码。它采用SputnikVM作为其底层evm引擎,并遵循以太坊通用模块化规范,使得它能够灵活配置在任何Substrate链上实现以太坊兼容。  

pallet_evm内置独立一组账户可供使用,基于Substrate的H256账户将其余额存入或提取到EVM模块进行管理和使用。一旦用户将余额存入到EVM模块,例如模块间调用转账或XCMP跨链转账,就能够使用该模块创建和调用智能合约。      

其内置的转换函数可定义Substrate账户和EVM外部账户的映射关系,这种方法叫做:hash truncated account mapping,其本质是对H160地址进行哈希处理,取前32个字节映射到Substrate格式账户。moonbeam采用与此不同的方案,即对Substrate格式账户改为H160格式账户,从而实现与EVM账户的兼容,避免映射带来的额外授权操作。      

与以太坊主网相比,EVM模块能够产生几乎相同的结果,包括gas成本和余额变化。其差异在于:① 区块哈希可用长度可能不是256,取决于Substrate runtime中的配置;② 出块难度和交易收据可能不同,例如出块难度在该模块里配置为0。

代码层面,安装步骤:

  • 首先,在Cargo.toml里引入evm-core和ethereum库;

  • 然后,在runtime/Cargo.toml里配置依赖;

  • 最后,在runtime/src/lib.rs里为Runtime实现pallet_evm::Config配置,并注册到constrcut_runtime!里;

配置步骤:

  • 需要在创世区块配置chain_spec.rs里增加evm: EVMconfig。

pallet_ethereum

pallet_ethereum模拟一套以太坊风格的区块存储历史,可与pallet_evm组合进行使用。集成pallet_evm能够获得原生以太坊字节码合约的完美运行,但却难以查看到某个合约的执行历史、特定区块的交易数据及无法提供简单的方式进行链上查询。      

pallet_ethereum所做的第一件事,构建以太坊风格的区块(Author、Hash、Parent、blocknumber、StateRoot等),甚至可自定义配置区块参数,这样能够很轻松的获取某个区块的交易数据;第二件事在Block Header添加Frontier Digest,Block Header是区块链最基础的部分,即便轻节点需要同步Block Header。Frontier Digest包含每个以太坊区块哈希及所有交易哈希,这些信息将作为Mapping Sync Worker的输入进行处理;第三件事在Block Body添加transact,这将允许提交未经修改的以太坊字节码和签名交易,例如Metamask发送一个签名交易给transact extrinsic,这将会在evm中提交合约执行。      

moonbeam与acala关于合约设计的区别在于,moonbeam禁止所有合约通过evm pallet形式提交,只允许通过transact extrinsic来提交合约交易;acala则能够通过evm pallet直接提交合约交易。从transact提交的合约交易能够被索引,提供给区块链浏览器或检索工具进行链下查询,意味着能够兼容blockscout或etherscan使用,从而提升用户体验。      

新版Frontier定义不同CheckedExtrinsic形式,称之为fp_self_contained,将原来pub signed: CheckedSignature<AccountId, Extra>变为pub signed: CheckedSignature<AccountId, Extra, SelfContainedSignedInfo>,其中SelfContainedSignedInfo的数据结构:

 pub enum CheckedSignature<AccountId, Extra, SelfContainedSignedInfo> {

        Signed(AccountId, Extra),

        Unsigned,

        SelfContained(SelfContainedSignedInfo),

 }

虽然这种extrinsic已经被签名,但并不是Substrate标准方式的签名,其额外信息包括parent block hash等,这将帮助系统了解如何处理以太坊签名交易。这种分离式设计区别于以前的Frontier,之前会将以太坊交易放到Unsigned中执行,例如Moonriver就是采用这种设计方式,并能够很好的运行。然而,旧的Frontier设计方式会带来额外的复杂性和性能损耗,同时对兼容性也是一个挑战,但新的Frontier设计新增第三种类型,从而没有额外逻辑的改变,这样提高向下兼容性。      

代码层面,安装步骤:

  • 首先在runtime/Cargo.toml里引入pallet-ethereum和fp-self-contained依赖;

  • 然后在runtime/src/lib.rs里为Runtime实现pallet_ethereum::Config配置,IntermediateStateRoot用来确保当Substrate出块时都会输出一个以太坊风格区块并保证其加密安全性;

  • 最后同一文件中为Call实现fp_self_contained::SelfContainedCall配置,is_self_contained函数用来检查Call是否为一个ethereum pallet call,如果Call符合Call::Ethereum(call),则转换为call.is_self_contained(),进入ethereuem处理流程。

配置步骤:

  • 首先,在node/src/chain_spec.rs中增加ethereum: EthereumConfig{},这将创建以太坊风格的创世区块;

  • 然后在runtime/src/lib.rs中将Substrate Hash Mapping转换为Ethereum Hash Mapping。 

API Pipeline

pallet_evm和pallet_ethereum提供基于Substrate开发的区块链一整套解决方案。对于实际应用来说,还需要提供一组外部访问接口,类似polkadot.js.api为开发者提供调用服务。Frontier给出的解决方案:NetApi+Ethereum RPC API,外部调用(metamask)请求RPC Server中NetApi,然后NetApi将请求转发给Ethereum API(Runtime API),最后由Ethereum API访问Ethereum pallet数据并按照链路进行数据回传。      

Ethereum API为Runtime实现fp_rpc::EthereumRuntimeRPCApi<Block>配置,包括chain_id、account_basic、gas_price、account_code_at、author、storage_at、call、create、current_transaction_statuses、current_block、current_receipts、current_all和extrinsic_filter接口,这些接口很容易集成,也可根据需求增加更多接口信息。      

代码层面,安装步骤:

  • 首先在runtime/Cargo.toml中引入fp-rpc依赖,fp是frontier primitive封装的RPC格式;

  • 其次再runtime/src/lib.rs里为Runtime实现fp_rpc::EthereumRuntimeRPCApi<Block>配置;

  • 然后node/src/rpc.rs中为客户端节点添加network依赖;

  • 最后在io.extend_with中扩展NetApiServer。

回顾本文,我们从波卡的使命来说,兼容以太坊生态会是波卡生态长期发展的目标之一,未来我们会看到无数基于Substrate的区块链都将获得兼容以太坊的能力。

其次,介绍Frontier作为兼容以太坊的解决方案,致力于实现对以太坊的完全兼容,Moonbeam是Frontier项目最大的开源贡献者,推进Frontier成为跨平台兼容项目。

最后,介绍经典Frontier组件,包括pallet-evm、pallet-ethereum和api-pipeline通过这3个组件为波卡生态各项目方提供基础的以太坊执行能力。

下一篇文章,将讨论更多Frontier的先进组件,包括Transaction Converter、Precompile、FrontierBlockImport和opcode tracing,以及有趣的应用案例,敬请期待!

更多内容:

Moonbeam开发者文档:https://docs.moonbeam.network/cn/


关于Moonbeam
Moonbeam是波卡(Polkadot)网络中与以太坊兼容的智能合约平台,可实现轻松构建原生的互操作性去中心化应用。以太坊兼容特性允许开发者以最少的更改将现有的Solidity智能合约和DApp前端部署到Moonbeam。Moonriver作为Kusama上最活跃的平行链,已有80多个DApp完成在Moonriver的集成。Moonbeam将受益于Polkadot中继链的共享安全性和链接波卡其他链的互操作优势。

如需了解更多信息,请访问:Moonbeam | Polkadot Smart Contract Platform


关于Moonriver
Moonriver是Moonbeam的同行网络,旨在为激励实验提供永久性的测试环境。新上线项目的代码将优先部署到Moonriver,在其真实的经济环境下经历一系列的测试与实验验证。当验证完成并通过测试之后,项目代码才可正式部署至波卡上的Moonbeam。

如需了解更多信息,请访问:Moonriver - Solidity Smart Contracts on Kusama

更多 Moonbeam 信息 
官网: Moonbeam | Polkadot Smart Contract Platform
微博:Sina Visitor System
twitter: https://twitter.com/MoonbeamNetwork
Telegram: https://t.me/moonbeam_CN
Discord: https://discord.gg/skPfXvJWG7
中文电报群助手:@MoonbeamSister

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值