Доступ к идентификатору цепочки и хешу генезиса из среды выполнения субстрата во время внешнего выполнения

Я использую последнюю стабильную версию Substrate pre-v2.0-3e65111. Я хотел получить доступ к идентификатору цепочки или генезис-хешу из среды выполнения Substrate во время обработки внешнего (я принимаю подписанные полезные нагрузки и пытаюсь убедиться, что полезные нагрузки были нацелены на правильную цепочку). Возможен ли к ним доступ? (Я знаю, что могу сделать это с помощью polkadot-js) Я вижу черту CheckGenesis, но не понимаю, как я могу использовать ее для создания хэша? (new приводит к пустому вектору).


person lovesh    schedule 13.03.2020    source источник


Ответы (1)


Вы можете найти реализацию для 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());

Позвольте мне знать, если это помогает!

person Shawn Tabrizi    schedule 13.03.2020
comment
Спасибо. Меня устраивает. Я использовал let hash = <system::Module<T>>::block_hash(T::BlockNumber::from(0)) (не использовал T::BlockNumber::zero(), поскольку он просил меня импортировать другую черту). Теперь hash реализует AsRef<[u8]>, поэтому я получил байтовый срез с hash.as_ref(). - person lovesh; 13.03.2020