@@ -10,6 +10,72 @@ BigNumber.config({ EXPONENTIAL_AT: [-1e9, 1e9] });
1010const XAI = '0xd7c9f0e536dc865ae858b0c0453fe76d13c3beac'
1111const blacklistedSilos = [ "0x6543ee07cf5dd7ad17aeecf22ba75860ef3bbaaa" , ] ;
1212
13+ const badDebtSilos = {
14+ sonic : [
15+ "0xCCdDbBbd1E36a6EDA3a84CdCee2040A86225Ba71" , // wmetaUSD - Sonic
16+ "0xEd9777944A2Fb32504a410D23f246463B3f40908" , // USDC (wmetaUSD) - Sonic
17+ "0x6e8C150224D6e9B646889b96EFF6f7FD742e2C22" , // wmetaUSD - Sonic
18+ "0x0aB02DD08c1555d1a20C76a6EA30e3E36f3e06d4" , // scUSD (wmetaUSD) - Sonic
19+ "0x75c550776c191A8F6aE22EdC742aD2788723B66E" , // wmetaUSD - Sonic
20+ "0xc6ee9A58D5270e53fD1361946899b6D0553142B4" , // scUSD (wmetaUSD) - Sonic
21+ "0x501Ee3D6cB84004c7970cA24f3daC07D61A25e4D" , // wmetaUSD - Sonic
22+ "0x1A089424F52502139888fa4c0ED2FA088e9E1d51" , // USDC (wmetaUSD) - Sonic
23+ "0x1c1791911483E98875D162355feC47f37613f0FB" , // wmetaS - Sonic
24+ "0x8c98b43BF61F2B07c4D26f85732217948Fca2a90" , // wS (wmetaS) - Sonic
25+ "0xA1627a0E1d0ebcA9326D2219B84Df0c600bed4b1" , // USDC - Sonic (Stream-impacted)
26+ "0xb1412442aa998950f2f652667d5Eba35fE66E43f" , // scUSD - Sonic (Stream-impacted)
27+ "0x27968d36b937DcB26F33902fA489E5b228b104BE" , // dUSD - Sonic (Stream-impacted)
28+ "0x76DF755A9f40463F14d0a2b7Cba3Ccf05404eEdf" , // dUSD - Sonic (Stream-impacted)
29+ "0xAF1BDaE843d90c546DE5001f7b107B46e1a26Aa9" , // dUSD - Sonic (Stream-impacted)
30+ "0x5954ce6671d97D24B782920ddCdBB4b1E63aB2De" , // USDC - Sonic (Stream-impacted)
31+ "0x4935FaDB17df859667Cc4F7bfE6a8cB24f86F8d0" , // USDC - Sonic (Stream-impacted)
32+ "0x219656F33c58488D09d518BaDF50AA8CdCAcA2Aa" , // ETH - Sonic (Stream-impacted)
33+ ] . map ( entry => entry . toLowerCase ( ) ) ,
34+ ethereum : [
35+ "0x1dE3bA67Da79A81Bc0c3922689c98550e4bd9bc2" , // USDC - ethereum (Stream-impacted)
36+ ] . map ( entry => entry . toLowerCase ( ) ) ,
37+ arbitrum : [
38+ "0xACb7432a4BB15402CE2afe0A7C9D5b738604F6F9" , // USDC - Arbitrum (Stream-impacted)
39+ "0x2433D6AC11193b4695D9ca73530de93c538aD18a" , // USDC - Arbitrum (Stream-impacted)
40+ ] . map ( entry => entry . toLowerCase ( ) ) ,
41+ avax : [
42+ "0x672b77f0538b53Dc117C9dDfEb7377A678d321a6" , // USDC - Avalanche (Stream-impacted)
43+ "0xE0fc62e685E2b3183b4B88b1fE674cFEc55a63F7" , // USDT - Avalanche (Stream-impacted)
44+ "0x9C4D4800b489d217724155399CD64D07Eae603f3" , // AUSD - Avalanche (Stream-impacted)
45+ "0x7437ac81457Fa98fFB2d0C8f9943ecfE4813e2f1" , // BTC.b - Avalanche (Stream-impacted)
46+ ] . map ( entry => entry . toLowerCase ( ) ) ,
47+ } ;
48+
49+ const badDebtVaults = {
50+ sonic : [
51+ "0xcca902f2d3d265151f123d8ce8FdAc38ba9745ed" , // USDC - Sonic (Stream-impacted)
52+ "0x2bc6F1406D736Cc09631676c992Abbf2CeD789e7" , // USDC - Sonic (Stream-impacted)
53+ "0xF75AE954D30217B4EE70DbFB33f04162aa3Cf260" , // USDC - Sonic (Stream-impacted)
54+ "0xb47cB414aaB743C977DfD1FDB758f971907e810e" , // USDC - Sonic (Stream-impacted)
55+ "0xF6F87073cF8929C206A77b0694619DC776F89885" , // USDC - Sonic (Stream-impacted)
56+ "0x391b3F70E254d582588B27e97E48D1CFcdf0BE7e" , // scUSD - Sonic (Stream-impacted)
57+ "0x9A1BF5365edBB99C2c61CA6D9ffAd0B705ACfc6F" , // dUSD - Sonic (Stream-impacted)
58+ "0xb6A23cB29e512Df41876B28D7A848BD831f9c5Ba" , // scUSD - Sonic (Stream-impacted)
59+ "0xf6bC16B79c469b94Cdd25F3e2334DD4FEE47A581" , // USDC - Sonic (Stream-impacted)
60+ "0xCc7bDB3FF050D65918b96e4BDf1060a1aA0bB409" , // ETH - Sonic (Stream-impacted)
61+ ] . map ( entry => entry . toLowerCase ( ) ) ,
62+ ethereum : [
63+ "0x8399C8Fc273bD165C346Af74A02e65f10e4FD78F" , // USDC - ethereum (Stream-impacted)
64+ ] . map ( entry => entry . toLowerCase ( ) ) ,
65+ arbitrum : [
66+ "0x7C1C43Df1B08A7de4e25E7a8f5867efDCc812B95" , // USDC - Arbitrum (Stream-impacted)
67+ "0x2BA39e5388aC6C702Cb29AEA78d52aa66832f1ee" , // USDC - Arbitrum (Stream-impacted)
68+ "0xac69CFe6BB269CeBF8ab4764d7E678C3658b99f2" , // USDC - Arbitrum (Stream-impacted)
69+ ] . map ( entry => entry . toLowerCase ( ) ) ,
70+ avalanche : [
71+ "0x4dc1ce9b9f9EF00c144BfAD305f16c62293dC0E8" , // USDC - Avalanche (Stream-impacted)
72+ "0x1f8E769B5B6010B2C2BBCd68629EA1a0a0Eda7E3" , // BTC.b - Avalanche (Stream-impacted)
73+ "0x6c09bfdc1df45D6c4Ff78Dc9F1C13aF29eB335d4" , // USDC - Avalanche (Stream-impacted)
74+ "0x3d7B0c3997E48fA3FC96cd057d1fb4E5F891835B" , // AUSD - Avalanche (Stream-impacted)
75+ "0x36E2AA296E798Ca6262DC5Fad5F5660e638d5402" , // USDC - Avalanche (Stream-impacted)
76+ ] . map ( entry => entry . toLowerCase ( ) ) ,
77+ } ;
78+
1379const getAssetAbiV2 = "address:asset" ;
1480const getSiloConfigMarketId = "uint256:SILO_ID" ;
1581const getAssetBalanceAbi = "function balanceOf(address account) external view returns (uint256)" ;
@@ -322,7 +388,7 @@ async function getSilosV2(chainApi, deploymentData) {
322388 siloAddressesToSiloConfigAddress [ silo1 ] = siloConfig ;
323389
324390 return [ silo0 , silo1 ] . filter (
325- ( address ) => blacklistedSilos . indexOf ( address . toLowerCase ( ) ) === - 1
391+ ( address ) => ( ( blacklistedSilos . indexOf ( address . toLowerCase ( ) ) === - 1 ) && ( badDebtSilos [ chain ] ?. indexOf ( address . toLowerCase ( ) ) === - 1 ) )
326392 ) ;
327393 } ) ;
328394
@@ -331,13 +397,14 @@ async function getSilosV2(chainApi, deploymentData) {
331397 return { siloAddresses, siloAddressesToSiloConfigAddress } ;
332398}
333399
334- async function getVaultData ( api , deploymentData ) {
400+ async function getVaultData ( api , deploymentData , chain ) {
335401
336402 // Handle V2 Vaults
337403 let rawVaultData = { } ;
338404 let assetDataByVault = { } ;
339405 let assetsForPriceData = [ ] ;
340406 let subgraphVaults ;
407+ let filteredSubgraphVaults = [ ] ;
341408 if ( deploymentData ?. SUBGRAPH_URL ) {
342409 const vaultQuery = gql `
343410 {
@@ -359,20 +426,20 @@ async function getVaultData(api, deploymentData) {
359426 ` ;
360427 subgraphVaults = await request ( deploymentData ?. SUBGRAPH_URL , vaultQuery ) ;
361428
362- for ( let vault of subgraphVaults ?. vaults ) {
363- // Only collect data for vaults with a positive supply
364- if ( vault ?. totalSupply && new BigNumber ( vault . totalSupply ) . isGreaterThan ( 0 ) ) {
365- rawVaultData [ vault . id ] = {
366- id : vault . id ,
367- name : vault . name ,
368- totalSupply : vault . totalSupply ,
369- assetRatio : vault . assetRatio ,
370- asset : vault . asset ,
371- performanceFee : vault . performanceFee ? ethers . utils . formatUnits ( vault . performanceFee , 16 ) : 0 ,
372- }
373- if ( vault ?. asset ?. id && assetsForPriceData ?. indexOf ( vault ?. asset ?. id ) === - 1 ) {
374- assetsForPriceData . push ( vault ?. asset ?. id ) ;
375- }
429+ // Only collect data for vaults with a positive supply & which aren't in the badDebtVaults list
430+ filteredSubgraphVaults = subgraphVaults ?. vaults . filter ( ( vault ) => ( vault ?. totalSupply && new BigNumber ( vault . totalSupply ) . isGreaterThan ( 0 ) && ( badDebtVaults [ chain ] ?. indexOf ( vault . id . toLowerCase ( ) ) === - 1 ) ) ) ;
431+
432+ for ( let vault of filteredSubgraphVaults ) {
433+ rawVaultData [ vault . id ] = {
434+ id : vault . id ,
435+ name : vault . name ,
436+ totalSupply : vault . totalSupply ,
437+ assetRatio : vault . assetRatio ,
438+ asset : vault . asset ,
439+ performanceFee : vault . performanceFee ? ethers . utils . formatUnits ( vault . performanceFee , 16 ) : 0 ,
440+ }
441+ if ( vault ?. asset ?. id && assetsForPriceData ?. indexOf ( vault ?. asset ?. id ) === - 1 ) {
442+ assetsForPriceData . push ( vault ?. asset ?. id ) ;
376443 }
377444 }
378445
@@ -384,8 +451,8 @@ async function getVaultData(api, deploymentData) {
384451 const VAULT_POSITION_BATCH_SIZE = 10 ;
385452 let vaultBatches = [ ] ;
386453 let vaultIdToPositionMetadata = { } ;
387- for ( let i = 0 ; i < subgraphVaults ?. vaults ?. length ; i += VAULT_POSITION_BATCH_SIZE ) {
388- const batch = subgraphVaults ?. vaults . slice ( i , i + VAULT_POSITION_BATCH_SIZE ) ;
454+ for ( let i = 0 ; i < filteredSubgraphVaults ?. length ; i += VAULT_POSITION_BATCH_SIZE ) {
455+ const batch = filteredSubgraphVaults . slice ( i , i + VAULT_POSITION_BATCH_SIZE ) ;
389456 vaultBatches . push ( batch ) ;
390457 }
391458
@@ -555,7 +622,7 @@ const main = async () => {
555622 }
556623 }
557624
558- let vaultData = await getVaultData ( api , deploymentData ) ;
625+ let vaultData = await getVaultData ( api , deploymentData , chain ) ;
559626
560627 for ( let [ vaultAddress , vaultInfo ] of Object . entries ( vaultData ) ) {
561628 let vaultPoolId = `${ vaultInfo . vaultId } -${ vaultAddress } -${ chain } ` ;
0 commit comments