Files
Heyue_test/frontend/scripts/configure-collateral.js
Sofio 5cb64f881e feat: 添加多链支持和 Lending 借贷系统
- 新增 ARB Sepolia + BNB Testnet 多链支持
- 添加 LendingPanel 借贷系统组件
- 添加 LendingAdminPanel 管理面板
- 添加 USDCPanel USDC 操作组件
- 添加 HoldersPanel 持有人信息组件
- 添加 AutoTestPanel 自动化测试组件
- 重构 LP 组件为模块化结构 (LP/)
- 添加多个调试和测试脚本
- 修复 USDC 精度动态配置
- 优化合约配置支持多链切换

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 23:32:29 +08:00

170 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createWalletClient, http, createPublicClient } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { arbitrumSepolia } from 'viem/chains'
// 从环境变量或命令行参数获取私钥
const PRIVATE_KEY = process.env.PRIVATE_KEY || process.argv[2]
if (!PRIVATE_KEY || !PRIVATE_KEY.startsWith('0x')) {
console.error('❌ 请提供私钥:')
console.error(' 方式1: export PRIVATE_KEY=0x...')
console.error(' 方式2: node configure-collateral.js 0x...')
process.exit(1)
}
const account = privateKeyToAccount(PRIVATE_KEY)
const publicClient = createPublicClient({
chain: arbitrumSepolia,
transport: http()
})
const walletClient = createWalletClient({
account,
chain: arbitrumSepolia,
transport: http()
})
const CONFIGURATOR = '0x488409CE9A3Fcd8EbD373dCb7e025cF8AB96fcdc'
const LENDING_PROXY = '0xCb4E7B1069F6C26A1c27523ce4c8dfD884552d1D'
const COLLATERAL_ASSETS = [
{
name: 'YT-A',
address: '0x97204190B35D9895a7a47aa7BaC61ac08De3cF05',
collateralFactor: 7500, // 75%
liquidationThreshold: 8500, // 85%
liquidationBonus: 1000 // 10%
},
{
name: 'YT-B',
address: '0x181ef4011c35C4a2Fda08eBC5Cf509Ef58E553fF',
collateralFactor: 7500,
liquidationThreshold: 8500,
liquidationBonus: 1000
},
{
name: 'YT-C',
address: '0xE9A5b9f3a2Eda4358f81d4E2eF4f3280A664e5B0',
collateralFactor: 7500,
liquidationThreshold: 8500,
liquidationBonus: 1000
}
]
// Configurator ABI
const CONFIGURATOR_ABI = [
{
inputs: [
{ internalType: 'address', name: '_asset', type: 'address' },
{ internalType: 'uint256', name: '_collateralFactor', type: 'uint256' },
{ internalType: 'uint256', name: '_liquidationThreshold', type: 'uint256' },
{ internalType: 'uint256', name: '_liquidationBonus', type: 'uint256' }
],
name: 'setCollateralConfig',
outputs: [],
stateMutability: 'nonpayable',
type: 'function'
},
{
inputs: [
{ internalType: 'address', name: '_asset', type: 'address' },
{ internalType: 'bool', name: '_isActive', type: 'bool' }
],
name: 'setCollateralActive',
outputs: [],
stateMutability: 'nonpayable',
type: 'function'
},
{
inputs: [],
name: 'owner',
outputs: [{ internalType: 'address', name: '', type: 'address' }],
stateMutability: 'view',
type: 'function'
}
]
async function configureCollateral() {
console.log('\n🔧 配置借贷抵押品\n')
console.log('Configurator:', CONFIGURATOR)
console.log('操作者:', account.address)
console.log('')
// 检查权限
try {
const owner = await publicClient.readContract({
address: CONFIGURATOR,
abi: CONFIGURATOR_ABI,
functionName: 'owner'
})
console.log('Configurator Owner:', owner)
if (owner.toLowerCase() !== account.address.toLowerCase()) {
console.error('\n❌ 错误: 当前账户不是 Configurator 的 owner')
console.error(' 需要使用 owner 账户的私钥')
process.exit(1)
}
} catch (error) {
console.warn('⚠️ 无法检查owner继续尝试配置...\n')
}
// 配置每个抵押品
for (const asset of COLLATERAL_ASSETS) {
console.log(`\n📝 配置 ${asset.name} (${asset.address})`)
console.log(` - 抵押率: ${asset.collateralFactor / 100}%`)
console.log(` - 清算阈值: ${asset.liquidationThreshold / 100}%`)
console.log(` - 清算奖励: ${asset.liquidationBonus / 100}%`)
try {
// 1. 设置抵押品参数
console.log(' → 设置参数...')
const hash1 = await walletClient.writeContract({
address: CONFIGURATOR,
abi: CONFIGURATOR_ABI,
functionName: 'setCollateralConfig',
args: [
asset.address,
asset.collateralFactor,
asset.liquidationThreshold,
asset.liquidationBonus
]
})
console.log(' ✅ 参数设置交易:', hash1)
// 等待确认
await publicClient.waitForTransactionReceipt({ hash: hash1 })
console.log(' ✅ 交易已确认')
// 2. 激活抵押品
console.log(' → 激活抵押品...')
const hash2 = await walletClient.writeContract({
address: CONFIGURATOR,
abi: CONFIGURATOR_ABI,
functionName: 'setCollateralActive',
args: [asset.address, true]
})
console.log(' ✅ 激活交易:', hash2)
// 等待确认
await publicClient.waitForTransactionReceipt({ hash: hash2 })
console.log(' ✅ 交易已确认')
console.log(`${asset.name} 配置完成!`)
} catch (error) {
console.error(` ❌ 配置失败:`, error.message.split('\n')[0])
// 继续处理下一个
continue
}
}
console.log('\n✅ 所有抵押品配置完成!\n')
console.log('现在可以尝试存入抵押品了。')
}
configureCollateral().catch((error) => {
console.error('\n❌ 配置过程出错:', error.message)
process.exit(1)
})