Fill range of blocks on latency (#7042)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
Jaco 2022-02-25 08:31:17 +01:00 committed by GitHub
parent e83ddfe77d
commit db8ecdfefb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,14 +68,11 @@ function addBlock (prev: Detail[], { block, events }: SignedBlockExtended): Deta
];
}
async function getPrev (api: ApiPromise, { block: { header } }: SignedBlockExtended): Promise<SignedBlockExtended[]> {
const blockNumbers: number[] = [];
let blockNumber = header.number.toNumber();
for (let i = 1; blockNumber > 0 && i <= INITIAL_ITEMS; i++) {
blockNumbers.push(--blockNumber);
}
function addBlocks (prev: Detail[], blocks: SignedBlockExtended[]): Detail[] {
return blocks.reduce((p, b) => addBlock(p, b), prev);
}
async function getBlocks (api: ApiPromise, blockNumbers: number[]): Promise<SignedBlockExtended[]> {
if (!blockNumbers.length) {
return [];
}
@ -87,6 +84,27 @@ async function getPrev (api: ApiPromise, { block: { header } }: SignedBlockExten
return blocks.filter((b): b is SignedBlockExtended => !!b);
}
async function getPrev (api: ApiPromise, { block: { header } }: SignedBlockExtended): Promise<SignedBlockExtended[]> {
const blockNumbers: number[] = [];
let blockNumber = header.number.toNumber();
for (let i = 1; blockNumber > 0 && i <= INITIAL_ITEMS; i++) {
blockNumbers.push(--blockNumber);
}
return getBlocks(api, blockNumbers);
}
async function getNext (api: ApiPromise, { blockNumber: start }: Detail, { blockNumber: end }: Detail): Promise<SignedBlockExtended[]> {
const blockNumbers: number[] = [];
for (let n = start + 1; n < end; n++) {
blockNumbers.push(n);
}
return getBlocks(api, blockNumbers);
}
export default function useLatency (): Result {
const { api } = useApi();
const [details, setDetails] = useState<Detail[]>([]);
@ -98,7 +116,7 @@ export default function useLatency (): Result {
return;
}
setDetails((p) => calcDelay(addBlock(p, signedBlock)));
setDetails((prev) => calcDelay(addBlock(prev, signedBlock)));
if (hasHistoric.current) {
return;
@ -107,9 +125,7 @@ export default function useLatency (): Result {
hasHistoric.current = true;
getPrev(api, signedBlock)
.then((blocks) => {
setDetails((p) => calcDelay(blocks.reduce((p, b) => addBlock(p, b), p)));
})
.then((all) => setDetails((prev) => calcDelay(addBlocks(prev, all))))
.catch(console.error);
}, [api, signedBlock]);
@ -118,22 +134,17 @@ export default function useLatency (): Result {
return;
}
const last = details.find(({ blockNumber }, index) =>
const lastIndex = details.findIndex(({ blockNumber }, index) =>
index !== (details.length - 1) &&
(details[index + 1].blockNumber - blockNumber) > 1
);
if (!last) {
if (lastIndex === -1) {
return;
}
const nextNumber = last.blockNumber + 1;
api.derive.chain
.getBlockByNumber(nextNumber)
.then((block) => {
block && setDetails((p) => addBlock(p, block));
})
getNext(api, details[lastIndex], details[lastIndex + 1])
.then((all) => setDetails((prev) => calcDelay(addBlocks(prev, all))))
.catch(console.error);
}, [api, details]);