如何为StorageValue设置默认值并解决OptionQuery的trait未实现报错
报错原因
OptionQuery查询类型本身设计为存储值不存在时返回None,不支持绑定自定义默认值,因此触发了trait未实现的报错。要使用自定义默认值的StorageValue,必须搭配ValueQuery查询类型,该类型在存储值为空时会自动返回你定义的默认值。
修正后的代码
#[pallet::type_value] pub fn DefaultRegistrationFees<T: Config>() -> u128 { 100u128 } #[pallet::storage] #[pallet::getter(fn profile_registration_fees)] pub type RegistrationFee<T> = StorageValue<_, u128, ValueQuery, DefaultRegistrationFees<T>>;
补充说明
如果你确实需要在逻辑中判断存储值是否被手动设置过,可以保留OptionQuery,去掉默认值配置,在取值时手动处理默认逻辑即可,示例:
// 存储定义移除默认值参数 pub type RegistrationFee<T> = StorageValue<_, u128, OptionQuery>; // 业务逻辑中手动处理默认值 let fee = RegistrationFee::<T>::get().unwrap_or(100u128);
内容的提问来源于stack exchange,提问作者Amiya Behera
相关产品推荐
相关产品推荐

