前端模板Multiaddress功能适配BLX链tradeTokens调用问题咨询
前端模板扩展multiaddress查找功能时调用tradeTokens extrinsic报错排查
扩展前端模板实现新功能时,遇到了符合链上规范的multiaddress查找功能相关问题。
初步根因判断
调用tradeTokens extrinsic时缺少必填参数:用于定义fromapn:Source和toapn:Source的类型标识字段。
参考验证现象
- 在polkadot js apps中通过下拉菜单选择Address32时,编码后的调用数据中会填充数值3(Address32是Source枚举的第3个项)

- 进一步可以看到该数值3被识别为
snip< Address32: >snip
当前参考代码
BLX_frontend_new/src/Transfer.js L71-L72
运行时报错信息
Unhandled Rejection (Error): createType(Call):: Call: failed decoding allocator.tradeTokens:: Struct: failed on args: {"asset_id":"AssetId","fromapn":"Source","toapn":"Source","amt":"Balance1"}:: Struct: failed on fromapn: {"_enum":{"Id":"AccountId","Index":"AccountIndex","Raw":"Bytes","Address32":"[u8;32]","Address20":"[u8;20]"}}:: Invalid AccountId provided, expected 32 bytes, found 31
问题推测
- extrinsic会将提交给fromapn的首段(或第一张截图中调用数据的第二段)值作为Source的枚举索引,当前场景下该值为0,因此后续传入的所有数据会被当作AccountId处理
- 由于其中1字节被用作Source枚举索引,剩余数据仅为31字节,而AccountId要求为32字节,因此触发报错
待解答疑问
是否需要新增辅助函数来追加指定Source类型的标识数据?或者是否有其他解决方案?
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

