diff --git a/packages/react-hooks/src/useBlockInterval.ts b/packages/react-hooks/src/useBlockInterval.ts index 667182e304..a4230b65b5 100644 --- a/packages/react-hooks/src/useBlockInterval.ts +++ b/packages/react-hooks/src/useBlockInterval.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { ApiPromise } from '@polkadot/api'; +import type { BabeGenesisConfiguration } from '@polkadot/types/interfaces/babe'; import { useMemo } from 'react'; @@ -10,6 +11,7 @@ import { BN, BN_THOUSAND, BN_TWO, bnMin } from '@polkadot/util'; import { createNamedHook } from './createNamedHook.js'; import { useApi } from './useApi.js'; import { A_DAY } from './useBlocksPerDays.js'; +import { useCall } from './useCall.js'; // Some chains incorrectly use these, i.e. it is set to values such as 0 or even 2 // Use a low minimum validity threshold to check these against @@ -40,9 +42,15 @@ function calcInterval (api: ApiPromise): BN { function useBlockIntervalImpl (apiOverride?: ApiPromise | null): BN { const { api } = useApi(); + const currApi = apiOverride || api; + const blockTimeAura = useCall(currApi.call.auraApi?.slotDuration && currApi.call.auraApi.slotDuration, []); + const blockTimeBabe = useCall(currApi.call.babeApi?.configuration && currApi.call.babeApi.configuration, [], { + transform: (data: BabeGenesisConfiguration | undefined) => data?.slotDuration + }); + return useMemo( - () => calcInterval(apiOverride || api), - [api, apiOverride] + () => (blockTimeAura || blockTimeBabe) ?? calcInterval(currApi), + [blockTimeAura, blockTimeBabe, currApi] ); }