如何解决如何从另一个托盘访问托盘中的存储和功能?
我有一个通用托盘,供其他托盘使用。例如,下面是常见的共享托盘:
#![cfg_attr(not(feature = "std"),no_std)]
#[cfg(test)]
mod tests;
pub trait Trait: system::Trait {
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
type Currency: Currency<Self::AccountId> + ReservableCurrency<Self::AccountId>;
}
type AccountIdOf<T> = <T as system::Trait>::AccountId;
type BalanceOf<T> = <<T as Trait>::Currency as Currency<AccountIdOf<T>>>::Balance;
type StructInfoOf<T> = StructInfo<AccountIdOf<T>,<T as system::Trait>::BlockNumber>;
#[derive(Encode,Decode,Default,PartialEq,Eq)]
#[cfg_attr(feature = "std",derive(Debug))]
pub struct StructInfo<AccountId,BlockNumber> {
name: Vec<u8>,owner: AccountId,created: BlockNumber,}
decl_storage! {
trait Store for Module<T: Trait> as TokenStore {
pub Data get(fn data): map hasher(blake2_128_concat) u32 => Option<StructInfoOf<T>>;
pub DataCount get(fn data_count): u32;
}
}
decl_event!(
pub enum Event<T>
where
AccountId = <T as system::Trait>::AccountId,Balance = BalanceOf<T>,{
/// Test event
TestEvent(u32,Balance,AccountId),}
);
decl_error! {
pub enum Error for Module<T: Trait> {
TestError
}
}
decl_module! {
pub struct Module<T: Trait> for enum Call where origin: T::Origin {
fn deposit_event() = default;
#[weight = 10_000]
pub fn test_dispatch_call(origin) -> dispatchResult {
let caller = ensure_signed(origin)?;
Ok(())
}
}
}
impl<T: Trait> Module<T> {
pub fn public_function(value: u32) -> BalanceOf<T> {
let value: u32 = 0;
Self::data_count()
}
}
但我不确定如何从公共模块调用 Data、DataCount、test_dispatch_call、public_function。
解决方法
在 [dependencies] 中添加 Cargo.toml 中需要的托盘,如 pallet-test = {default-features = false,path ='../test'}
和 [features] [std] 中,如 'pallet-test/std'
在当前托盘中:在 pub trait Trait (v2) 或 pub trait Config(v3) 中添加 pallet-test 像 {{1 }}
访问函数:pub trait Config: frame_system::Config + pallet_test::Config{}
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。