收藏本站 网站导航 开放平台 Friday, March 29, 2024 星期五
  • 微信

波卡的以太坊模拟器

来源 中金网 10-14 20:45
摘要: Gavin Wood曾说:你可以在波卡上再造一个以太坊,却不能在以太坊里做出一个

  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也将更加经济和节能。

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

  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: 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强大的兼容性必将迎合市场的需求,进而实现开发者和用户的最优使用体验。

  感兴趣的开发者如果想要获取进一步实践教程,请点击左下方阅读原文访问。

以太坊 波卡
免责声明:中金网发布此信息目的在于传播更多信息,与本网站立场无关。中金网不保证该信息的准确性、真实性、完整性、有效性等。相关信息并未经过本网站证实,不构成任何投资建议,据此操作,风险自担。
相关新闻 更多

天眼深度丨以太坊现货ETF面临挑战 SEC批准几率仅为25%?

随着决定公布日期的日益临近,美国证券交易委员会(SEC)对以太坊交易所交易基金(ETF)现货的批准一事仍然保持沉默,围绕SEC 是否会批准以太坊现货 ETF 的讨论正在加剧。

2天前

天眼深度丨如何提高加密货币市场的透明度和公众信任?

近年来,数字资产行业一直备受关注,而加密货币市场的透明度和公众信任一直是该行业发展中的关键问题。

03-26 15:55

天眼深度丨A16z加密律师指责SEC滥用职权 现货以太坊ETF面临危险?

全球最大的风险投资公司之一a16z Crypto的总法律顾问迈尔斯·詹宁斯(Miles Jennings)日前对美国证券交易委员会(SEC)及其对加密货币监管的处理方式发起了猛烈攻击。

03-22 15:50