Files
Heyue_test/frontend/scripts/simulate-deposit.js

135 lines
4.6 KiB
JavaScript
Raw Permalink Normal View History

import { createPublicClient, http, encodeFunctionData, formatUnits } from 'viem'
import { arbitrumSepolia } from 'viem/chains'
const client = createPublicClient({
chain: arbitrumSepolia,
transport: http()
})
const LENDING_PROXY = '0xCb4E7B1069F6C26A1c27523ce4c8dfD884552d1D'
const YT_A = '0x97204190B35D9895a7a47aa7BaC61ac08De3cF05'
const USER = '0xa013422a5918cd099c63c8cc35283eaca99a705d'
const CONFIGURATOR = '0x488409CE9A3Fcd8EbD373dCb7e025cF8AB96fcdc'
const LENDING_ABI = [
{
inputs: [
{ internalType: 'address', name: '_collateralAsset', type: 'address' },
{ internalType: 'uint256', name: '_amount', type: 'uint256' }
],
name: 'deposit',
outputs: [],
stateMutability: 'nonpayable',
type: 'function'
}
]
const CONFIGURATOR_ABI = [
{
inputs: [{ internalType: 'address', name: '_asset', type: 'address' }],
name: 'getCollateralConfig',
outputs: [
{ internalType: 'bool', name: 'isActive', type: 'bool' },
{ internalType: 'uint256', name: 'collateralFactor', type: 'uint256' },
{ internalType: 'uint256', name: 'liquidationThreshold', type: 'uint256' },
{ internalType: 'uint256', name: 'liquidationBonus', type: 'uint256' }
],
stateMutability: 'view',
type: 'function'
},
{
inputs: [{ internalType: 'address', name: '', type: 'address' }],
name: 'collateralConfigs',
outputs: [
{ internalType: 'bool', name: 'isActive', type: 'bool' },
{ internalType: 'uint256', name: 'collateralFactor', type: 'uint256' },
{ internalType: 'uint256', name: 'liquidationThreshold', type: 'uint256' },
{ internalType: 'uint256', name: 'liquidationBonus', type: 'uint256' }
],
stateMutability: 'view',
type: 'function'
}
]
async function simulateDeposit() {
console.log('🔍 模拟存款操作...\n')
console.log('合约地址:', LENDING_PROXY)
console.log('抵押品地址:', YT_A)
console.log('用户地址:', USER)
console.log('存款金额: 10 YT-A\n')
// 1. 检查 Configurator 中的配置
console.log('=== 检查 Configurator 配置 ===')
try {
const config = await client.readContract({
address: CONFIGURATOR,
abi: CONFIGURATOR_ABI,
functionName: 'getCollateralConfig',
args: [YT_A]
})
console.log('✅ 通过 getCollateralConfig 读取:')
console.log(' - 是否激活:', config[0])
console.log(' - 抵押率:', Number(config[1]) / 100 + '%')
console.log(' - 清算阈值:', Number(config[2]) / 100 + '%')
console.log(' - 清算奖励:', Number(config[3]) / 100 + '%')
} catch (error) {
console.log('❌ getCollateralConfig 失败:', error.message.split('\n')[0])
// 尝试直接读取mapping
try {
const config = await client.readContract({
address: CONFIGURATOR,
abi: CONFIGURATOR_ABI,
functionName: 'collateralConfigs',
args: [YT_A]
})
console.log('✅ 通过 collateralConfigs mapping 读取:')
console.log(' - 是否激活:', config[0])
console.log(' - 抵押率:', Number(config[1]) / 100 + '%')
console.log(' - 清算阈值:', Number(config[2]) / 100 + '%')
console.log(' - 清算奖励:', Number(config[3]) / 100 + '%')
if (!config[0]) {
console.log('\n⚠ 警告: 抵押品未激活!这就是存款失败的原因。')
}
} catch (error2) {
console.log('❌ collateralConfigs mapping 也失败:', error2.message.split('\n')[0])
}
}
// 2. 模拟调用 deposit
console.log('\n=== 模拟存款调用 ===')
const depositAmount = 10n * 10n ** 18n // 10 YT-A
try {
await client.simulateContract({
address: LENDING_PROXY,
abi: LENDING_ABI,
functionName: 'deposit',
args: [YT_A, depositAmount],
account: USER
})
console.log('✅ 模拟存款成功!交易应该可以执行。')
} catch (error) {
console.log('❌ 模拟存款失败')
console.log('\n详细错误信息:')
console.log(error.message)
// 尝试解析错误原因
if (error.message.includes('Collateral not active')) {
console.log('\n💡 原因: 抵押品未激活')
console.log(' 需要管理员通过 Configurator 激活此抵押品')
} else if (error.message.includes('insufficient')) {
console.log('\n💡 原因: 余额或授权不足')
} else if (error.message.includes('paused')) {
console.log('\n💡 原因: 合约已暂停')
} else {
console.log('\n💡 这可能是由于抵押品未在借贷合约中配置')
}
}
console.log('\n=== 诊断完成 ===\n')
}
simulateDeposit().catch(console.error)