Moonbeam 技术解读|波卡的以太坊模拟器

以下文章来源于OneBlock Community ,作者OneBlock

Gavin Wood曾说:你可以在波卡上再造一个以太坊,却不能在以太坊里做出一个波卡。这句话是对波卡整体架构的灵活性和可组合性的评价,会存在一条或多条平行链具备类似以太坊,或者完全兼容以太坊的能力。

如今的以太坊,正面临成本和可扩展性的挑战,无数开发者和DAPP承受着高昂的交易费用,共享一个相对较慢的交易池模型;而波卡网络,提供很多较为先进的设计和组件,但底层实现与以太坊差异较大。

对于开发者来说,选择开发性价比高、使用体验好、兼容性强的平台,尤其是能够同时连接波卡和以太坊两个区块链流量巨擘,具有很大的现实需求。

兼容波卡和以太坊的智能合约平台

Moonbeam的定位则是完全兼容EVM、Web3的API兼容以及将Moonbeam连接到现有的以太坊网络的网桥。借助Moonbeam,利用现有的以太坊开发者工具和网络,开发者可以轻松实现跨链兼容。

图片

开发者只需基于自身开发成果稍作修改,即可轻松将现有的Solidity智能合约和DApp前端部署到Moonbeam。

从技术方案上来看,Moonbeam 相当于建设了一个适用于波卡的「以太坊模拟器」,具备以下功能特性:

  • 与EVM兼容的工具链:MetaMask、Remix(智能合约开发 IDE)、Truffle(基于 Solidity 的开发框架)和Web3 JavaScript库,开发者可以使用熟悉的工具在 Moonbeam 上调试应用或构建新应用;

  • 与Substrate兼容的工具链:Polkadot wallet/Polkadot.js.apps、Polkadot JavaScript库和区块链浏览器,可帮助开发人员和用户创建他们的区块链空间并与之交互;

  • 跨链集成:得益于Polkadot网络发展和转接桥成熟,Moonbeam将有能力与更多平行链、异构链、甚至是非区块链进行消息传递,并保证其状态可见性;

  • 链上治理:允许Moonbeam根据开发人员和社区的需求进行快速响应、逻辑升级和数据迁移,而无需任何分叉;

  • 统一账户&签名:统一H256/H160账户系统、ECDSA/25519签名系统,开发者和用户能够更加友好、更低学习成本的迁移和使用Dapp应用。

同时,Moonbeam与以太坊存在许多重要差异,例如Moonbeam使用基于权益证明的共识机制,这意味着所有与以太坊工作量证明相关的API都将返回默认值,Moonbeam也将更加经济和节能。

从整体而言,Moonbeam是一个非常尊重以太坊开发者习惯和用户习惯的智能合约平台,而运营智能合约平台关键在于原生资产的创造与价值共识构建的能力。

Moonbeam平台正处于快速发展期和红利期,预计未来会出现更多的项目合作方,比如:

  • Ocean Protocol,是一个去中心化的数据交换协议,旨在解锁数据,为数据用户提供更公平的结果,其允许数据提供者通过去中心化的数据市场与数据消费者进行交互,同时保证所有参与者的控制,可审计性,透明度和合规性。目前Ocean已在Moonbeam部署Ocean Marker Web应用程序组件,并将进一步退出数据隐私增强功能。

  • Orion Protocol,是一个流动性交易聚合协议,旨在提供一个非托管的网关——将分散式和集中式交易和互换平台的流动性聚集在一个分散式平台,试图解决加密市场、传统金融和NFTs资产碎片化的问题。目前Orion已通过Moonbeam成功迁移到Polkadot生态系统,并且正在构建UI/UX集成到Orion Terminal。

如下图,目前有92个项目正在Moonbeam生态中开发建设:

图片

数据结构

  • Moonbeam之Extrinsics

图片

通常我们将Substrate区块分为Header和Body,Header由number、extrinsics_root、state_root 、parent_hash和digest所组成,Body由一系列Vec<Extrinsic>所构成。

除了Extrinsic: Event、Extrinsic: Error外,Moonbeam还包含内部inherents(Set Author、Set Validation Data和Set Timestamp)、Unsigned Transactions(pallet ethereum)以及Signed Transactions(Balance Transfer、System Remark、Stake、DIRECT EVM Calls、Runtime Upgrades)。

图片

每个Moonbeam区块中,典型的Extrinsic有4类:timestamp.set、parachainSystem.setValidationData、authorInherent.setAuthor和ethereum.transact

  • Moonbeam之Digest Logs

图片

每个Moonbeam区块中,典型的Digest有:auth、fron、aura

  • auth: runtime将区块Author inherent信息复制到logs中,以便于外部调用;

  • fron:Ethereum pallet包括以太坊风格的区块和以太坊交易哈希列表,它允许采用区块流水线技术维护从ethereum到substrate路由查询表;

  • aura:会在standalone模式下使用,包括author和slot信息。

统一账户模型

  • 统一账户设计挑战

得益于pallet-evm模块,波卡生态内任何一条平行链都可以提供执行基于Solidity智能合约的可能性,而少量或无需更改solidity代码。

Substrate 使这种集成成为可能,只需将evm pallet组合到runtime以获得 EVM 支持,以及增加 Frontier 的以太坊模块来提供以太坊 RPC 兼容性。

然而,仔细思考后会存在如下方面的挑战:

  • 如何维护账本数据? 

  • 如何映射地址类型?

  • 如何兼容签名算法?

  • 如何支持不同特性?

除此之外,还需要考虑客户端兼容调用、ETH-Substrate兼容层交互和独立链/平行链模式切换中上下文修复(比如best_block、block_author)工作。

同时,针对统一账户模型,存在三种设计方案:完全统一账户、同步账户或可转让账户。

  • 第一种方案里,需要在Substrate中实现H160和ECDSA的traits;

  • 第二种方案里,需要实现一种同步账户ID映射的机制;

  • 第三种方案里,需要实现余额能够从storage中进行Moved的方法。

相对来说,第一种方案的难度最大,收益是开发者和用户能够获得更好的体验,Moonbeam最后采用第一种方案实现统一账户模型。

  • 账户系统结构分析

从账户类型来看,以太坊账户分为:用户地址和合约地址,两种类型账户都有余额字段可进行正常转账;Moonbeam账户分为:用户地址、合约地址和代理地址,代理地址能够被授权操作另外一个地址执行有限的操作。

此外,Moonbeam拥有几种不同的余额类型:

  • Reducible – 代表可使用的活动余额(没有锁定/冻结),调用Ethereum API或Metamask查看的余额;

  • Reserved – 代表因链上需求而抵押的余额,能够通过执行一些链上操作来释放。例如,通过协议进行质押显示为保留的余额,这些资金不能通过Ethereum API访问,直到它们被释放;

  • Misc frozen – 代表除支付交易费外,维持账户的最低阈值余额。例如,用于对治理提案进行投票的资金将被显示为misc frozen,同样不能通过Ethereum API访问,直到他们被释放。

从账户交易来看,以太坊通过Ethereum API调用eth_sendRawTransaction进行转账操作,利用Ethereum JSON RPC制定不同的策略来监听转账或余额变化;Moonbeam具备多种交易触发方法,最佳方案是采用Polkadot.js SDK(Substrate API)进行监控。

此外,Moonbeam拥有几种不同的交易类型:

  • Substrate transfer – 通过用户创建一个extrinsic(balances.transfer或balances.transferKeepAlive)进行转账,会触发一个balances.Transfer事件;

  • Substrate feature –  通过Substrate原生组件来创建一个extrinsc,比如treasury pallet调用treasury.proposeSend,同时会触发一个或多个balances.Transfer事件;

  • Ethereum transfer – 通过一个无数据输入,创建一个ethereum.transact extrinsic,触发一个balances.Transfer事件;

  • Ethereum transfers via smart contracts – 将一些数据作为输入,创建一个ethereum.transact extrinsic,并触发一个或多个balances.Transfer事件;

Polkadot.js API为开发者提供一种使用Javascript与Substrate链交互的方法,步骤为:

  • 构造wsProvider和PolkadotApi,循环查询链上所有事件;

  • 检查是否为balances事件,如果是则对事件进行解析,并打印输出到控制台。

更多示例请参考本脚本。(https://gist.github.com/crystalin/b2ce44a208af60d62b5ecd1bad513bce)

  • 统一账户模型设计

如上所述,通过EVM和Frontier pallet,Alice用户可以在基于Substrate的链上拥有一个以太坊风格的地址(H160格式),长度为40+2的十六进制字符,该地址私钥可在以太坊一侧进行签署交易;同时,该地址被映射到Substrate Balance pallet的Storage中,成为一个Substrate风格的地址(H256格式)。

Alice只知道H160地址的私钥,但不知道映射版本的私钥,因此无法使用对应H256地址发送交易,这样也就无法参与质押、治理操作,如下图所示:

图片

如此一来,Alice需要将余额移动到H160映射的H256地址,才能进行合约交易与部署。同时,她还需要维持另外一个H256地址保持平衡才能使用基于Substrate的功能。综上,Alice至少需要两个私钥才能实现兼容以太坊,这带来了摩擦和糟糕的用户体验。 

图片

Moonbeam统一账户模型,旨在解决上述问题并创造一个完全兼容以太坊的环境,并尽可能提供最佳的用户体验,包括以太坊基础功能集、Substrate链上治理、抵押和跨链能力

目前,Bob用户无需面临账户之间移动余额的问题,并且能够使用单个账户和私钥访问所有功能。

总的来说,Moonbeam利用波卡平行链机制能够进行多个异构分片链通信,利用中继链模式获得共享安全性,利用以太坊转接桥和EVM虚拟机实现智能合约的无缝迁移和交互,让开发者利用现有以太坊工具和网络,轻松将项目成果进行跨链兼容。

随着波卡网络和以太坊网络的不断发展,Moonbeam强大的兼容性必将迎合市场的需求,进而实现开发者和用户的最优使用体验。

Moonbeam入门开发课程及相关文档:

👉 Moonbeam开发者文档:Moonbeam Docs

👉 第一课:课程导读

👉 第二课:环境配置与安装运行Moonbeam节点

👉 第三课:Truffle和连接MetaMask

👉 第四课:使用Truffle在Moonbeam部署智能合约


关于Moonbeam
Moonbeam是波卡(Polkadot)网络上的以太坊兼容智能合约平台,为原生互操作应用程序的开发提供便利。通过其以太坊兼容性,开发者能够以最低程度的代码调整在Moonbeam上部署现有的Solidity智能合约和Dapp前端。作为在波卡(Polkadot)网络上的平行链,Moonbeam也将受益于波卡(Polkadot)中继链的共享安全性以及与其它波卡(Polkadot)相关链的连接性。Moonbeam由PureStake团队开发,目前正在预上线阶段,主网计划于2021年Q4季度上线。

如需了解更多信息,请访问: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值