UNPKG

@bitte-ai/agent-sdk

Version:

Agent SDK for Bitte Protocol

98 lines (97 loc) 3.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.erc20Transfer = erc20Transfer; exports.erc20Approve = erc20Approve; exports.checkAllowance = checkAllowance; exports.getTokenInfo = getTokenInfo; const viem_1 = require("viem"); const viem_2 = require("viem"); const client_1 = require("./client"); const NATIVE_ASSET = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; const MAX_APPROVAL = BigInt("115792089237316195423570985008687907853269984665640564039457584007913129639935"); function erc20Transfer(params) { const { token, to, amount } = params; return { to: token, value: "0x00", data: (0, viem_2.encodeFunctionData)({ abi: viem_1.erc20Abi, functionName: "transfer", args: [to, amount], }), }; } function erc20Approve(params) { const { token, spender, amount } = params; return { to: token, value: "0x00", data: (0, viem_2.encodeFunctionData)({ abi: viem_1.erc20Abi, functionName: "approve", args: [spender, amount ?? MAX_APPROVAL], }), }; } async function checkAllowance(chainId, owner, token, spender, client) { let rpc = client || (0, client_1.getClientForChain)(chainId); return rpc.readContract({ address: token, abi: viem_1.erc20Abi, functionName: "allowance", args: [owner, spender], }); } // const NON_ETH_NATIVES: Record<number, { symbol: string; name: string }> = { // 100: { symbol: "xDAI", name: "xDAI" }, // 137: { symbol: "MATIC", name: "MATIC" }, // 43114: { symbol: "AVAX", name: "AVAX" }, // }; // const ETHER_NATIVE = { // decimals: 18, // // Not all Native Assets are ETH, but enough are. // symbol: "ETH", // name: "Ether", // }; async function getTokenInfo(chainId, address, client) { let rpc = client || (0, client_1.getClientForChain)(chainId); if (!address || address.toLowerCase() === NATIVE_ASSET.toLowerCase()) { const chainId = rpc.chain?.id; return { address: NATIVE_ASSET, decimals: 18, symbol: `Unknown Native Symbol chainId=${chainId}`, name: "Unknown Native Name", ...rpc.chain?.nativeCurrency, }; } const [decimals, symbol, name] = await rpc.multicall({ contracts: [ { abi: viem_1.erc20Abi, address, functionName: "decimals", }, { abi: viem_1.erc20Abi, address, functionName: "symbol", }, { abi: viem_1.erc20Abi, address, functionName: "name", }, ], }); if (decimals.error || symbol.error || name.error) { console.error(decimals, symbol, name); throw new Error("Failed to get token info"); } return { address, decimals: decimals.result, symbol: symbol.result, name: name.result, }; }