diff --git a/packages/api-derive/src/chain/getBlockByNumber.ts b/packages/api-derive/src/chain/getBlockByNumber.ts new file mode 100644 index 0000000000..15208fe552 --- /dev/null +++ b/packages/api-derive/src/chain/getBlockByNumber.ts @@ -0,0 +1,19 @@ +// Copyright 2017-2022 @polkadot/api-derive authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { Observable } from 'rxjs'; +import type { AnyNumber } from '@polkadot/types/types'; +import type { SignedBlockExtended } from '../type/types'; +import type { DeriveApi } from '../types'; + +import { switchMap } from 'rxjs'; + +import { memo } from '../util'; + +export function getBlockByNumber (instanceId: string, api: DeriveApi): (blockNumber: AnyNumber) => Observable { + return memo(instanceId, (blockNumber: AnyNumber): Observable => + api.rpc.chain.getBlockHash(blockNumber).pipe( + switchMap((h) => api.derive.chain.getBlock(h)) + ) + ); +} diff --git a/packages/api-derive/src/chain/index.ts b/packages/api-derive/src/chain/index.ts index 67338d81de..a1069fbe47 100644 --- a/packages/api-derive/src/chain/index.ts +++ b/packages/api-derive/src/chain/index.ts @@ -6,5 +6,6 @@ export * from './bestNumberFinalized'; export * from './bestNumberLag'; export * from './getHeader'; export * from './getBlock'; +export * from './getBlockByNumber'; export * from './subscribeNewBlocks'; export * from './subscribeNewHeads';