@xswap-link/sdk
Version:
JavaScript SDK for XSwap platform
47 lines (43 loc) • 1.28 kB
text/typescript
import { ADDRESSES, BatchQueryAbi } from "@src/contracts";
import { useSwapContext } from "@src/context";
import useEvmContractApi from "./useEvmContractApi";
import { Ecosystem } from "@src/models";
import { ethers } from "ethers";
import { useCallback } from "react";
export const useBatchQuery = () => {
const evmContractApi = useEvmContractApi();
const { supportedChains } = useSwapContext();
const contract = useCallback(
(chainId: string) => {
const rpcUrl = supportedChains.find(
(chain) =>
chain.ecosystem === Ecosystem.EVM && chain.chainId === chainId,
)?.publicRpcUrls[0];
const contractAddress = ADDRESSES[chainId]?.BatchQuery;
if (rpcUrl && contractAddress) {
return new ethers.Contract(
contractAddress,
BatchQueryAbi,
ethers.getDefaultProvider(rpcUrl),
);
}
return null;
},
[supportedChains],
);
return {
batchQuery: useCallback(
async (
chainId: string,
targetAddresses: string[],
calldatas: string[],
) => {
return await evmContractApi.query(contract(chainId), "batchQuery", [
targetAddresses,
calldatas,
]);
},
[contract, evmContractApi],
),
};
};