UNPKG

@dahlia-labs/use-ethers

Version:
73 lines 2.86 kB
import { Token, TokenAmount } from "@dahlia-labs/token-utils"; import { Interface } from "@ethersproject/abi"; import ERC20_ABI from "./abis/erc20.json"; import { getContract } from "./contracts"; import { fetchMulticalls } from "./index"; export function getTokenInterface() { return new Interface(ERC20_ABI); } export const tokenInterface = getTokenInterface(); export const getTokenContractFromAddress = (address, provider) => getContract(address, ERC20_ABI, provider); export const getTokenContract = (token, provider) => getContract(token.address, ERC20_ABI, provider); export const balanceOfMulticall = (token, address) => ({ call: { target: token.address, callData: tokenInterface.encodeFunctionData("balanceOf", [address]), }, parseReturn: (returnData) => new TokenAmount(token, tokenInterface.decodeFunctionResult("balanceOf", returnData).toString()), }); export const nameMulticall = (tokenAddress) => ({ call: { target: tokenAddress, callData: tokenInterface.encodeFunctionData("name"), }, parseReturn: (returnData) => tokenInterface.decodeFunctionResult("name", returnData).toString(), }); export const symbolMulticall = (tokenAddress) => ({ call: { target: tokenAddress, callData: tokenInterface.encodeFunctionData("symbol"), }, parseReturn: (returnData) => tokenInterface.decodeFunctionResult("symbol", returnData).toString(), }); export const decimalsMulticall = (tokenAddress) => ({ call: { target: tokenAddress, callData: tokenInterface.encodeFunctionData("decimals"), }, parseReturn: (returnData) => +tokenInterface.decodeFunctionResult("decimals", returnData).toString(), }); export const totalSupplyMulticall = (token) => ({ call: { target: token.address, callData: tokenInterface.encodeFunctionData("totalSupply"), }, parseReturn: (returnData) => new TokenAmount(token, tokenInterface .decodeFunctionResult("totalSupply", returnData) .toString()), }); export const allowanceMulticall = (token, address, spender) => ({ call: { target: token.address, callData: tokenInterface.encodeFunctionData("allowance", [ address, spender, ]), }, parseReturn: (returnData) => new TokenAmount(token, tokenInterface.decodeFunctionResult("allowance", returnData).toString()), }); export const getToken = async (multicallContract, address, chainId) => { const multicallData = await fetchMulticalls([ nameMulticall(address), symbolMulticall(address), decimalsMulticall(address), ], multicallContract); return new Token({ chainId, address, name: multicallData[0], symbol: multicallData[1], decimals: multicallData[2], }); }; //# sourceMappingURL=token.js.map