@evaafi/sdk 0.5.3 → 0.5.5

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.
@@ -1,21 +1,24 @@
1
- import { AssetConfig, AssetData, AssetInterest, ExtendedAssetData } from '../types/Master';
1
+ import { AssetConfig, AssetData, AssetInterest, ExtendedAssetData, ExtendedAssetsConfig, ExtendedAssetsData, MasterConstants } from '../types/Master';
2
2
  import { Dictionary } from '@ton/core';
3
3
  import { LiquidationData, PredictHealthFactorArgs, UserBalance } from '../types/User';
4
4
  export declare function mulFactor(decimal: bigint, a: bigint, b: bigint): bigint;
5
5
  export declare function mulDiv(x: bigint, y: bigint, z: bigint): bigint;
6
+ export declare function mulDivC(x: bigint, y: bigint, z: bigint): bigint;
6
7
  export declare function bigIntMax(...args: bigint[]): bigint;
7
8
  export declare function bigIntMin(...args: bigint[]): bigint;
8
- export declare function calculatePresentValue(index: bigint, principalValue: bigint): bigint;
9
- export declare function calculateCurrentRates(assetConfig: AssetConfig, assetData: AssetData): {
9
+ export declare function calculatePresentValue(index: bigint, principalValue: bigint, masterConstants: MasterConstants): bigint;
10
+ export declare function calculateCurrentRates(assetConfig: AssetConfig, assetData: AssetData, masterConstants: MasterConstants): {
10
11
  sRate: bigint;
11
12
  bRate: bigint;
12
13
  supplyInterest: bigint;
13
14
  borrowInterest: bigint;
14
15
  now: bigint;
15
16
  };
16
- export declare function calculateAssetData(assetsConfigDict: Dictionary<bigint, AssetConfig>, assetsDataDict: Dictionary<bigint, AssetData>, assetId: bigint): ExtendedAssetData;
17
- export declare function calculateAssetInterest(assetConfig: AssetConfig, assetData: AssetData): AssetInterest;
18
- export declare function getAvailableToBorrow(assetsConfig: Dictionary<bigint, AssetConfig>, assetsData: Dictionary<bigint, ExtendedAssetData>, principals: Dictionary<bigint, bigint>, prices: Dictionary<bigint, bigint>): bigint;
19
- export declare function presentValue(sRate: bigint, bRate: bigint, principalValue: bigint): UserBalance;
20
- export declare function calculateLiquidationData(assetsConfig: Dictionary<bigint, AssetConfig>, assetsData: Dictionary<bigint, ExtendedAssetData>, principals: Dictionary<bigint, bigint>, prices: Dictionary<bigint, bigint>): LiquidationData;
17
+ export declare function calculateAssetData(assetsConfigDict: ExtendedAssetsConfig, assetsDataDict: Dictionary<bigint, AssetData>, assetId: bigint, masterConstants: MasterConstants): ExtendedAssetData;
18
+ export declare function calculateAssetInterest(assetConfig: AssetConfig, assetData: AssetData, masterConstants: MasterConstants): AssetInterest;
19
+ export declare function checkNotInDebtAtAll(principals: Dictionary<bigint, bigint>): boolean;
20
+ export declare function calculateMaximumWithdrawAmount(assetsConfig: ExtendedAssetsConfig, assetsData: ExtendedAssetsData, principals: Dictionary<bigint, bigint>, prices: Dictionary<bigint, bigint>, masterConstants: MasterConstants, assetId: bigint): bigint;
21
+ export declare function getAvailableToBorrow(assetsConfig: ExtendedAssetsConfig, assetsData: ExtendedAssetsData, principals: Dictionary<bigint, bigint>, prices: Dictionary<bigint, bigint>, masterConstants: MasterConstants): bigint;
22
+ export declare function presentValue(sRate: bigint, bRate: bigint, principalValue: bigint, masterConstants: MasterConstants): UserBalance;
23
+ export declare function calculateLiquidationData(assetsConfig: ExtendedAssetsConfig, assetsData: ExtendedAssetsData, principals: Dictionary<bigint, bigint>, prices: Dictionary<bigint, bigint>, masterConstants: MasterConstants): LiquidationData;
21
24
  export declare function predictHealthFactor(args: PredictHealthFactorArgs): number;
package/dist/api/math.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.predictHealthFactor = exports.calculateLiquidationData = exports.presentValue = exports.getAvailableToBorrow = exports.calculateAssetInterest = exports.calculateAssetData = exports.calculateCurrentRates = exports.calculatePresentValue = exports.bigIntMin = exports.bigIntMax = exports.mulDiv = exports.mulFactor = void 0;
4
- const constants_1 = require("../constants");
3
+ exports.predictHealthFactor = exports.calculateLiquidationData = exports.presentValue = exports.getAvailableToBorrow = exports.calculateMaximumWithdrawAmount = exports.checkNotInDebtAtAll = exports.calculateAssetInterest = exports.calculateAssetData = exports.calculateCurrentRates = exports.calculatePresentValue = exports.bigIntMin = exports.bigIntMax = exports.mulDivC = exports.mulDiv = exports.mulFactor = void 0;
5
4
  const User_1 = require("../types/User");
6
5
  const sha256BigInt_1 = require("../utils/sha256BigInt");
7
6
  function mulFactor(decimal, a, b) {
@@ -12,6 +11,11 @@ function mulDiv(x, y, z) {
12
11
  return (x * y) / z;
13
12
  }
14
13
  exports.mulDiv = mulDiv;
14
+ function mulDivC(x, y, z) {
15
+ const mul = x * y;
16
+ return mul / z + (mul % z ? 1n : 0n);
17
+ }
18
+ exports.mulDivC = mulDivC;
15
19
  function bigIntMax(...args) {
16
20
  return args.reduce((m, e) => (e > m ? e : m));
17
21
  }
@@ -20,17 +24,17 @@ function bigIntMin(...args) {
20
24
  return args.reduce((m, e) => (e < m ? e : m));
21
25
  }
22
26
  exports.bigIntMin = bigIntMin;
23
- function calculatePresentValue(index, principalValue) {
24
- return (principalValue * index) / constants_1.MASTER_CONSTANTS.FACTOR_SCALE;
27
+ function calculatePresentValue(index, principalValue, masterConstants) {
28
+ return (principalValue * index) / masterConstants.FACTOR_SCALE;
25
29
  }
26
30
  exports.calculatePresentValue = calculatePresentValue;
27
- function calculateCurrentRates(assetConfig, assetData) {
31
+ function calculateCurrentRates(assetConfig, assetData, masterConstants) {
28
32
  const now = BigInt(Math.floor(Date.now() / 1000));
29
33
  const timeElapsed = now - assetData.lastAccural;
30
- const { supplyInterest, borrowInterest } = calculateAssetInterest(assetConfig, assetData);
34
+ const { supplyInterest, borrowInterest } = calculateAssetInterest(assetConfig, assetData, masterConstants);
31
35
  if (timeElapsed > 0) {
32
- const updatedSRate = assetData.sRate + mulFactor(constants_1.MASTER_CONSTANTS.FACTOR_SCALE, assetData.sRate, supplyInterest * timeElapsed);
33
- const updatedBRate = assetData.bRate + mulFactor(constants_1.MASTER_CONSTANTS.FACTOR_SCALE, assetData.bRate, borrowInterest * timeElapsed);
36
+ const updatedSRate = assetData.sRate + mulFactor(masterConstants.FACTOR_SCALE, assetData.sRate, supplyInterest * timeElapsed);
37
+ const updatedBRate = assetData.bRate + mulFactor(masterConstants.FACTOR_SCALE, assetData.bRate, borrowInterest * timeElapsed);
34
38
  return {
35
39
  sRate: updatedSRate,
36
40
  bRate: updatedBRate,
@@ -48,13 +52,13 @@ function calculateCurrentRates(assetConfig, assetData) {
48
52
  };
49
53
  }
50
54
  exports.calculateCurrentRates = calculateCurrentRates;
51
- function calculateAssetData(assetsConfigDict, assetsDataDict, assetId) {
55
+ function calculateAssetData(assetsConfigDict, assetsDataDict, assetId, masterConstants) {
52
56
  const config = assetsConfigDict.get(assetId);
53
57
  const data = assetsDataDict.get(assetId);
54
58
  if (!data || !config) {
55
59
  throw new Error('Asset Data or Config is not accessible');
56
60
  }
57
- const { sRate, bRate, supplyInterest, borrowInterest, now } = calculateCurrentRates(config, data);
61
+ const { sRate, bRate, supplyInterest, borrowInterest, now } = calculateCurrentRates(config, data, masterConstants);
58
62
  data.sRate = sRate || 0n;
59
63
  data.bRate = bRate || 0n;
60
64
  data.lastAccural = now;
@@ -67,34 +71,75 @@ function calculateAssetData(assetsConfigDict, assetsDataDict, assetId) {
67
71
  };
68
72
  }
69
73
  exports.calculateAssetData = calculateAssetData;
70
- function calculateAssetInterest(assetConfig, assetData) {
71
- const totalSupply = calculatePresentValue(assetData.sRate, assetData.totalSupply);
72
- const totalBorrow = calculatePresentValue(assetData.bRate, assetData.totalBorrow);
74
+ function calculateAssetInterest(assetConfig, assetData, masterConstants) {
75
+ const totalSupply = calculatePresentValue(assetData.sRate, assetData.totalSupply, masterConstants);
76
+ const totalBorrow = calculatePresentValue(assetData.bRate, assetData.totalBorrow, masterConstants);
73
77
  let utilization = 0n;
74
78
  let supplyInterest = 0n;
75
79
  let borrowInterest = 0n;
76
80
  if (totalSupply !== 0n) {
77
- utilization = (totalBorrow * constants_1.MASTER_CONSTANTS.FACTOR_SCALE) / totalSupply;
81
+ utilization = (totalBorrow * masterConstants.FACTOR_SCALE) / totalSupply;
78
82
  }
79
83
  if (utilization <= assetConfig.targetUtilization) {
80
84
  borrowInterest =
81
85
  assetConfig.baseBorrowRate +
82
- mulFactor(constants_1.MASTER_CONSTANTS.FACTOR_SCALE, assetConfig.borrowRateSlopeLow, utilization);
86
+ mulFactor(masterConstants.FACTOR_SCALE, assetConfig.borrowRateSlopeLow, utilization);
83
87
  }
84
88
  else {
85
89
  borrowInterest =
86
90
  assetConfig.baseBorrowRate +
87
- mulFactor(constants_1.MASTER_CONSTANTS.FACTOR_SCALE, assetConfig.borrowRateSlopeLow, assetConfig.targetUtilization) +
88
- mulFactor(constants_1.MASTER_CONSTANTS.FACTOR_SCALE, assetConfig.borrowRateSlopeHigh, utilization - assetConfig.targetUtilization);
91
+ mulFactor(masterConstants.FACTOR_SCALE, assetConfig.borrowRateSlopeLow, assetConfig.targetUtilization) +
92
+ mulFactor(masterConstants.FACTOR_SCALE, assetConfig.borrowRateSlopeHigh, utilization - assetConfig.targetUtilization);
89
93
  }
90
- supplyInterest = mulDiv(mulDiv(borrowInterest, utilization, constants_1.MASTER_CONSTANTS.FACTOR_SCALE), constants_1.MASTER_CONSTANTS.ASSET_RESERVE_FACTOR_SCALE - assetConfig.reserveFactor, constants_1.MASTER_CONSTANTS.ASSET_RESERVE_FACTOR_SCALE);
94
+ supplyInterest = mulDiv(mulDiv(borrowInterest, utilization, masterConstants.FACTOR_SCALE), masterConstants.ASSET_RESERVE_FACTOR_SCALE - assetConfig.reserveFactor, masterConstants.ASSET_RESERVE_FACTOR_SCALE);
91
95
  return {
92
96
  supplyInterest,
93
97
  borrowInterest,
94
98
  };
95
99
  }
96
100
  exports.calculateAssetInterest = calculateAssetInterest;
97
- function getAvailableToBorrow(assetsConfig, assetsData, principals, prices) {
101
+ function checkNotInDebtAtAll(principals) {
102
+ return principals.values().every(x => x >= 0n);
103
+ }
104
+ exports.checkNotInDebtAtAll = checkNotInDebtAtAll;
105
+ function calculateMaximumWithdrawAmount(assetsConfig, assetsData, principals, prices, masterConstants, assetId) {
106
+ let withdrawAmountMax = 0n;
107
+ const assetConfig = assetsConfig.get(assetId);
108
+ const assetData = assetsData.get(assetId);
109
+ const oldPrincipal = principals.get(assetId);
110
+ if (oldPrincipal > assetConfig.dust) {
111
+ const oldPresentValue = presentValue(assetData.sRate, assetData.bRate, oldPrincipal, masterConstants);
112
+ if (checkNotInDebtAtAll(principals)) {
113
+ withdrawAmountMax = oldPresentValue.amount;
114
+ }
115
+ else {
116
+ if (!prices.has(assetId)) {
117
+ return 0n;
118
+ }
119
+ const borrowable = getAvailableToBorrow(assetsConfig, assetsData, principals, prices, masterConstants);
120
+ const price = prices.get(assetId);
121
+ let maxAmountToReclaim = 0n;
122
+ if (assetConfig.collateralFactor == 0n) {
123
+ maxAmountToReclaim = oldPresentValue.amount;
124
+ }
125
+ else if (price > 0) {
126
+ maxAmountToReclaim =
127
+ mulDiv(mulDivC(borrowable, masterConstants.ASSET_COEFFICIENT_SCALE, assetConfig.collateralFactor), 10n ** assetConfig.decimals, price);
128
+ }
129
+ withdrawAmountMax = bigIntMin(maxAmountToReclaim, oldPresentValue.amount);
130
+ }
131
+ }
132
+ else {
133
+ if (!prices.has(assetId)) {
134
+ return 0n;
135
+ }
136
+ const price = prices.get(assetId);
137
+ return getAvailableToBorrow(assetsConfig, assetsData, principals, prices, masterConstants) * (10n ** assetConfig.decimals) / price;
138
+ }
139
+ return withdrawAmountMax;
140
+ }
141
+ exports.calculateMaximumWithdrawAmount = calculateMaximumWithdrawAmount;
142
+ function getAvailableToBorrow(assetsConfig, assetsData, principals, prices, masterConstants) {
98
143
  let borrowLimit = 0n;
99
144
  let borrowAmount = 0n;
100
145
  for (const assetID of principals.keys()) {
@@ -103,28 +148,26 @@ function getAvailableToBorrow(assetsConfig, assetsData, principals, prices) {
103
148
  const price = prices.get(assetID);
104
149
  const principal = principals.get(assetID);
105
150
  if (principal < 0) {
106
- borrowAmount += (calculatePresentValue(assetData.bRate, -principal) * price) / 10n ** assetConfig.decimals;
151
+ borrowAmount += (calculatePresentValue(assetData.bRate, -principal, masterConstants) * price) / 10n ** assetConfig.decimals;
107
152
  }
108
153
  else if (principal > 0) {
109
154
  borrowLimit +=
110
- (calculatePresentValue(assetData.sRate, principal) * price * assetConfig.collateralFactor) /
111
- 10n ** assetConfig.decimals /
112
- constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE;
155
+ mulDivC(mulDivC(calculatePresentValue(assetData.sRate, principal, masterConstants), price, 10n ** assetConfig.decimals), assetConfig.collateralFactor, masterConstants.ASSET_COEFFICIENT_SCALE);
113
156
  }
114
157
  }
115
158
  return borrowLimit - borrowAmount;
116
159
  }
117
160
  exports.getAvailableToBorrow = getAvailableToBorrow;
118
- function presentValue(sRate, bRate, principalValue) {
161
+ function presentValue(sRate, bRate, principalValue, masterConstants) {
119
162
  if (principalValue > 0) {
120
163
  return {
121
- amount: calculatePresentValue(sRate, principalValue),
164
+ amount: calculatePresentValue(sRate, principalValue, masterConstants),
122
165
  type: User_1.BalanceType.supply,
123
166
  };
124
167
  }
125
168
  else if (principalValue < 0) {
126
169
  return {
127
- amount: calculatePresentValue(bRate, -principalValue),
170
+ amount: calculatePresentValue(bRate, -principalValue, masterConstants),
128
171
  type: User_1.BalanceType.borrow,
129
172
  };
130
173
  }
@@ -136,7 +179,7 @@ function presentValue(sRate, bRate, principalValue) {
136
179
  }
137
180
  }
138
181
  exports.presentValue = presentValue;
139
- function calculateLiquidationData(assetsConfig, assetsData, principals, prices) {
182
+ function calculateLiquidationData(assetsConfig, assetsData, principals, prices, masterConstants) {
140
183
  let gCollateralValue = 0n;
141
184
  let gCollateralAsset = 0n;
142
185
  let gLoanValue = 0n;
@@ -150,7 +193,7 @@ function calculateLiquidationData(assetsConfig, assetsData, principals, prices)
150
193
  const balance = principal > 0 ? (principal * assetData.sRate) / BigInt(1e12) : (principal * assetData.bRate) / BigInt(1e12);
151
194
  if (balance > 0) {
152
195
  const assetWorth = (balance * prices.get(key)) / 10n ** assetConfig.decimals;
153
- totalLimit += (assetWorth * assetConfig.liquidationThreshold) / constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE;
196
+ totalLimit += (assetWorth * assetConfig.liquidationThreshold) / masterConstants.ASSET_COEFFICIENT_SCALE;
154
197
  if (assetWorth > gCollateralValue) {
155
198
  gCollateralValue = assetWorth;
156
199
  gCollateralAsset = key;
@@ -174,7 +217,7 @@ function calculateLiquidationData(assetsConfig, assetsData, principals, prices)
174
217
  const loanDecimal = 10n ** gLoanAssetConfig.decimals;
175
218
  values.push((bigIntMax(gCollateralValue / 2n, bigIntMin(gCollateralValue, 10000000000n)) *
176
219
  loanDecimal *
177
- constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE) /
220
+ masterConstants.ASSET_COEFFICIENT_SCALE) /
178
221
  liquidationBonus /
179
222
  gLoanAssetPrice);
180
223
  values.push((gLoanValue * loanDecimal) / gLoanAssetPrice);
@@ -212,7 +255,7 @@ function calculateLiquidationData(assetsConfig, assetsData, principals, prices)
212
255
  }
213
256
  exports.calculateLiquidationData = calculateLiquidationData;
214
257
  function predictHealthFactor(args) {
215
- const liquidationData = calculateLiquidationData(args.assetsConfig, args.assetsData, args.balances, args.prices);
258
+ const liquidationData = calculateLiquidationData(args.assetsConfig, args.assetsData, args.balances, args.prices, args.masterConstants);
216
259
  const tokenHash = (0, sha256BigInt_1.sha256Hash)(args.tokenSymbol);
217
260
  const assetConfig = args.assetsConfig.get(tokenHash);
218
261
  const assetPrice = Number(args.prices.get(tokenHash));
@@ -222,19 +265,18 @@ function predictHealthFactor(args) {
222
265
  const decimals = Number(assetConfig.decimals);
223
266
  const currentBalance = assetPrice * Number(currentAmount) / Math.pow(10, decimals);
224
267
  const changeType = args.balanceChangeType;
225
- if (currentAmount != null && !Number.isNaN(currentAmount) &&
226
- Number.isFinite(currentAmount) && currentAmount != 0n) {
268
+ if (currentAmount != null && currentAmount != 0n) {
227
269
  if (changeType == User_1.BalanceChangeType.Borrow) {
228
- totalBorrow += currentBalance * (1 + Number(assetConfig.originationFee) / Number(constants_1.MASTER_CONSTANTS.ASSET_ORIGINATION_FEE_SCALE));
270
+ totalBorrow += currentBalance * (1 + Number(assetConfig.originationFee) / Number(args.masterConstants.ASSET_ORIGINATION_FEE_SCALE));
229
271
  }
230
272
  else if (changeType == User_1.BalanceChangeType.Repay) {
231
273
  totalBorrow -= currentBalance;
232
274
  }
233
275
  else if (changeType == User_1.BalanceChangeType.Withdraw) {
234
- totalLimit -= currentBalance * Number(assetConfig.liquidationThreshold) / Number(constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE);
276
+ totalLimit -= currentBalance * Number(assetConfig.liquidationThreshold) / Number(args.masterConstants.ASSET_COEFFICIENT_SCALE);
235
277
  }
236
278
  else if (changeType == User_1.BalanceChangeType.Supply) {
237
- totalLimit += currentBalance * Number(assetConfig.liquidationThreshold) / Number(constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE);
279
+ totalLimit += currentBalance * Number(assetConfig.liquidationThreshold) / Number(args.masterConstants.ASSET_COEFFICIENT_SCALE);
238
280
  }
239
281
  }
240
282
  if (Number(totalLimit) == 0) {
@@ -1,8 +1,8 @@
1
1
  import { Dictionary, DictionaryValue } from '@ton/core';
2
- import { AssetConfig, AssetData, ExtendedAssetData, MasterData } from '../types/Master';
2
+ import { AssetConfig, AssetData, ExtendedAssetsConfig, ExtendedAssetsData, MasterConstants, MasterData, PoolAssetsConfig } from '../types/Master';
3
3
  import { UserData, UserLiteData } from '../types/User';
4
4
  export declare function createAssetData(): DictionaryValue<AssetData>;
5
5
  export declare function createAssetConfig(): DictionaryValue<AssetConfig>;
6
- export declare function parseMasterData(masterDataBOC: string, testnet?: boolean): MasterData;
7
- export declare function parseUserLiteData(userDataBOC: string, assetsData: Dictionary<bigint, ExtendedAssetData>, assetsConfig: Dictionary<bigint, AssetConfig>, testnet?: boolean, applyDust?: boolean): UserLiteData;
8
- export declare function parseUserData(userLiteData: UserLiteData, assetsData: Dictionary<bigint, ExtendedAssetData>, assetsConfig: Dictionary<bigint, AssetConfig>, prices: Dictionary<bigint, bigint>, testnet?: boolean, applyDust?: boolean): UserData;
6
+ export declare function parseMasterData(masterDataBOC: string, poolAssetsConfig: PoolAssetsConfig, masterConstants: MasterConstants): MasterData;
7
+ export declare function parseUserLiteData(userDataBOC: string, assetsData: ExtendedAssetsData, assetsConfig: ExtendedAssetsConfig, poolAssetsConfig: PoolAssetsConfig, masterConstants: MasterConstants, testnet?: boolean, applyDust?: boolean): UserLiteData;
8
+ export declare function parseUserData(userLiteData: UserLiteData, assetsData: ExtendedAssetsData, assetsConfig: ExtendedAssetsConfig, prices: Dictionary<bigint, bigint>, poolAssetConfig: PoolAssetsConfig, masterConstants: MasterConstants, applyDust?: boolean): UserData;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseUserData = exports.parseUserLiteData = exports.parseMasterData = exports.createAssetConfig = exports.createAssetData = void 0;
4
4
  const core_1 = require("@ton/core");
5
- const constants_1 = require("../constants");
6
5
  const math_1 = require("./math");
7
6
  const helpers_1 = require("./helpers");
8
7
  const User_1 = require("../types/User");
@@ -126,8 +125,7 @@ function createAssetConfig() {
126
125
  };
127
126
  }
128
127
  exports.createAssetConfig = createAssetConfig;
129
- function parseMasterData(masterDataBOC, testnet = false) {
130
- const ASSETS_ID = testnet ? constants_1.TESTNET_ASSETS_ID : constants_1.MAINNET_ASSETS_ID;
128
+ function parseMasterData(masterDataBOC, poolAssetsConfig, masterConstants) {
131
129
  const masterSlice = core_1.Cell.fromBase64(masterDataBOC).beginParse();
132
130
  const meta = masterSlice.loadRef().beginParse().loadStringTail();
133
131
  const upgradeConfigParser = masterSlice.loadRef().beginParse();
@@ -152,9 +150,9 @@ function parseMasterData(masterDataBOC, testnet = false) {
152
150
  supply: core_1.Dictionary.empty(),
153
151
  borrow: core_1.Dictionary.empty(),
154
152
  };
155
- for (const [tokenSymbol, assetID] of Object.entries(ASSETS_ID)) {
156
- const assetData = (0, math_1.calculateAssetData)(assetsConfigDict, assetsDataDict, assetID);
157
- assetsExtendedData.set(assetID, assetData);
153
+ for (const [tokenSymbol, asset] of Object.entries(poolAssetsConfig)) {
154
+ const assetData = (0, math_1.calculateAssetData)(assetsConfigDict, assetsDataDict, asset.assetId, masterConstants);
155
+ assetsExtendedData.set(asset.assetId, assetData);
158
156
  }
159
157
  const masterConfig = {
160
158
  ifActive: masterConfigSlice.loadInt(8),
@@ -164,13 +162,13 @@ function parseMasterData(masterDataBOC, testnet = false) {
164
162
  walletToMaster: (0, helpers_1.loadMaybeMyRef)(masterConfigSlice),
165
163
  };
166
164
  masterConfigSlice.endParse();
167
- for (const [_, assetID] of Object.entries(ASSETS_ID)) {
168
- const assetData = assetsExtendedData.get(assetID);
169
- const totalSupply = (0, math_1.calculatePresentValue)(assetData.sRate, assetData.totalSupply);
170
- const totalBorrow = (0, math_1.calculatePresentValue)(assetData.bRate, assetData.totalBorrow);
171
- assetsReserves.set(assetID, assetData.balance - totalSupply + totalBorrow);
172
- apy.supply.set(assetID, (1 + (Number(assetData.supplyInterest) / 1e12) * 24 * 3600) ** 365 - 1);
173
- apy.borrow.set(assetID, (1 + (Number(assetData.borrowInterest) / 1e12) * 24 * 3600) ** 365 - 1);
165
+ for (const [_, asset] of Object.entries(poolAssetsConfig)) {
166
+ const assetData = assetsExtendedData.get(asset.assetId);
167
+ const totalSupply = (0, math_1.calculatePresentValue)(assetData.sRate, assetData.totalSupply, masterConstants);
168
+ const totalBorrow = (0, math_1.calculatePresentValue)(assetData.bRate, assetData.totalBorrow, masterConstants);
169
+ assetsReserves.set(asset.assetId, assetData.balance - totalSupply + totalBorrow);
170
+ apy.supply.set(asset.assetId, (1 + (Number(assetData.supplyInterest) / 1e12) * 24 * 3600) ** 365 - 1);
171
+ apy.borrow.set(asset.assetId, (1 + (Number(assetData.borrowInterest) / 1e12) * 24 * 3600) ** 365 - 1);
174
172
  }
175
173
  return {
176
174
  meta: meta,
@@ -183,8 +181,7 @@ function parseMasterData(masterDataBOC, testnet = false) {
183
181
  };
184
182
  }
185
183
  exports.parseMasterData = parseMasterData;
186
- function parseUserLiteData(userDataBOC, assetsData, assetsConfig, testnet = false, applyDust = false) {
187
- const ASSETS_ID = testnet ? constants_1.TESTNET_ASSETS_ID : constants_1.MAINNET_ASSETS_ID;
184
+ function parseUserLiteData(userDataBOC, assetsData, assetsConfig, poolAssetsConfig, masterConstants, testnet = false, applyDust = false) {
188
185
  const userSlice = core_1.Cell.fromBase64(userDataBOC).beginParse();
189
186
  const codeVersion = userSlice.loadCoins();
190
187
  const masterAddress = userSlice.loadAddress();
@@ -217,16 +214,16 @@ function parseUserLiteData(userDataBOC, assetsData, assetsConfig, testnet = fals
217
214
  */
218
215
  userSlice.endParse();
219
216
  const userBalances = core_1.Dictionary.empty();
220
- for (const [_, assetID] of Object.entries(ASSETS_ID)) {
221
- const assetData = assetsData.get(assetID);
222
- const assetConfig = assetsConfig.get(assetID);
223
- let principals = principalsDict.get(assetID) || 0n;
224
- if (applyDust && (principals > -assetConfig.dust && principals < assetConfig.dust)) { // abs(principals) < dust
217
+ for (const [_, asset] of Object.entries(poolAssetsConfig)) {
218
+ const assetData = assetsData.get(asset.assetId);
219
+ const assetConfig = assetsConfig.get(asset.assetId);
220
+ let principals = principalsDict.get(asset.assetId) || 0n;
221
+ const balance = (0, math_1.presentValue)(assetData.sRate, assetData.bRate, principals, masterConstants);
222
+ if (applyDust && (principals > -assetConfig.dust && balance.amount < assetConfig.dust)) { // v6 will be abs(principals) < dust
225
223
  principals = 0n;
226
- principalsDict.set(assetID, 0n);
224
+ principalsDict.set(asset.assetId, 0n);
227
225
  }
228
- const balance = (0, math_1.presentValue)(assetData.sRate, assetData.bRate, principals);
229
- userBalances.set(assetID, balance);
226
+ userBalances.set(asset.assetId, balance);
230
227
  }
231
228
  return {
232
229
  type: 'active',
@@ -247,52 +244,47 @@ function parseUserLiteData(userDataBOC, assetsData, assetsConfig, testnet = fals
247
244
  };
248
245
  }
249
246
  exports.parseUserLiteData = parseUserLiteData;
250
- function parseUserData(userLiteData, assetsData, assetsConfig, prices, testnet = false, applyDust = false) {
251
- const ASSETS_ID = testnet ? constants_1.TESTNET_ASSETS_ID : constants_1.MAINNET_ASSETS_ID;
247
+ function parseUserData(userLiteData, assetsData, assetsConfig, prices, poolAssetConfig, masterConstants, applyDust = false) {
252
248
  const withdrawalLimits = core_1.Dictionary.empty();
253
249
  const borrowLimits = core_1.Dictionary.empty();
254
250
  let supplyBalance = 0n;
255
251
  let borrowBalance = 0n;
256
- for (const [_, assetID] of Object.entries(ASSETS_ID)) {
257
- const assetData = assetsData.get(assetID);
258
- const assetConfig = assetsConfig.get(assetID);
259
- let principals = userLiteData.principals.get(assetID) || 0n;
260
- if (applyDust && (principals > -assetConfig.dust && principals < assetConfig.dust)) { // abs(principals) < dust
252
+ for (const [_, asset] of Object.entries(poolAssetConfig)) {
253
+ const assetData = assetsData.get(asset.assetId);
254
+ const assetConfig = assetsConfig.get(asset.assetId);
255
+ let principals = userLiteData.principals.get(asset.assetId) || 0n;
256
+ const balance = (0, math_1.presentValue)(assetData.sRate, assetData.bRate, principals, masterConstants);
257
+ if (applyDust && (principals > -assetConfig.dust && balance.amount < assetConfig.dust)) { // v6 will be abs(principals) < dust
261
258
  principals = 0n;
262
- userLiteData.principals.set(assetID, 0n);
259
+ userLiteData.principals.set(asset.assetId, 0n);
263
260
  }
264
- const balance = (0, math_1.presentValue)(assetData.sRate, assetData.bRate, principals);
265
- userLiteData.balances.set(assetID, balance);
261
+ userLiteData.balances.set(asset.assetId, balance);
266
262
  }
267
- for (const [_, assetID] of Object.entries(ASSETS_ID)) {
268
- const assetConfig = assetsConfig.get(assetID);
269
- const balance = userLiteData.balances.get(assetID);
263
+ for (const [_, asset] of Object.entries(poolAssetConfig)) {
264
+ const assetConfig = assetsConfig.get(asset.assetId);
265
+ const balance = userLiteData.balances.get(asset.assetId);
270
266
  if (balance.type === User_1.BalanceType.supply) {
271
- supplyBalance += (balance.amount * prices.get(assetID)) / 10n ** assetConfig.decimals;
267
+ supplyBalance += (balance.amount * prices.get(asset.assetId)) / 10n ** assetConfig.decimals;
272
268
  }
273
269
  if (balance.type === User_1.BalanceType.borrow) {
274
- borrowBalance += (balance.amount * prices.get(assetID)) / 10n ** assetConfig.decimals;
270
+ borrowBalance += (balance.amount * prices.get(asset.assetId)) / 10n ** assetConfig.decimals;
275
271
  }
276
272
  }
277
- const availableToBorrow = (0, math_1.getAvailableToBorrow)(assetsConfig, assetsData, userLiteData.principals, prices);
278
- for (const [_, assetID] of Object.entries(ASSETS_ID)) {
279
- const assetConfig = assetsConfig.get(assetID);
280
- const assetData = assetsData.get(assetID);
281
- const balance = userLiteData.balances.get(assetID);
273
+ const availableToBorrow = (0, math_1.getAvailableToBorrow)(assetsConfig, assetsData, userLiteData.principals, prices, masterConstants);
274
+ for (const [_, asset] of Object.entries(poolAssetConfig)) {
275
+ const assetConfig = assetsConfig.get(asset.assetId);
276
+ const assetData = assetsData.get(asset.assetId);
277
+ const balance = userLiteData.balances.get(asset.assetId);
282
278
  if (balance.type === User_1.BalanceType.supply) {
283
- withdrawalLimits.set(assetID, (0, math_1.bigIntMax)((0, math_1.bigIntMin)(assetData.balance, ((supplyBalance -
284
- (borrowBalance * constants_1.MASTER_CONSTANTS.ASSET_COEFFICIENT_SCALE) / assetConfig.collateralFactor) *
285
- 10n ** assetConfig.decimals) /
286
- prices.get(assetID) -
287
- 5n, balance.amount), 0n));
279
+ withdrawalLimits.set(asset.assetId, (0, math_1.calculateMaximumWithdrawAmount)(assetsConfig, assetsData, userLiteData.principals, prices, masterConstants, asset.assetId));
288
280
  }
289
- borrowLimits.set(assetID, (0, math_1.bigIntMin)((availableToBorrow * 10n ** assetConfig.decimals) / prices.get(assetID), assetData.balance));
281
+ borrowLimits.set(asset.assetId, (0, math_1.bigIntMin)((availableToBorrow * 10n ** assetConfig.decimals) / prices.get(asset.assetId), assetData.balance));
290
282
  }
291
283
  const limitUsed = borrowBalance + availableToBorrow;
292
284
  const limitUsedPercent = limitUsed === 0n
293
285
  ? 0
294
286
  : Number(BigInt(1e9) - (availableToBorrow * BigInt(1e9)) / (borrowBalance + availableToBorrow)) / 1e7;
295
- const liquidationData = (0, math_1.calculateLiquidationData)(assetsConfig, assetsData, userLiteData.principals, prices);
287
+ const liquidationData = (0, math_1.calculateLiquidationData)(assetsConfig, assetsData, userLiteData.principals, prices, masterConstants);
296
288
  const healthFactor = 1 - Number(liquidationData.totalDebt) / Number(liquidationData.totalLimit);
297
289
  return {
298
290
  ...userLiteData,
@@ -1,2 +1,2 @@
1
1
  import { PriceData } from '../types/Common';
2
- export declare function getPrices(endpoints?: string[]): Promise<PriceData>;
2
+ export declare function getPrices(endpoints?: string[], nftId?: string): Promise<PriceData>;
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPrices = void 0;
4
4
  const core_1 = require("@ton/core");
5
- const constants_1 = require("../constants");
6
- async function getPrices(endpoints = ["api.stardust-mainnet.iotaledger.net"]) {
7
- return await Promise.any(endpoints.map(x => loadPrices(x)));
5
+ const general_1 = require("../constants/general");
6
+ async function getPrices(endpoints = ["api.stardust-mainnet.iotaledger.net"], nftId = general_1.MAIN_POOL_NFT_ID) {
7
+ return await Promise.any(endpoints.map(x => loadPrices(nftId, x)));
8
8
  }
9
9
  exports.getPrices = getPrices;
10
- async function loadPrices(endpoint = "api.stardust-mainnet.iotaledger.net") {
11
- let result = await fetch(`https://${endpoint}/api/indexer/v1/outputs/nft/${constants_1.NFT_ID}`, {
10
+ async function loadPrices(nftId, endpoint = "api.stardust-mainnet.iotaledger.net") {
11
+ let result = await fetch(`https://${endpoint}/api/indexer/v1/outputs/nft/${nftId}`, {
12
12
  headers: { accept: 'application/json' },
13
13
  });
14
14
  let outputId = (await result.json());
@@ -0,0 +1,16 @@
1
+ import { PoolAssetConfig } from "../types/Master";
2
+ export declare const TON_MAINNET: PoolAssetConfig;
3
+ export declare const TON_TESTNET: import("../types/Master").PoolTonAssetConfig & {
4
+ name: string;
5
+ };
6
+ export declare const JUSDT_MAINNET: PoolAssetConfig;
7
+ export declare const JUSDC_MAINNET: PoolAssetConfig;
8
+ export declare const STTON_MAINNET: PoolAssetConfig;
9
+ export declare const TSTON_MAINNET: PoolAssetConfig;
10
+ export declare const USDT_MAINNET: PoolAssetConfig;
11
+ export declare const JUSDT_TESTNET: PoolAssetConfig;
12
+ export declare const JUSDC_TESTNET: PoolAssetConfig;
13
+ export declare const STTON_TESTNET: PoolAssetConfig;
14
+ export declare const TONUSDT_DEDUST_MAINNET: PoolAssetConfig;
15
+ export declare const TON_STORM_MAINNET: PoolAssetConfig;
16
+ export declare const USDT_STORM_MAINNET: PoolAssetConfig;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.USDT_STORM_MAINNET = exports.TON_STORM_MAINNET = exports.TONUSDT_DEDUST_MAINNET = exports.STTON_TESTNET = exports.JUSDC_TESTNET = exports.JUSDT_TESTNET = exports.USDT_MAINNET = exports.TSTON_MAINNET = exports.STTON_MAINNET = exports.JUSDC_MAINNET = exports.JUSDT_MAINNET = exports.TON_TESTNET = exports.TON_MAINNET = void 0;
4
+ const core_1 = require("@ton/core");
5
+ const sha256BigInt_1 = require("../utils/sha256BigInt");
6
+ const general_1 = require("./general");
7
+ exports.TON_MAINNET = {
8
+ name: 'TON',
9
+ assetId: (0, sha256BigInt_1.sha256Hash)('TON')
10
+ };
11
+ exports.TON_TESTNET = exports.TON_MAINNET;
12
+ exports.JUSDT_MAINNET = {
13
+ name: 'jUSDT',
14
+ assetId: (0, sha256BigInt_1.sha256Hash)('jUSDT'),
15
+ jettonMasterAddress: core_1.Address.parse('EQBynBO23ywHy_CgarY9NK9FTz0yDsG82PtcbSTQgGoXwiuA'),
16
+ jettonWalletCode: general_1.JETTON_WALLET_STANDART_CODE
17
+ };
18
+ exports.JUSDC_MAINNET = {
19
+ name: 'jUSDC',
20
+ assetId: (0, sha256BigInt_1.sha256Hash)('jUSDC'),
21
+ jettonMasterAddress: core_1.Address.parse('EQB-MPwrd1G6WKNkLz_VnV6WqBDd142KMQv-g1O-8QUA3728'),
22
+ jettonWalletCode: general_1.JETTON_WALLET_STANDART_CODE
23
+ };
24
+ exports.STTON_MAINNET = {
25
+ name: 'stTON',
26
+ assetId: (0, sha256BigInt_1.sha256Hash)('stTON'),
27
+ jettonMasterAddress: core_1.Address.parse('EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k'),
28
+ jettonWalletCode: core_1.Cell.fromBase64('te6cckECEgEAA2IAART/APSkE/S88sgLAQIBYgIDAgLMBAUAG6D2BdqJofQB9IH0gahhAgHUBgcCASAJCgHPCDHAJJfBOAB0NMDAXGwlRNfA/AN4PpA+kAx+gAxcdch+gAx+gAwc6m0AALTHyGCEA+KfqW6lTE0WfAK4CGCEBeNRRm6ljFERAPwC+AhghBZXwe8upUxNFnwDOAUXwTABOMCMIQP8vCAIABE+kQwwADy4U2AAfO1E0PoA+kD6QNQwECNfAwGCCJiWgKFtgBByIm6zIJFxkXDiA8jLBVAGzxZQBPoCy2oDk1jMAZEw4gHJAfsAAgFYCwwCAUgQEQHxAPTP/oA+kAh8AHtRND6APpA+kDUMFE2oVIqxwXy4sEowv/y4sJUNEJwVCATVBQDyFAE+gJYzxYBzxbMySLIywES9AD0AMsAySD5AHB0yMsCygfL/8nQBPpA9AQx+gAg10nCAPLixHeAGMjLBVAIzxZw+gIXy2sTzIA0C9ztRND6APpA+kDUMAjTP/oAUVGgBfpA+kBTW8cFVHNtcFQgE1QUA8hQBPoCWM8WAc8WzMkiyMsBEvQA9ADLAMn5AHB0yMsCygfL/8nQUA3HBRyx8uLDCvoAUaihggiYloBmtgihggjk4cCgGKEnlxBJEDg3XwTjDSXXCwGAODwCeghAXjUUZyMsfGcs/UAf6AiLPFlAGzxYl+gJQA88WyVAFzCORcpFx4lAIqBOgggpiWgCgFLzy4sUEyYBA+wAQI8hQBPoCWM8WAc8WzMntVABwUnmgGKGCEHNi0JzIyx9SMMs/WPoCUAfPFlAHzxbJcYAQyMsFJM8WUAb6AhXLahTMyXH7ABAkECMAfMMAI8IAsI4hghDVMnbbcIAQyMsFUAjPFlAE+gIWy2oSyx8Syz/JcvsAkzVsIeIDyFAE+gJYzxYBzxbMye1UAMkMO1E0PoA+kD6QNQwBtM/+gAwUUShUjfHBfLiwSXC//LiwgSCC5OHAL7y4sWCEHvdl97Iyx8Uyz9Y+gIhzxbJcYAYyMsFJM8WcPoCy2rMyYBA+wBAE8hQBPoCWM8WAc8WzMntVIACBIAg1yHtRND6APpA+kDUMATTHyGCEBeNRRm6AoIQe92X3roSsfLgyNM/MfoAMBOgUCPIUAT6AljPFgHPFszJ7VSBpMmqD')
29
+ };
30
+ exports.TSTON_MAINNET = {
31
+ name: 'tsTON',
32
+ assetId: (0, sha256BigInt_1.sha256Hash)('tsTON'),
33
+ jettonMasterAddress: core_1.Address.parse('EQC98_qAmNEptUtPc7W6xdHh_ZHrBUFpw5Ft_IzNU20QAJav'),
34
+ jettonWalletCode: core_1.Cell.fromBase64('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')
35
+ };
36
+ exports.USDT_MAINNET = {
37
+ name: 'USDT',
38
+ assetId: (0, sha256BigInt_1.sha256Hash)('USDT'),
39
+ jettonMasterAddress: core_1.Address.parse('EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs'),
40
+ jettonWalletCode: core_1.Cell.fromBoc(Buffer.from('b5ee9c7241020f010003d1000114ff00f4a413f4bcf2c80b01020162050202012004030021bc508f6a2686981fd007d207d2068af81c0027bfd8176a2686981fd007d207d206899fc152098402f8d001d0d3030171b08e48135f038020d721ed44d0d303fa00fa40fa40d104d31f01840f218210178d4519ba0282107bdd97deba12b1f2f48040d721fa003012a0401303c8cb0358fa0201cf1601cf16c9ed54e0fa40fa4031fa0031f401fa0031fa00013170f83a02d31f012082100f8a7ea5ba8e85303459db3ce0330c0602d0228210178d4519ba8e84325adb3ce034218210595f07bcba8e843101db3ce032208210eed236d3ba8e2f30018040d721d303d1ed44d0d303fa00fa40fa40d1335142c705f2e04a403303c8cb0358fa0201cf1601cf16c9ed54e06c218210d372158cbadc840ff2f0080701f2ed44d0d303fa00fa40fa40d106d33f0101fa00fa40f401d15141a15288c705f2e04926c2fff2afc882107bdd97de01cb1f5801cb3f01fa0221cf1658cf16c9c8801801cb0526cf1670fa02017158cb6accc903f839206e943081169fde718102f270f8380170f836a0811a7770f836a0bcf2b0028050fb00030903f4ed44d0d303fa00fa40fa40d12372b0c002f26d07d33f0101fa005141a004fa40fa4053bac705f82a5464e070546004131503c8cb0358fa0201cf1601cf16c921c8cb0113f40012f400cb00c9f9007074c8cb02ca07cbffc9d0500cc7051bb1f2e04a09fa0021925f04e30d26d70b01c000b393306c33e30d55020b0a09002003c8cb0358fa0201cf1601cf16c9ed54007a5054a1f82fa07381040982100966018070f837b60972fb02c8801001cb055005cf1670fa027001cb6a8210d53276db01cb1f5801cb3fc9810082fb00590060c882107362d09c01cb1f2501cb3f5004fa0258cf1658cf16c9c8801001cb0524cf1658fa02017158cb6accc98011fb0001f203d33f0101fa00fa4021fa4430c000f2e14ded44d0d303fa00fa40fa40d15309c7052471b0c00021b1f2ad522bc705500ab1f2e0495115a120c2fff2aff82a54259070546004131503c8cb0358fa0201cf1601cf16c921c8cb0113f40012f400cb00c920f9007074c8cb02ca07cbffc9d004fa40f401fa00200d019820d70b009ad74bc00101c001b0f2b19130e2c88210178d451901cb1f500a01cb3f5008fa0223cf1601cf1626fa025007cf16c9c8801801cb055004cf1670fa024063775003cb6bccccc945370e00b42191729171e2f839206e938124279120e2216e94318128739101e25023a813a0738103a370f83ca00270f83612a00170f836a07381040982100966018070f837a0bcf2b0048050fb005803c8cb0358fa0201cf1601cf16c9ed5401f9319e', 'hex'))[0],
41
+ };
42
+ exports.JUSDT_TESTNET = {
43
+ name: 'jUSDT',
44
+ assetId: (0, sha256BigInt_1.sha256Hash)('jUSDT'),
45
+ jettonMasterAddress: core_1.Address.parse('kQBe4gtSQMxM5RpMYLr4ydNY72F8JkY-icZXG1NJcsju8XM7'),
46
+ jettonWalletCode: general_1.JETTON_WALLET_STANDART_CODE_TESTNET
47
+ };
48
+ exports.JUSDC_TESTNET = {
49
+ name: 'jUSDC',
50
+ assetId: (0, sha256BigInt_1.sha256Hash)('jUSDC'),
51
+ jettonMasterAddress: core_1.Address.parse('kQDaY5yUatYnHei73HBqRX_Ox9LK2XnR7XuCY9MFC2INbfYI'),
52
+ jettonWalletCode: general_1.JETTON_WALLET_STANDART_CODE_TESTNET
53
+ };
54
+ exports.STTON_TESTNET = {
55
+ name: 'stTON',
56
+ assetId: (0, sha256BigInt_1.sha256Hash)('stTON'),
57
+ jettonMasterAddress: core_1.Address.parse('kQC3Duw3dg8k98xf5S7Bm7YOWVJ5QW8hm3iLqFfJfa_g9h07'),
58
+ jettonWalletCode: core_1.Cell.fromBoc(Buffer.from('b5ee9c7201021201000362000114ff00f4a413f4bcf2c80b0102016202030202cc0405001ba0f605da89a1f401f481f481a8610201d40607020120090a01cf0831c02497c138007434c0c05c6c2544d7c0fc03383e903e900c7e800c5c75c87e800c7e800c1cea6d0000b4c7c8608403e29fa96ea54c4d167c027808608405e351466ea58c511100fc02b80860841657c1ef2ea54c4d167c02f80517c1300138c08c2103fcbc200800113e910c30003cb85360007ced44d0fa00fa40fa40d43010235f03018208989680a16d801072226eb32091719170e203c8cb055006cf165004fa02cb6a039358cc019130e201c901fb000201200b0c0081d40106b90f6a2687d007d207d206a1802698f90c1080bc6a28cdd0141083deecbef5d0958f97064699f98fd001809d02811e428027d012c678b00e78b6664f6aa401f1503d33ffa00fa4021f001ed44d0fa00fa40fa40d4305136a1522ac705f2e2c128c2fff2e2c254344270542013541403c85004fa0258cf1601cf16ccc922c8cb0112f400f400cb00c920f9007074c8cb02ca07cbffc9d004fa40f40431fa0020d749c200f2e2c4778018c8cb055008cf1670fa0217cb6b13cc80d0201200e0f009e8210178d4519c8cb1f19cb3f5007fa0222cf165006cf1625fa025003cf16c95005cc2391729171e25008a813a0820a625a00a014bcf2e2c504c98040fb001023c85004fa0258cf1601cf16ccc9ed5402f73b51343e803e903e90350c0234cffe80145468017e903e9014d6f1c1551cdb5c150804d50500f214013e809633c58073c5b33248b232c044bd003d0032c0327e401c1d3232c0b281f2fff274140371c1472c7cb8b0c2be80146a2860822625a019ad8228608239387028062849e5c412440e0dd7c138c34975c2c060101100c90c3b51343e803e903e90350c01b4cffe800c145128548df1c17cb8b04970bffcb8b0812082e4e1c02fbcb8b160841ef765f7b232c7c532cfd63e808873c5b25c60063232c14933c59c3e80b2dab33260103ec01004f214013e809633c58073c5b3327b552000705279a018a182107362d09cc8cb1f5230cb3f58fa025007cf165007cf16c9718010c8cb0524cf165006fa0215cb6a14ccc971fb0010241023007cc30023c200b08e218210d53276db708010c8cb055008cf165004fa0216cb6a12cb1f12cb3fc972fb0093356c21e203c85004fa0258cf1601cf16ccc9ed54', 'hex'))[0],
59
+ };
60
+ exports.TONUSDT_DEDUST_MAINNET = {
61
+ name: 'TONUSDT_DEDUST',
62
+ assetId: (0, sha256BigInt_1.sha256Hash)('TONUSDT_DEDUST'),
63
+ jettonMasterAddress: core_1.Address.parse('EQA-X_yo3fzzbDbJ_0bzFWKqtRuZFIRa1sJsveZJ1YpViO3r'),
64
+ jettonWalletCode: core_1.Cell.fromBoc(Buffer.from('b5ee9c7241021201000334000114ff00f4a413f4bcf2c80b0102016202110202cc03060201d4040500c30831c02497c138007434c0c05c6c2544d7c0fc02f83e903e900c7e800c5c75c87e800c7e800c1cea6d0000b4c7e08403e29fa954882ea54c4d167c0238208405e3514654882ea58c511100fc02780d60841657c1ef2ea4d67c02b817c12103fcbc2000113e910c1c2ebcb85360020148070e020120080a01f100f4cffe803e90087c007b51343e803e903e90350c144da8548ab1c17cb8b04a30bffcb8b0950d109c150804d50500f214013e809633c58073c5b33248b232c044bd003d0032c032483e401c1d3232c0b281f2fff274013e903d010c7e800835d270803cb8b11de0063232c1540233c59c3e8085f2dac4f3200900ae8210178d4519c8cb1f19cb3f5007fa0222cf165006cf1625fa025003cf16c95005cc2391729171e25008a813a08208e4e1c0aa008208989680a0a014bcf2e2c504c98040fb001023c85004fa0258cf1601cf16ccc9ed5403f73b51343e803e903e90350c0234cffe80145468017e903e9014d6f1c1551cdb5c150804d50500f214013e809633c58073c5b33248b232c044bd003d0032c0327e401c1d3232c0b281f2fff274140371c1472c7cb8b0c2be80146a2860822625a020822625a004ad8228608239387028062849f8c3c975c2c070c008e00b0c0d00705279a018a182107362d09cc8cb1f5230cb3f58fa025007cf165007cf16c9718010c8cb0524cf165006fa0215cb6a14ccc971fb0010241023000e10491038375f040076c200b08e218210d53276db708010c8cb055008cf165004fa0216cb6a12cb1f12cb3fc972fb0093356c21e203c85004fa0258cf1601cf16ccc9ed540201200f1000db3b51343e803e903e90350c01f4cffe803e900c145468549271c17cb8b049f0bffcb8b0a0823938702a8005a805af3cb8b0e0841ef765f7b232c7c572cfd400fe8088b3c58073c5b25c60063232c14933c59c3e80b2dab33260103ec01004f214013e809633c58073c5b3327b55200083200835c87b51343e803e903e90350c0134c7e08405e3514654882ea0841ef765f784ee84ac7cb8b174cfcc7e800c04e81408f214013e809633c58073c5b3327b5520001ba0f605da89a1f401f481f481a861f0a7d84b', 'hex'))[0],
65
+ };
66
+ exports.TON_STORM_MAINNET = {
67
+ name: 'TON_STORM',
68
+ assetId: (0, sha256BigInt_1.sha256Hash)('TON_STORM'),
69
+ jettonMasterAddress: core_1.Address.parse('EQCNY2AQ3ZDYwJAqx_nzl9i9Xhd_Ex7izKJM6JTxXRnO6n1F'),
70
+ jettonWalletCode: core_1.Cell.fromBoc(Buffer.from('b5ee9c7241021301000380000114ff00f4a413f4bcf2c80b0102016202100202cd030f04add106380792000e8698180b8d8474289af81ed9e707d207d2018fd0018b8eb90fd0018fd001839d4da0001698f90c10807c53f52dd4742989a2ced9e7010c1080bc6a28cdd474318a22201ed9e701a9041082caf83de5d40405080c00888020d721ed44d0fa00fa40fa40d74c04d31f8200fff0228210178d4519ba0382107bdd97deba13b112f2f4d33f31fa003013a05023c85004fa0258cf1601cf16ccc9ed5401f603d33ffa00fa4021f007ed44d0fa00fa40fa40d74c5136a1522ac705f2e2c128c2fff2e2c2545255705202541304c85004fa0258cf1601cf16ccc921c8cb0113f40012f400cb00c97021f90074c8cb0212cb07cbffc9d004fa40f40431fa0020d749c200f2e2c48210178d4519c8cb1f1acb3f5008fa0223cf1601060176cf1626fa025007cf162591729171e2500aa815a0820a43d580a016bcf2e2c57007c9103741408040db3c4300c85004fa0258cf1601cf16ccc9ed5407002e778018c8cb055005cf165005fa0213cb6bccccc901fb0002f6ed44d0fa00fa40fa40d74c08d33ffa005151a005fa40fa40547c25705202541304c85004fa0258cf1601cf16ccc921c8cb0113f40012f400cb00c97021f90074c8cb0212cb07cbffc9d031536cc7050dc7051cb1f2e2c30afa0051a8a12195104a395f04e30d048208989680b60972fb0225d70b01c30003c20013090a014c521aa018a182107362d09cc8cb1f5240cb3f5003fa0201cf165008cf16c954253071db3c10350e0158b08e948210d53276dbc8cb1f14cb3f704055810082db3c923333e25003c85004fa0258cf1601cf16ccc9ed540b0030708018c8cb055004cf165004fa0212cb6a01cf17c901fb0002a08e843059db3ce06c22ed44d0fa00fa40fa40d74c10235f030182106d8e5e3cba8ea75202c705f2e2c1820898968070fb0201d70b3f8210d53276dbc8cb1fcb3f7001c912810082db3ce05f03840ff2f00d0e01bc30ed44d0fa00fa40fa40d74c06d33ffa00fa40305151a15248c705f2e2c126c2fff2e2c20582100ee6b280b9f2d2c782107bdd97dec8cb1fcb3f5004fa0221cf1658cf167001c952308040db3c4013c85004fa0258cf1601cf16ccc9ed540e002c718018c8cb055004cf165004fa0212cb6accc901fb000011f7d22186000797163402016611120021b5fe7da89a1f401f481f481ae9826be070001bb7605da89a1f401f481f481ae990c6f31b9d', 'hex'))[0],
71
+ };
72
+ exports.USDT_STORM_MAINNET = {
73
+ name: 'USDT_STORM',
74
+ assetId: (0, sha256BigInt_1.sha256Hash)('USDT_STORM'),
75
+ jettonMasterAddress: core_1.Address.parse('EQCup4xxCulCcNwmOocM9HtDYPU8xe0449tQLp6a-5BLEegW'),
76
+ jettonWalletCode: core_1.Cell.fromBoc(Buffer.from('b5ee9c7241021301000380000114ff00f4a413f4bcf2c80b0102016202100202cd030f04add106380792000e8698180b8d8474289af81ed9e707d207d2018fd0018b8eb90fd0018fd001839d4da0001698f90c10807c53f52dd4742989a2ced9e7010c1080bc6a28cdd474318a22201ed9e701a9041082caf83de5d40405080c00888020d721ed44d0fa00fa40fa40d74c04d31f8200fff0228210178d4519ba0382107bdd97deba13b112f2f4d33f31fa003013a05023c85004fa0258cf1601cf16ccc9ed5401f603d33ffa00fa4021f007ed44d0fa00fa40fa40d74c5136a1522ac705f2e2c128c2fff2e2c2545255705202541304c85004fa0258cf1601cf16ccc921c8cb0113f40012f400cb00c97021f90074c8cb0212cb07cbffc9d004fa40f40431fa0020d749c200f2e2c48210178d4519c8cb1f1acb3f5008fa0223cf1601060176cf1626fa025007cf162591729171e2500aa815a0820a43d580a016bcf2e2c57007c9103741408040db3c4300c85004fa0258cf1601cf16ccc9ed5407002e778018c8cb055005cf165005fa0213cb6bccccc901fb0002f6ed44d0fa00fa40fa40d74c08d33ffa005151a005fa40fa40547c25705202541304c85004fa0258cf1601cf16ccc921c8cb0113f40012f400cb00c97021f90074c8cb0212cb07cbffc9d031536cc7050dc7051cb1f2e2c30afa0051a8a12195104a395f04e30d048208989680b60972fb0225d70b01c30003c20013090a014c521aa018a182107362d09cc8cb1f5240cb3f5003fa0201cf165008cf16c954253071db3c10350e0158b08e948210d53276dbc8cb1f14cb3f704055810082db3c923333e25003c85004fa0258cf1601cf16ccc9ed540b0030708018c8cb055004cf165004fa0212cb6a01cf17c901fb0002a08e843059db3ce06c22ed44d0fa00fa40fa40d74c10235f030182106d8e5e3cba8ea75202c705f2e2c1820898968070fb0201d70b3f8210d53276dbc8cb1fcb3f7001c912810082db3ce05f03840ff2f00d0e01bc30ed44d0fa00fa40fa40d74c06d33ffa00fa40305151a15248c705f2e2c126c2fff2e2c20582100ee6b280b9f2d2c782107bdd97dec8cb1fcb3f5004fa0221cf1658cf167001c952308040db3c4013c85004fa0258cf1601cf16ccc9ed540e002c718018c8cb055004cf165004fa0212cb6accc901fb000011f7d22186000797163402016611120021b5fe7da89a1f401f481f481ae9826be070001bb7605da89a1f401f481f481ae990c6f31b9d', 'hex'))[0],
77
+ };