Always use author from api.derive.chain (#7867)

This commit is contained in:
Jaco 2022-07-16 09:49:36 +02:00 committed by GitHub
parent e38e6b3cf8
commit f59d3c8a39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 26 deletions

View File

@ -9,12 +9,8 @@ import { Link } from 'react-router-dom';
import { AddressMini, Digits } from '@polkadot/react-components';
import { formatNumber } from '@polkadot/util';
// TODO update HeaderExtended in api-derive
export interface HeaderExtendedWithMapping extends HeaderExtended {
authorFromMapping?: string;
}
interface Props {
value: HeaderExtendedWithMapping;
value: HeaderExtended;
}
function BlockHeader ({ value }: Props): React.ReactElement<Props> | null {
@ -31,11 +27,9 @@ function BlockHeader ({ value }: Props): React.ReactElement<Props> | null {
</td>
<td className='all hash overflow'>{hashHex}</td>
<td className='address'>
{value.authorFromMapping
? <AddressMini value={value.authorFromMapping} />
: value.author && (
<AddressMini value={value.author} />
)}
{value.author && (
<AddressMini value={value.author} />
)}
</td>
</tr>
);

View File

@ -3,12 +3,11 @@
import type { HeaderExtended } from '@polkadot/api-derive/types';
import type { EraRewardPoints } from '@polkadot/types/interfaces';
import type { Codec, IOption } from '@polkadot/types/types';
import React, { useEffect, useState } from 'react';
import { useApi, useCall } from '@polkadot/react-hooks';
import { formatNumber, isFunction } from '@polkadot/util';
import { formatNumber } from '@polkadot/util';
// TODO update HeaderExtended in api-derive
export interface HeaderExtendedWithMapping extends HeaderExtended {
@ -47,8 +46,6 @@ function BlockAuthorsBase ({ children }: Props): React.ReactElement<Props> {
let lastHeaders: HeaderExtendedWithMapping[] = [];
let lastBlockAuthors: string[] = [];
let lastBlockNumber = '';
// 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
api.query.session && api.query.session.validators((validatorIds): void => {
@ -56,24 +53,13 @@ function BlockAuthorsBase ({ children }: Props): React.ReactElement<Props> {
}).catch(console.error);
// subscribe to new headers
api.derive.chain.subscribeNewHeads(async (lastHeader: HeaderExtendedWithMapping): Promise<void> => {
api.derive.chain.subscribeNewHeads((lastHeader: HeaderExtended): void => {
if (lastHeader?.number) {
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 && (hasConsensusDigest || hasPreRuntimeDigest)) { // Check for a Digest
// Some blockchains such as Moonbeam need to fetch the author accountId from a mapping
const optMap = await api.query.authorMapping.mappingWithDeposit<IOption<{ account: Codec } & Codec>>(hasConsensusDigest ? lastHeader.digest.logs[0].asConsensus[1] : lastHeader.digest.logs[0].asPreRuntime[1]);
if (optMap.isSome) {
lastHeader.authorFromMapping = thisBlockAuthor = optMap.unwrap().account.toString();
}
}
const thisBlockNumber = formatNumber(blockNumber);