@@ -7,89 +7,134 @@ const axios = require('axios');
7
7
const { url } = require ( 'inspector' ) ;
8
8
9
9
const chains = {
10
- ethereum : {
11
- factory : '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e' ,
12
- vaultLens : '0xA8695d44EC128136F8Afcd796D6ba3Db3cdA8914' ,
13
- fromBlock : 20529225 ,
14
- } ,
15
- bob : {
16
- factory : '0x046a9837A61d6b6263f54F4E27EE072bA4bdC7e4' ,
17
- vaultLens : '0xb20343277ad78150D21CC8820fF012efDDa71531' ,
18
- fromBlock : 12266832 ,
19
- } ,
20
- }
10
+ ethereum : {
11
+ factory : '0x29a56a1b8214D9Cf7c5561811750D5cBDb45CC8e' ,
12
+ vaultLens : '0xA8695d44EC128136F8Afcd796D6ba3Db3cdA8914' ,
13
+ fromBlock : 20529225 ,
14
+ } ,
15
+ bob : {
16
+ factory : '0x046a9837A61d6b6263f54F4E27EE072bA4bdC7e4' ,
17
+ vaultLens : '0xb20343277ad78150D21CC8820fF012efDDa71531' ,
18
+ fromBlock : 12266832 ,
19
+ } ,
20
+ sonic : {
21
+ factory : '0xF075cC8660B51D0b8a4474e3f47eDAC5fA034cFB' ,
22
+ vaultLens : '0x0058F402aaa67868A682DA1bDd2E08c7aA3795eE' ,
23
+ fromBlock : 5324454 ,
24
+ } ,
25
+ avax : {
26
+ factory : '0xaf4B4c18B17F6a2B32F6c398a3910bdCD7f26181' ,
27
+ vaultLens : '0xeE2CaC5Df4984f56395b48e71b1D1E84acFbcD9E' ,
28
+ fromBlock : 56805794 ,
29
+ } ,
30
+ berachain : {
31
+ factory : '0x5C13fb43ae9BAe8470f646ea647784534E9543AF' ,
32
+ vaultLens : '0xa61BC2Df76DBFCeDAe4fAaB7A1341bA98fA76FdA' ,
33
+ fromBlock : 786314 ,
34
+ } ,
35
+ bsc : {
36
+ factory : '0x7F53E2755eB3c43824E162F7F6F087832B9C9Df6' ,
37
+ vaultLens : '0xBfD019C90e8Ca8286f9919DF31c25BF989C6bD46' ,
38
+ fromBlock : 46370655 ,
39
+ } ,
40
+ } ;
21
41
22
42
const getApys = async ( ) => {
23
- const result = [ ] ;
43
+ const result = [ ] ;
24
44
25
- const factoryIFace = new ethers . utils . Interface ( factoryAbi ) ;
26
- const lensIFace = new ethers . utils . Interface ( lensAbi ) ;
45
+ const factoryIFace = new ethers . utils . Interface ( factoryAbi ) ;
46
+ const lensIFace = new ethers . utils . Interface ( lensAbi ) ;
27
47
28
- for ( const [ chain , config ] of Object . entries ( chains ) ) {
29
- const currentBlock = await sdk . api . util . getLatestBlock ( chain ) ;
30
- const toBlock = currentBlock . number ;
31
-
32
- // Fetch all pools from factory events
33
- const poolDeployEvents = await sdk . api . util . getLogs ( {
34
- fromBlock : config . fromBlock ,
35
- toBlock : toBlock ,
36
- target : config . factory ,
37
- chain : chain ,
38
- topic : "" ,
39
- keys : [ ] ,
40
- topics : [ factoryIFace . getEventTopic ( 'ProxyCreated' ) ] ,
41
- entireLog : true ,
42
- } ) ;
48
+ for ( const [ chain , config ] of Object . entries ( chains ) ) {
49
+ const currentBlock = await sdk . api . util . getLatestBlock ( chain ) ;
50
+ const toBlock = currentBlock . number ;
43
51
44
- const vaultAddresses = poolDeployEvents . output . map ( ( event ) => {
45
- const decoded = factoryIFace . decodeEventLog ( "ProxyCreated" , event . data , event . topics ) ;
46
- return decoded [ "proxy" ] ;
47
- } ) ;
52
+ // Fetch all pools from factory events
53
+ const poolDeployEvents = await sdk . api . util . getLogs ( {
54
+ fromBlock : config . fromBlock ,
55
+ toBlock : toBlock ,
56
+ target : config . factory ,
57
+ chain : chain ,
58
+ topic : '' ,
59
+ keys : [ ] ,
60
+ topics : [ factoryIFace . getEventTopic ( 'ProxyCreated' ) ] ,
61
+ entireLog : true ,
62
+ } ) ;
48
63
49
- // TODO loop over all vaults to get their info
50
- for ( const vault of vaultAddresses ) {
51
- const vaultInfo = await sdk . api . abi . call ( {
52
- target : config . vaultLens ,
53
- params : [ vault ] ,
54
- abi : lensAbi . find ( ( m ) => m . name === 'getVaultInfoFull' ) ,
55
- chain ,
56
- } ) ;
64
+ const vaultAddresses = poolDeployEvents . output . map ( ( event ) => {
65
+ const decoded = factoryIFace . decodeEventLog (
66
+ 'ProxyCreated' ,
67
+ event . data ,
68
+ event . topics
69
+ ) ;
70
+ return decoded [ 'proxy' ] ;
71
+ } ) ;
57
72
58
- // Only pools with an interest rate
59
- if ( vaultInfo . output . irmInfo . interestRateInfo [ 0 ] && vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . supplyAPY > 0 ) {
73
+ // TODO loop over all vaults to get their info
74
+ for ( const vault of vaultAddresses ) {
75
+ const vaultInfo = await sdk . api . abi . call ( {
76
+ target : config . vaultLens ,
77
+ params : [ vault ] ,
78
+ abi : lensAbi . find ( ( m ) => m . name === 'getVaultInfoFull' ) ,
79
+ chain,
80
+ } ) ;
60
81
61
- const price = (
62
- await axios . get ( `https://coins.llama.fi/prices/current/${ chain } :${ vaultInfo . output . asset } ` )
63
- ) . data . coins [ `${ chain } :${ vaultInfo . output . asset } ` ] . price ;
82
+ // Only pools with an interest rate
83
+ if (
84
+ vaultInfo . output . irmInfo . interestRateInfo [ 0 ] &&
85
+ vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . supplyAPY > 0
86
+ ) {
87
+ const price = (
88
+ await axios . get (
89
+ `https://coins.llama.fi/prices/current/${ chain } :${ vaultInfo . output . asset } `
90
+ )
91
+ ) . data . coins [ `${ chain } :${ vaultInfo . output . asset } ` ] ?. price ;
64
92
65
- const totalSupplied = vaultInfo . output . totalAssets ;
66
- const totalBorrowed = vaultInfo . output . totalBorrowed ;
93
+ const totalSupplied = vaultInfo . output . totalAssets ;
94
+ const totalBorrowed = vaultInfo . output . totalBorrowed ;
67
95
68
- const totalSuppliedUSD = ethers . utils . formatUnits ( totalSupplied , vaultInfo . output . assetDecimals ) * price ;
69
- const totalBorrowedUSD = ethers . utils . formatUnits ( totalBorrowed , vaultInfo . output . assetDecimals ) * price ;
96
+ const totalSuppliedUSD =
97
+ ethers . utils . formatUnits (
98
+ totalSupplied ,
99
+ vaultInfo . output . assetDecimals
100
+ ) * price ;
101
+ const totalBorrowedUSD =
102
+ ethers . utils . formatUnits (
103
+ totalBorrowed ,
104
+ vaultInfo . output . assetDecimals
105
+ ) * price ;
70
106
71
- result . push ( {
72
- pool : vault ,
73
- chain,
74
- project : "euler-v2" ,
75
- symbol : vaultInfo . output . vaultSymbol ,
76
- tvlUsd : totalSuppliedUSD - totalBorrowedUSD ,
77
- totalSupplyUsd : totalSuppliedUSD ,
78
- totalBorrowUsd : totalBorrowedUSD ,
79
- apyBase : Number ( ethers . utils . formatUnits ( vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . supplyAPY , 25 ) ) ,
80
- apyBaseBorrow : Number ( ethers . utils . formatUnits ( vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . borrowAPY , 25 ) ) ,
81
- underlyingTokens : [ vaultInfo . output . asset ] ,
82
- url : `https://app.euler.finance/vault/${ vault } ?network=${ chain } ` ,
83
- } )
84
- }
85
- }
107
+ result . push ( {
108
+ pool : vault ,
109
+ chain,
110
+ project : 'euler-v2' ,
111
+ symbol : vaultInfo . output . assetSymbol ,
112
+ poolMeta : vaultInfo . output . vaultName ,
113
+ tvlUsd : totalSuppliedUSD - totalBorrowedUSD ,
114
+ totalSupplyUsd : totalSuppliedUSD ,
115
+ totalBorrowUsd : totalBorrowedUSD ,
116
+ apyBase : Number (
117
+ ethers . utils . formatUnits (
118
+ vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . supplyAPY ,
119
+ 25
120
+ )
121
+ ) ,
122
+ apyBaseBorrow : Number (
123
+ ethers . utils . formatUnits (
124
+ vaultInfo . output . irmInfo . interestRateInfo [ 0 ] . borrowAPY ,
125
+ 25
126
+ )
127
+ ) ,
128
+ underlyingTokens : [ vaultInfo . output . asset ] ,
129
+ url : `https://app.euler.finance/vault/${ vault } ?network=${ chain } ` ,
130
+ } ) ;
131
+ }
86
132
}
87
- return result ;
88
- }
89
-
90
-
133
+ }
134
+ return result ;
135
+ } ;
91
136
92
137
module . exports = {
93
- timetravel : false ,
94
- apy : getApys ,
95
- }
138
+ timetravel : false ,
139
+ apy : getApys ,
140
+ } ;
0 commit comments