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