@bitte-ai/agent-sdk
Version:
Agent SDK for Bitte Protocol
98 lines (97 loc) • 3.07 kB
JavaScript
;
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,
};
}