UNPKG

@xswap-link/sdk

Version:
47 lines (43 loc) 1.28 kB
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], ), }; };