four-flap-meme-sdk
Version:
SDK for Flap bonding curve and four.meme TokenManager
108 lines (107 loc) • 4.19 kB
JavaScript
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;
}