@berachain/berajs 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HoneyConfigProvider-Dkj-_a5x.d.ts → HoneyConfigProvider-COOuDNra.d.ts} +1 -1
- package/dist/actions/clients/exports.d.ts +77 -1
- package/dist/actions/clients/exports.mjs +13 -4
- package/dist/actions/exports.d.ts +121 -39
- package/dist/actions/exports.mjs +75 -34
- package/dist/actions/governance/exports.d.ts +3 -11
- package/dist/actions/governance/exports.mjs +3 -3
- package/dist/actions/server/exports.mjs +4 -4
- package/dist/{chunk-4Z4AK6SH.mjs → chunk-3JJLQ2JX.mjs} +3 -3
- package/dist/{chunk-EXIUPSFN.mjs → chunk-7YVNSDXG.mjs} +2 -2
- package/dist/{chunk-WXXOISTU.mjs → chunk-AUOPN6NK.mjs} +1 -1
- package/dist/{chunk-75M6TF7M.mjs → chunk-DQRH5VE3.mjs} +1 -1
- package/dist/{chunk-CDFWPU2R.mjs → chunk-E7YFXBBQ.mjs} +0 -124
- package/dist/{chunk-AFN4CVD3.mjs → chunk-GUURQAME.mjs} +1 -1
- package/dist/{chunk-KQUMKB66.mjs → chunk-GY6B3PD5.mjs} +1 -1
- package/dist/{chunk-HSSJKHZ4.mjs → chunk-HYDP32P6.mjs} +3 -3
- package/dist/{chunk-NPBQLVL3.mjs → chunk-IXIBY5FP.mjs} +2 -2
- package/dist/{chunk-J5I45WGQ.mjs → chunk-KHXJDYA4.mjs} +7 -0
- package/dist/chunk-MRQGHXAN.mjs +54 -0
- package/dist/{chunk-FFB5LFDW.mjs → chunk-QVHEM4BG.mjs} +2 -2
- package/dist/{chunk-3EARVV7K.mjs → chunk-SXUNCX5E.mjs} +22 -9
- package/dist/chunk-UD5IUNCW.mjs +34 -0
- package/dist/{chunk-QJIXTYTZ.mjs → chunk-VAA2FVPP.mjs} +162 -41
- package/dist/chunk-Y6THHG77.mjs +126 -0
- package/dist/{chunk-XIYN6AL6.mjs → chunk-ZLTMIFCZ.mjs} +10 -5
- package/dist/contexts/exports.d.ts +2 -2
- package/dist/contexts/exports.mjs +11 -9
- package/dist/enum/exports.d.ts +8 -2
- package/dist/errors/exports.mjs +5 -5
- package/dist/getProposalVotes-DAUrdX2n.d.ts +12 -0
- package/dist/{getValidatorQueuedOperatorAddress-Dw5KN5sh.d.ts → getValidatorQueuedOperatorAddress-Cxt-DlL_.d.ts} +2 -2
- package/dist/{global.d-BuGDKh4k.d.ts → global.d-q_LQWQqs.d.ts} +2 -4
- package/dist/hooks/exports.d.ts +114 -164
- package/dist/hooks/exports.mjs +535 -522
- package/dist/hooks/governance/exports.d.ts +20 -15
- package/dist/hooks/governance/exports.mjs +43 -41
- package/dist/{pol.d-CqPA9K6m.d.ts → pol.d-CeRgXBL8.d.ts} +33 -8
- package/dist/types/exports.d.ts +5 -5
- package/dist/{useHoneySwapState-vFmuFF0g.d.ts → useHoneySwapState-twi7NTaO.d.ts} +1 -1
- package/dist/utils/exports.d.ts +2 -2
- package/dist/utils/exports.mjs +15 -9
- package/package.json +9 -8
- package/src/actions/bend/getMaxDeposit.ts +28 -2
- package/src/actions/clients/exports.ts +3 -0
- package/src/actions/clients/fetchBeep.ts +34 -0
- package/src/actions/clients/fetchOpenApi.ts +97 -0
- package/src/actions/clients/fetchOpenApi.unit.test.ts +245 -0
- package/src/actions/clients/fetchRailwayBackend.ts +34 -0
- package/src/actions/enso/getEnsoUserTokensWithBalances.ts +18 -0
- package/src/actions/exports.ts +2 -0
- package/src/actions/honey/getChartData.ts +53 -12
- package/src/actions/honey/getHoney24hVolume.ts +34 -6
- package/src/actions/honey/getHoneyTxns.ts +93 -0
- package/src/actions/honey/getPythLatestPrices.ts +7 -0
- package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +1 -1
- package/src/actions/pol/getAutoclaimedIncentives.ts +21 -10
- package/src/actions/pol/getAutoclaimedIncentivesTxHash.ts +41 -0
- package/src/actions/pol/getBgtIncentiveDistributorPaused.ts +5 -12
- package/src/actions/pol/getEarnedStakedBeraVault.ts +20 -16
- package/src/actions/pol/getRewardVaults.ts +4 -4
- package/src/actions/pol/getStakingDailyAssets.ts +18 -14
- package/src/actions/validators/getValidatorIncentiveDistribution.ts +64 -12
- package/src/actions/validators/utils/getValidatorBoostApy.ts +1 -1
- package/src/contexts/SwrFallback.tsx +2 -1
- package/src/data/contracts.ts +4 -0
- package/src/errors/RequestError.ts +12 -3
- package/src/errors/RequestError.unit.test.ts +55 -0
- package/src/errors/errorMap.ts +8 -0
- package/src/errors/getRevertReason.integration.test.ts +5 -1
- package/src/hooks/bend/useGetConvertToAssets.ts +2 -3
- package/src/hooks/dex/useAggregatorsQuotes.ts +10 -10
- package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +1 -1
- package/src/hooks/dex/useAllUserPools.ts +7 -5
- package/src/hooks/dex/useApiPool.ts +1 -1
- package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +1 -1
- package/src/hooks/dex/useOnChainPoolData.ts +1 -1
- package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +2 -2
- package/src/hooks/dex/usePoolEvents.ts +1 -2
- package/src/hooks/dex/usePoolHistoricalData.ts +2 -3
- package/src/hooks/dex/usePools.ts +4 -2
- package/src/hooks/dex/useSingleAggregatorQuote.ts +6 -18
- package/src/hooks/enso/useBendDemultiply.ts +3 -4
- package/src/hooks/enso/useBendMultiply.ts +3 -4
- package/src/hooks/enso/useBendZapSupply.ts +3 -4
- package/src/hooks/enso/useEnsoSwapBundle.ts +1 -1
- package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +3 -5
- package/src/hooks/enso/useEnsoWalletV2Address.ts +1 -1
- package/src/hooks/enso/useIsBendAuthorized.ts +1 -1
- package/src/hooks/enso/useZapStakeBera.ts +2 -2
- package/src/hooks/exports.ts +2 -0
- package/src/hooks/governance/useGetPastVotes.ts +1 -1
- package/src/hooks/governance/useHasVoted.ts +1 -1
- package/src/hooks/governance/useIsCanceller.ts +1 -1
- package/src/hooks/governance/usePollAllProposals.ts +13 -12
- package/src/hooks/governance/usePollProposal.ts +3 -3
- package/src/hooks/governance/usePollProposalThreshold.ts +1 -1
- package/src/hooks/governance/usePollProposalVotes.ts +23 -5
- package/src/hooks/governance/usePollUserDelegates.ts +3 -3
- package/src/hooks/governance/useProposalFromTx.ts +2 -1
- package/src/hooks/governance/useProposalSnapshot.ts +2 -3
- package/src/hooks/governance/useProposalState.ts +2 -2
- package/src/hooks/governance/useProposalTimelockState.ts +2 -1
- package/src/hooks/governance/useQuorum.ts +1 -2
- package/src/hooks/honey/useCappedGlobally.ts +3 -6
- package/src/hooks/honey/useCappedRelatively.ts +2 -2
- package/src/hooks/honey/useCollateralWeights.ts +3 -3
- package/src/hooks/honey/useHoney24hVolume.ts +1 -1
- package/src/hooks/honey/useHoneyBalances.ts +1 -1
- package/src/hooks/honey/useHoneyChartData.ts +1 -1
- package/src/hooks/honey/useHoneyVaultsBalance.ts +2 -3
- package/src/hooks/honey/useIsBadCollateralAsset.ts +4 -7
- package/src/hooks/honey/useIsBasketModeEnabled.ts +4 -7
- package/src/hooks/honey/usePythLatestPrices.ts +13 -9
- package/src/hooks/perps/usePythUpdateFee.ts +13 -11
- package/src/hooks/pol/useAutoclaimedIncentives.ts +2 -12
- package/src/hooks/pol/useAutoclaimedIncentivesTxHash.ts +44 -0
- package/src/hooks/pol/useBgtIncentiveDistributorPaused.ts +39 -0
- package/src/hooks/pol/useBgtUnstakedBalance.ts +2 -2
- package/src/hooks/pol/useClaimableFees.ts +1 -1
- package/src/hooks/pol/useHighestVaultsAPR.ts +4 -6
- package/src/hooks/pol/useOnChainRewardVault.ts +77 -72
- package/src/hooks/pol/usePollGlobalData.ts +2 -3
- package/src/hooks/pol/usePollMarkets.ts +2 -2
- package/src/hooks/pol/useQueuedBeraUnlock.ts +2 -2
- package/src/hooks/pol/useRewardTokenToBeraRate.ts +2 -2
- package/src/hooks/pol/useRewardVault.ts +7 -6
- package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +4 -4
- package/src/hooks/pol/useRewardVaultFromToken.ts +1 -1
- package/src/hooks/pol/useRewardVaultIncentives.ts +1 -1
- package/src/hooks/pol/useRewardVaultRewards.ts +2 -2
- package/src/hooks/pol/useRewardVaults.ts +3 -6
- package/src/hooks/pol/useStakedAPR.ts +1 -2
- package/src/hooks/pol/useStakedData.ts +90 -41
- package/src/hooks/pol/useStakedSnapshots.ts +1 -1
- package/src/hooks/pol/useStakingVaultsMetadata.ts +1 -1
- package/src/hooks/pol/useTotalStakedAmount.ts +1 -2
- package/src/hooks/pol/useUserVaultInfo.ts +2 -2
- package/src/hooks/pol/useUserVaults.ts +2 -3
- package/src/hooks/pol/useVaultAddress.ts +1 -1
- package/src/hooks/pol/useVaultHistory.ts +1 -2
- package/src/hooks/pol/useVaultValidators.ts +2 -2
- package/src/hooks/tokens/useMultipleTokenInformation.ts +2 -2
- package/src/hooks/tokens/usePollAllowances.ts +3 -4
- package/src/hooks/tokens/usePollBalance.ts +2 -2
- package/src/hooks/tokens/usePollWalletBalances.ts +2 -2
- package/src/hooks/tokens/useStakingTokenInformation.ts +2 -2
- package/src/hooks/tokens/useTokenCurrentPrices.ts +11 -13
- package/src/hooks/tokens/useTokenInformation.ts +2 -2
- package/src/hooks/tokens/useTokenPrice.ts +2 -1
- package/src/hooks/tokens/useTokenPrices.ts +3 -4
- package/src/hooks/tokens/useTotalSupply.ts +1 -1
- package/src/hooks/tokens/useUnderlyingAsset.ts +1 -2
- package/src/hooks/useBlockToTimestamp.ts +1 -2
- package/src/hooks/useGetVerifiedAbi.ts +2 -1
- package/src/hooks/validators/useAllValidators.ts +2 -3
- package/src/hooks/validators/useApiEnrichedAllocation.ts +1 -1
- package/src/hooks/validators/useApiValidator.ts +3 -6
- package/src/hooks/validators/useBaselineRewardAllocation.ts +1 -2
- package/src/hooks/validators/useDailyValidatorBlockStats.ts +1 -1
- package/src/hooks/validators/useDefaultRewardAllocation.ts +2 -3
- package/src/hooks/validators/useManagedValidatorRole.ts +2 -2
- package/src/hooks/validators/useOnChainValidator.ts +3 -3
- package/src/hooks/validators/useStakingPoolBatch.ts +3 -4
- package/src/hooks/validators/useUserActiveValidators.ts +2 -3
- package/src/hooks/validators/useUserBoostsOnValidator.ts +1 -1
- package/src/hooks/validators/useUserClaimableIncentives.ts +1 -1
- package/src/hooks/validators/useUserStakingPositions.ts +2 -1
- package/src/hooks/validators/useValidator.ts +4 -8
- package/src/hooks/validators/useValidatorAnalytics.ts +1 -1
- package/src/hooks/validators/useValidatorCommission.ts +2 -2
- package/src/hooks/validators/useValidatorIncentiveDistribution.ts +3 -3
- package/src/hooks/validators/useValidatorQueuedCommission.ts +2 -2
- package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +2 -2
- package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +2 -2
- package/src/hooks/validators/useValidatorRewardAllocation.ts +2 -2
- package/src/types/bribe-boost.d.ts +14 -3
- package/src/types/global.d.ts +3 -4
- package/src/types/pol.d.ts +17 -3
- package/src/utils/polyfillAbortSignalAny.ts +53 -0
- package/src/utils/polyfillAbortSignalAny.unit.test.ts +81 -0
- package/dist/polling-BKnyavLI.d.ts +0 -8
- /package/dist/{exports-BcUTGFUb.d.ts → getApolloClient-BcUTGFUb.d.ts} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import { type Address, erc20Abi, formatUnits, isAddress } from "viem";
|
|
3
2
|
|
|
4
3
|
import { beraChefAbi } from "@berachain/abis/pol/rewards/beraChef";
|
|
5
4
|
|
|
6
5
|
import type { ApiVaultFragment } from "@berachain/graphql/pol/api";
|
|
7
6
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
7
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
8
8
|
|
|
9
9
|
import { getRewardVaultIncentives } from "../../actions/pol/getRewardVaultIncentives";
|
|
10
10
|
import { getRewardVaultStakingToken } from "../../actions/pol/getRewardVaultStakingToken";
|
|
@@ -28,7 +28,6 @@ export const useOnChainRewardVault = (
|
|
|
28
28
|
opt: DefaultHookOptions,
|
|
29
29
|
) => {
|
|
30
30
|
const publicClient = usePublicClient();
|
|
31
|
-
const isEnabled = opt.opts?.isEnabled ?? true;
|
|
32
31
|
|
|
33
32
|
const QUERY_KEY = useOnChainRewardVaultQueryKey(address);
|
|
34
33
|
|
|
@@ -36,81 +35,87 @@ export const useOnChainRewardVault = (
|
|
|
36
35
|
ApiVaultFragment,
|
|
37
36
|
unknown,
|
|
38
37
|
ReturnType<typeof useOnChainRewardVaultQueryKey>
|
|
39
|
-
>(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
>(
|
|
39
|
+
publicClient ? QUERY_KEY : null,
|
|
40
|
+
async ([, address]) => {
|
|
41
|
+
assertPublicClient(publicClient);
|
|
42
|
+
const { config } = parseBaseArgs({
|
|
43
|
+
chainId: publicClient.chain.id,
|
|
44
|
+
});
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
address,
|
|
47
|
-
publicClient: publicClient,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
const [incentives, isWhitelisted, stakingTokenAmount] = await Promise.all([
|
|
51
|
-
getRewardVaultIncentives({
|
|
46
|
+
const stakingTokenAddress = await getRewardVaultStakingToken({
|
|
52
47
|
address,
|
|
53
|
-
stakingToken: stakingTokenAddress,
|
|
54
|
-
publicClient,
|
|
55
|
-
}),
|
|
56
|
-
publicClient.readContract({
|
|
57
|
-
address: config.pol.beraChef,
|
|
58
|
-
abi: beraChefAbi,
|
|
59
|
-
functionName: "isWhitelistedVault",
|
|
60
|
-
args: [address],
|
|
61
|
-
}),
|
|
62
|
-
publicClient.readContract({
|
|
63
|
-
address: stakingTokenAddress,
|
|
64
|
-
abi: erc20Abi,
|
|
65
|
-
functionName: "balanceOf",
|
|
66
|
-
args: [address],
|
|
67
|
-
}),
|
|
68
|
-
]);
|
|
69
|
-
|
|
70
|
-
const [stakingToken, incentiveTokens] = await Promise.all([
|
|
71
|
-
getStakingTokenInformation({
|
|
72
|
-
address: stakingTokenAddress,
|
|
73
48
|
publicClient: publicClient,
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const [incentives, isWhitelisted, stakingTokenAmount] = await Promise.all(
|
|
52
|
+
[
|
|
53
|
+
getRewardVaultIncentives({
|
|
54
|
+
address,
|
|
55
|
+
stakingToken: stakingTokenAddress,
|
|
56
|
+
publicClient,
|
|
57
|
+
}),
|
|
58
|
+
publicClient.readContract({
|
|
59
|
+
address: config.pol.beraChef,
|
|
60
|
+
abi: beraChefAbi,
|
|
61
|
+
functionName: "isWhitelistedVault",
|
|
62
|
+
args: [address],
|
|
81
63
|
}),
|
|
64
|
+
publicClient.readContract({
|
|
65
|
+
address: stakingTokenAddress,
|
|
66
|
+
abi: erc20Abi,
|
|
67
|
+
functionName: "balanceOf",
|
|
68
|
+
args: [address],
|
|
69
|
+
}),
|
|
70
|
+
],
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const [stakingToken, incentiveTokens] = await Promise.all([
|
|
74
|
+
getStakingTokenInformation({
|
|
75
|
+
address: stakingTokenAddress,
|
|
76
|
+
publicClient: publicClient,
|
|
77
|
+
}),
|
|
78
|
+
Promise.all(
|
|
79
|
+
incentives.map((add) =>
|
|
80
|
+
getTokenInformation({
|
|
81
|
+
address: add.token,
|
|
82
|
+
chainId: publicClient.chain.id,
|
|
83
|
+
publicClient: publicClient,
|
|
84
|
+
}),
|
|
85
|
+
),
|
|
82
86
|
),
|
|
83
|
-
)
|
|
84
|
-
]);
|
|
87
|
+
]);
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
if (!stakingToken) {
|
|
90
|
+
throw new Error("Staking token not found");
|
|
91
|
+
}
|
|
89
92
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
93
|
+
return {
|
|
94
|
+
id: address,
|
|
95
|
+
address,
|
|
96
|
+
vaultAddress: address,
|
|
97
|
+
stakingToken: {
|
|
98
|
+
address: stakingTokenAddress,
|
|
99
|
+
name: stakingToken.name ?? "",
|
|
100
|
+
symbol: stakingToken.symbol ?? "",
|
|
101
|
+
decimals: stakingToken.decimals ?? 0,
|
|
102
|
+
},
|
|
103
|
+
stakingTokenAmount: formatUnits(
|
|
104
|
+
stakingTokenAmount,
|
|
105
|
+
stakingToken.decimals ?? 18,
|
|
106
|
+
),
|
|
107
|
+
isVaultWhitelisted: isWhitelisted,
|
|
108
|
+
activeIncentives: incentives.map((incentive, idx) => ({
|
|
109
|
+
active: !!incentive.remainingAmount,
|
|
110
|
+
remainingAmount: incentive.remainingAmount,
|
|
111
|
+
remainingAmountUsd: "0",
|
|
112
|
+
incentiveRate: incentive.incentiveRate,
|
|
113
|
+
incentiveRateUsd: "0",
|
|
114
|
+
tokenAddress: incentive.token,
|
|
115
|
+
token: incentiveTokens[idx]!,
|
|
116
|
+
})),
|
|
117
|
+
} satisfies ApiVaultFragment;
|
|
118
|
+
},
|
|
119
|
+
opt,
|
|
120
|
+
);
|
|
116
121
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
1
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
2
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
4
3
|
|
|
5
4
|
import {
|
|
6
5
|
type GlobalData,
|
|
@@ -26,7 +25,7 @@ export const usePollGlobalData = (
|
|
|
26
25
|
},
|
|
27
26
|
{
|
|
28
27
|
revalidateOnFocus: false,
|
|
29
|
-
...options
|
|
28
|
+
...options,
|
|
30
29
|
},
|
|
31
30
|
);
|
|
32
31
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import useSWRImmutable from "swr
|
|
1
|
+
import { useSWRImmutable } from "@berachain/utils/pkg/swr";
|
|
2
2
|
|
|
3
3
|
import { type GetMarkets, getMarkets } from "../../actions/pol/getMarkets";
|
|
4
4
|
import type {
|
|
@@ -24,7 +24,7 @@ export const usePollMarkets = (
|
|
|
24
24
|
return res;
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
...options
|
|
27
|
+
...options,
|
|
28
28
|
},
|
|
29
29
|
);
|
|
30
30
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWRImmutable from "swr/immutable";
|
|
2
1
|
import { type Address, isAddress } from "viem";
|
|
3
2
|
|
|
4
3
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWRImmutable } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
getSWBeraWithdrawal,
|
|
@@ -61,7 +61,7 @@ export function useQueuedBeraUnlock(
|
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
refreshInterval: POLLING.FAST,
|
|
64
|
-
...options
|
|
64
|
+
...options,
|
|
65
65
|
},
|
|
66
66
|
);
|
|
67
67
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import { type Address, isAddress } from "viem";
|
|
3
2
|
|
|
4
3
|
import { defaultChainId } from "@berachain/config/internal";
|
|
5
4
|
|
|
6
5
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
6
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
7
7
|
|
|
8
8
|
import { getRewardTokenToBeraRate } from "../../actions/pol/getRewardTokenToBeraRate";
|
|
9
9
|
import { assertPublicClient } from "../../errors/assert";
|
|
@@ -42,7 +42,7 @@ export const useRewardTokenToBeraRate = (
|
|
|
42
42
|
});
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
...opt
|
|
45
|
+
...opt,
|
|
46
46
|
},
|
|
47
47
|
);
|
|
48
48
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import type { ApiVaultFragment } from "@berachain/graphql/pol/api";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getRewardVault } from "../../actions/pol/getRewardVault";
|
|
7
7
|
import type {
|
|
@@ -24,21 +24,22 @@ export const useRewardVault = (
|
|
|
24
24
|
): UseRewardVaultResponse => {
|
|
25
25
|
const QUERY_KEY = useRewardVaultQueryKey(id);
|
|
26
26
|
|
|
27
|
+
// The off-chain fetch is intentionally always enabled; `isEnabled` only gates
|
|
28
|
+
// the on-chain fallback below, so it is stripped from this call's options.
|
|
29
|
+
const { isEnabled: _isEnabled, ...swrOptions } = options ?? {};
|
|
27
30
|
const swrResponse = useSWR(
|
|
28
31
|
QUERY_KEY,
|
|
29
32
|
async ([_, id]) => getRewardVault({ address: id }),
|
|
30
|
-
|
|
31
|
-
...options?.opts,
|
|
32
|
-
},
|
|
33
|
+
swrOptions,
|
|
33
34
|
);
|
|
34
35
|
|
|
35
36
|
const isOnChainEnabled =
|
|
36
|
-
options?.
|
|
37
|
+
options?.isEnabled ??
|
|
37
38
|
((!!swrResponse.error || !swrResponse.isLoading) && !swrResponse.data);
|
|
38
39
|
|
|
39
40
|
const onChainRewardVault = useOnChainRewardVault(
|
|
40
41
|
{ address: id },
|
|
41
|
-
{
|
|
42
|
+
{ ...options, isEnabled: isOnChainEnabled },
|
|
42
43
|
);
|
|
43
44
|
|
|
44
45
|
return {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import { type Address, isAddress, zeroAddress } from "viem";
|
|
3
2
|
|
|
4
3
|
import { rewardVaultAbi } from "@berachain/abis/pol/rewards/rewardVault";
|
|
5
4
|
|
|
6
5
|
import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
|
|
6
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
7
7
|
|
|
8
8
|
import { assertPublicClient } from "../../errors/assert";
|
|
9
9
|
import type { DefaultHookOptions } from "../../types/global";
|
|
@@ -23,7 +23,7 @@ export const useRewardVaultBalanceFromStakingToken = (
|
|
|
23
23
|
const { address: account } = useBeraWallet();
|
|
24
24
|
const publicClient = usePublicClient();
|
|
25
25
|
|
|
26
|
-
const isEnabled = options?.
|
|
26
|
+
const isEnabled = options?.isEnabled ?? true;
|
|
27
27
|
const {
|
|
28
28
|
data: rewardVaultAddress = _rewardVaultAddress,
|
|
29
29
|
error,
|
|
@@ -43,8 +43,7 @@ export const useRewardVaultBalanceFromStakingToken = (
|
|
|
43
43
|
account &&
|
|
44
44
|
publicClient &&
|
|
45
45
|
isAddress(rewardVaultAddress) &&
|
|
46
|
-
isAddress(account)
|
|
47
|
-
isEnabled
|
|
46
|
+
isAddress(account)
|
|
48
47
|
? ["useVaultBalanceFromStakingToken", rewardVaultAddress, account]
|
|
49
48
|
: null,
|
|
50
49
|
|
|
@@ -70,6 +69,7 @@ export const useRewardVaultBalanceFromStakingToken = (
|
|
|
70
69
|
balance: balance,
|
|
71
70
|
};
|
|
72
71
|
},
|
|
72
|
+
options,
|
|
73
73
|
);
|
|
74
74
|
|
|
75
75
|
return {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import useSWRImmutable from "swr/immutable";
|
|
2
1
|
import { type Address, isAddress, zeroAddress } from "viem";
|
|
3
2
|
|
|
4
3
|
import { rewardVaultFactoryAbi } from "@berachain/abis/pol/rewards/rewardVaultFactory";
|
|
5
4
|
|
|
6
5
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
6
|
+
import { useSWRImmutable } from "@berachain/utils/pkg/swr";
|
|
7
7
|
|
|
8
8
|
import { assertPublicClient } from "../../errors/assert";
|
|
9
9
|
import { parseBaseArgs } from "../../utils/parseBaseArgs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getRewardVaultIncentives } from "../../actions/pol/getRewardVaultIncentives";
|
|
7
7
|
import { assertPublicClient } from "../../errors/assert";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getRewardVaultRewards } from "../../actions/pol/getRewardVaultRewards";
|
|
7
7
|
import { assertPublicClient } from "../../errors/assert";
|
|
@@ -26,7 +26,7 @@ export const useRewardVaultRewards = (
|
|
|
26
26
|
return await getRewardVaultRewards(address, publicClient);
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
...options
|
|
29
|
+
...options,
|
|
30
30
|
},
|
|
31
31
|
);
|
|
32
32
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
1
|
import type { GetVaultsQueryVariables } from "@berachain/graphql/pol/api";
|
|
4
2
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
3
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
4
|
|
|
6
5
|
import { getRewardVaults } from "../../actions/pol/getRewardVaults";
|
|
7
6
|
import type { DefaultHookOptions } from "../../types/global";
|
|
@@ -26,16 +25,14 @@ export const useRewardVaults = (
|
|
|
26
25
|
);
|
|
27
26
|
const publicClient = usePublicClient();
|
|
28
27
|
const swrResponse = useSWR(
|
|
29
|
-
|
|
28
|
+
QUERY_KEY,
|
|
30
29
|
async ([, filter, onChainIncentives]) => {
|
|
31
30
|
return await getRewardVaults({
|
|
32
31
|
filter: filter,
|
|
33
32
|
publicClient: onChainIncentives ? publicClient : undefined,
|
|
34
33
|
});
|
|
35
34
|
},
|
|
36
|
-
|
|
37
|
-
...options?.opts,
|
|
38
|
-
},
|
|
35
|
+
options,
|
|
39
36
|
);
|
|
40
37
|
|
|
41
38
|
return {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
1
|
import type { GqlVaultSnapshotDataRange } from "@berachain/graphql/dex/api";
|
|
2
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
4
3
|
|
|
5
4
|
import { getStakedBeraSnapshots } from "../../actions/pol/getStakedBeraSnapshots";
|
|
6
5
|
import type { DefaultHookReturnType } from "../../types/global";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
|
-
import useSWR from "swr";
|
|
3
2
|
|
|
4
3
|
import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
|
|
5
4
|
import BigNumber from "@berachain/utils/pkg/bignumber.js";
|
|
5
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
6
6
|
|
|
7
7
|
import { getEarnedStakedBeraVault } from "../../actions/pol/getEarnedStakedBeraVault";
|
|
8
8
|
import { getRewardTokenToBeraRate } from "../../actions/pol/getRewardTokenToBeraRate";
|
|
@@ -50,11 +50,18 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
50
50
|
{ refreshInterval: POLLING.NORMAL },
|
|
51
51
|
);
|
|
52
52
|
|
|
53
|
-
const {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
const {
|
|
54
|
+
data: walletBalances,
|
|
55
|
+
isLoading: isLoadingBalances,
|
|
56
|
+
error: walletBalancesError,
|
|
57
|
+
} = usePollWalletBalances({ tokens: receiptTokens });
|
|
58
|
+
|
|
59
|
+
// NOT BERA PRICE, INPUT TOKEN PRICE.
|
|
60
|
+
// A price-backend failure is handled gracefully (USD values become `undefined`
|
|
61
|
+
// → rendered as "—"), so it deliberately does NOT feed the hard `error` state.
|
|
62
|
+
const { getTokenPrice } = useTokenPrices({
|
|
63
|
+
tokens: inputTokens,
|
|
64
|
+
});
|
|
58
65
|
|
|
59
66
|
// exchange rates from receipt token → input token (on-chain reads)
|
|
60
67
|
const exchangeRatesKey =
|
|
@@ -62,7 +69,7 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
62
69
|
? (["useStakedData:exchangeRates", receiptTokens] as const)
|
|
63
70
|
: null;
|
|
64
71
|
|
|
65
|
-
const { data: exchangeRates } = useSWR(
|
|
72
|
+
const { data: exchangeRates, error: exchangeRatesError } = useSWR(
|
|
66
73
|
exchangeRatesKey,
|
|
67
74
|
async ([, receiptTokens]) => {
|
|
68
75
|
assertPublicClient(publicClient);
|
|
@@ -78,34 +85,6 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
78
85
|
{ refreshInterval: POLLING.NORMAL },
|
|
79
86
|
);
|
|
80
87
|
|
|
81
|
-
// balances (fast path) — derived from hooks above, no extra requests
|
|
82
|
-
const balances = useMemo<StakedBeraAsset[] | undefined>(() => {
|
|
83
|
-
if (!walletBalances || !exchangeRates) return undefined;
|
|
84
|
-
|
|
85
|
-
return stakingConfigs.map((config, i): StakedBeraAsset => {
|
|
86
|
-
const inputToken = config.inputTokens[0];
|
|
87
|
-
const stakedBalance =
|
|
88
|
-
walletBalances.find((b) => b.address === config.receiptToken.address)
|
|
89
|
-
?.balance.raw ?? "0";
|
|
90
|
-
const exchangeRate = exchangeRates[i] ?? 0;
|
|
91
|
-
const inputTokenPrice = getTokenPrice(inputToken) ?? 0;
|
|
92
|
-
|
|
93
|
-
const total = new BigNumber(stakedBalance).multipliedBy(exchangeRate);
|
|
94
|
-
const stakedAmount = total.dividedBy(10 ** inputToken.decimals);
|
|
95
|
-
const stakedAmountUsd = stakedAmount.multipliedBy(inputTokenPrice);
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
token: inputToken,
|
|
99
|
-
apr: apr ?? 0,
|
|
100
|
-
stakedAmount: stakedAmount.toNumber(),
|
|
101
|
-
stakedAmountUsd: stakedAmountUsd.toNumber(),
|
|
102
|
-
earnedAmount: 0,
|
|
103
|
-
earnedAmountUsd: 0,
|
|
104
|
-
isLoadingEarnings: true,
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
}, [walletBalances, exchangeRates, stakingConfigs, apr, getTokenPrice]);
|
|
108
|
-
|
|
109
88
|
// positions (slow path) — fetch earnings and exchange rates from the vault
|
|
110
89
|
const positionsKey =
|
|
111
90
|
account && publicClient && stakingConfigs.length > 0
|
|
@@ -114,6 +93,7 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
114
93
|
|
|
115
94
|
const {
|
|
116
95
|
data: positionsRaw,
|
|
96
|
+
error: positionsError,
|
|
117
97
|
isLoading: isLoadingPositions,
|
|
118
98
|
isValidating: isValidatingPositions,
|
|
119
99
|
} = useSWR(
|
|
@@ -143,6 +123,52 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
143
123
|
{ refreshInterval: POLLING.FAST },
|
|
144
124
|
);
|
|
145
125
|
|
|
126
|
+
// Earnings come from the backend (slow path). Once that request settles —
|
|
127
|
+
// whether it resolved or errored — stop showing the "loading earnings"
|
|
128
|
+
// skeleton on the fast path, so a backend outage degrades to "—" rather
|
|
129
|
+
// than a spinner that never resolves.
|
|
130
|
+
const earningsSettled = !!positionsRaw || !!positionsError;
|
|
131
|
+
|
|
132
|
+
// balances (fast path) — derived from hooks above, no extra requests
|
|
133
|
+
const balances = useMemo<StakedBeraAsset[] | undefined>(() => {
|
|
134
|
+
if (!walletBalances || !exchangeRates) return undefined;
|
|
135
|
+
|
|
136
|
+
return stakingConfigs.map((config, i): StakedBeraAsset => {
|
|
137
|
+
const inputToken = config.inputTokens[0];
|
|
138
|
+
const stakedBalance =
|
|
139
|
+
walletBalances.find((b) => b.address === config.receiptToken.address)
|
|
140
|
+
?.balance.raw ?? "0";
|
|
141
|
+
const exchangeRate = exchangeRates[i] ?? 0;
|
|
142
|
+
// `undefined` (not 0) when the price backend is unavailable, so USD
|
|
143
|
+
// values render as "—" instead of a misleading "$0.00".
|
|
144
|
+
const inputTokenPrice = getTokenPrice(inputToken);
|
|
145
|
+
|
|
146
|
+
const total = new BigNumber(stakedBalance).multipliedBy(exchangeRate);
|
|
147
|
+
const stakedAmount = total.dividedBy(10 ** inputToken.decimals);
|
|
148
|
+
const stakedAmountUsd =
|
|
149
|
+
inputTokenPrice === undefined
|
|
150
|
+
? undefined
|
|
151
|
+
: stakedAmount.multipliedBy(inputTokenPrice).toNumber();
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
token: inputToken,
|
|
155
|
+
apr,
|
|
156
|
+
stakedAmount: stakedAmount.toNumber(),
|
|
157
|
+
stakedAmountUsd,
|
|
158
|
+
earnedAmount: 0,
|
|
159
|
+
earnedAmountUsd: earningsSettled ? undefined : 0,
|
|
160
|
+
isLoadingEarnings: !earningsSettled,
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
}, [
|
|
164
|
+
walletBalances,
|
|
165
|
+
exchangeRates,
|
|
166
|
+
stakingConfigs,
|
|
167
|
+
apr,
|
|
168
|
+
getTokenPrice,
|
|
169
|
+
earningsSettled,
|
|
170
|
+
]);
|
|
171
|
+
|
|
146
172
|
// derive full StakedBeraAsset[] from raw positions + shared hooks
|
|
147
173
|
const data = useMemo<StakedBeraAsset[] | undefined>(() => {
|
|
148
174
|
if (!positionsRaw || !walletBalances) return undefined;
|
|
@@ -152,7 +178,9 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
152
178
|
const stakingToken = config.receiptToken;
|
|
153
179
|
const { earnings, exchangeRate: exchangeRateRaw } = positionsRaw[i];
|
|
154
180
|
|
|
155
|
-
|
|
181
|
+
// `undefined` (not 0) when the price backend is unavailable, so USD
|
|
182
|
+
// values render as "—" instead of a misleading "$0.00".
|
|
183
|
+
const inputTokenPrice = getTokenPrice(inputToken);
|
|
156
184
|
const stakedBalance =
|
|
157
185
|
walletBalances.find((b) => b.address === stakingToken.address)?.balance
|
|
158
186
|
.raw ?? "0";
|
|
@@ -166,16 +194,22 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
166
194
|
|
|
167
195
|
const stakedAmount = deposited.dividedBy(10 ** inputToken.decimals);
|
|
168
196
|
const earnedAmount = unrealisedGains.dividedBy(10 ** inputToken.decimals);
|
|
169
|
-
const stakedAmountUsd =
|
|
170
|
-
|
|
197
|
+
const stakedAmountUsd =
|
|
198
|
+
inputTokenPrice === undefined
|
|
199
|
+
? undefined
|
|
200
|
+
: stakedAmount.multipliedBy(inputTokenPrice).toNumber();
|
|
201
|
+
const earnedAmountUsd =
|
|
202
|
+
inputTokenPrice === undefined
|
|
203
|
+
? undefined
|
|
204
|
+
: earnedAmount.multipliedBy(inputTokenPrice).toNumber();
|
|
171
205
|
|
|
172
206
|
return {
|
|
173
207
|
token: inputToken,
|
|
174
|
-
apr
|
|
208
|
+
apr,
|
|
175
209
|
stakedAmount: stakedAmount.toNumber(),
|
|
176
210
|
earnedAmount: earnedAmount.toNumber(),
|
|
177
|
-
stakedAmountUsd
|
|
178
|
-
earnedAmountUsd
|
|
211
|
+
stakedAmountUsd,
|
|
212
|
+
earnedAmountUsd,
|
|
179
213
|
};
|
|
180
214
|
});
|
|
181
215
|
}, [positionsRaw, walletBalances, stakingConfigs, apr, getTokenPrice]);
|
|
@@ -190,5 +224,20 @@ export const useStakedData = (stakingConfigs: StakingConfig[]) => {
|
|
|
190
224
|
isLoadingBalances,
|
|
191
225
|
isLoadingPositions,
|
|
192
226
|
isValidatingPositions,
|
|
227
|
+
/**
|
|
228
|
+
* Hard error: the RPC fast-path could not produce staked balances (wallet
|
|
229
|
+
* balances or exchange-rate reads failed). Price and earnings backend
|
|
230
|
+
* failures are intentionally excluded — those degrade gracefully (USD/APR
|
|
231
|
+
* render as "—", earnings stop loading) so RPC-derived amounts still show.
|
|
232
|
+
*/
|
|
233
|
+
error: walletBalancesError ?? exchangeRatesError,
|
|
234
|
+
/** Set when the earnings (slow path) request failed. */
|
|
235
|
+
positionsError,
|
|
236
|
+
/**
|
|
237
|
+
* True once the earnings (slow path) request has settled — resolved or
|
|
238
|
+
* errored. Consumers should stop showing an earnings loading state once
|
|
239
|
+
* this is true, even if `data` never arrives (backend outage).
|
|
240
|
+
*/
|
|
241
|
+
earningsSettled,
|
|
193
242
|
};
|
|
194
243
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import type { VaultStatsByDayResponse } from "@berachain/graphql/api";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getStakingDailyAssets } from "../../actions/pol/getStakingDailyAssets";
|
|
7
7
|
import type { DefaultHookReturnType } from "../../types/global";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getSWBeraVaultMetadata } from "../../actions/pol/getSWBeraVaultMetadata";
|
|
7
7
|
import { useBlockTime } from "../../contexts/block-time-provider";
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
1
|
import type { Address } from "@berachain/config";
|
|
4
2
|
|
|
5
3
|
import { usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
6
5
|
|
|
7
6
|
import { getTotalStakedAmount } from "../../actions/pol/getTotalStakedAmount";
|
|
8
7
|
import type { DefaultHookReturnType } from "../../types/global";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
1
|
import type { Address } from "viem";
|
|
3
2
|
|
|
4
3
|
import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
|
|
4
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
5
5
|
|
|
6
6
|
import { getUserVaultInfo } from "../../actions/pol/getUserVaultInfo";
|
|
7
7
|
import { POLLING } from "../../enum/polling";
|
|
@@ -38,7 +38,7 @@ export const useUserVaultInfo = (
|
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
...options,
|
|
41
|
-
refreshInterval: options?.
|
|
41
|
+
refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,
|
|
42
42
|
},
|
|
43
43
|
);
|
|
44
44
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import useSWR from "swr";
|
|
2
|
-
|
|
3
1
|
import { useBeraWallet, usePublicClient } from "@berachain/wagmi/hooks";
|
|
2
|
+
import { useSWR } from "@berachain/utils/pkg/swr";
|
|
4
3
|
|
|
5
4
|
import {
|
|
6
5
|
type GetUserVaultsResponse,
|
|
@@ -32,7 +31,7 @@ export const useUserVaults = (
|
|
|
32
31
|
},
|
|
33
32
|
{
|
|
34
33
|
...options,
|
|
35
|
-
refreshInterval: options?.
|
|
34
|
+
refreshInterval: options?.refreshInterval ?? POLLING.NORMAL,
|
|
36
35
|
keepPreviousData: true,
|
|
37
36
|
},
|
|
38
37
|
);
|