@1delta/margin-fetcher 0.0.20 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/prices/defillama/index.d.ts.map +1 -1
- package/dist/prices/defillama/index.js +14 -1
- package/dist/prices/main-prices/addresses/chainlink.d.ts.map +1 -1
- package/dist/prices/main-prices/addresses/chainlink.js +26 -25
- package/dist/prices/main-prices/fetchOracleData.d.ts.map +1 -1
- package/dist/prices/main-prices/fetchOracleData.js +94 -76
- package/dist/yields/index.js +1 -1
- package/package.json +1 -1
- package/src/prices/defillama/index.ts +16 -2
- package/src/prices/main-prices/addresses/chainlink.ts +62 -37
- package/src/prices/main-prices/fetchOracleData.ts +133 -122
- package/src/yields/index.ts +1 -1
- package/test/lenderData.test.ts +3 -3
- package/test/mainPrices.test.ts +2 -2
- package/test/userDataCompound.test.ts +96 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prices/defillama/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prices/defillama/index.ts"],"names":[],"mappings":"AA+OA,wBAAsB,kBAAkB,iBAwCvC;AAED,wBAAsB,sBAAsB,iBA4C3C"}
|
|
@@ -103,8 +103,12 @@ const prefixSonic = 'sonic:';
|
|
|
103
103
|
const WS = '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38';
|
|
104
104
|
const prefixFantom = 'fantom:';
|
|
105
105
|
const WFTM = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83';
|
|
106
|
+
const prefixPolygon = 'polygon:';
|
|
107
|
+
const TRUMATIC = '0xf33687811f3ad0cd6b48dd4b39f9f977bd7165a2';
|
|
106
108
|
const prefixHyperEVM = 'hyperliquid:';
|
|
107
109
|
const WYPE = '0x5555555555555555555555555555555555555555';
|
|
110
|
+
const WSTHYPE = '0x94e8396e0869c9f2200760af0621afd240e1cf38';
|
|
111
|
+
const kHYPE = '0xfd739d4e423301ce9385c1fb8850539d657c296d';
|
|
108
112
|
// const prefixKaia = 'kaia:'
|
|
109
113
|
// const WKAIA = '0x19aac5f612f524b754ca7e7c41cbfa2e981a4432'
|
|
110
114
|
const datasAvalanche = [WAVAX, SAVAX].map((d) => prefixAvalanche + d).join(',');
|
|
@@ -116,8 +120,11 @@ const datasBase = [AERO].map((d) => prefixBase + d).join(',');
|
|
|
116
120
|
const datasCore = [WCORE].map((d) => prefixCore + d).join(',');
|
|
117
121
|
const datasMetis = [WMETIS].map((d) => prefixMetis + d).join(',');
|
|
118
122
|
const datasFantom = [WFTM].map((d) => prefixFantom + d).join(',');
|
|
123
|
+
const datasPolygon = [TRUMATIC].map((d) => prefixPolygon + d).join(',');
|
|
119
124
|
const datasSonic = [WS].map((d) => prefixSonic + d).join(',');
|
|
120
|
-
const datasHyperEvm = [WYPE
|
|
125
|
+
const datasHyperEvm = [WYPE, WSTHYPE, kHYPE]
|
|
126
|
+
.map((d) => prefixHyperEVM + d)
|
|
127
|
+
.join(',');
|
|
121
128
|
// const datasKaia = [WKAIA].map((d) => prefixKaia + d).join(',')
|
|
122
129
|
const URL = `https://coins.llama.fi/prices/current/${[
|
|
123
130
|
datasEthereum,
|
|
@@ -131,6 +138,7 @@ const URL = `https://coins.llama.fi/prices/current/${[
|
|
|
131
138
|
datasHyperEvm,
|
|
132
139
|
// datasKaia,
|
|
133
140
|
datasSonic, //
|
|
141
|
+
datasPolygon,
|
|
134
142
|
].join(',')}?searchWidth=4h`;
|
|
135
143
|
const URL_HIST = (ref) => `https://coins.llama.fi/prices/historical/${ref}/${[
|
|
136
144
|
datasEthereum,
|
|
@@ -143,6 +151,7 @@ const URL_HIST = (ref) => `https://coins.llama.fi/prices/historical/${ref}/${[
|
|
|
143
151
|
datasFantom,
|
|
144
152
|
// datasKaia,
|
|
145
153
|
datasHyperEvm,
|
|
154
|
+
datasPolygon,
|
|
146
155
|
datasSonic, //
|
|
147
156
|
].join(',')}?searchWidth=4h`;
|
|
148
157
|
const SYMBOL_MAP = {
|
|
@@ -206,6 +215,9 @@ const SYMBOL_MAP = {
|
|
|
206
215
|
wkaia: 'KAIA',
|
|
207
216
|
savax: 'SAVAX',
|
|
208
217
|
whype: 'WHYPE',
|
|
218
|
+
khype: 'Kinetiq Staked HYPE::kHYPE',
|
|
219
|
+
wsthype: 'Staked HYPE Shares::WSTHYPE',
|
|
220
|
+
trumatic: 'TRUMATIC',
|
|
209
221
|
};
|
|
210
222
|
export async function fetchDefillamaData() {
|
|
211
223
|
try {
|
|
@@ -270,6 +282,7 @@ export async function fetchDefillamaHistData() {
|
|
|
270
282
|
histPrices['SUBTC'] = histPrices['WBTC'];
|
|
271
283
|
histPrices['IBTC'] = histPrices['WBTC'];
|
|
272
284
|
histPrices['ENZOBTC'] = histPrices['WBTC'];
|
|
285
|
+
histPrices['CBBTC'] = histPrices['WBTC'];
|
|
273
286
|
histPrices['PUMPBTC'] = histPrices['WBTC'];
|
|
274
287
|
return histPrices;
|
|
275
288
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chainlink.d.ts","sourceRoot":"","sources":["../../../../src/prices/main-prices/addresses/chainlink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chainlink.d.ts","sourceRoot":"","sources":["../../../../src/prices/main-prices/addresses/chainlink.ts"],"names":[],"mappings":"AAEA,oBAAY,0BAA0B;IACpC,OAAO,IAAI;IACX,MAAM,IAAA;IACN,SAAS,IAAA;IACT,SAAS,IAAA;IACT,eAAe,IAAA;CAChB;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4K5B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAAM,EAKxD,CAAA;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAukBpC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Chain } from
|
|
1
|
+
import { Chain } from '@1delta/asset-registry';
|
|
2
2
|
export var ChainlinkAggregatorIndexes;
|
|
3
3
|
(function (ChainlinkAggregatorIndexes) {
|
|
4
4
|
ChainlinkAggregatorIndexes[ChainlinkAggregatorIndexes["roundId"] = 0] = "roundId";
|
|
@@ -9,7 +9,7 @@ export var ChainlinkAggregatorIndexes;
|
|
|
9
9
|
})(ChainlinkAggregatorIndexes || (ChainlinkAggregatorIndexes = {}));
|
|
10
10
|
export const chainlinkOracles = {
|
|
11
11
|
'MIMATIC-USD': {
|
|
12
|
-
[Chain.POLYGON_MAINNET]: '0xd8d483d813547cfb624b8dc33a00f2fcbcd2d428'
|
|
12
|
+
[Chain.POLYGON_MAINNET]: '0xd8d483d813547cfb624b8dc33a00f2fcbcd2d428',
|
|
13
13
|
},
|
|
14
14
|
'BTC-ETH': {
|
|
15
15
|
[Chain.POLYGON_MAINNET]: '0x19b0F0833C78c0848109E3842D34d2fDF2cA69BA',
|
|
@@ -30,34 +30,34 @@ export const chainlinkOracles = {
|
|
|
30
30
|
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e',
|
|
31
31
|
},
|
|
32
32
|
'BNB-USD': {
|
|
33
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE'
|
|
33
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE',
|
|
34
34
|
},
|
|
35
35
|
'CAKE-USD': {
|
|
36
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xB6064eD41d4f67e353768aA239cA86f4F73665a1'
|
|
36
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xB6064eD41d4f67e353768aA239cA86f4F73665a1',
|
|
37
37
|
},
|
|
38
38
|
'DOGE-USD': {
|
|
39
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x3AB0A0d137D4F946fBB19eecc6e92E64660231C8'
|
|
39
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x3AB0A0d137D4F946fBB19eecc6e92E64660231C8',
|
|
40
40
|
},
|
|
41
41
|
'DOT-USD': {
|
|
42
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xC333eb0086309a16aa7c8308DfD32c8BBA0a2592'
|
|
42
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xC333eb0086309a16aa7c8308DfD32c8BBA0a2592',
|
|
43
43
|
},
|
|
44
44
|
'BUSD-USD': {
|
|
45
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xcBb98864Ef56E9042e7d2efef76141f15731B82f'
|
|
45
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xcBb98864Ef56E9042e7d2efef76141f15731B82f',
|
|
46
46
|
},
|
|
47
47
|
'BETH-USD': {
|
|
48
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x2A3796273d47c4eD363b361D3AEFb7F7E2A13782'
|
|
48
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x2A3796273d47c4eD363b361D3AEFb7F7E2A13782',
|
|
49
49
|
},
|
|
50
50
|
'FIL-USD': {
|
|
51
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xE5dbFD9003bFf9dF5feB2f4F445Ca00fb121fb83'
|
|
51
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xE5dbFD9003bFf9dF5feB2f4F445Ca00fb121fb83',
|
|
52
52
|
},
|
|
53
53
|
'LTC-USD': {
|
|
54
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x74E72F37A8c415c8f1a98Ed42E78Ff997435791D'
|
|
54
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x74E72F37A8c415c8f1a98Ed42E78Ff997435791D',
|
|
55
55
|
},
|
|
56
56
|
'SXP-USD': {
|
|
57
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xE188A9875af525d25334d75F3327863B2b8cd0F1'
|
|
57
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xE188A9875af525d25334d75F3327863B2b8cd0F1',
|
|
58
58
|
},
|
|
59
59
|
'TRX-USD': {
|
|
60
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xF4C5e535756D11994fCBB12Ba8adD0192D9b88be'
|
|
60
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xF4C5e535756D11994fCBB12Ba8adD0192D9b88be',
|
|
61
61
|
},
|
|
62
62
|
'JPY-USD': {
|
|
63
63
|
[Chain.POLYGON_MAINNET]: '0xD647a6fC9BC6402301583C91decC5989d8Bc382D',
|
|
@@ -68,14 +68,14 @@ export const chainlinkOracles = {
|
|
|
68
68
|
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xca236E327F629f9Fc2c30A4E95775EbF0B89fac8',
|
|
69
69
|
},
|
|
70
70
|
'TUSD-USD': {
|
|
71
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xa3334A9762090E827413A7495AfeCE76F41dFc06'
|
|
71
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xa3334A9762090E827413A7495AfeCE76F41dFc06',
|
|
72
72
|
},
|
|
73
73
|
'LINK-MATIC': {
|
|
74
74
|
[Chain.POLYGON_MAINNET]: '0x5787BefDc0ECd210Dfa948264631CD53E68F7802',
|
|
75
75
|
},
|
|
76
76
|
'MATIC-USD': {
|
|
77
77
|
[Chain.POLYGON_MAINNET]: '0xAB594600376Ec9fD91F8e885dADF0CE036862dE0',
|
|
78
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x7CA57b0cA6367191c94C8914d7Df09A57655905f'
|
|
78
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x7CA57b0cA6367191c94C8914d7Df09A57655905f',
|
|
79
79
|
},
|
|
80
80
|
'MATICX-USD': {
|
|
81
81
|
[Chain.POLYGON_MAINNET]: '0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403',
|
|
@@ -94,16 +94,16 @@ export const chainlinkOracles = {
|
|
|
94
94
|
'USDT-USD': {
|
|
95
95
|
[Chain.ETHEREUM_MAINNET]: '0x3E7d1eAB13ad0104d2750B8863b489D65364e32D',
|
|
96
96
|
[Chain.POLYGON_MAINNET]: '0x0a6513e40db6eb1b165753ad52e80663aea50545',
|
|
97
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xB97Ad0E74fa7d920791E90258A6E2085088b4320'
|
|
97
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xB97Ad0E74fa7d920791E90258A6E2085088b4320',
|
|
98
98
|
},
|
|
99
99
|
'VAI-USD': {
|
|
100
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x058316f8Bb13aCD442ee7A216C7b60CFB4Ea1B53'
|
|
100
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x058316f8Bb13aCD442ee7A216C7b60CFB4Ea1B53',
|
|
101
101
|
},
|
|
102
102
|
'XRP-USD': {
|
|
103
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x93A67D414896A280bF8FFB3b389fE3686E014fda'
|
|
103
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x93A67D414896A280bF8FFB3b389fE3686E014fda',
|
|
104
104
|
},
|
|
105
105
|
'WIN-USD': {
|
|
106
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x9e7377E194E41d63795907c92c3EB351a2eb0233'
|
|
106
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x9e7377E194E41d63795907c92c3EB351a2eb0233',
|
|
107
107
|
},
|
|
108
108
|
'EUR-USD': {
|
|
109
109
|
[Chain.POLYGON_MAINNET]: '0x73366Fe0AA0Ded304479862808e02506FE556a98',
|
|
@@ -114,13 +114,13 @@ export const chainlinkOracles = {
|
|
|
114
114
|
},
|
|
115
115
|
'AAVE-USD': {
|
|
116
116
|
[Chain.ETHEREUM_MAINNET]: '0x547a514d5e3769680Ce22B2361c10Ea13619e8a9',
|
|
117
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xA8357BF572460fC40f4B0aCacbB2a6A61c89f475'
|
|
117
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xA8357BF572460fC40f4B0aCacbB2a6A61c89f475',
|
|
118
118
|
},
|
|
119
119
|
'ADA-USD': {
|
|
120
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xa767f745331D267c7751297D982b050c93985627'
|
|
120
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xa767f745331D267c7751297D982b050c93985627',
|
|
121
121
|
},
|
|
122
122
|
'BCH-USD': {
|
|
123
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x43d80f616DAf0b0B42a928EeD32147dC59027D41'
|
|
123
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0x43d80f616DAf0b0B42a928EeD32147dC59027D41',
|
|
124
124
|
},
|
|
125
125
|
'BAT-ETH': {
|
|
126
126
|
[Chain.ETHEREUM_MAINNET]: '0x0d16d4528239e9ee52fa531af613AcdB23D88c94',
|
|
@@ -128,7 +128,7 @@ export const chainlinkOracles = {
|
|
|
128
128
|
'UNI-USD': {
|
|
129
129
|
[Chain.ETHEREUM_MAINNET]: '0x553303d460EE0afB37EdFf9bE42922D8FF63220e',
|
|
130
130
|
[Chain.POLYGON_MAINNET]: '0xdf0Fb4e4F928d2dCB76f438575fDD8682386e13C',
|
|
131
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xb57f259E7C24e56a1dA00F66b55A5640d9f9E7e4'
|
|
131
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]: '0xb57f259E7C24e56a1dA00F66b55A5640d9f9E7e4',
|
|
132
132
|
},
|
|
133
133
|
'YFI-USD': {
|
|
134
134
|
[Chain.ETHEREUM_MAINNET]: '0xA027702dbb89fbd58938e4324ac03B58d812b0E1',
|
|
@@ -144,19 +144,20 @@ export const chainlinkOracles = {
|
|
|
144
144
|
},
|
|
145
145
|
'MKR-USD': {
|
|
146
146
|
[Chain.ETHEREUM_MAINNET]: '0xec1D1B3b0443256cc3860e24a46F108e699484Aa',
|
|
147
|
-
[Chain.POLYGON_MAINNET]: '0xa070427bF5bA5709f70e98b94Cb2F435a242C46C'
|
|
147
|
+
[Chain.POLYGON_MAINNET]: '0xa070427bF5bA5709f70e98b94Cb2F435a242C46C',
|
|
148
148
|
},
|
|
149
149
|
'COMP-USD': {
|
|
150
150
|
[Chain.ETHEREUM_MAINNET]: '0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5',
|
|
151
|
-
[Chain.POLYGON_MAINNET]: '0x2A8758b7257102461BC958279054e372C2b1bDE6'
|
|
151
|
+
[Chain.POLYGON_MAINNET]: '0x2A8758b7257102461BC958279054e372C2b1bDE6',
|
|
152
152
|
},
|
|
153
153
|
'WSTETH-ETH': {
|
|
154
154
|
[Chain.POLYGON_MAINNET]: '0x10f964234cae09cB6a9854B56FF7D4F38Cda5E6a',
|
|
155
155
|
},
|
|
156
156
|
};
|
|
157
157
|
export const getChainLinkKeys = (chainId) => {
|
|
158
|
+
return Object.keys(chainlinkOracles).filter(
|
|
158
159
|
// @ts-ignore
|
|
159
|
-
|
|
160
|
+
(x) => chainlinkOracles[x][chainId] !== undefined);
|
|
160
161
|
};
|
|
161
162
|
export const chainlinkOraclesEthereum = {
|
|
162
163
|
'1INCH-USD': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,MAY7D,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,EACb,eAAe,MAAM,EACrB,SAAS,MAAM,KACd,MAYF,CAAA;AAOD,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAID;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAAE,EAClB,cAAc,oBAAoB,KACjC,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"fetchOracleData.d.ts","sourceRoot":"","sources":["../../../src/prices/main-prices/fetchOracleData.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAY,KAAG,MAY7D,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,EACb,eAAe,MAAM,EACrB,SAAS,MAAM,KACd,MAYF,CAAA;AAOD,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAID;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAAE,EAClB,cAAc,oBAAoB,KACjC,OAAO,CAAC,UAAU,CA8JpB,CAAA"}
|
|
@@ -44,97 +44,117 @@ const RWA_DYNAMIC_ORACLE = '0xA96abbe61AfEdEB0D14a20440Ae7100D9aB4882f';
|
|
|
44
44
|
* Fetches Aave and uniswap V2 oracle data
|
|
45
45
|
*/
|
|
46
46
|
export const fetchMainPrices = async (chainIds, getEvmClient) => {
|
|
47
|
-
|
|
47
|
+
const multicallPromises = chainIds.map(async (chainId) => {
|
|
48
48
|
const aaveForks = AAVES_PER_CHAIN[chainId];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
const reservesToQuery = aaveForks?.map((a) => ({
|
|
50
|
+
fork: a,
|
|
51
|
+
assets: getAaveAssets(chainId, a),
|
|
52
|
+
})) ?? [];
|
|
53
|
+
const handled = new Set();
|
|
54
|
+
const queries = [];
|
|
55
|
+
for (const e of reservesToQuery) {
|
|
56
|
+
const newAssets = e.assets.filter((a) => !handled.has(a));
|
|
57
|
+
if (newAssets.length > 0) {
|
|
55
58
|
queries.push({
|
|
56
|
-
assets:
|
|
59
|
+
assets: newAssets,
|
|
57
60
|
// @ts-ignore
|
|
58
61
|
oracle: AAVE_STYLE_ORACLES[e.fork][chainId],
|
|
59
62
|
fork: e.fork,
|
|
60
63
|
});
|
|
61
|
-
|
|
64
|
+
newAssets.forEach((a) => handled.add(a));
|
|
62
65
|
}
|
|
63
|
-
}
|
|
64
|
-
const morphoQueries = (MrophoOracles[chainId] ?? []).filter((a) => !handled.
|
|
66
|
+
}
|
|
67
|
+
const morphoQueries = (MrophoOracles[chainId] ?? []).filter((a) => !handled.has(a.collateralAsset) || !handled.has(a.loanAsset));
|
|
65
68
|
const morphoCalls = getMorphoCalls(morphoQueries);
|
|
66
|
-
const
|
|
67
|
-
const [
|
|
68
|
-
const
|
|
69
|
+
const aaveCalls = getAaveCalls(queries);
|
|
70
|
+
const [chainlinkCalls, chainlinkNames] = getChainLinkCalls(chainId);
|
|
71
|
+
const uniswapCalls = getUniswapV2Calls(chainId);
|
|
69
72
|
const [api3Calls, api3Names] = getApi3Calls(chainId);
|
|
70
73
|
const [rwaCalls, rwaNames] = getRWADynamicOracleCalls(chainId);
|
|
71
|
-
|
|
74
|
+
const allCalls = [
|
|
75
|
+
...chainlinkCalls,
|
|
76
|
+
...aaveCalls,
|
|
77
|
+
...uniswapCalls,
|
|
78
|
+
...api3Calls,
|
|
79
|
+
...rwaCalls,
|
|
80
|
+
...morphoCalls,
|
|
81
|
+
];
|
|
82
|
+
const abis = [
|
|
72
83
|
...ChainLinkAggregatorAbi,
|
|
73
84
|
...UniswapV2PairAbi,
|
|
74
85
|
...AaveOracleAbi,
|
|
75
86
|
...Api3OracleAbi,
|
|
76
87
|
...RWADynamicOracleAbi,
|
|
77
88
|
...ProxyOracleAbi,
|
|
78
|
-
]
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
callAave.length +
|
|
94
|
-
uniswapV2Calls.length +
|
|
95
|
-
api3Calls.length);
|
|
96
|
-
const uniswapData = parseUniswapV2results(uniswapResult, chainId);
|
|
97
|
-
const api3Data = parseApi3Results(chainId, api3Result, api3Names);
|
|
98
|
-
const rwaResult = multicallResult.slice(callsChainLink.length +
|
|
99
|
-
callAave.length +
|
|
100
|
-
uniswapV2Calls.length +
|
|
101
|
-
api3Calls.length, callsChainLink.length +
|
|
102
|
-
callAave.length +
|
|
103
|
-
uniswapV2Calls.length +
|
|
104
|
-
api3Calls.length +
|
|
105
|
-
rwaCalls.length);
|
|
106
|
-
const rwaData = parseRWADynamicOracleResults(chainId, rwaResult, rwaNames);
|
|
107
|
-
const morphoResult = multicallResult.slice(callsChainLink.length +
|
|
108
|
-
callAave.length +
|
|
109
|
-
uniswapV2Calls.length +
|
|
110
|
-
api3Calls.length +
|
|
111
|
-
rwaCalls.length, callsChainLink.length +
|
|
112
|
-
callAave.length +
|
|
113
|
-
uniswapV2Calls.length +
|
|
114
|
-
api3Calls.length +
|
|
115
|
-
morphoCalls.length);
|
|
116
|
-
const prices = {
|
|
117
|
-
...uniswapData,
|
|
118
|
-
...aaveData,
|
|
119
|
-
...chainLinkData,
|
|
120
|
-
...api3Data,
|
|
121
|
-
...rwaData,
|
|
122
|
-
};
|
|
123
|
-
const morphoData = parseMorphoResults(chainId, morphoResult, morphoQueries, prices);
|
|
124
|
-
return {
|
|
125
|
-
...prices,
|
|
126
|
-
...morphoData,
|
|
127
|
-
};
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
promises.push(fetchDefillamaData());
|
|
131
|
-
promises.push(fetchPendlePrices());
|
|
132
|
-
const result = await Promise.all(promises);
|
|
133
|
-
let data = {};
|
|
134
|
-
result.forEach((r) => {
|
|
135
|
-
data = { ...data, ...r };
|
|
89
|
+
];
|
|
90
|
+
const result = await multicallViemAbiArray(chainId, abis, allCalls, getEvmClient);
|
|
91
|
+
return {
|
|
92
|
+
chainId,
|
|
93
|
+
result,
|
|
94
|
+
meta: {
|
|
95
|
+
queries,
|
|
96
|
+
chainlink: { calls: chainlinkCalls, names: chainlinkNames },
|
|
97
|
+
api3: { calls: api3Calls, names: api3Names },
|
|
98
|
+
rwa: { calls: rwaCalls, names: rwaNames },
|
|
99
|
+
morpho: { queries: morphoQueries },
|
|
100
|
+
uniswapCalls,
|
|
101
|
+
aaveCalls,
|
|
102
|
+
},
|
|
103
|
+
};
|
|
136
104
|
});
|
|
137
|
-
|
|
105
|
+
const otherDataPromises = [fetchDefillamaData(), fetchPendlePrices()];
|
|
106
|
+
const [chainResults, ...otherResults] = await Promise.all([
|
|
107
|
+
Promise.all(multicallPromises),
|
|
108
|
+
...otherDataPromises,
|
|
109
|
+
]);
|
|
110
|
+
let allPrices = {};
|
|
111
|
+
// Parse all except morpho first
|
|
112
|
+
for (const { chainId, result, meta: { queries, chainlink, api3, rwa, uniswapCalls, aaveCalls }, } of chainResults) {
|
|
113
|
+
let offset = 0;
|
|
114
|
+
const chainlinkSlice = result.slice(offset, offset + chainlink.calls.length);
|
|
115
|
+
const chainlinkData = parseChainLinkResults(chainId, chainlinkSlice, chainlink.names);
|
|
116
|
+
offset += chainlink.calls.length;
|
|
117
|
+
const aaveSlice = result.slice(offset, offset + aaveCalls.length);
|
|
118
|
+
const aaveData = parseAaveResults(chainId, aaveSlice, queries);
|
|
119
|
+
offset += aaveCalls.length;
|
|
120
|
+
const uniswapSlice = result.slice(offset, offset + uniswapCalls.length);
|
|
121
|
+
const uniswapData = parseUniswapV2results(uniswapSlice, chainId);
|
|
122
|
+
offset += uniswapCalls.length;
|
|
123
|
+
const api3Slice = result.slice(offset, offset + api3.calls.length);
|
|
124
|
+
const api3Data = parseApi3Results(chainId, api3Slice, api3.names);
|
|
125
|
+
offset += api3.calls.length;
|
|
126
|
+
const rwaSlice = result.slice(offset, offset + rwa.calls.length);
|
|
127
|
+
const rwaData = parseRWADynamicOracleResults(chainId, rwaSlice, rwa.names);
|
|
128
|
+
offset += rwa.calls.length;
|
|
129
|
+
allPrices = {
|
|
130
|
+
...allPrices,
|
|
131
|
+
...chainlinkData,
|
|
132
|
+
...aaveData,
|
|
133
|
+
...uniswapData,
|
|
134
|
+
...api3Data,
|
|
135
|
+
...rwaData,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
allPrices = { ...allPrices, ...otherResults[0], ...otherResults[1] };
|
|
139
|
+
// Parse morpho data (needs allPrices)
|
|
140
|
+
for (const { chainId, result, meta: { morpho, chainlink, aaveCalls, uniswapCalls, api3, rwa }, } of chainResults) {
|
|
141
|
+
const morphoOffset = chainlink.calls.length +
|
|
142
|
+
aaveCalls.length +
|
|
143
|
+
uniswapCalls.length +
|
|
144
|
+
api3.calls.length +
|
|
145
|
+
rwa.calls.length;
|
|
146
|
+
const morphoResult = result.slice(morphoOffset);
|
|
147
|
+
const morphoData = parseMorphoResults(chainId, morphoResult, morpho.queries, allPrices);
|
|
148
|
+
allPrices = {
|
|
149
|
+
...allPrices,
|
|
150
|
+
...morphoData,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Merge with defillama + pendle prices
|
|
154
|
+
for (const r of otherResults) {
|
|
155
|
+
allPrices = { ...allPrices, ...r };
|
|
156
|
+
}
|
|
157
|
+
return allPrices;
|
|
138
158
|
};
|
|
139
159
|
/**
|
|
140
160
|
* Gets the calls foir the uniswap pools
|
|
@@ -296,8 +316,6 @@ const parseMorphoResults = (chainId, data, queries, donePrices = {}) => {
|
|
|
296
316
|
const oracleIdCollateral = ASSET_META[chainId][collateralAsset]?.assetGroup ??
|
|
297
317
|
chainId + '-' + collateralAsset;
|
|
298
318
|
const collateralPrice = donePrices[oracleIdCollateral];
|
|
299
|
-
console.log('debtPrice', oracleId, debtPrice);
|
|
300
|
-
console.log('collateralPrice', oracleIdCollateral, collateralPrice);
|
|
301
319
|
const priceDebtToCollateral = formatMorphoPrice(d.toString(), loanAssetDecimals, collateralAssetDecimals);
|
|
302
320
|
if (debtPrice) {
|
|
303
321
|
if (!prices[oracleIdCollateral])
|
package/dist/yields/index.js
CHANGED
|
@@ -114,7 +114,7 @@ export const fetchGeneralYields = async () => {
|
|
|
114
114
|
const res = await fetch(FeedData.HYPE).then((r) => r.json());
|
|
115
115
|
return {
|
|
116
116
|
[wstHype]: res.wstHYPE.latestApr,
|
|
117
|
-
[
|
|
117
|
+
[kHYPE]: res.kHYPE.latestApr,
|
|
118
118
|
};
|
|
119
119
|
});
|
|
120
120
|
const cbethPromise = safeFetch('CBETH', async () => {
|
package/package.json
CHANGED
|
@@ -113,9 +113,14 @@ const WS = '0x039e2fb66102314ce7b64ce5ce3e5183bc94ad38'
|
|
|
113
113
|
const prefixFantom = 'fantom:'
|
|
114
114
|
const WFTM = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83'
|
|
115
115
|
|
|
116
|
+
const prefixPolygon = 'polygon:'
|
|
117
|
+
const TRUMATIC = '0xf33687811f3ad0cd6b48dd4b39f9f977bd7165a2'
|
|
118
|
+
|
|
116
119
|
const prefixHyperEVM = 'hyperliquid:'
|
|
117
120
|
|
|
118
121
|
const WYPE = '0x5555555555555555555555555555555555555555'
|
|
122
|
+
const WSTHYPE = '0x94e8396e0869c9f2200760af0621afd240e1cf38'
|
|
123
|
+
const kHYPE = '0xfd739d4e423301ce9385c1fb8850539d657c296d'
|
|
119
124
|
|
|
120
125
|
// const prefixKaia = 'kaia:'
|
|
121
126
|
// const WKAIA = '0x19aac5f612f524b754ca7e7c41cbfa2e981a4432'
|
|
@@ -129,8 +134,11 @@ const datasBase = [AERO].map((d) => prefixBase + d).join(',')
|
|
|
129
134
|
const datasCore = [WCORE].map((d) => prefixCore + d).join(',')
|
|
130
135
|
const datasMetis = [WMETIS].map((d) => prefixMetis + d).join(',')
|
|
131
136
|
const datasFantom = [WFTM].map((d) => prefixFantom + d).join(',')
|
|
137
|
+
const datasPolygon = [TRUMATIC].map((d) => prefixPolygon + d).join(',')
|
|
132
138
|
const datasSonic = [WS].map((d) => prefixSonic + d).join(',')
|
|
133
|
-
const datasHyperEvm = [WYPE
|
|
139
|
+
const datasHyperEvm = [WYPE, WSTHYPE, kHYPE]
|
|
140
|
+
.map((d) => prefixHyperEVM + d)
|
|
141
|
+
.join(',')
|
|
134
142
|
// const datasKaia = [WKAIA].map((d) => prefixKaia + d).join(',')
|
|
135
143
|
|
|
136
144
|
const URL = `https://coins.llama.fi/prices/current/${[
|
|
@@ -143,8 +151,9 @@ const URL = `https://coins.llama.fi/prices/current/${[
|
|
|
143
151
|
datasMetis,
|
|
144
152
|
datasFantom,
|
|
145
153
|
datasHyperEvm,
|
|
146
|
-
// datasKaia,
|
|
154
|
+
// datasKaia,
|
|
147
155
|
datasSonic, //
|
|
156
|
+
datasPolygon,
|
|
148
157
|
].join(',')}?searchWidth=4h`
|
|
149
158
|
const URL_HIST = (ref: number) =>
|
|
150
159
|
`https://coins.llama.fi/prices/historical/${ref}/${[
|
|
@@ -158,6 +167,7 @@ const URL_HIST = (ref: number) =>
|
|
|
158
167
|
datasFantom,
|
|
159
168
|
// datasKaia,
|
|
160
169
|
datasHyperEvm,
|
|
170
|
+
datasPolygon,
|
|
161
171
|
datasSonic, //
|
|
162
172
|
].join(',')}?searchWidth=4h`
|
|
163
173
|
|
|
@@ -222,6 +232,9 @@ const SYMBOL_MAP = {
|
|
|
222
232
|
wkaia: 'KAIA',
|
|
223
233
|
savax: 'SAVAX',
|
|
224
234
|
whype: 'WHYPE',
|
|
235
|
+
khype: 'Kinetiq Staked HYPE::kHYPE',
|
|
236
|
+
wsthype: 'Staked HYPE Shares::WSTHYPE',
|
|
237
|
+
trumatic: 'TRUMATIC',
|
|
225
238
|
}
|
|
226
239
|
|
|
227
240
|
export async function fetchDefillamaData() {
|
|
@@ -302,6 +315,7 @@ export async function fetchDefillamaHistData() {
|
|
|
302
315
|
histPrices['SUBTC'] = histPrices['WBTC']
|
|
303
316
|
histPrices['IBTC'] = histPrices['WBTC']
|
|
304
317
|
histPrices['ENZOBTC'] = histPrices['WBTC']
|
|
318
|
+
histPrices['CBBTC'] = histPrices['WBTC']
|
|
305
319
|
histPrices['PUMPBTC'] = histPrices['WBTC']
|
|
306
320
|
|
|
307
321
|
return histPrices
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { Chain } from
|
|
2
|
-
|
|
1
|
+
import { Chain } from '@1delta/asset-registry'
|
|
3
2
|
|
|
4
3
|
export enum ChainlinkAggregatorIndexes {
|
|
5
4
|
roundId = 0,
|
|
6
5
|
answer,
|
|
7
6
|
startedAt,
|
|
8
7
|
updatedAt,
|
|
9
|
-
answeredInRound
|
|
8
|
+
answeredInRound,
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
|
|
13
11
|
export const chainlinkOracles = {
|
|
14
12
|
'MIMATIC-USD': {
|
|
15
|
-
[Chain.POLYGON_MAINNET]: '0xd8d483d813547cfb624b8dc33a00f2fcbcd2d428'
|
|
13
|
+
[Chain.POLYGON_MAINNET]: '0xd8d483d813547cfb624b8dc33a00f2fcbcd2d428',
|
|
16
14
|
},
|
|
17
15
|
'BTC-ETH': {
|
|
18
16
|
[Chain.POLYGON_MAINNET]: '0x19b0F0833C78c0848109E3842D34d2fDF2cA69BA',
|
|
@@ -20,47 +18,60 @@ export const chainlinkOracles = {
|
|
|
20
18
|
'BTC-USD': {
|
|
21
19
|
[Chain.POLYGON_MAINNET]: '0xc907E116054Ad103354f2D350FD2514433D57F6f',
|
|
22
20
|
[Chain.ETHEREUM_MAINNET]: '0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c',
|
|
23
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
21
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
22
|
+
'0x264990fbd0A4796A3E3d8E37C4d5F87a3aCa5Ebf',
|
|
24
23
|
},
|
|
25
24
|
'DAI-USD': {
|
|
26
25
|
[Chain.POLYGON_MAINNET]: '0x4746DeC9e833A82EC7C2C1356372CcF2cfcD2F3D',
|
|
27
26
|
[Chain.ETHEREUM_MAINNET]: '0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9',
|
|
28
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
27
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
28
|
+
'0x132d3C0B1D2cEa0BC552588063bdBb210FDeecfA',
|
|
29
29
|
},
|
|
30
30
|
'ETH-USD': {
|
|
31
31
|
[Chain.POLYGON_MAINNET]: '0xF9680D99D6C9589e2a93a78A04A279e509205945',
|
|
32
32
|
[Chain.ETHEREUM_MAINNET]: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419',
|
|
33
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
33
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
34
|
+
'0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e',
|
|
34
35
|
},
|
|
35
36
|
'BNB-USD': {
|
|
36
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
37
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
38
|
+
'0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE',
|
|
37
39
|
},
|
|
38
40
|
'CAKE-USD': {
|
|
39
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
41
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
42
|
+
'0xB6064eD41d4f67e353768aA239cA86f4F73665a1',
|
|
40
43
|
},
|
|
41
44
|
'DOGE-USD': {
|
|
42
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
45
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
46
|
+
'0x3AB0A0d137D4F946fBB19eecc6e92E64660231C8',
|
|
43
47
|
},
|
|
44
48
|
'DOT-USD': {
|
|
45
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
49
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
50
|
+
'0xC333eb0086309a16aa7c8308DfD32c8BBA0a2592',
|
|
46
51
|
},
|
|
47
52
|
'BUSD-USD': {
|
|
48
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
53
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
54
|
+
'0xcBb98864Ef56E9042e7d2efef76141f15731B82f',
|
|
49
55
|
},
|
|
50
56
|
'BETH-USD': {
|
|
51
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
57
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
58
|
+
'0x2A3796273d47c4eD363b361D3AEFb7F7E2A13782',
|
|
52
59
|
},
|
|
53
60
|
'FIL-USD': {
|
|
54
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
61
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
62
|
+
'0xE5dbFD9003bFf9dF5feB2f4F445Ca00fb121fb83',
|
|
55
63
|
},
|
|
56
64
|
'LTC-USD': {
|
|
57
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
65
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
66
|
+
'0x74E72F37A8c415c8f1a98Ed42E78Ff997435791D',
|
|
58
67
|
},
|
|
59
68
|
'SXP-USD': {
|
|
60
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
69
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
70
|
+
'0xE188A9875af525d25334d75F3327863B2b8cd0F1',
|
|
61
71
|
},
|
|
62
72
|
'TRX-USD': {
|
|
63
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
73
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
74
|
+
'0xF4C5e535756D11994fCBB12Ba8adD0192D9b88be',
|
|
64
75
|
},
|
|
65
76
|
'JPY-USD': {
|
|
66
77
|
[Chain.POLYGON_MAINNET]: '0xD647a6fC9BC6402301583C91decC5989d8Bc382D',
|
|
@@ -68,17 +79,20 @@ export const chainlinkOracles = {
|
|
|
68
79
|
'LINK-USD': {
|
|
69
80
|
[Chain.POLYGON_MAINNET]: '0xd9FFdb71EbE7496cC440152d43986Aae0AB76665',
|
|
70
81
|
[Chain.ETHEREUM_MAINNET]: '0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c',
|
|
71
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
82
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
83
|
+
'0xca236E327F629f9Fc2c30A4E95775EbF0B89fac8',
|
|
72
84
|
},
|
|
73
85
|
'TUSD-USD': {
|
|
74
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
86
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
87
|
+
'0xa3334A9762090E827413A7495AfeCE76F41dFc06',
|
|
75
88
|
},
|
|
76
89
|
'LINK-MATIC': {
|
|
77
90
|
[Chain.POLYGON_MAINNET]: '0x5787BefDc0ECd210Dfa948264631CD53E68F7802',
|
|
78
91
|
},
|
|
79
92
|
'MATIC-USD': {
|
|
80
93
|
[Chain.POLYGON_MAINNET]: '0xAB594600376Ec9fD91F8e885dADF0CE036862dE0',
|
|
81
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
94
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
95
|
+
'0x7CA57b0cA6367191c94C8914d7Df09A57655905f',
|
|
82
96
|
},
|
|
83
97
|
'MATICX-USD': {
|
|
84
98
|
[Chain.POLYGON_MAINNET]: '0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403',
|
|
@@ -87,44 +101,52 @@ export const chainlinkOracles = {
|
|
|
87
101
|
[Chain.POLYGON_MAINNET]: '0x97371dF4492605486e23Da797fA68e55Fc38a13f',
|
|
88
102
|
},
|
|
89
103
|
'XVS-USD': {
|
|
90
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
104
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
105
|
+
'0xBF63F430A79D4036A5900C19818aFf1fa710f206',
|
|
91
106
|
},
|
|
92
107
|
'USDC-USD': {
|
|
93
108
|
[Chain.POLYGON_MAINNET]: '0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7',
|
|
94
109
|
[Chain.ETHEREUM_MAINNET]: '0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6',
|
|
95
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
110
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
111
|
+
'0x51597f405303C4377E36123cBc172b13269EA163',
|
|
96
112
|
},
|
|
97
113
|
'USDT-USD': {
|
|
98
114
|
[Chain.ETHEREUM_MAINNET]: '0x3E7d1eAB13ad0104d2750B8863b489D65364e32D',
|
|
99
115
|
[Chain.POLYGON_MAINNET]: '0x0a6513e40db6eb1b165753ad52e80663aea50545',
|
|
100
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
116
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
117
|
+
'0xB97Ad0E74fa7d920791E90258A6E2085088b4320',
|
|
101
118
|
},
|
|
102
119
|
'VAI-USD': {
|
|
103
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
120
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
121
|
+
'0x058316f8Bb13aCD442ee7A216C7b60CFB4Ea1B53',
|
|
104
122
|
},
|
|
105
123
|
'XRP-USD': {
|
|
106
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
124
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
125
|
+
'0x93A67D414896A280bF8FFB3b389fE3686E014fda',
|
|
107
126
|
},
|
|
108
127
|
'WIN-USD': {
|
|
109
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
128
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
129
|
+
'0x9e7377E194E41d63795907c92c3EB351a2eb0233',
|
|
110
130
|
},
|
|
111
131
|
'EUR-USD': {
|
|
112
132
|
[Chain.POLYGON_MAINNET]: '0x73366Fe0AA0Ded304479862808e02506FE556a98',
|
|
113
133
|
},
|
|
114
|
-
'SAND-USD': {
|
|
115
|
-
},
|
|
134
|
+
'SAND-USD': {},
|
|
116
135
|
'USDT-USDC': {
|
|
117
136
|
[Chain.POLYGON_MAINNET]: '0x0A6513e40db6EB1b165753AD52E80663aeA50545',
|
|
118
137
|
},
|
|
119
138
|
'AAVE-USD': {
|
|
120
139
|
[Chain.ETHEREUM_MAINNET]: '0x547a514d5e3769680Ce22B2361c10Ea13619e8a9',
|
|
121
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
140
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
141
|
+
'0xA8357BF572460fC40f4B0aCacbB2a6A61c89f475',
|
|
122
142
|
},
|
|
123
143
|
'ADA-USD': {
|
|
124
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
144
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
145
|
+
'0xa767f745331D267c7751297D982b050c93985627',
|
|
125
146
|
},
|
|
126
147
|
'BCH-USD': {
|
|
127
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
148
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
149
|
+
'0x43d80f616DAf0b0B42a928EeD32147dC59027D41',
|
|
128
150
|
},
|
|
129
151
|
'BAT-ETH': {
|
|
130
152
|
[Chain.ETHEREUM_MAINNET]: '0x0d16d4528239e9ee52fa531af613AcdB23D88c94',
|
|
@@ -132,7 +154,8 @@ export const chainlinkOracles = {
|
|
|
132
154
|
'UNI-USD': {
|
|
133
155
|
[Chain.ETHEREUM_MAINNET]: '0x553303d460EE0afB37EdFf9bE42922D8FF63220e',
|
|
134
156
|
[Chain.POLYGON_MAINNET]: '0xdf0Fb4e4F928d2dCB76f438575fDD8682386e13C',
|
|
135
|
-
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
157
|
+
[Chain.BNB_SMART_CHAIN_MAINNET]:
|
|
158
|
+
'0xb57f259E7C24e56a1dA00F66b55A5640d9f9E7e4',
|
|
136
159
|
},
|
|
137
160
|
'YFI-USD': {
|
|
138
161
|
[Chain.ETHEREUM_MAINNET]: '0xA027702dbb89fbd58938e4324ac03B58d812b0E1',
|
|
@@ -148,11 +171,11 @@ export const chainlinkOracles = {
|
|
|
148
171
|
},
|
|
149
172
|
'MKR-USD': {
|
|
150
173
|
[Chain.ETHEREUM_MAINNET]: '0xec1D1B3b0443256cc3860e24a46F108e699484Aa',
|
|
151
|
-
[Chain.POLYGON_MAINNET]: '0xa070427bF5bA5709f70e98b94Cb2F435a242C46C'
|
|
174
|
+
[Chain.POLYGON_MAINNET]: '0xa070427bF5bA5709f70e98b94Cb2F435a242C46C',
|
|
152
175
|
},
|
|
153
176
|
'COMP-USD': {
|
|
154
177
|
[Chain.ETHEREUM_MAINNET]: '0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5',
|
|
155
|
-
[Chain.POLYGON_MAINNET]: '0x2A8758b7257102461BC958279054e372C2b1bDE6'
|
|
178
|
+
[Chain.POLYGON_MAINNET]: '0x2A8758b7257102461BC958279054e372C2b1bDE6',
|
|
156
179
|
},
|
|
157
180
|
'WSTETH-ETH': {
|
|
158
181
|
[Chain.POLYGON_MAINNET]: '0x10f964234cae09cB6a9854B56FF7D4F38Cda5E6a',
|
|
@@ -160,8 +183,10 @@ export const chainlinkOracles = {
|
|
|
160
183
|
}
|
|
161
184
|
|
|
162
185
|
export const getChainLinkKeys = (chainId: string): string[] => {
|
|
163
|
-
|
|
164
|
-
|
|
186
|
+
return Object.keys(chainlinkOracles).filter(
|
|
187
|
+
// @ts-ignore
|
|
188
|
+
(x) => chainlinkOracles[x][chainId] !== undefined,
|
|
189
|
+
)
|
|
165
190
|
}
|
|
166
191
|
|
|
167
192
|
export const chainlinkOraclesEthereum = {
|
|
@@ -73,150 +73,163 @@ export const fetchMainPrices = async (
|
|
|
73
73
|
chainIds: string[],
|
|
74
74
|
getEvmClient: GetEvmClientFunction,
|
|
75
75
|
): Promise<OracleData> => {
|
|
76
|
-
|
|
76
|
+
const multicallPromises = chainIds.map(async (chainId) => {
|
|
77
77
|
const aaveForks = AAVES_PER_CHAIN[chainId]
|
|
78
|
-
|
|
79
|
-
(a) => ({
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
const reservesToQuery =
|
|
79
|
+
aaveForks?.map((a) => ({
|
|
80
|
+
fork: a,
|
|
81
|
+
assets: getAaveAssets(chainId, a),
|
|
82
|
+
})) ?? []
|
|
83
|
+
|
|
84
|
+
const handled: Set<string> = new Set()
|
|
85
|
+
const queries: QueryAave[] = []
|
|
86
|
+
|
|
87
|
+
for (const e of reservesToQuery) {
|
|
88
|
+
const newAssets = e.assets.filter((a) => !handled.has(a))
|
|
89
|
+
if (newAssets.length > 0) {
|
|
86
90
|
queries.push({
|
|
87
|
-
assets:
|
|
91
|
+
assets: newAssets,
|
|
88
92
|
// @ts-ignore
|
|
89
93
|
oracle: AAVE_STYLE_ORACLES[e.fork][chainId],
|
|
90
94
|
fork: e.fork,
|
|
91
95
|
})
|
|
92
|
-
|
|
96
|
+
newAssets.forEach((a) => handled.add(a))
|
|
93
97
|
}
|
|
94
|
-
}
|
|
98
|
+
}
|
|
95
99
|
|
|
96
100
|
const morphoQueries = (MrophoOracles[chainId] ?? []).filter(
|
|
97
|
-
(a) =>
|
|
98
|
-
!handled.includes(a.collateralAsset) || !handled.includes(a.loanAsset),
|
|
101
|
+
(a) => !handled.has(a.collateralAsset) || !handled.has(a.loanAsset),
|
|
99
102
|
)
|
|
100
103
|
|
|
101
104
|
const morphoCalls = getMorphoCalls(morphoQueries)
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
const [callsChainLink, chainLinkNames] = getChainLinkCalls(chainId)
|
|
106
|
-
|
|
107
|
-
const uniswapV2Calls = getUniswapV2Calls(chainId)
|
|
108
|
-
|
|
105
|
+
const aaveCalls = getAaveCalls(queries)
|
|
106
|
+
const [chainlinkCalls, chainlinkNames] = getChainLinkCalls(chainId)
|
|
107
|
+
const uniswapCalls = getUniswapV2Calls(chainId)
|
|
109
108
|
const [api3Calls, api3Names] = getApi3Calls(chainId)
|
|
110
|
-
|
|
111
109
|
const [rwaCalls, rwaNames] = getRWADynamicOracleCalls(chainId)
|
|
112
110
|
|
|
113
|
-
|
|
111
|
+
const allCalls = [
|
|
112
|
+
...chainlinkCalls,
|
|
113
|
+
...aaveCalls,
|
|
114
|
+
...uniswapCalls,
|
|
115
|
+
...api3Calls,
|
|
116
|
+
...rwaCalls,
|
|
117
|
+
...morphoCalls,
|
|
118
|
+
]
|
|
119
|
+
|
|
120
|
+
const abis = [
|
|
121
|
+
...ChainLinkAggregatorAbi,
|
|
122
|
+
...UniswapV2PairAbi,
|
|
123
|
+
...AaveOracleAbi,
|
|
124
|
+
...Api3OracleAbi,
|
|
125
|
+
...RWADynamicOracleAbi,
|
|
126
|
+
...ProxyOracleAbi,
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
const result = await multicallViemAbiArray(
|
|
114
130
|
chainId,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
...UniswapV2PairAbi,
|
|
118
|
-
...AaveOracleAbi,
|
|
119
|
-
...Api3OracleAbi,
|
|
120
|
-
...RWADynamicOracleAbi,
|
|
121
|
-
...ProxyOracleAbi,
|
|
122
|
-
],
|
|
123
|
-
[
|
|
124
|
-
...callsChainLink,
|
|
125
|
-
...callAave,
|
|
126
|
-
...uniswapV2Calls,
|
|
127
|
-
...api3Calls,
|
|
128
|
-
...rwaCalls,
|
|
129
|
-
...morphoCalls,
|
|
130
|
-
],
|
|
131
|
+
abis,
|
|
132
|
+
allCalls,
|
|
131
133
|
getEvmClient,
|
|
132
|
-
)
|
|
133
|
-
const chainLinkResults = multicallResult.slice(0, callsChainLink.length)
|
|
134
|
-
|
|
135
|
-
const aaveResult = multicallResult.slice(
|
|
136
|
-
callsChainLink.length,
|
|
137
|
-
callsChainLink.length + callAave.length,
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
const chainLinkData = parseChainLinkResults(
|
|
141
|
-
chainId,
|
|
142
|
-
chainLinkResults,
|
|
143
|
-
chainLinkNames,
|
|
144
|
-
)
|
|
145
|
-
// @ts-ignore
|
|
146
|
-
const aaveData = parseAaveResults(chainId, aaveResult, queries)
|
|
134
|
+
)
|
|
147
135
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
136
|
+
return {
|
|
137
|
+
chainId,
|
|
138
|
+
result,
|
|
139
|
+
meta: {
|
|
140
|
+
queries,
|
|
141
|
+
chainlink: { calls: chainlinkCalls, names: chainlinkNames },
|
|
142
|
+
api3: { calls: api3Calls, names: api3Names },
|
|
143
|
+
rwa: { calls: rwaCalls, names: rwaNames },
|
|
144
|
+
morpho: { queries: morphoQueries },
|
|
145
|
+
uniswapCalls,
|
|
146
|
+
aaveCalls,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
})
|
|
152
150
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
api3Calls.length,
|
|
159
|
-
)
|
|
151
|
+
const otherDataPromises = [fetchDefillamaData(), fetchPendlePrices()]
|
|
152
|
+
const [chainResults, ...otherResults] = await Promise.all([
|
|
153
|
+
Promise.all(multicallPromises),
|
|
154
|
+
...otherDataPromises,
|
|
155
|
+
])
|
|
160
156
|
|
|
161
|
-
|
|
157
|
+
let allPrices: OracleData = {}
|
|
162
158
|
|
|
163
|
-
|
|
159
|
+
// Parse all except morpho first
|
|
160
|
+
for (const {
|
|
161
|
+
chainId,
|
|
162
|
+
result,
|
|
163
|
+
meta: { queries, chainlink, api3, rwa, uniswapCalls, aaveCalls },
|
|
164
|
+
} of chainResults) {
|
|
165
|
+
let offset = 0
|
|
164
166
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
167
|
+
const chainlinkSlice = result.slice(offset, offset + chainlink.calls.length)
|
|
168
|
+
const chainlinkData = parseChainLinkResults(
|
|
169
|
+
chainId,
|
|
170
|
+
chainlinkSlice,
|
|
171
|
+
chainlink.names,
|
|
172
|
+
)
|
|
173
|
+
offset += chainlink.calls.length
|
|
174
|
+
|
|
175
|
+
const aaveSlice = result.slice(offset, offset + aaveCalls.length)
|
|
176
|
+
const aaveData = parseAaveResults(chainId, aaveSlice, queries)
|
|
177
|
+
offset += aaveCalls.length
|
|
178
|
+
|
|
179
|
+
const uniswapSlice = result.slice(offset, offset + uniswapCalls.length)
|
|
180
|
+
const uniswapData = parseUniswapV2results(uniswapSlice, chainId)
|
|
181
|
+
offset += uniswapCalls.length
|
|
182
|
+
|
|
183
|
+
const api3Slice = result.slice(offset, offset + api3.calls.length)
|
|
184
|
+
const api3Data = parseApi3Results(chainId, api3Slice, api3.names)
|
|
185
|
+
offset += api3.calls.length
|
|
186
|
+
|
|
187
|
+
const rwaSlice = result.slice(offset, offset + rwa.calls.length)
|
|
188
|
+
const rwaData = parseRWADynamicOracleResults(chainId, rwaSlice, rwa.names)
|
|
189
|
+
offset += rwa.calls.length
|
|
190
|
+
|
|
191
|
+
allPrices = {
|
|
192
|
+
...allPrices,
|
|
193
|
+
...chainlinkData,
|
|
194
|
+
...aaveData,
|
|
195
|
+
...uniswapData,
|
|
196
|
+
...api3Data,
|
|
197
|
+
...rwaData,
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
allPrices = { ...allPrices, ...otherResults[0], ...otherResults[1] }
|
|
201
|
+
// Parse morpho data (needs allPrices)
|
|
202
|
+
for (const {
|
|
203
|
+
chainId,
|
|
204
|
+
result,
|
|
205
|
+
meta: { morpho, chainlink, aaveCalls, uniswapCalls, api3, rwa },
|
|
206
|
+
} of chainResults) {
|
|
207
|
+
const morphoOffset =
|
|
208
|
+
chainlink.calls.length +
|
|
209
|
+
aaveCalls.length +
|
|
210
|
+
uniswapCalls.length +
|
|
211
|
+
api3.calls.length +
|
|
212
|
+
rwa.calls.length
|
|
213
|
+
const morphoResult = result.slice(morphoOffset)
|
|
214
|
+
const morphoData = parseMorphoResults(
|
|
215
|
+
chainId,
|
|
216
|
+
morphoResult,
|
|
217
|
+
morpho.queries,
|
|
218
|
+
allPrices,
|
|
219
|
+
)
|
|
176
220
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
uniswapV2Calls.length +
|
|
183
|
-
api3Calls.length +
|
|
184
|
-
rwaCalls.length,
|
|
185
|
-
callsChainLink.length +
|
|
186
|
-
callAave.length +
|
|
187
|
-
uniswapV2Calls.length +
|
|
188
|
-
api3Calls.length +
|
|
189
|
-
morphoCalls.length,
|
|
190
|
-
)
|
|
191
|
-
const prices = {
|
|
192
|
-
...uniswapData,
|
|
193
|
-
...aaveData,
|
|
194
|
-
...chainLinkData,
|
|
195
|
-
...api3Data,
|
|
196
|
-
...rwaData,
|
|
197
|
-
}
|
|
198
|
-
const morphoData = parseMorphoResults(
|
|
199
|
-
chainId,
|
|
200
|
-
morphoResult,
|
|
201
|
-
morphoQueries,
|
|
202
|
-
prices,
|
|
203
|
-
)
|
|
221
|
+
allPrices = {
|
|
222
|
+
...allPrices,
|
|
223
|
+
...morphoData,
|
|
224
|
+
}
|
|
225
|
+
}
|
|
204
226
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
})
|
|
210
|
-
})
|
|
211
|
-
promises.push(fetchDefillamaData())
|
|
212
|
-
promises.push(fetchPendlePrices())
|
|
213
|
-
const result = await Promise.all(promises)
|
|
214
|
-
let data: any = {}
|
|
215
|
-
result.forEach((r) => {
|
|
216
|
-
data = { ...data, ...r }
|
|
217
|
-
})
|
|
227
|
+
// Merge with defillama + pendle prices
|
|
228
|
+
for (const r of otherResults) {
|
|
229
|
+
allPrices = { ...allPrices, ...r }
|
|
230
|
+
}
|
|
218
231
|
|
|
219
|
-
return
|
|
232
|
+
return allPrices
|
|
220
233
|
}
|
|
221
234
|
|
|
222
235
|
/**
|
|
@@ -412,7 +425,6 @@ const parseMorphoResults = (
|
|
|
412
425
|
donePrices: any = {},
|
|
413
426
|
) => {
|
|
414
427
|
let prices: any = {}
|
|
415
|
-
|
|
416
428
|
data.forEach((d, i) => {
|
|
417
429
|
const details = queries[i]
|
|
418
430
|
const {
|
|
@@ -421,6 +433,7 @@ const parseMorphoResults = (
|
|
|
421
433
|
loanAssetDecimals,
|
|
422
434
|
collateralAssetDecimals,
|
|
423
435
|
} = details
|
|
436
|
+
|
|
424
437
|
const oracleId =
|
|
425
438
|
ASSET_META[chainId][loanAsset]?.assetGroup ?? chainId + '-' + loanAsset
|
|
426
439
|
const debtPrice = donePrices[oracleId]
|
|
@@ -428,8 +441,6 @@ const parseMorphoResults = (
|
|
|
428
441
|
ASSET_META[chainId][collateralAsset]?.assetGroup ??
|
|
429
442
|
chainId + '-' + collateralAsset
|
|
430
443
|
const collateralPrice = donePrices[oracleIdCollateral]
|
|
431
|
-
console.log('debtPrice', oracleId, debtPrice)
|
|
432
|
-
console.log('collateralPrice', oracleIdCollateral, collateralPrice)
|
|
433
444
|
const priceDebtToCollateral = formatMorphoPrice(
|
|
434
445
|
d.toString(),
|
|
435
446
|
loanAssetDecimals,
|
package/src/yields/index.ts
CHANGED
package/test/lenderData.test.ts
CHANGED
|
@@ -16,8 +16,8 @@ import { prettyPrint } from './utils'
|
|
|
16
16
|
describe(
|
|
17
17
|
'find lending data',
|
|
18
18
|
() => {
|
|
19
|
-
it('should return lender data', async () => {
|
|
20
|
-
const chainId = Chain.
|
|
19
|
+
it.only('should return lender data', async () => {
|
|
20
|
+
const chainId = Chain.ARBITRUM_ONE
|
|
21
21
|
|
|
22
22
|
const ps = [
|
|
23
23
|
fetchMainPrices([chainId], getEvmClient),
|
|
@@ -29,7 +29,7 @@ describe(
|
|
|
29
29
|
// console.log("yields", yields)
|
|
30
30
|
// console.log("prices", prices)
|
|
31
31
|
|
|
32
|
-
const lenders =
|
|
32
|
+
const lenders = getLendersForChain(chainId) as any
|
|
33
33
|
console.log('lenders', lenders)
|
|
34
34
|
const lendingData = await getLenderPublicData(
|
|
35
35
|
chainId,
|
package/test/mainPrices.test.ts
CHANGED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from 'vitest'
|
|
2
|
+
import {
|
|
3
|
+
getLenderUserDataResult,
|
|
4
|
+
convertLenderUserDataResult,
|
|
5
|
+
} from '../src/lending/user-data/fetchUserData'
|
|
6
|
+
import {
|
|
7
|
+
fetchGeneralYields,
|
|
8
|
+
fetchMainPrices,
|
|
9
|
+
getLenderPublicData,
|
|
10
|
+
} from '../src'
|
|
11
|
+
import { multicallRetry, getEvmClient } from '@1delta/providers'
|
|
12
|
+
import { Chain, Lender } from '@1delta/asset-registry'
|
|
13
|
+
import { LenderUserQuery } from '../src/lending/user-data/types'
|
|
14
|
+
import { getLendersForChain } from '../src/utils'
|
|
15
|
+
import { prettyPrint } from './utils'
|
|
16
|
+
|
|
17
|
+
const TEST_ADDRESS = '0xbadA9c382165b31419F4CC0eDf0Fa84f80A3C8E5'
|
|
18
|
+
let prices, yields
|
|
19
|
+
|
|
20
|
+
async function getUserData(chainId: Chain, lenders: Lender[]) {
|
|
21
|
+
const _lenders = getLendersForChain(chainId)
|
|
22
|
+
const publicData = {
|
|
23
|
+
data: await getLenderPublicData(
|
|
24
|
+
chainId,
|
|
25
|
+
_lenders as any,
|
|
26
|
+
prices as any,
|
|
27
|
+
yields as any,
|
|
28
|
+
multicallRetry,
|
|
29
|
+
),
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Define user queries
|
|
33
|
+
const queries: LenderUserQuery[] = lenders.map((lender) => ({
|
|
34
|
+
lender,
|
|
35
|
+
account: TEST_ADDRESS.toLowerCase(),
|
|
36
|
+
}))
|
|
37
|
+
|
|
38
|
+
// Fetch raw user data
|
|
39
|
+
const rawUserData = await getLenderUserDataResult(
|
|
40
|
+
chainId,
|
|
41
|
+
queries,
|
|
42
|
+
getEvmClient,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
// Convert raw data to structured format
|
|
46
|
+
const userData = convertLenderUserDataResult(
|
|
47
|
+
chainId,
|
|
48
|
+
queries,
|
|
49
|
+
rawUserData,
|
|
50
|
+
prices as any,
|
|
51
|
+
prices as any,
|
|
52
|
+
{ [chainId]: publicData },
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
return { userData, rawUserData, publicData, queries }
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
describe(
|
|
59
|
+
'user data fetching',
|
|
60
|
+
() => {
|
|
61
|
+
beforeAll(async () => {
|
|
62
|
+
;[prices, yields] = await Promise.all([
|
|
63
|
+
fetchMainPrices([Chain.ARBITRUM_ONE], getEvmClient),
|
|
64
|
+
fetchGeneralYields(),
|
|
65
|
+
])
|
|
66
|
+
}, 30000)
|
|
67
|
+
|
|
68
|
+
it(
|
|
69
|
+
'should fetch user data for COMET on Arb',
|
|
70
|
+
async () => {
|
|
71
|
+
try {
|
|
72
|
+
const { userData } = await getUserData(Chain.ARBITRUM_ONE, [
|
|
73
|
+
Lender.COMPOUND_V3_USDC,
|
|
74
|
+
])
|
|
75
|
+
|
|
76
|
+
console.log(
|
|
77
|
+
'COMET user data:',
|
|
78
|
+
userData[Lender.COMPOUND_V3_USDC]?.[TEST_ADDRESS.toLowerCase()],
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
prettyPrint(
|
|
82
|
+
userData[Lender.COMPOUND_V3_USDC]?.[TEST_ADDRESS.toLowerCase()],
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
// Basic validation
|
|
86
|
+
expect(userData).toBeDefined()
|
|
87
|
+
expect(typeof userData).toBe('object')
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.log('Error fetching INIT Mantle data:', error)
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{ timeout: 30000 },
|
|
93
|
+
)
|
|
94
|
+
},
|
|
95
|
+
{ timeout: 90000 },
|
|
96
|
+
)
|