Files
assetx/webapp/lib/contracts/index.ts

127 lines
3.4 KiB
TypeScript
Raw Permalink Normal View History

import { arbitrumSepolia, bscTestnet } from 'wagmi/chains'
import { getDynamicOverride } from './registry'
// 导入所有 ABI
import YTAssetFactory_ABI from './abis/YTAssetFactory.json'
import YTToken_ABI from './abis/YT-Token.json'
import USDY_ABI from './abis/USDY.json'
import YTLPToken_ABI from './abis/YTLPToken.json'
import YTPriceFeed_ABI from './abis/YTPriceFeed.json'
import YTVault_ABI from './abis/YTVault.json'
import YTPoolManager_ABI from './abis/YTPoolManager.json'
import YTRewardRouter_ABI from './abis/YTRewardRouter.json'
import lendingProxy_ABI from './abis/lendingProxy.json'
/**
*
* /api/contracts
*/
export type ContractName =
| 'USDC'
| 'USDY'
| 'YT-A'
| 'YT-B'
| 'YT-C'
| 'YTLPToken'
| 'YTAssetFactory'
| 'YTVault'
| 'YTPriceFeed'
| 'YTPoolManager'
| 'YTRewardRouter'
| 'lendingProxy'
/**
* ABI
*/
export const abis = {
// 代币
YTToken: YTToken_ABI,
USDY: USDY_ABI,
YTLPToken: YTLPToken_ABI,
// 核心合约
YTAssetFactory: YTAssetFactory_ABI,
YTVault: YTVault_ABI,
YTPriceFeed: YTPriceFeed_ABI,
YTPoolManager: YTPoolManager_ABI,
YTRewardRouter: YTRewardRouter_ABI,
// 借贷
lendingProxy: lendingProxy_ABI,
} as const
/**
*
* /api/contracts system_contracts + assets
* useContractRegistry()
* undefined hook enabled: !!address
*/
export function getContractAddress(
contractName: string,
chainId: number
): `0x${string}` | undefined {
return getDynamicOverride(contractName, chainId)
}
/**
* ABI
*/
export function getContractABI(contractName: keyof typeof abis) {
return abis[contractName]
}
/** 支持的网络 */
export const SUPPORTED_CHAINS = {
ARBITRUM_SEPOLIA: {
id: arbitrumSepolia.id,
name: 'Arbitrum Sepolia',
explorer: 'https://sepolia.arbiscan.io',
rpcUrl: 'https://sepolia-rollup.arbitrum.io/rpc',
},
BSC_TESTNET: {
id: bscTestnet.id,
name: 'BSC Testnet',
explorer: 'https://testnet.bscscan.com',
rpcUrl: 'https://bsc-testnet-rpc.publicnode.com',
},
} as const
/**
* URL
*/
export function getBlockExplorerUrl(chainId: number): string {
if (chainId === bscTestnet.id) {
return SUPPORTED_CHAINS.BSC_TESTNET.explorer
}
return SUPPORTED_CHAINS.ARBITRUM_SEPOLIA.explorer
}
/**
* URL
*/
export function getTxUrl(txHash: string, chainId?: number): string {
const explorer = chainId ? getBlockExplorerUrl(chainId) : SUPPORTED_CHAINS.BSC_TESTNET.explorer
return `${explorer}/tx/${txHash}`
}
/**
* URL
*/
export function getAddressUrl(address: string, chainId?: number): string {
const explorer = chainId ? getBlockExplorerUrl(chainId) : SUPPORTED_CHAINS.BSC_TESTNET.explorer
return `${explorer}/address/${address}`
}
/**
*
*/
export function getNetworkName(chainId: number): string {
if (chainId === bscTestnet.id) {
return SUPPORTED_CHAINS.BSC_TESTNET.name
}
if (chainId === arbitrumSepolia.id) {
return SUPPORTED_CHAINS.ARBITRUM_SEPOLIA.name
}
return `Unknown Network (${chainId})`
}