如何从 frame_system::Config 访问存储?

How to access Storage from frame_system::Config?

我正在尝试将 Substrate 的 utxo-workshop utxo.rs 转换为 FRAME v2。

这是在 <Number<T>> 处出错的片段(因为 Number 是私有的?)。

#[frame_support::pallet]
pub mod pallet {
    #[pallet::pallet]
    #[pallet::generate_store(pub(super) trait Store)]
    pub struct Pallet<T>(PhantomData<T>);

    #[pallet::config]
    pub trait Config: frame_system::Config {
        /// The overarching event type.
        type Event: From<Event<Self>> + IsType<<Self as frame_system::Config>::Event>;

    }

    fn disperse_reward(authorities: &[H256]) {
      ...

      let hash = BlakeTwo256::hash_of(&(
        &utxo,
        <Number<T>>::get().unwrap().saturated_into::<u64>()
        ));

      ...
    }
}

下面的行调用block_number(), I believe that's equivalent to the block_number getter of FRAME v2。构建运行时时可以访问它:

frame_support::construct_runtime!(
    pub enum Test 
    {
        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
        ...
    }
);

fn testing() {
   let block_number = System::block_number();
}

但是,有没有办法访问frame_system::Config上的存储值,没有 construct_runtime!

一旦构建了运行时,您就可以访问运行时托盘的存储,该过程由宏 construct_runtime!{} 完成。你可以在这里阅读 https://substrate.dev/rustdocs/v3.0.0-monthly-2021-05/frame_support/macro.construct_runtime.html 未出现在该宏中的 pallet 将不会成为您运行时的一部分,因此将无法访问其存储。