import { createPublicClient, http, getAddress } from 'viem' import { arbitrumSepolia } from 'viem/chains' const client = createPublicClient({ chain: arbitrumSepolia, transport: http('https://api.zan.top/node/v1/arb/sepolia/baf84c429d284bb5b676cb8c9ca21c07') }) const LENDING_PROXY = getAddress('0xCb4E7B1069F6C26A1c27523ce4c8dfD884552d1D') const LENDING_ABI = [ { inputs: [], name: 'getBorrowRate', outputs: [{ internalType: 'uint64', name: '', type: 'uint64' }], stateMutability: 'view', type: 'function' }, { inputs: [], name: 'getSupplyRate', outputs: [{ internalType: 'uint64', name: '', type: 'uint64' }], stateMutability: 'view', type: 'function' }, { inputs: [], name: 'getUtilization', outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], stateMutability: 'view', type: 'function' } ] async function main() { console.log('\n检查利率和使用率...\n') try { // 1. 获取借款利率 const borrowRate = await client.readContract({ address: LENDING_PROXY, abi: LENDING_ABI, functionName: 'getBorrowRate' }) console.log('=== getBorrowRate ===') console.log('原始值:', borrowRate.toString()) console.log('类型: uint64') console.log() // Compound V3 利率通常是每秒利率,精度 1e18 // APY = (1 + ratePerSecond)^(365*24*60*60) - 1 // 简化近似:APY ≈ ratePerSecond * secondsPerYear * 100% const secondsPerYear = 365 * 24 * 60 * 60 // 如果是 1e18 精度的每秒利率 if (borrowRate > 0n) { const apyE18 = Number(borrowRate) * secondsPerYear / 1e18 console.log('假设精度 1e18 (每秒利率):') console.log(' 每秒利率:', Number(borrowRate) / 1e18) console.log(' 年化利率 (APY):', apyE18.toFixed(2), '%') console.log() // 如果是 1e16 精度(百分比形式) const apyE16 = Number(borrowRate) * secondsPerYear / 1e16 console.log('假设精度 1e16:') console.log(' 年化利率 (APY):', apyE16.toFixed(2), '%') console.log() // 如果是 1e4 精度(basis points) const apyE4 = Number(borrowRate) / 1e4 console.log('假设精度 1e4 (basis points):') console.log(' 年化利率 (APY):', apyE4.toFixed(2), '%') console.log() } // 2. 获取存款利率 const supplyRate = await client.readContract({ address: LENDING_PROXY, abi: LENDING_ABI, functionName: 'getSupplyRate' }) console.log('=== getSupplyRate ===') console.log('原始值:', supplyRate.toString()) console.log() if (supplyRate > 0n) { const apyE18 = Number(supplyRate) * secondsPerYear / 1e18 console.log('假设精度 1e18 (每秒利率):') console.log(' 年化利率 (APY):', apyE18.toFixed(2), '%') console.log() } // 3. 获取使用率 const utilization = await client.readContract({ address: LENDING_PROXY, abi: LENDING_ABI, functionName: 'getUtilization' }) console.log('=== getUtilization ===') console.log('原始值:', utilization.toString()) console.log() if (utilization > 0n) { // Compound V3 使用率通常是 1e18 精度 const utilizationPercent = Number(utilization) / 1e18 * 100 console.log('假设精度 1e18:') console.log(' 使用率:', utilizationPercent.toFixed(2), '%') console.log() // 如果是 1e4 精度 const utilizationE4 = Number(utilization) / 1e4 console.log('假设精度 1e4:') console.log(' 使用率:', utilizationE4.toFixed(2), '%') console.log() } } catch (error) { console.error('查询失败:', error.message) } } main()