@xswap-link/sdk
Version:
JavaScript SDK for XSwap platform
59 lines (53 loc) • 1.73 kB
text/typescript
import { ADDRESSES, StakingStableAPRAbi } from "@src/contracts";
import { useBatchQuery } from "./useBatchQuery";
import { BigNumber, ethers } from "ethers";
import { useCallback } from "react";
const iface = new ethers.utils.Interface(StakingStableAPRAbi);
export const useXPower = (chainId: string) => {
const { batchQuery } = useBatchQuery();
return {
getXPower: useCallback(
async (address: string) => {
if (
!ADDRESSES[chainId]?.StakingCosmicCadets ||
!ADDRESSES[chainId]?.StakingSolarDivision ||
!ADDRESSES[chainId]?.StakingIntergalacticCommand
) {
return "0";
}
const stakingAddresses: string[] = [
ADDRESSES[chainId]?.StakingCosmicCadets,
ADDRESSES[chainId]?.StakingSolarDivision,
ADDRESSES[chainId]?.StakingIntergalacticCommand,
];
const calldata = iface.encodeFunctionData("getStaker", [address]);
const responses = await batchQuery(
chainId,
stakingAddresses,
stakingAddresses.map(() => calldata),
);
if (responses) {
return responses
.map(
(stakerResponse) =>
ethers.utils.defaultAbiCoder.decode(
[
"address",
"uint256",
"uint256",
"uint256",
"uint256",
"uint256",
],
stakerResponse,
)[1],
)
.reduce((prev, curr) => prev.add(curr), BigNumber.from(0))
.toString();
}
return "0";
},
[batchQuery, chainId],
),
};
};