Substrate中PalletId调用into_sub_account方法提示不存在如何解决?
问题原因
- 你参考的是Substrate最新master分支的文档,和你使用的
monthly-2021-10版本不匹配,into_sub_account方法是后续版本才新增到PalletId结构体的直接调用方法,你所用的旧版本不存在该原生方法。 - 旧版本中
PalletId生成子账户的相关逻辑没有直接实现在结构体上,而是定义在frame_support::traits::AccountIdConversiontrait中,未导入对应trait时就会提示方法不存在。
解决方案
两种方案可按需选择:
方案1:导入对应trait适配当前版本
不需要升级Substrate依赖,仅调整代码即可正常运行:
- 首先在代码顶部添加trait导入语句:
use frame_support::traits::AccountIdConversion;
- 把原代码中的
into_sub_account替换为当前版本支持的into_sub_account_truncating方法,修改后代码如下:
const PALLET_ID: PalletId = PalletId(*b"ex/cfund"); fn fund_account_id(index: FundIndex) -> T::AccountId { PALLET_ID.into_sub_account_truncating(index) }
方案2:升级Substrate依赖版本
如果需要使用新版into_sub_account方法,可以将你的Substrate依赖tag升级到monthly-2022-09及以上版本,该版本之后的PalletId已经内置了into_sub_account直接调用方法,不需要额外导入trait即可正常使用。
内容的提问来源于stack exchange,提问作者Amiya Behera
相关产品推荐
相关产品推荐

