簡體   English   中英

如何獲取 Substrate 中的當前區塊號?

[英]How do you get the current block number in Substrate?

我的問題是:

  1. 我如何捕獲當前塊號?
  2. 如何將當前塊號轉換為 u32?

我正在嘗試在模板托盤內編寫一個 function,它采用 u32(輸入參數)並將該數字添加到當前塊號。

#[pallet::weight(10_000 + T::DbWeight::get().writes(1))]
    pub fn revoke(origin: OriginFor<T>, number: u32) -> DispatchResult {
        let caller = ensure_signed(origin)?;

        // GET CURRENT BLOCK NUMBER
        // CONVERT CURRENT BLOCK NUMBER TYPE TO U32
        // TARGET_BLOCK = CURRENT_BLOCK_NUMBER + NUMBER
        // STORE TARGET_BLOCK

        Ok(())
    }

我已閱讀以下文檔(以及更多文檔),但無法使代碼正常工作。

這是我的嘗試列表:

let y = System::block_number() as u32;
let z = sp_std::alloc::System::block_num() as u32;
let p = Self::block_number();
let h = BlockNumberProvider::current_block_number();
let h: BlockNumberFor<T> = BlockNumberProvider::current_block_number();
let p = BlockNumberProvider::current_block_number() as u32;
target_block = target_block + p;
let x = <T as sp_runtime::offchain::storage_lock::BlockNumberProvider>::current_block_number();
let x = <T as BlockNumberProvider>::current_block_number();
let j = frame_system::Pallet<Config>::block_number();
target_block = target_block + h;
let y = Self::BlockNumber;
let yy = <T as frame_system::Config>::BlockNumber;
let xc = frame_system::block_number();
let current_block = System::block_number()
.saturated_into::<u64>()
.saturating_sub(1);
let u = Number::<T>::get(T::BlockNumber);
let w = T::BlockNumber::block_number();
let n = <T as frame_system::Config>::BlockNumber::block_number();
let m = frame_system::<T>::BlockNumber;
let un = BlockNumberFor;
let current_block_number: u32 = <frame_system::Pallet<T>>::block_number();
let now_block_number = <frame_system::Module<T>>::block_number();
let now_block_number = <frame_system::Pallet<T>>::block_number();
let now_block_number_b: <T as frame_system::Config>::BlockNumber = <frame_system::Pallet<T>>::block_number();
T::BlockNumber;
let xp = now_block_number_b + 10;
let h: BlockNumberFor<T> = BlockNumberProvider::current_block_number();
let x: <T as Config>::BlockNumber = BlockNumberProvider::current_block_number();
let x = frame_system::Config::block_number();
let c = block_number();
let v = <T as frame_system::Config>::BlockNumber;
let x = block;
let q = block.into();
let x: Number<T> = block.into();
let f: u32 = x.into();
let v = 10.into();
let w: BlockNumber_<T> = block.into();
let target_block = target_block + f;
let current_block_number: Number<T> = <frame_system::Pallet<T>>::block_number();
let h: BlockNumberFor<T> = BlockNumberProvider::current_block_number();
let x: BlockNumber_<T> = frame_system::pallet::Pallet::current_block_number();
let y: BlockNumberFor<T> = frame_system::pallet::Pallet::current_block_number();
let z: T::BlockNumber = frame_system::pallet::Pallet::current_block_number();

如果您能提供任何幫助,我將不勝感激。

這是工作代碼:

#[pallet::weight(10_000 + T::DbWeight::get().writes(1))]
    pub fn set_block_delay(origin: OriginFor<T>, block: T::BlockNumber) -> DispatchResult {
        let caller = ensure_signed(origin)?;
        
        let current_block_number = <frame_system::Pallet<T>>::block_number();

        let block_delay: u32 = 10;

        let target_block = current_block_number + block_delay.into();

        ensure!(target_block < block, "fail");

        Ok(())
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM