You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Substrate pallet开发decl_module宏本地解析歧义错误求助

错误原因说明

这个编译错误的核心原因是混用了两代不兼容的Substrate pallet编写语法:

  • 你当前用的decl_module!是Substrate pallet v1版本的声明宏语法,这套语法下为可调用方法指定权重的写法是#[weight = 权重值],不识别带pallet前缀的属性。
  • 你写的#[pallet::weight(T::WeightInfo::deposit())]是Substrate pallet v2/v3版本属性宏体系下的语法,只能在#[pallet::call]修饰的impl块里使用,不能放在decl_module!的内部作用域。

编译器在解析decl_module!内部的代码时,无法匹配新的#[pallet::weight]语法规则,所以针对上方的文档注释抛出了语法歧义的报错。

修复方案

你可以二选一:

方案1:继续使用旧版decl_module!语法

直接把权重声明的代码改成旧版写法即可:

/// Deposit funds
#[weight = T::WeightInfo::deposit()]
pub fn deposit(origin: OriginFor<T>, amount: BalanceOf<T>) -> DispatchResult {
    // 原有逻辑不变
}

方案2:升级为新版pallet属性宏语法

弃用decl_module!、decl_storage、decl_event这套旧声明宏,改用官方现在推荐的#[pallet]属性宏体系编写pallet,示例结构参考:

#[pallet::pallet]
#[pallet::generate_store(pub(super) trait Store)]
pub struct Pallet<T>(_);

#[pallet::call]
impl<T: Config> Pallet<T> {
    /// Deposit funds
    #[pallet::weight(T::WeightInfo::deposit())]
    pub fn deposit(origin: OriginFor<T>, amount: BalanceOf<T>) -> DispatchResult {
        // 原有逻辑不变
    }
}

内容的提问来源于stack exchange,提问作者jvn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:18:05