Skip to content

Commit a424cbf

Browse files
authored
Fetch period end block from Token API (#1490)
* Fetch period end block from Token API * Cleanup
1 parent 57c15ee commit a424cbf

File tree

3 files changed

+32
-31
lines changed

3 files changed

+32
-31
lines changed

src/staking-v3/hooks/usePeriodStats.ts

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -47,31 +47,17 @@ export function usePeriodStats(period: Ref<number>) {
4747
return combinedData.filter((data) => data !== undefined) as DappStatistics[];
4848
});
4949

50-
const getPeriodEndBlock = (period: number, currentPeriod: number): number => {
51-
const periodStartBlock = PERIOD1_START_BLOCKS.get(currentNetworkName.value.toLowerCase());
52-
53-
if (periodStartBlock) {
54-
if (period < currentPeriod) {
55-
const {
56-
standardEraLength,
57-
standardErasPerBuildAndEarnPeriod,
58-
standardErasPerVotingPeriod,
59-
} = eraLengths.value;
60-
return (
61-
periodStartBlock +
62-
(standardErasPerBuildAndEarnPeriod + standardErasPerVotingPeriod) *
63-
standardEraLength *
64-
period -
65-
1
66-
);
67-
}
68-
50+
const getPeriodEndBlock = async (period: number): Promise<number> => {
51+
try {
52+
const tokenApiRepository = container.get<ITokenApiRepository>(Symbols.TokenApiRepository);
53+
const networkName = currentNetworkName.value.toLowerCase();
54+
const range = await tokenApiRepository.getPeriodBlockRange(networkName, period);
55+
56+
return range.end ?? currentBlock.value;
57+
} catch (error) {
58+
console.error('Failed to get period end block', error);
6959
return currentBlock.value;
7060
}
71-
72-
throw new Error(
73-
`Can't determine dApp staking start block for network ${currentNetworkName.value}`
74-
);
7561
};
7662

7763
const calculateTvlRatio = async (block: number): Promise<void> => {
@@ -82,14 +68,12 @@ export function usePeriodStats(period: Ref<number>) {
8268
);
8369

8470
const allDappsId = allDapps.value.map((dapp) => dapp.chain.id);
71+
const periodEndBlock = await getPeriodEndBlock(period.value);
8572
const [stats, totalIssuance, periodInfo, stakes] = await Promise.all([
8673
repository.getStakingPeriodStatistics(currentNetworkName.value.toLowerCase(), period.value),
8774
balancesRepository.getTotalIssuance(block),
8875
dappStakingRepository.getCurrentEraInfo(block),
89-
dappStakingRepository.getContractsStake(
90-
allDappsId,
91-
getPeriodEndBlock(period.value, protocolState.value?.periodInfo.number ?? period.value)
92-
),
76+
dappStakingRepository.getContractsStake(allDappsId, periodEndBlock),
9377
]);
9478

9579
// Update skates receiver from indexer although the indexer data is correct, we are using on chain data
@@ -126,10 +110,7 @@ export function usePeriodStats(period: Ref<number>) {
126110
eraLengths.value.standardEraLength
127111
) {
128112
try {
129-
const periodEndBlock = getPeriodEndBlock(
130-
period.value,
131-
protocolState.value?.periodInfo.number ?? period.value
132-
);
113+
const periodEndBlock = await getPeriodEndBlock(period.value);
133114
const stakingService = container.get<IDappStakingService>(Symbols.DappStakingServiceV3);
134115

135116
const block = Math.min(periodEndBlock, currentBlock.value) - 1;

src/v2/repositories/ITokenApiRepository.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,11 @@ export interface ITokenApiRepository {
4545
* @param network Network name.
4646
*/
4747
getTokeIssuanceHistory(network: string): Promise<TokenIssuance[]>;
48+
49+
/**
50+
* Gets the block range for the given dApp staking period.
51+
* @param network Network name.
52+
* @param period Period number.
53+
*/
54+
getPeriodBlockRange(network: string, period: number): Promise<{ start: number; end?: number }>;
4855
}

src/v2/repositories/implementations/TokenApiRepository.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,17 @@ export class TokenApiRepository implements ITokenApiRepository {
5858
return [];
5959
}
6060
}
61+
62+
public async getPeriodBlockRange(
63+
network: string,
64+
period: number
65+
): Promise<{ start: number; end?: number }> {
66+
try {
67+
const url = `${TokenApiRepository.BaseUrl}/v3/${network}/dapps-staking/get-period-range/${period}`;
68+
const response = await axios.get<{ start: number; end?: number }>(url);
69+
return response.data;
70+
} catch (error) {
71+
throw new Error(`Failed to fetch block range for period ${period} on network ${network}`);
72+
}
73+
}
6174
}

0 commit comments

Comments
 (0)