Skip to content

Commit 7baf1bd

Browse files
authored
Fix: Superform (#17022)
1 parent c7d44e9 commit 7baf1bd

File tree

1 file changed

+43
-14
lines changed

1 file changed

+43
-14
lines changed

projects/superform/index.js

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,54 @@
1-
const superform_chains = ["ethereum", "polygon", "bsc", "avax", "arbitrum", "optimism", "base", "fantom", "blast", "linea"];
2-
const factory_contract = "0xD85ec15A9F814D6173bF1a89273bFB3964aAdaEC";
3-
const fantom_factory_contract = "0xbc85043544CC2b3Fd095d54b6431822979BBB62A";
1+
const CONFIG = {
2+
ethereum: {},
3+
arbitrum: { blacklistedVaults: [
4+
'0xd3a17928245064b6df5095a76e277fe441d538a4',
5+
'0xabc07bf91469c5450d6941dd0770e6e6761b90d6',
6+
'0x6f28cafe12bd97e474a52bcbfea6f2c18ae0f53d',
7+
'0x0ace2dc3995acd739ae5e0599e71a5524b93b886',
8+
'0xb9bfbb35c2ed588a42f9fd1120929c607b463192',
9+
'0xbc323e3564fb498e55cdc83a3ea6bb1af8402d6b',
10+
'0x1fd865a55eaf5333e6374fb3ad66d22e9885d3aa',
11+
'0x866eb09d3d1397b8a28cfe5dceeaed9362840385',
12+
'0xd63ace62b925361fc588734022718e919a8081ac',
13+
'0xa135d7f10545e3a45e24e79ecd4e4c3c78cf56bf'
14+
] },
15+
polygon: {},
16+
bsc: {},
17+
avax: {},
18+
optimism: {},
19+
base: {},
20+
fantom: { factory: '0xbc85043544CC2b3Fd095d54b6431822979BBB62A' },
21+
blast: {},
22+
linea: {}
23+
}
24+
25+
const DEFAULT_FACTORY = '0xD85ec15A9F814D6173bF1a89273bFB3964aAdaEC'
426

5-
// These vaults have misconfigured implementation affecting TVL
6-
const blacklisted_vaults = ["0xd3a17928245064b6df5095a76e277fe441d538a4"]
27+
const previewRedeemFromAbi = "function previewRedeemFrom(uint256) external view returns(uint256)"
728

8-
async function tvl(api) {
9-
const forms = await api.fetchList({ lengthAbi: 'getSuperformCount', itemAbi: "function superforms(uint256) external view returns(uint256)", target: api.chainId === 250 ? fantom_factory_contract : factory_contract })
10-
const getSuperformRes = await api.multiCall({ abi: "function getSuperform(uint256) external view returns(address, uint32, uint64)", calls: forms, target: api.chainId === 250 ? fantom_factory_contract : factory_contract })
29+
const tvl = async (api) => {
30+
const { factory = DEFAULT_FACTORY, blacklistedVaults = [] } = CONFIG[api.chain]
31+
const forms = await api.fetchList({ lengthAbi: 'getSuperformCount', itemAbi: "function superforms(uint256) external view returns(uint256)", target: factory })
32+
const getSuperformRes = await api.multiCall({ abi: "function getSuperform(uint256) external view returns(address, uint32, uint64)", calls: forms, target: factory })
1133
const super4626 = getSuperformRes.map(v => v[0])
1234
const vaults = await api.multiCall({ abi: 'address:vault', calls: super4626 })
1335

14-
// Filter out blacklisted vaults
15-
const filteredVaults = vaults.filter(vault => !blacklisted_vaults.includes(vault.toLowerCase()));
16-
const filteredSuper4626 = super4626.filter((_, index) => !blacklisted_vaults.includes(vaults[index].toLowerCase()));
36+
const pairs = vaults
37+
.map((v, i) => ({ vault: v, s: super4626[i] }))
38+
.filter(p => p.vault && !blacklistedVaults.includes(p.vault.toLowerCase()))
39+
40+
if (pairs.length === 0) return;
41+
const filteredVaults = pairs.map(p => p.vault);
42+
const filteredSuper4626 = pairs.map(p => p.s);
1743

1844
const assets = await api.multiCall({ abi: 'address:asset', calls: filteredSuper4626 })
1945
const vBals = await api.multiCall({ abi: "erc20:balanceOf", calls: filteredVaults.map((v, i) => ({ target: v, params: filteredSuper4626[i] })) })
20-
const bals = await api.multiCall({ abi: "function previewRedeemFrom(uint256) external view returns(uint256)", calls: filteredSuper4626.map((v, i) => ({ target: v, params: vBals[i] })), permitFailure: true })
46+
const bals = await api.multiCall({ abi: previewRedeemFromAbi, calls: filteredSuper4626.map((v, i) => ({ target: v, params: vBals[i] })), permitFailure: true })
47+
2148
bals.forEach((bal, i) => {
22-
if (bal) api.add(assets[i], bal)
49+
const asset = assets[i]
50+
if (!bal || !asset) return
51+
api.add(asset, bal)
2352
})
2453
}
2554

@@ -32,4 +61,4 @@ module.exports = {
3261
]
3362
};
3463

35-
superform_chains.forEach(chain => module.exports[chain] = { tvl })
64+
Object.keys(CONFIG).forEach(chain => module.exports[chain] = { tvl })

0 commit comments

Comments
 (0)