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

64 篇文章 0 订阅
23 篇文章 2 订阅

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

Substrate 通过不同模块组合实现不同应用场景、业务范围的区块链,而 Frontier 作为波卡生态中一种用于兼容 Ethereum-Substrate 的重要组件,能够非常方便、干净的集成。它允许开发者运行未经修改的以太坊 DApps(特别是以太坊的伊斯坦布尔版本),并托管以太坊的 Solidity 编程语言支持的任何工具,其中包括 MetaMask、Truffle 和任何其他使用 Web3 RPC 的工具。

图片

1. Frontier组装设计

上文我们介绍了 Frontier 经典组件,包括 pallet-evm、pallet-ethereum 和 api-pipeline,通过这 3 个组件为波卡生态各项目方提供基础的以太坊执行能力与交互方法。接下来,我们将讨论 Frontier 的其他组件,包括 Transaction Converter、Precompile Contract、FrontierBlockImport 和 opcode tracing。

➤ 1.1 Transaction Converter

当用户通过 Metamask 发送标准以太坊交易请求时,NetApi 最先收到 Ethereum 风格类型的交易,但 Substrate 无法解析提交的交易类型,第一件事是添加 Transaction Converter。Frontier 定义 ConvertTransaction trait,将交易包装成 pallet_ethereum transaction extrinsic,对 Uncheckd Extrinsic 和 Opaque Unchecked Extrinsic 两种类型进行封装成格式 Substrate-formatted transactions。

代码层面,安装步骤:

  • 首先,在 runtime/Cargo.toml 里引入 frontier-rpc-primitives 依赖;

  • 然后,在 runtime/src/lib.rs 里引用 codec::{Encode, Decode};

  • 最后,在 runtime/src/lib.rs 里定义单元结构体TransactionConverter,并为该结构体实现 ConvertTransaction<UncheckedExtrinsic> 和ConvertTransaction<opaque::UncheckedExtrinsic> trait。

参考 commit:

https://github.com/PureStake/substrate-node-template/commit/a9e96664c0ff8437cb694bb831439b1ab7969795

 1.2 Precompile Contracts

Frontier 中预编译合约是在节点客户端 Rust 代码进行实现,同时它们不需要 EVM,同时无需高额 Gas 费用且运行速度很快。与使用直接在 EVM 中运行的函数相比,它对开发人员来说成本也更低,同时保留与普通合约一样的调用方式。预编译合约适用于提供更复杂库函数(通常用于加密、散列等复杂操作)的一种优化方法,这些函数不适合编写操作码。它们适用于简单但经常调用的合约,或逻辑上固定但计算量很大的合约。

采用 native 执行的预编译合约可访问本地 DB 存储状态,实现自己所需的任何逻辑。以太坊使用内置合约实现了 8 个函数,分别是:ecrecover、sha256hash、ripemd160hash、dataCopy、bigModExp、gn256Add、bn256ScalarMul、bn256Pairing,占用了 0x1-0x8 这 8 个地址。Substrate 中通过pallet_evm 注册可实现不同顺序排列的预编译合约列表,目前已实现基于 EIP1559 标准的 blake2、bn128、curve25519、dispath、ed25519、modexp、sha3fips,包括 Moonbeam 自行实现的 author-mapping、crowdloan-rewards、relay-encoder、xcm_transactor 等预编译合约。

代码层面,安装步骤:

  • 首先,在 runtime/Cargo.toml 中添加预编译合约引用依赖;

  • 其次,在 rumtime/src/lib.rs 中 impl pallet_evm::Config for Runtime 添加 type Precompiles 的预编译合约类型。

参考commit:

https://github.com/PureStake/substrate-node-template/commit/d5bfa7e37e008b168110ca7532d3508983046fab

 1.3 FrontierBlockImport

图片

对用户而言,通常会访问 etherscan 或 blockscout 等区块链浏览器来查看某个以太坊区块或哈希详情,然而 Substrate 并不存在以太坊风格的交易哈希,这样无法灵活访问历史区块信息。为解决这个问题,Frontier 利用 BlockImport Pipeline 特性将传入区块的以太坊信息过滤筛选,并写入本地数据库,称为 frontier-consensus。

Block Import Pipeline 是一个抽象的工作队列,存在于每个Substrate 节点中,负责网络上传入消息的处理和验证。如果消息有效,则将消息导入节点的状态;消息无效则丢弃。除了负责导入区块数据外,也会处理与共识相关的信息,例如 justifications、finality proofs 等。

Auxiliary storage 是基于 Substrate 的本地辅助数据库,不参与节点共识,把从 BlockImportPipiline 筛选的以太坊数据创建一对 N 映射关系进行存储,例如:

Hashes: map hasher(kaccak256) EthereumHeader => Vec<H256>;

Metadata: map hasher(keccak256) EthereumTransaction => (H256, u32);

由于分叉会产生无效区块,一个以太坊 Header 需要存储于所有可能被 Finalize 的 Substrate 区块里;由于可能存在的孤块,每个节点存储的 ethereum-style block-> substrate-style block 数据只能保证达到最终确定性区块的数据满足一致性要求。

代码层面,安装步骤:

  • 首先,在 node/Cargo.toml 中引入 fc-consensus 依赖;

  • 其次,在 node/src/service.rs 中 new_partial 函数将 GrandpaBlockImport 管道替换为 FrontierBlockImport 管道。

参考 commit:https://github.com/PureStake/substrate-node-template/commit/5e34bd64942211e0b1d6c288dcfe580ea238820a

2. NFT Letter Workshop

NFT Letter 是一种基于 ERC721 的智能合约,允许创建基于文本的 NFT,旨在进行书面艺术表达。Letter 允许艺术作品,如诗歌、小说、宣言和源代码,作为信件形式完全在链上进行存储,这会是一种有趣的社会实验,当你在信件里想说的越多,你需要支付的 gas 费就会越多。

Frontier 作为 Substrate 的以太坊兼容层,允许创建与以太坊兼容且未经修改的以太坊 DApps,pallet-evm 将运行 NFT Letter 合约,pallet-ethereum 将处理以太坊区块和兼容的 RPC方法,这对提升 DApp 在不同生态间的扩展性至关重要。

所需准备工作:

  • Install Rust

  • Install NPM+Yarn+NPX

  • Install HardHat/Truffle

  • Install Metamask extension

首先,我们将下载 frontier(git clone https://github.com/paritytech/frontier)、修改  ChainId 为200(sed -i 's/42/200/g' runtime/src/lib.rs)、编译及运行,选取tests/tests/teest-balance.rs 中默认测试账号:

const GENESIS_ACCOUNT = "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b";该账号在EVMConfig中初始化余额,从而确保能够顺利发送交易、验证签名和提交Letter合约;

图片

其次,我们将下载 NFT Letter(git clone https://github.com/NFTletter/letter)、编辑  frontier url(`http://localhost:9933`)、编译及部署上链,再通过http://localhost:8080 启动前端页面,完成 Metamask 账户配置(http://localhost:9933,ChainId: 200),将看到如下页面:

图片

链上有一些预提交的合约可以查阅,比如 Letter Factory Contract(0x9f7F6a7C28e9d0733fD2d59071bA500B54430044),因为支持 unicode 字符集,emoji 表情能够被写入到 Substrate 链上,如下图:

图片

接着,我们将写一封新的信件并完成链上提交,如下图:

图片

然后,通过 Address:0x64A9d747fAcd29Ba2A528741f7890f632C1E975f 和 page:0,读取链上信件,如下图:

图片

除了以上功能,NFT Letter 合约还能够在某个信件中增加多个页面,通过 Manage 功能可以设置信件是否公开访问或授权某个地址进行查看。目前,NFT Letter 应用部署在 Moonbase Alpha 测试网和 Ethereum Rinkeby 测试网,访问网址:https://nftletter.herokuapp.com。

3. Frontier未来规

Frontier 的目标是实现在 Substrate 上原生地运行 Ethereum DApps,但不处理与其他基于 Ethereum 网络进行通信的问题。如果你希望区块链具备以太坊合约运行能力,则单独运行Frontier;如果你希望创建一个具有 Ethereum 功能的平行链,则需要 Frontier 和 Cumulus 结合起来;如果你不希望原生运行 EVM,但想与其他网络沟通,则需要研究 Parity Bridge 项目。

Frontier 仍然处于开发中,Pallet_EVM 会是相对稳定的,但Pallet_Ethereum 部分设计可能会被改变。例如 Substrate 中 wrapper block 机制,能将与 Substrate 区块头完全不同的区块进行封装,封装区块与外部区块具有严格的一对一映射。通过计算 Child Trie 和建立 Custom indexing,使得异构区块能共同工作,并能完成这些 wrapper 区块与其他 Substrate 节点通信。opcode tracing 允许在相同状态下重放以太坊交易的功能,这将方便开发者能够观察每个操作码执行的结果是否符合预期。最终实现 Ethereum 客户端能够允许将任何基于 eth1.x 的区块链无缝迁移到 Substrate 上,并添加更多自定义功能,比如链上治理和无缝升级。

参考文献:

https://corepaper.org/substrate/wrapper/


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

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

更多 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值