当前位置: 首页 > news >正文

wordpress 建站配置网页美工设计图

wordpress 建站配置,网页美工设计图,网站建设详细描述产品的是什么意思,app运营方式Precompile 的扩展 深度详解 Revive 和 Precompile 技术路径给大家介绍了 precompile 的实现原理和调用之后。本文我们接下来介绍 ERC20 和 XCM precompile 是如何来实现的,通过对它们的理解,你也可以把任何 Pallet 里面的方法,包装成智能合…

1@2x.jpg

1.png

Precompile 的扩展

深度详解 Revive 和 Precompile 技术路径给大家介绍了 precompile 的实现原理和调用之后。本文我们接下来介绍 ERC20 和 XCM precompile 是如何来实现的,通过对它们的理解,你也可以把任何 Pallet 里面的方法,包装成智能合约,暴露给外部就可以调用。

为了方便理解,我们还是沿用几个关键的英文词汇,它们定义如下:

Precompile: 预编译智能合约

Builtin: 内置的预编译智能合约

External: 外部预编译智能合约

Multiple:一组预编译智能合约

我们要介绍的 ERC20 和 XCM 都属于是 external。

2.png

Assets Pallet 和 REC20

Assets pallet 是在 Polkadot SDK 里面用来表示一个 fungible 的资产,它实现的方法和对资产的管理是和ERC20标准一致的。使用一个 precompile 来实现 ERC20 标准的接口也比较简单,需要注意的主要是地址转换,U256 数据类型的转换和溢出处理。weights 的计算和扣除等等。

ERC20 最特别的是,它是一个最典型的 multiple 合约的例子。它使用到了我们在上一篇文章中提到的特殊地址方式,将地址的高 32 位映射到了 Asset ID。对于不熟悉 Assets pallet,这里解释一下,Asset ID 是用来表示不同的资产,类似不同的 ERC20 的地址。

在以太坊中,ERC20 的地址是分散的。但是在Polkadot SDK通过 ERC20 precompile 暴露出来的地址是有自己的区间的。由于Asset ID 只使用了前面的四个字节,那么第 5 字节到 16 个字节都应该是 0. 17 18 字节是 ERC20 在 runtime 定义的自己的  index。19 20 字节也是 0。

那么从地址很容易就能识别 external 以及 ERC20。

我们来看下具体的代码实现。

图片

代码分析

合约地址到 Asset ID 的转换。通过定义一个 InlineAssetIdExtractor 定义一个的数据结构,来进行转换。它地址的前面四个字节,将它转换成一个 u32 类型的数据

截屏2025-07-08 23.31.21.png

对于 ERC20,它和其他所有 precompile 一样,需要实现一个 Precompile 的 trait。里面只有一个 call 方法,在 call 方法里面,它要获取 Asset ID,然后就通过 selector 来分发到不同的具体实现中去。

截屏2025-07-08 23.32.45.png

这里我们只选取一个 Transfer 方法,来看一下它的代码。首先,它通过环境变量 env 来得到调用者的地址,然后从参数中得到目的地址,和转账数量,最终调用的是 Asset Pallet 里面的 do_transfer 方法。

截屏2025-07-08 23.34.06.png

XCM pallet 和 XCM precompile

XCM 是 Polkadot 里面用来在不同的链之间传递消息的格式规范。消息可以是在 parachain 之间,或者和 relaychain。具体的实现和规范比较复杂,这里不做太多介绍。有兴趣可以参考文档

XCM 的整体实现,包含了几个不同的 Pallet,其中最主要的接口,执行 XCM 消息和发送 XCM 消息都是定义在 XCM Pallet 里面的。首先来看 Solidity 的接口,它和 Pallet 的实现一致,包含了执行一个 XCM 消息,发送 XCM 消息二个基本方法。最后一个比较特殊,它是用来返回一个 XCM 需要的 weight。它类似于在 EVM 中 gas estimation。

截屏2025-07-08 23.35.58.png

对于 precompile 的具体实现也比较简单,就是解码和调用Pallet里面的方法。这里只粘贴出 weightMessage 的实现,我们一会要和它交互。它的作用就是解析一个只含有 weight 信息的 XCM 消息的编码,返回 proofSize 和 refTime。这二个分别是 polkadot 里面对一个交易对应存贮和时间上的消耗。

截屏2025-07-08 23.37.36.png

截屏2025-07-08 23.37.45.png

4.png

Runtime 的定义

在 Runtime 中,我们可以把 ERC20 和 XCM precompile 加进去。代码如下

截屏2025-07-08 23.39.14.png

代码中 0x120 和 0x320 就是二个 ERC20 multiple 的 suffix。这里有二个是因为 Assets Pallet 本身是一个可以多实例化的 Pallet,因此 ERC20 的地址也可以是二个不同的。调用的时候一定要找到对应关系。另外这个值也不是固定的,比如在 substrate node 中,就把这二个值定义为 1 和 2. 在调用具体的链的时候,需要查询代码才能知道。这个也不太合理,应该使用 Pallet 的常量来定义它比较好。

而 XCM 没有地址 index 定义,直接写死在 Pallet 代码中,值是 10.

5.png

如何调用 ERC20 和 XCM

ERC20 的调用

我们在 Passet Hub contract 链来调用 ERC20。首先我们要确定它的地址,从 Runtime 中我们知道它的地址后面的 8 个字节。然后我们需要新建一个 Asset,这个可以通过 polkadot app 的接口,来创建一个 ID 为 7 的资产。

截屏2025-07-08 23.42.43.png

有了这个资产之后,我们就可以通过合约来调用。我们打开 polkaVM 的 remix,在浏览器中输入 https://remix.polkadot.io,把下面这个合约部署到  Passet Hub。

截屏2025-07-08 23.43.42.png

截屏2025-07-08 23.43.47.png

我们来调用 getBalance 取得这个 Asset 的总的数量。第一次调用,我们发现它的值为 0.因为我们创建之后,还没有 Mint 过任何资产。我们回到 Apps,调用 mint

截屏2025-07-08 23.45.04.png

然后再次调用 getBalance 方法,就能得到我们刚才 mint 的数量

截屏2025-07-08 23.45.56.png

这样我们就完成了和 Assets Pallet 通过 ERC20 precompile 来交互,更多的方法大家可以自己尝试。有了它,我们可以不部署自己的 ERC20 合约。当然中使用它的时候,需要有直接和 pallet 交互的部分,也会提高应用程序的复杂度。

XCM 的调用

XCM precompile 的地址是在 pallet 实现就定义好了的,编号为 10. 地址是 “0x00000000000000000000000000000000000a0000”

首先,我们写一个简单的合约来调用它。

截屏2025-07-08 23.47.28.png

截屏2025-07-08 23.47.34.png

把这个合约加到一个源文件中,并编译和部署。得到地址后,调用 callWeightMessage 函数,输入 “0x050c0004000000281300000028000d010204000101000101010101010101010101010101010101010101010101010101010101010101”。测试数据可以从这个文件得到, 通过打印单元测试里面的输出。 运行结果截图如下

截屏2025-07-08 23.48.51.png

6.png

总结

在这个文章中,我们介绍了 ERC20 和 XCM 二个 precompile 的实现细节,以及如何和他们通过合约来交互。precompile 是一个十分强大的功能,它可以高效的实现一些底层的方法,还可以把所有 runtime 里面的功能通过 EVM 接口暴露出来。最新的 Revive 实现也让我们看到了 Pallet 想要把它的方法封装到 precompile 是多么的简单,它将成为 PolkaVM 最强大的功能之一。

http://www.dtcms.com/a/404880.html

相关文章:

  • 最早的做团购的网站wordpress发布的文章如何不显示
  • 个人网站 云服务器WordPress go.php 代码
  • 西安俄语网站建设可以使页面具有动态效果的网站建设技术
  • 国外做免费网站的工信网企业查询
  • 乐陵建设网站品牌网站建设h合肥
  • 做外贸网站特色seo诊断书案例
  • 网站开发 站长统计国内永久免费的crm系统软件
  • 一级a做爰片免费网站 新闻网络推广需要什么技能
  • 歌曲网站源码联想电脑建设网站前的市场分析
  • 做网站的公司经营范围用网站做邮箱吗
  • 建设网站建设什么挣钱上海知名seo公司
  • 学校网站建设如何分类做外贸的网站哪些是最好的
  • 菏泽网站备案拍照有了源码怎么做网站
  • 凡科建站快车登录网站常用英文字体
  • 做详情图的网站宁波企业网站制作推荐
  • 杭州seo推广服务营销网站优化seo
  • 东莞服饰网站建设哪家好wordpress主题英文改中文
  • 手机网站建设需求文档服装外贸行业发展趋势
  • 无锡新吴区住房建设和交通局网站wordpress增加登陆功能
  • 快彩网站开发wordpress加载完再显示图片
  • 网站的二维码怎么做的高端网咖电脑配置
  • 免费备案网站空间深圳网站建设哪家比较好
  • 网站内容与模板设计方案彩票源码网站的建设
  • 上海手机网站建设哪家专业网站销售系统
  • 好的建站网站网站建设网络科技公司加盟
  • 怎样搜网站wordpress不支持自定主题字体
  • 站长百科 wordpress汽车网站模板下载
  • 共享办公商业租赁网站模板怎么投诉网络平台
  • 用织梦做网站都需要用什么手机端网站重构
  • 生成网站有吗免费的信息最全的网站