From 4433a1ef97e75aeadf2b74ca4a4e6a16c4017269 Mon Sep 17 00:00:00 2001 From: Henry Wu Date: Wed, 29 Oct 2025 00:33:14 +0800 Subject: [PATCH] TermMax: add V1Plus events and functions for VaultCreated handling (#16864) --- projects/term-structure/index.js | 59 +++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/projects/term-structure/index.js b/projects/term-structure/index.js index 50fdba755..c8432fe98 100644 --- a/projects/term-structure/index.js +++ b/projects/term-structure/index.js @@ -24,6 +24,10 @@ const EVENTS = { CreateVault: "event CreateVault(address indexed vault, address indexed creator, (address admin,address curator,uint256 timelock,address asset,uint256 maxCapacity,string name,string symbol,uint64 performanceFeeRate) indexed initialParams)", }, + V1Plus: { + VaultCreated: + "event VaultCreated(address indexed vault, address indexed creator, tuple(address admin,address curator,address guardian,uint256 timelock,address asset,uint256 maxCapacity,string name,string symbol,uint64 performanceFeeRate,uint64 minApy,uint64 minIdleFundRate) initialParams)", + }, V2: { MarketCreated: "event MarketCreated(address indexed market, address indexed collateral, address indexed debtToken, tuple(address collateral,address debtToken,address admin,address gtImplementation,tuple(address treasurer,uint64 maturity,tuple(uint32 lendTakerFeeRatio,uint32 lendMakerFeeRatio,uint32 borrowTakerFeeRatio,uint32 borrowMakerFeeRatio,uint32 mintGtFeeRatio,uint32 mintGtFeeRef) feeConfig) marketConfig,(address oracle,uint32 liquidationLtv,uint32 maxLtv,bool liquidatable) loanConfig,bytes gtInitalParams,string tokenName,string tokenSymbol) params)", @@ -104,6 +108,8 @@ const ADDRESSES = { address: "0x4778CBf91d8369843281c8f5a2D7b56d1420dFF5", fromBlock: 22283092, }, + ], + VaultFactoryV1Plus: [ { address: "0x3a9ECfFDBDc595907f65640F810d3dDDDDe2FA61", fromBlock: 23138659, @@ -239,6 +245,28 @@ async function getTermMaxVaultAddresses(api) { return addresses; } +async function getTermMaxVaultV1PlusAddresses(api) { + if (!ADDRESSES[api.chain].VaultFactoryV1Plus) return []; + const addresses = []; + const promises = []; + for (const vaultFactory of ADDRESSES[api.chain].VaultFactoryV1Plus) { + const promise = async () => { + const logs = await getLogs({ + api, + eventAbi: EVENTS.V1Plus.VaultCreated, + fromBlock: vaultFactory.fromBlock, + target: vaultFactory.address, + onlyArgs: true, + extraKey: `termmax-vault-v1-plus-${api.chain}`, + }); + for (const [vault] of logs) addresses.push(vault); + }; + promises.push(promise()); + } + await Promise.all(promises); + return addresses; +} + async function getTermMaxVaultV2Addresses(api) { if (!ADDRESSES[api.chain].VaultFactoryV2) return []; const addresses = []; @@ -262,13 +290,14 @@ async function getTermMaxVaultV2Addresses(api) { } async function getTermMaxVaultOwnerTokens(api) { - const [vaultV1Addresses, vaultV2Addresses] = await Promise.all([ - getTermMaxVaultAddresses(api), - getTermMaxVaultV2Addresses(api), - ]); + const [vaultV1Addresses, vaultV1PlusAddresses, vaultV2Addresses] = + await Promise.all([ + getTermMaxVaultAddresses(api), + getTermMaxVaultV1PlusAddresses(api), + ]); const vaultAddresses = [] .concat(vaultV1Addresses) - .concat(vaultV2Addresses) + .concat(vaultV1PlusAddresses) .filter((address) => !VAULT_BLACKLIST[api.chain]?.includes(address)); const assets = await api.multiCall({ abi: ABIS.Vault.asset, @@ -278,11 +307,31 @@ async function getTermMaxVaultOwnerTokens(api) { return assets.map((asset, idx) => [[asset], vaultAddresses[idx]]); } +async function recordVaultV2Assets(api) { + const vaultV2Addresses = await getTermMaxVaultV2Addresses(api); + const [assets, totalAssets] = await Promise.all([ + api.multiCall({ + abi: ABIS.Vault.asset, + calls: vaultV2Addresses, + }), + api.multiCall({ + abi: "uint256:totalAssets", + calls: vaultV2Addresses, + }), + ]); + for (let i = 0; i < vaultV2Addresses.length; i += 1) { + const asset = assets[i]; + const totalAsset = totalAssets[i]; + api.add(asset, totalAsset); + } +} + async function getTermMaxOwnerTokens(api) { const [marketOwnerTokens, vaultOwnerTokens] = await Promise.all([ getTermMaxMarketOwnerTokens(api), getTermMaxVaultOwnerTokens(api), ]); + await recordVaultV2Assets(api); const ownerTokens = [].concat(marketOwnerTokens).concat(vaultOwnerTokens); return ownerTokens; }