diff --git a/packages/react-query/src/BlockAuthors.tsx b/packages/react-query/src/BlockAuthors.tsx index f4619e8779..569704cebc 100644 --- a/packages/react-query/src/BlockAuthors.tsx +++ b/packages/react-query/src/BlockAuthors.tsx @@ -46,7 +46,7 @@ function BlockAuthorsBase ({ children }: Props): React.ReactElement { 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 { 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);