在外部执行期间从 Substrate 运行时访问链 ID 和创世哈希

Accessing chain id and genesis hash from the Substrate runtime during extrinsic execution

我正在使用 Substrate 的最新稳定版 pre-v2.0-3e65111 我想在处理外部时从 Substrate 运行时访问链 ID 或创世哈希(我正在接受签名的有效负载并尝试确保有效负载针对正确的链)。是否可以访问它们? (我知道我可以用 polkadot-js 做到这一点) 我看到了 trait CheckGenesis 但不知道如何将它用于创世哈希? (new 导致空向量)。

您可以在此处找到 CheckGenesis 的实现:https://github.com/paritytech/substrate/blob/master/frame/system/src/lib.rs#L1417

impl<T: Trait + Send + Sync> SignedExtension for CheckGenesis<T> {
    type AccountId = T::AccountId;
    type Call = <T as Trait>::Call;
    type AdditionalSigned = T::Hash;
    type DispatchInfo = DispatchInfo;
    type Pre = ();
    const IDENTIFIER: &'static str = "CheckGenesis";

    fn additional_signed(&self) -> Result<Self::AdditionalSigned, TransactionValidityError> {
        Ok(<Module<T>>::block_hash(T::BlockNumber::zero()))
    }
}

从这里,您应该能够看到您可以通过调用访问创世哈希:

frame_system::Module::<T>::block_hash(T::BlockNumber::zero());

如果有帮助请告诉我!