substrate - 前端模板中的多地址实用程序
问题描述
扩展前端模板以做一些新的事情并遇到我们链中指定的多地址查找功能问题:https ://github.com/Greenetwork/BLX_chain/blob/f14ad8705debcc8033069b4fdda046271e1b61f1/pallets/allocator/src/lib.rs #L140
因此,问题似乎在于我们缺少外部(tradeTokens)想要的数据(定义 fromapn:Source 和 toapn:Source 的“类型”的部分)
您可以在下面看到,在 polkadot js 应用程序中使用下拉菜单选择 Address32 会在编码的呼叫数据中填充 3(Address32 是 Source 枚举中的第三个条目)
在这里,3 显示为 'snip< Address32: >snip'
目前作为我们前端模板中的代码: https ://github.com/Greenetwork/BLX_frontend_new/blob/afe6f9f256e6c9c2a3164f72cf80d4a9057bb893/src/Transfer.js#L71-L72
错误是:
未处理的拒绝(错误):createType(Call)::Call: 解码失败 allocator.tradeTokens:: Struct: args 失败:{"asset_id":"AssetId","fromapn":"Source","toapn":"Source ","amt":"Balance1"}:: 结构:在 fromapn 上失败:{"_enum":{"Id":"AccountId","Index":"AccountIndex","Raw":"Bytes","Address32 ":"[u8;32]","Address20":"[u8;20]"}}:: 提供的 AccountId 无效,预期 32 字节,找到 31
我认为问题在于外部正在读取提交给 fromapn 的数据的第一个(或第二个,参见第一张图片中的调用数据)值作为 Source 的索引,在当前情况下为 0,因此它正在继续将传递的其余数据视为 AccountId。
它失败的事实是,通过使用其中一个值作为 Source 的索引,所以我们只剩下 31 个字节而不是 32 个字节。我认为 AccountId 也是 32 个字节。
我们是否需要另一个辅助函数来附加指定类型的额外数据?还是有别的路?
解决方案
带有和索引字符的前置 Address32 使其为 33 个字节: https ://github.com/Greenetwork/BLX_frontend_new/blob/71a0fbee21c08b2374bddfcdca0fe204d3e36aa7/src/helpers.js#L39-L51
推荐阅读
- ruby-on-rails - Watir - 如何收集跨度包含 aria_label "Multimedia" 的所有链接
- r - 不平衡面板数据转长格式
- shell - 语法错误:文件结尾意外(预期为 fi)
- bash - bash 函数、局部变量和退出代码
- c - 如何使用 gtk_label_set_attributes 更改 GtkLabel 的文本大小?
- docker - docker中的Apache重写不适用于PHP文件
- bash - 我怎样才能运行这个 bash 脚本需要一起添加两个评论
- ios - 无法在使用 iOS 9 的设备上安装 Firebase 分发版本
- java - 二维数组列表会自动更新列表中的所有二维数组,并使用 java 中最后提供的二维数组
- python - 无法通过 pywin32 使用 Excel 选择活动打印机