@defisaver/positions-sdk 2.1.13-dev-plasma-fluid4 → 2.1.13-dev-plasma-fluid6
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/cjs/fluid/index.js +39 -0
- package/cjs/markets/fluid/index.d.ts +2 -2
- package/cjs/markets/fluid/index.js +10 -10
- package/cjs/services/priceService.d.ts +489 -0
- package/cjs/services/priceService.js +110 -1
- package/cjs/types/fluid.d.ts +1 -1
- package/cjs/types/fluid.js +1 -1
- package/esm/fluid/index.js +40 -1
- package/esm/markets/fluid/index.d.ts +2 -2
- package/esm/markets/fluid/index.js +8 -8
- package/esm/services/priceService.d.ts +489 -0
- package/esm/services/priceService.js +101 -1
- package/esm/types/fluid.d.ts +1 -1
- package/esm/types/fluid.js +1 -1
- package/package.json +2 -2
- package/src/fluid/index.ts +65 -0
- package/src/services/priceService.ts +120 -1
package/src/fluid/index.ts
CHANGED
|
@@ -47,13 +47,22 @@ import { getFluidMarketInfoById, getFluidVersionsDataForNetwork, getFTokenAddres
|
|
|
47
47
|
import { USD_QUOTE, ZERO_ADDRESS } from '../constants';
|
|
48
48
|
import {
|
|
49
49
|
getChainlinkAssetAddress,
|
|
50
|
+
getSyrupUSDTChainLinkPriceCalls,
|
|
51
|
+
getSyrupUSDTPrice,
|
|
50
52
|
getWeETHChainLinkPriceCalls,
|
|
51
53
|
getWeETHPrice,
|
|
54
|
+
getWsrETHChainLinkPriceCalls,
|
|
55
|
+
getWsrETHPrice,
|
|
52
56
|
getWstETHChainLinkPriceCalls,
|
|
53
57
|
getWstETHPrice,
|
|
54
58
|
getWstETHPriceFluid,
|
|
59
|
+
getWstUSRChainLinkPriceCalls,
|
|
60
|
+
getWstUSRPrice,
|
|
61
|
+
parseSyrupUSDTPriceCalls,
|
|
55
62
|
parseWeETHPriceCalls,
|
|
63
|
+
parseWrsETHPriceCalls,
|
|
56
64
|
parseWstETHPriceCalls,
|
|
65
|
+
parseWstUSRPriceCalls,
|
|
57
66
|
} from '../services/priceService';
|
|
58
67
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
59
68
|
import { getViemProvider } from '../services/viem';
|
|
@@ -115,6 +124,9 @@ const getChainLinkPricesForTokens = async (
|
|
|
115
124
|
|
|
116
125
|
if (assetInfo.symbol === 'wstETH') return getWstETHChainLinkPriceCalls(client, network);
|
|
117
126
|
if (assetInfo.symbol === 'weETH' && network !== NetworkNumber.Plasma) return getWeETHChainLinkPriceCalls(client, network);
|
|
127
|
+
if (assetInfo.symbol === 'wrsETH' && network === NetworkNumber.Plasma) return getWsrETHChainLinkPriceCalls(client, network);
|
|
128
|
+
if (assetInfo.symbol === 'syrupUSDT') return getSyrupUSDTChainLinkPriceCalls(client, network);
|
|
129
|
+
if (assetInfo.symbol === 'wstUSR') return getWstUSRChainLinkPriceCalls(client, network);
|
|
118
130
|
|
|
119
131
|
if (isMainnet) {
|
|
120
132
|
const feedRegistryContract = FeedRegistryContractViem(client, NetworkNumber.Eth);
|
|
@@ -165,6 +177,47 @@ const getChainLinkPricesForTokens = async (
|
|
|
165
177
|
break;
|
|
166
178
|
}
|
|
167
179
|
|
|
180
|
+
case 'wrsETH': {
|
|
181
|
+
const {
|
|
182
|
+
ethPrice,
|
|
183
|
+
wrsETHRate,
|
|
184
|
+
} = parseWrsETHPriceCalls(
|
|
185
|
+
results[i + offset].result!.toString(),
|
|
186
|
+
// @ts-ignore
|
|
187
|
+
results[i + offset + 1].result[1]!.toString(),
|
|
188
|
+
);
|
|
189
|
+
offset += 1;
|
|
190
|
+
acc[token] = new Dec(ethPrice).mul(wrsETHRate).toString();
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
case 'syrupUSDT': {
|
|
195
|
+
const {
|
|
196
|
+
syrupUSDTRate,
|
|
197
|
+
USDTRate,
|
|
198
|
+
} = parseSyrupUSDTPriceCalls(
|
|
199
|
+
results[i + offset].result!.toString(),
|
|
200
|
+
// @ts-ignore
|
|
201
|
+
results[i + offset + 1].result[1]!.toString(),
|
|
202
|
+
);
|
|
203
|
+
offset += 1;
|
|
204
|
+
acc[token] = new Dec(syrupUSDTRate).mul(USDTRate).toString();
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case 'wstUSR': {
|
|
208
|
+
const {
|
|
209
|
+
wstUSRRate,
|
|
210
|
+
USRRate,
|
|
211
|
+
} = parseWstUSRPriceCalls(
|
|
212
|
+
results[i + offset].result!.toString(),
|
|
213
|
+
// @ts-ignore
|
|
214
|
+
results[i + offset + 1].result[1]!.toString(),
|
|
215
|
+
);
|
|
216
|
+
offset += 1;
|
|
217
|
+
acc[token] = new Dec(wstUSRRate).mul(USRRate).toString();
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
|
|
168
221
|
// TODO: These addresses do not have chainlink feeds, so we need to handle them separately, this is hotfix
|
|
169
222
|
case 'ezETH': {
|
|
170
223
|
acc[token] = new Dec(ethPriceChainlink).mul(1.049).toString();
|
|
@@ -1622,6 +1675,18 @@ const getTokenPricePortfolio = async (token: string, provider: PublicClient, net
|
|
|
1622
1675
|
return getWeETHPrice(provider, network);
|
|
1623
1676
|
}
|
|
1624
1677
|
|
|
1678
|
+
if (token === 'wrsETH') {
|
|
1679
|
+
return getWsrETHPrice(provider, network);
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
if (token === 'syrupUSDT') {
|
|
1683
|
+
return getSyrupUSDTPrice(provider, network);
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
if (token === 'wstUSR') {
|
|
1687
|
+
return getWstUSRPrice(provider, network);
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1625
1690
|
const isMainnet = isMainnetNetwork(network);
|
|
1626
1691
|
const chainLinkFeedAddress = getChainlinkAssetAddress(token, network);
|
|
1627
1692
|
if (isMainnet) {
|
|
@@ -4,13 +4,15 @@ import { Client, PublicClient } from 'viem';
|
|
|
4
4
|
import {
|
|
5
5
|
BTCPriceFeedContractViem,
|
|
6
6
|
COMPPriceFeedContractViem,
|
|
7
|
+
DFSFeedRegistryContractViem,
|
|
7
8
|
ETHPriceFeedContractViem,
|
|
8
9
|
USDCPriceFeedContractViem,
|
|
9
10
|
WeETHPriceFeedContractViem,
|
|
10
11
|
WstETHPriceFeedContractViem,
|
|
11
12
|
} from '../contracts';
|
|
12
|
-
import { EthAddress, NetworkNumber } from '../types/common';
|
|
13
|
+
import { EthAddress, NetworkNumber, HexString } from '../types/common';
|
|
13
14
|
import { getEthAmountForDecimals } from './utils';
|
|
15
|
+
import { USD_QUOTE } from '../constants';
|
|
14
16
|
|
|
15
17
|
export const getEthPrice = async (client: Client) => {
|
|
16
18
|
const contract = ETHPriceFeedContractViem(client, NetworkNumber.Eth);
|
|
@@ -64,6 +66,48 @@ export const getWeETHPrice = async (client: Client, network: NetworkNumber = Net
|
|
|
64
66
|
return new Dec(ethPrice).mul(weETHRate).toString();
|
|
65
67
|
};
|
|
66
68
|
|
|
69
|
+
export const getWsrETHPrice = async (client: Client, network: NetworkNumber = NetworkNumber.Eth) => {
|
|
70
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
71
|
+
const [ethPriceWei, wrsETHRateWei] = await Promise.all([
|
|
72
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('WETH', network).address as HexString, USD_QUOTE]),
|
|
73
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('wrsETH', network).address as HexString, getAssetInfo('WETH', network).address as HexString]),
|
|
74
|
+
]);
|
|
75
|
+
|
|
76
|
+
const ethPrice = new Dec(ethPriceWei[1].toString()).div(1e8);
|
|
77
|
+
|
|
78
|
+
const wrsETHRate = getEthAmountForDecimals(wrsETHRateWei[1].toString(), 18);
|
|
79
|
+
|
|
80
|
+
return new Dec(ethPrice).mul(wrsETHRate).toString();
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const getSyrupUSDTPrice = async (client: Client, network: NetworkNumber = NetworkNumber.Eth) => {
|
|
84
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
85
|
+
const [usdtPriceWei, syrupUSDTRateWei] = await Promise.all([
|
|
86
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('USDT', network).address as HexString, USD_QUOTE]),
|
|
87
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('syrupUSDT', network).address as HexString, getAssetInfo('USDT', network).address as HexString]),
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
const usdtPrice = new Dec(usdtPriceWei[1].toString()).div(1e8);
|
|
91
|
+
|
|
92
|
+
const syrupUSDTPrice = getEthAmountForDecimals(syrupUSDTRateWei[1].toString(), 18);
|
|
93
|
+
|
|
94
|
+
return new Dec(usdtPrice).mul(syrupUSDTPrice).toString();
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const getWstUSRPrice = async (client: Client, network: NetworkNumber = NetworkNumber.Eth) => {
|
|
98
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
99
|
+
const [usrPriceWei, wstUSRRateWei] = await Promise.all([
|
|
100
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('USR', network).address as HexString, USD_QUOTE]),
|
|
101
|
+
feedRegistryContract.read.latestRoundData([getAssetInfo('wstUSR', network).address as HexString, getAssetInfo('USR', network).address as HexString]),
|
|
102
|
+
]);
|
|
103
|
+
|
|
104
|
+
const usrPrice = new Dec(usrPriceWei[1].toString()).div(1e8);
|
|
105
|
+
|
|
106
|
+
const wstUSRPrice = getEthAmountForDecimals(wstUSRRateWei[1].toString(), 18);
|
|
107
|
+
|
|
108
|
+
return new Dec(usrPrice).mul(wstUSRPrice).toString();
|
|
109
|
+
};
|
|
110
|
+
|
|
67
111
|
export const getWstETHChainLinkPriceCalls = (client: PublicClient, network: NetworkNumber) => {
|
|
68
112
|
const wstETHFeedContract = WstETHPriceFeedContractViem(client, network);
|
|
69
113
|
const ethFeedContract = ETHPriceFeedContractViem(client, network);
|
|
@@ -116,12 +160,87 @@ export const getWeETHChainLinkPriceCalls = (client: PublicClient, network: Netwo
|
|
|
116
160
|
return calls;
|
|
117
161
|
};
|
|
118
162
|
|
|
163
|
+
export const getWsrETHChainLinkPriceCalls = (client: PublicClient, network: NetworkNumber) => {
|
|
164
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
165
|
+
const calls = [
|
|
166
|
+
{
|
|
167
|
+
address: feedRegistryContract.address,
|
|
168
|
+
abi: feedRegistryContract.abi,
|
|
169
|
+
functionName: 'latestRoundData',
|
|
170
|
+
args: [getAssetInfo('WETH', network).address, USD_QUOTE],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
address: feedRegistryContract.address,
|
|
174
|
+
abi: feedRegistryContract.abi,
|
|
175
|
+
functionName: 'latestRoundData',
|
|
176
|
+
args: [getAssetInfo('wrsETH', network).address, getAssetInfo('WETH', network).address],
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
return calls;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
export const getSyrupUSDTChainLinkPriceCalls = (client: PublicClient, network: NetworkNumber) => {
|
|
183
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
184
|
+
const calls = [
|
|
185
|
+
{
|
|
186
|
+
address: feedRegistryContract.address,
|
|
187
|
+
abi: feedRegistryContract.abi,
|
|
188
|
+
functionName: 'latestRoundData',
|
|
189
|
+
args: [getAssetInfo('USDT', network).address, USD_QUOTE],
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
address: feedRegistryContract.address,
|
|
193
|
+
abi: feedRegistryContract.abi,
|
|
194
|
+
functionName: 'latestRoundData',
|
|
195
|
+
args: [getAssetInfo('syrupUSDT', network).address, getAssetInfo('USDT', network).address],
|
|
196
|
+
},
|
|
197
|
+
];
|
|
198
|
+
return calls;
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
export const getWstUSRChainLinkPriceCalls = (client: PublicClient, network: NetworkNumber) => {
|
|
202
|
+
const feedRegistryContract = DFSFeedRegistryContractViem(client, network);
|
|
203
|
+
const calls = [
|
|
204
|
+
{
|
|
205
|
+
address: feedRegistryContract.address,
|
|
206
|
+
abi: feedRegistryContract.abi,
|
|
207
|
+
functionName: 'latestRoundData',
|
|
208
|
+
args: [getAssetInfo('USR', network).address, USD_QUOTE],
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
address: feedRegistryContract.address,
|
|
212
|
+
abi: feedRegistryContract.abi,
|
|
213
|
+
functionName: 'latestRoundData',
|
|
214
|
+
args: [getAssetInfo('wstUSR', network).address, getAssetInfo('USR', network).address],
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
return calls;
|
|
218
|
+
};
|
|
219
|
+
|
|
119
220
|
export const parseWstETHPriceCalls = (_ethPrice: string, wstETHrateAnswer: string, decimals: string) => {
|
|
120
221
|
const ethPrice = new Dec(_ethPrice).div(1e8);
|
|
121
222
|
const wstETHRate = getEthAmountForDecimals(wstETHrateAnswer, decimals);
|
|
122
223
|
return { ethPrice, wstETHRate };
|
|
123
224
|
};
|
|
124
225
|
|
|
226
|
+
export const parseWrsETHPriceCalls = (ethPriceAnswer: string, wrsETHrateAnswer: string) => {
|
|
227
|
+
const ethPrice = new Dec(ethPriceAnswer).div(1e8);
|
|
228
|
+
const wrsETHRate = new Dec(wrsETHrateAnswer).div(1e18);
|
|
229
|
+
return { ethPrice, wrsETHRate };
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export const parseSyrupUSDTPriceCalls = (usdtPriceAnswer: string, syrupUSDTRateAnswer: string) => {
|
|
233
|
+
const syrupUSDTRate = new Dec(syrupUSDTRateAnswer).div(1e8);
|
|
234
|
+
const USDTRate = new Dec(usdtPriceAnswer).div(1e18);
|
|
235
|
+
return { syrupUSDTRate, USDTRate };
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
export const parseWstUSRPriceCalls = (usrPrice: string, _wstUSRRate: string) => {
|
|
239
|
+
const wstUSRRate = new Dec(_wstUSRRate).div(1e8);
|
|
240
|
+
const USRRate = new Dec(usrPrice).div(1e18);
|
|
241
|
+
return { wstUSRRate, USRRate };
|
|
242
|
+
};
|
|
243
|
+
|
|
125
244
|
export const parseWeETHPriceCalls = (_ethPrice: string, weETHrateAnswer: string, decimals: string) => {
|
|
126
245
|
const ethPrice = new Dec(_ethPrice).div(1e8);
|
|
127
246
|
const weETHRate = getEthAmountForDecimals(weETHrateAnswer, decimals);
|