Always use author from api.derive.chain (#7867)
This commit is contained in:
parent
e38e6b3cf8
commit
f59d3c8a39
@ -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>
|
||||
);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user