@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.
@@ -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);