Add preruntime digest (#6713)

* update moonbeam-types-bundle

* handle preruntime digest
This commit is contained in:
Antoine Estienne 2021-12-23 12:48:02 +01:00 committed by GitHub
parent e94b742861
commit 21c232ff91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -46,7 +46,7 @@ function BlockAuthorsBase ({ children }: Props): React.ReactElement<Props> {
let lastHeaders: HeaderExtendedWithMapping[] = [];
let lastBlockAuthors: string[] = [];
let lastBlockNumber = '';
const isAuthorIds = isFunction(api.query.authorMapping?.authorIds); // TODO-MOONBEAM reevaluate in a month: 07/16/21
// Some blockchains such as Moonbeam need to fetch the author accountId from a mapping
const isAuthorMappingWithDeposit = isFunction(api.query.authorMapping?.mappingWithDeposit);
// subscribe to all validators
@ -60,20 +60,19 @@ function BlockAuthorsBase ({ children }: Props): React.ReactElement<Props> {
const blockNumber = lastHeader.number.unwrap();
let thisBlockAuthor = '';
// Check for digest type
const hasConsensusDigest = lastHeader.digest.logs && lastHeader.digest.logs[0] && lastHeader.digest.logs[0].isConsensus && lastHeader.digest.logs[0].asConsensus[1];
const hasPreRuntimeDigest = lastHeader.digest.logs && lastHeader.digest.logs[0] && lastHeader.digest.logs[0].isPreRuntime && lastHeader.digest.logs[0].asPreRuntime[1];
if (lastHeader.author) {
thisBlockAuthor = lastHeader.author.toString();
} else if (isAuthorMappingWithDeposit && lastHeader.digest.logs && lastHeader.digest.logs[0] && lastHeader.digest.logs[0].isConsensus && lastHeader.digest.logs[0].asConsensus[1]) {
} else if (isAuthorMappingWithDeposit && (hasConsensusDigest || hasPreRuntimeDigest)) { // Check for a Digest
// Some blockchains such as Moonbeam need to fetch the author accountId from a mapping
thisBlockAuthor = ((await api.query.authorMapping.mappingWithDeposit(lastHeader.digest.logs[0].asConsensus[1])).toHuman() as {
thisBlockAuthor = ((await api.query.authorMapping.mappingWithDeposit(hasConsensusDigest ? lastHeader.digest.logs[0].asConsensus[1] : lastHeader.digest.logs[0].asPreRuntime[1])).toHuman() as {
account: string;
deposit: string;
}).account;
lastHeader.authorFromMapping = thisBlockAuthor;
} else if (isAuthorIds && lastHeader.digest.logs && lastHeader.digest.logs[0] && lastHeader.digest.logs[0].isConsensus && lastHeader.digest.logs[0].asConsensus[1]) {
// TODO-MOONBEAM reevaluate in a month: 07/16/21
// Some blockchains such as Moonbeam need to fetch the author accountId from a mapping (function call may differ according to pallet version)
thisBlockAuthor = (await api.query.authorMapping.authorIds(lastHeader.digest.logs[0].asConsensus[1])).toString();
lastHeader.authorFromMapping = thisBlockAuthor;
}
const thisBlockNumber = formatNumber(blockNumber);