UNPKG

four-flap-meme-sdk

Version:

SDK for Flap bonding curve and four.meme TokenManager

108 lines (107 loc) 4.19 kB
import { Contract, JsonRpcProvider, Wallet } from 'ethers'; import { TokenManager, TokenManager2, TokenManagerHelper3 } from '../abis/index.js'; import { ADDRESSES } from './constants.js'; /** * 创建 TokenManager V1 合约实例(只读) * 自动使用正确的代理合约地址 */ export function getTokenManagerV1(chain, rpcUrl) { const provider = new JsonRpcProvider(rpcUrl); const chainAddresses = ADDRESSES[chain]; const address = 'TokenManagerV1' in chainAddresses ? chainAddresses.TokenManagerV1 : undefined; if (!address) { throw new Error(`TokenManager V1 not deployed on ${chain}`); } return new Contract(address, TokenManager, provider); } /** * 创建 TokenManager V2 合约实例(只读) * 自动使用正确的代理合约地址 */ export function getTokenManagerV2(chain, rpcUrl) { const provider = new JsonRpcProvider(rpcUrl); const chainAddresses = ADDRESSES[chain]; const address = 'TokenManagerV2' in chainAddresses ? chainAddresses.TokenManagerV2 : undefined; if (!address) { throw new Error(`TokenManager V2 not deployed on ${chain}`); } return new Contract(address, TokenManager2, provider); } /** * 创建 TokenManagerHelper3 合约实例(只读) * 自动使用正确的代理合约地址 */ export function getTokenManagerHelper3(chain, rpcUrl) { const provider = new JsonRpcProvider(rpcUrl); const address = ADDRESSES[chain].TokenManagerHelper3; if (!address) { throw new Error(`TokenManagerHelper3 not deployed on ${chain}`); } return new Contract(address, TokenManagerHelper3, provider); } /** * 创建 TokenManager V1 合约实例(可写) * 自动使用正确的代理合约地址 */ export function getTokenManagerV1Writer(chain, rpcUrl, privateKey) { const provider = new JsonRpcProvider(rpcUrl); const signer = new Wallet(privateKey, provider); const chainAddresses = ADDRESSES[chain]; const address = 'TokenManagerV1' in chainAddresses ? chainAddresses.TokenManagerV1 : undefined; if (!address) { throw new Error(`TokenManager V1 not deployed on ${chain}`); } return new Contract(address, TokenManager, signer); } /** * 创建 TokenManager V2 合约实例(可写) * 自动使用正确的代理合约地址 */ export function getTokenManagerV2Writer(chain, rpcUrl, privateKey) { const provider = new JsonRpcProvider(rpcUrl); const signer = new Wallet(privateKey, provider); const chainAddresses = ADDRESSES[chain]; const address = 'TokenManagerV2' in chainAddresses ? chainAddresses.TokenManagerV2 : undefined; if (!address) { throw new Error(`TokenManager V2 not deployed on ${chain}`); } return new Contract(address, TokenManager2, signer); } /** * 创建 TokenManagerHelper3 合约实例(可写) * 自动使用正确的代理合约地址 */ export function getTokenManagerHelper3Writer(chain, rpcUrl, privateKey) { const provider = new JsonRpcProvider(rpcUrl); const signer = new Wallet(privateKey, provider); const address = ADDRESSES[chain].TokenManagerHelper3; if (!address) { throw new Error(`TokenManagerHelper3 not deployed on ${chain}`); } return new Contract(address, TokenManagerHelper3, signer); } /** * 获取链上 TokenManager 的代理合约地址 * 用于授权(approve)操作 */ export function getTokenManagerAddress(chain, version) { const chainAddresses = ADDRESSES[chain]; if (version === 'V1') { const address = 'TokenManagerV1' in chainAddresses ? chainAddresses.TokenManagerV1 : undefined; if (!address) { throw new Error(`TokenManager V1 not deployed on ${chain}`); } return address; } if (version === 'V2') { const address = 'TokenManagerV2' in chainAddresses ? chainAddresses.TokenManagerV2 : undefined; if (!address) { throw new Error(`TokenManager V2 not deployed on ${chain}`); } return address; } if (!chainAddresses.TokenManagerHelper3) { throw new Error(`TokenManagerHelper3 not deployed on ${chain}`); } return chainAddresses.TokenManagerHelper3; }