@gearbox-protocol/sdk 14.12.0-next.77 → 14.12.0-next.78

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.
Files changed (88) hide show
  1. package/dist/cjs/model/primitives.schema.js +5 -4
  2. package/dist/cjs/preview/index.js +0 -1
  3. package/dist/cjs/preview/preview/buildDelayedPreview.js +4 -3
  4. package/dist/cjs/preview/preview/index.js +0 -1
  5. package/dist/cjs/preview/preview/previewAdjustCreditAccount.js +3 -2
  6. package/dist/cjs/preview/preview/types.js +0 -16
  7. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +12 -38
  8. package/dist/cjs/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +1 -1
  9. package/dist/cjs/sdk/index.js +3 -0
  10. package/dist/cjs/sdk/market/credit/CreditFacadeV310Contract.js +10 -0
  11. package/dist/cjs/sdk/market/credit/expectedBalanceDeltas.js +25 -0
  12. package/dist/cjs/sdk/market/credit/index.js +2 -0
  13. package/dist/cjs/sdk/market/index.js +2 -0
  14. package/dist/cjs/sdk/utils/index.js +1 -0
  15. package/dist/cjs/sdk/utils/zod.js +36 -14
  16. package/dist/esm/dev/AccountOpener.js +1 -1
  17. package/dist/esm/dev/withdrawalUtils.js +1 -1
  18. package/dist/esm/model/primitives.schema.js +6 -5
  19. package/dist/esm/plugins/adapters/contracts/ERC4626AdapterContract.js +1 -1
  20. package/dist/esm/preview/index.js +2 -2
  21. package/dist/esm/preview/preview/buildDelayedPreview.js +5 -4
  22. package/dist/esm/preview/preview/index.js +2 -2
  23. package/dist/esm/preview/preview/previewAdjustCreditAccount.js +4 -3
  24. package/dist/esm/preview/preview/types.js +1 -16
  25. package/dist/esm/preview/simulate/simulatePoolOperation.js +1 -1
  26. package/dist/esm/preview/trace/extractTransfers.js +1 -1
  27. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +14 -40
  28. package/dist/esm/sdk/accounts/credit-account-compressor/CreditAccountCompressor.js +1 -1
  29. package/dist/esm/sdk/accounts/liquidations/LiquidationsService.js +1 -1
  30. package/dist/esm/sdk/accounts/withdrawal-compressor/RedemptionLoggerV310Contract.js +1 -1
  31. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.js +1 -1
  32. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.js +1 -1
  33. package/dist/esm/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.js +1 -1
  34. package/dist/esm/sdk/base/TokensMeta.js +2 -2
  35. package/dist/esm/sdk/chain/detectNetwork.js +1 -1
  36. package/dist/esm/sdk/core/createAddressProvider.js +1 -1
  37. package/dist/esm/sdk/index.js +3 -2
  38. package/dist/esm/sdk/market/credit/CreditFacadeV310BaseContract.js +1 -1
  39. package/dist/esm/sdk/market/credit/CreditFacadeV310Contract.js +10 -0
  40. package/dist/esm/sdk/market/credit/expectedBalanceDeltas.js +24 -0
  41. package/dist/esm/sdk/market/credit/index.js +2 -1
  42. package/dist/esm/sdk/market/index.js +2 -1
  43. package/dist/esm/sdk/market/pool/PoolV310Contract.js +1 -1
  44. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +1 -1
  45. package/dist/esm/sdk/market/zapper/ZapperContract.js +1 -1
  46. package/dist/esm/sdk/pools/PoolService.js +1 -1
  47. package/dist/esm/sdk/utils/index.js +2 -2
  48. package/dist/esm/sdk/utils/viem/simulateWithPriceUpdates.js +1 -1
  49. package/dist/esm/sdk/utils/zod.js +36 -15
  50. package/dist/types/dev/AccountOpener.d.ts +1 -1
  51. package/dist/types/model/curators.schema.d.ts +1 -1
  52. package/dist/types/model/history.schema.d.ts +6 -6
  53. package/dist/types/model/liquidations.schema.d.ts +47 -47
  54. package/dist/types/model/opportunities.schema.d.ts +101 -101
  55. package/dist/types/model/positions.schema.d.ts +92 -92
  56. package/dist/types/model/primitives.d.ts +1 -0
  57. package/dist/types/model/primitives.schema.d.ts +9 -8
  58. package/dist/types/preview/index.d.ts +2 -2
  59. package/dist/types/preview/preview/index.d.ts +2 -2
  60. package/dist/types/preview/preview/types.d.ts +1 -16
  61. package/dist/types/sdk/OnchainSDK.d.ts +3 -3
  62. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +8 -7
  63. package/dist/types/sdk/accounts/bots/types.d.ts +1 -1
  64. package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressor.d.ts +1 -1
  65. package/dist/types/sdk/accounts/credit-account-compressor/CreditAccountCompressorV310Contract.d.ts +1 -1
  66. package/dist/types/sdk/accounts/index.d.ts +2 -2
  67. package/dist/types/sdk/accounts/intents/operations/repay-credit-account/index.d.ts +1 -2
  68. package/dist/types/sdk/accounts/types.d.ts +8 -78
  69. package/dist/types/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV310Contract.d.ts +1 -1
  70. package/dist/types/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV311Contract.d.ts +1 -1
  71. package/dist/types/sdk/accounts/withdrawal-compressor/WithdrawalCompressorV313Contract.d.ts +1 -1
  72. package/dist/types/sdk/base/index.d.ts +2 -2
  73. package/dist/types/sdk/base/types.d.ts +42 -1
  74. package/dist/types/sdk/index.d.ts +25 -24
  75. package/dist/types/sdk/market/credit/CreditFacadeV310Contract.d.ts +6 -3
  76. package/dist/types/sdk/market/credit/CreditSuite.d.ts +2 -2
  77. package/dist/types/sdk/market/credit/expectedBalanceDeltas.d.ts +39 -0
  78. package/dist/types/sdk/market/credit/index.d.ts +3 -2
  79. package/dist/types/sdk/market/credit/types.d.ts +26 -3
  80. package/dist/types/sdk/market/index.d.ts +4 -3
  81. package/dist/types/sdk/market/rwa/index.d.ts +2 -2
  82. package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +1 -2
  83. package/dist/types/sdk/market/rwa/types.d.ts +11 -2
  84. package/dist/types/sdk/options.d.ts +4 -4
  85. package/dist/types/sdk/pools/types.d.ts +1 -12
  86. package/dist/types/sdk/utils/index.d.ts +2 -2
  87. package/dist/types/sdk/utils/zod.d.ts +7 -3
  88. package/package.json +1 -1
@@ -31,14 +31,15 @@ const assetTypeSchema = zod_v4.z.union([
31
31
  zod_v4.z.literal("BTC")
32
32
  ]);
33
33
  /**
34
- * {@link Leverage}
34
+ * {@link Leverage}. Nonnegative rather than positive: `0` is the backend's
35
+ * encoding of "leverage unavailable".
35
36
  **/
36
- const leverageSchema = zod_v4.z.number().positive();
37
+ const leverageSchema = zod_v4.z.number().nonnegative();
37
38
  /**
38
39
  * {@link Amount}
39
40
  **/
40
41
  const amountSchema = zod_v4.z.object({
41
- value: zod_v4.z.bigint(),
42
+ value: require_sdk_utils_zod.ZodBigInt(),
42
43
  valueUsd: zod_v4.z.number().nullable()
43
44
  });
44
45
  /**
@@ -62,7 +63,7 @@ const tokenAmountSchema = amountSchema.extend({ token: tokenSchema });
62
63
  const txCallSchema = zod_v4.z.object({
63
64
  to: require_sdk_utils_zod.ZodAddress(),
64
65
  callData: require_sdk_utils_zod.ZodHex(),
65
- value: zod_v4.z.bigint().optional()
66
+ value: require_sdk_utils_zod.ZodBigInt().optional()
66
67
  });
67
68
  //#endregion
68
69
  exports.amountSchema = amountSchema;
@@ -43,7 +43,6 @@ exports.ERROR_NON_ADAPTER_CALL_IN_BRACKET = require_preview_preview_types.ERROR_
43
43
  exports.ERROR_UNPREVIEWABLE_ADAPTER_CALL = require_preview_preview_types.ERROR_UNPREVIEWABLE_ADAPTER_CALL;
44
44
  exports.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP = require_preview_preview_types.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP;
45
45
  exports.ERROR_UNPRICEABLE_TOKEN = require_preview_preview_types.ERROR_UNPRICEABLE_TOKEN;
46
- exports.PREVIEW_DUST = require_preview_preview_types.PREVIEW_DUST;
47
46
  exports.Prerequisite = require_preview_prerequisites_Prerequisite.Prerequisite;
48
47
  exports.RWAOpenRequirementsPrerequisite = require_preview_prerequisites_RWAOpenRequirementsPrerequisite.RWAOpenRequirementsPrerequisite;
49
48
  exports.TransferAlignmentError = require_preview_trace_errors.TransferAlignmentError;
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_sdk_utils_AssetsMap = require("../../sdk/utils/AssetsMap.js");
3
3
  const require_sdk_utils_bigint_math = require("../../sdk/utils/bigint-math.js");
4
+ const require_sdk_constants_math = require("../../sdk/constants/math.js");
4
5
  require("../../sdk/index.js");
5
6
  require("../../common-utils/index.js");
6
7
  const require_preview_preview_types = require("./types.js");
@@ -172,7 +173,7 @@ function buildClosePreview(post, converter, receivedToken) {
172
173
  };
173
174
  }
174
175
  function buildAdjustPreview(post, before, collateralWithdrawn, converter) {
175
- const totalValue = totalValueInUnderlying(post, converter.convert, require_preview_preview_types.PREVIEW_DUST);
176
+ const totalValue = totalValueInUnderlying(post, converter.convert, require_sdk_constants_math.DUST_THRESHOLD);
176
177
  return {
177
178
  operation: "AdjustCreditAccount",
178
179
  creditManager: post.creditManager,
@@ -184,8 +185,8 @@ function buildAdjustPreview(post, before, collateralWithdrawn, converter) {
184
185
  debtChange: post.debt - before.debt,
185
186
  quotas: post.quotas.toAssets(0n),
186
187
  quotasChange: post.quotas.difference(before.quotas).toAssets(),
187
- assets: post.balances.toAssets(require_preview_preview_types.PREVIEW_DUST),
188
- assetsChange: post.balances.difference(before.balances).toAssets(require_preview_preview_types.PREVIEW_DUST),
188
+ assets: post.balances.toAssets(require_sdk_constants_math.DUST_THRESHOLD),
189
+ assetsChange: post.balances.difference(before.balances).toAssets(require_sdk_constants_math.DUST_THRESHOLD),
189
190
  error: converter.error
190
191
  };
191
192
  }
@@ -19,7 +19,6 @@ exports.ERROR_NON_ADAPTER_CALL_IN_BRACKET = require_preview_preview_types.ERROR_
19
19
  exports.ERROR_UNPREVIEWABLE_ADAPTER_CALL = require_preview_preview_types.ERROR_UNPREVIEWABLE_ADAPTER_CALL;
20
20
  exports.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP = require_preview_preview_types.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP;
21
21
  exports.ERROR_UNPRICEABLE_TOKEN = require_preview_preview_types.ERROR_UNPRICEABLE_TOKEN;
22
- exports.PREVIEW_DUST = require_preview_preview_types.PREVIEW_DUST;
23
22
  exports.UnsupportedOperationError = require_preview_preview_errors.UnsupportedOperationError;
24
23
  exports.buildDelayedPreview = require_preview_preview_buildDelayedPreview.buildDelayedPreview;
25
24
  exports.classifyCloseOrRepay = require_preview_preview_detectCloseOrRepay.classifyCloseOrRepay;
@@ -1,5 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_sdk_constants_address_provider = require("../../sdk/constants/address-provider.js");
3
+ const require_sdk_constants_math = require("../../sdk/constants/math.js");
3
4
  require("../../sdk/index.js");
4
5
  const require_preview_preview_types = require("./types.js");
5
6
  const require_preview_preview_replayMulticall = require("./replayMulticall.js");
@@ -20,8 +21,8 @@ async function previewAdjustCreditAccount(input, operation, options) {
20
21
  let error = replayError;
21
22
  const { assets: collateralAdded, error: unwrapError } = require_preview_preview_unwrapNativeCollateral.unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(require_sdk_constants_address_provider.AP_WETH_TOKEN, 0));
22
23
  error ??= unwrapError;
23
- const assets = account.balances.toAssets(require_preview_preview_types.PREVIEW_DUST);
24
- const assetsChange = account.balances.difference(before.balances).toAssets(require_preview_preview_types.PREVIEW_DUST);
24
+ const assets = account.balances.toAssets(require_sdk_constants_math.DUST_THRESHOLD);
25
+ const assetsChange = account.balances.difference(before.balances).toAssets(require_sdk_constants_math.DUST_THRESHOLD);
25
26
  const totalValue = assets.reduce((acc, { token, balance }) => {
26
27
  try {
27
28
  return acc + market.priceOracle.convert(token, market.underlying, balance);
@@ -32,21 +32,6 @@ const ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP = 1005;
32
32
  const ERROR_INVALID_TRANSACTION_VALUE = 1006;
33
33
  /** A token in the preview could not be priced by the oracle */
34
34
  const ERROR_UNPRICEABLE_TOKEN = 2001;
35
- /**
36
- * Dust threshold for replayed preview balances and balance changes.
37
- *
38
- * Multicalls assembled by `CreditAccountsServiceV310` subtract a 10-unit
39
- * safety buffer from every expected output token in their
40
- * `storeExpectedBalances` deltas (`amount - 10n` in
41
- * `assembleStartDelayedWithdrawalCalls`/`assembleClaimDelayedCalls`), while
42
- * subsequent calls in the same multicall spend exact on-chain amounts. A
43
- * replay that credits only the min-guarantee can therefore be off by up to
44
- * 10 units per token, including small negative residues that are impossible
45
- * on-chain. Amounts within this threshold (in absolute value) are filtered
46
- * from preview outputs; anything beyond it is a genuine discrepancy and is
47
- * reported.
48
- */
49
- const PREVIEW_DUST = 10n;
50
35
  //#endregion
51
36
  exports.ERROR_ADAPTER_CALL_OUTSIDE_BRACKET = ERROR_ADAPTER_CALL_OUTSIDE_BRACKET;
52
37
  exports.ERROR_INVALID_TRANSACTION_VALUE = ERROR_INVALID_TRANSACTION_VALUE;
@@ -55,4 +40,3 @@ exports.ERROR_NON_ADAPTER_CALL_IN_BRACKET = ERROR_NON_ADAPTER_CALL_IN_BRACKET;
55
40
  exports.ERROR_UNPREVIEWABLE_ADAPTER_CALL = ERROR_UNPREVIEWABLE_ADAPTER_CALL;
56
41
  exports.ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP = ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP;
57
42
  exports.ERROR_UNPRICEABLE_TOKEN = ERROR_UNPRICEABLE_TOKEN;
58
- exports.PREVIEW_DUST = PREVIEW_DUST;
@@ -11,6 +11,8 @@ require("../base/index.js");
11
11
  const require_sdk_accounts_bots_AccountBotsService = require("./bots/AccountBotsService.js");
12
12
  require("./bots/index.js");
13
13
  const require_abi_compressors_rewardsCompressor = require("../../abi/compressors/rewardsCompressor.js");
14
+ const require_sdk_market_credit_expectedBalanceDeltas = require("../market/credit/expectedBalanceDeltas.js");
15
+ require("../market/index.js");
14
16
  const require_sdk_accounts_credit_account_compressor_CreditAccountCompressor = require("./credit-account-compressor/CreditAccountCompressor.js");
15
17
  require("./credit-account-compressor/index.js");
16
18
  const require_sdk_accounts_multicall_utils = require("./multicall-utils.js");
@@ -174,49 +176,21 @@ var CreditAccountsServiceV310 = class extends require_sdk_base_SDKConstruct.SDKC
174
176
  * {@inheritDoc ICreditAccountsService.assembleStartDelayedWithdrawalCalls}
175
177
  **/
176
178
  assembleStartDelayedWithdrawalCalls({ creditFacade, preview }) {
177
- const record = preview.outputs.reduce((acc, o) => {
178
- const token = o.token.toLowerCase();
179
- acc[token] = (acc[token] || 0n) + o.amount;
180
- return acc;
181
- }, {});
182
- const deltas = Object.entries(record).filter(([, a]) => a > 10n).map(([token, amount]) => ({
183
- token,
184
- amount: amount > 10n ? amount - 10n : 0n
185
- }));
186
- if (preview.amountIn > 0n) deltas.push({
187
- token: preview.token,
188
- amount: -preview.amountIn
189
- });
190
- const facade = this.sdk.marketRegister.findCreditFacade(creditFacade);
191
- return [
192
- facade.prepareStoreExpectedBalances(deltas),
193
- ...preview.requestCalls,
194
- facade.prepareCompareBalances()
195
- ];
179
+ return this.sdk.marketRegister.findCreditFacade(creditFacade).prepareWithBalanceCheck(require_sdk_market_credit_expectedBalanceDeltas.expectedBalanceDeltas({
180
+ outputs: preview.outputs,
181
+ spentToken: preview.token,
182
+ spentAmount: preview.amountIn
183
+ }), preview.requestCalls);
196
184
  }
197
185
  /**
198
186
  * {@inheritDoc ICreditAccountsService.assembleClaimDelayedCalls}
199
187
  **/
200
188
  assembleClaimDelayedCalls({ creditFacade, claimableNow }) {
201
- const record = claimableNow.outputs.reduce((acc, o) => {
202
- const token = o.token.toLowerCase();
203
- acc[token] = (acc[token] || 0n) + o.amount;
204
- return acc;
205
- }, {});
206
- const deltas = Object.entries(record).filter(([, a]) => a > 10n).map(([token, amount]) => ({
207
- token,
208
- amount: amount > 10n ? amount - 10n : 0n
209
- }));
210
- if (claimableNow.withdrawalTokenSpent > 0n) deltas.push({
211
- token: claimableNow.withdrawalPhantomToken,
212
- amount: -claimableNow.withdrawalTokenSpent
213
- });
214
- const facade = this.sdk.marketRegister.findCreditFacade(creditFacade);
215
- return [
216
- facade.prepareStoreExpectedBalances(deltas),
217
- ...claimableNow.claimCalls,
218
- facade.prepareCompareBalances()
219
- ];
189
+ return this.sdk.marketRegister.findCreditFacade(creditFacade).prepareWithBalanceCheck(require_sdk_market_credit_expectedBalanceDeltas.expectedBalanceDeltas({
190
+ outputs: claimableNow.outputs,
191
+ spentToken: claimableNow.withdrawalPhantomToken,
192
+ spentAmount: claimableNow.withdrawalTokenSpent
193
+ }), claimableNow.claimCalls);
220
194
  }
221
195
  /**
222
196
  * {@inheritDoc ICreditAccountsService.getApprovalAddress}
@@ -10,12 +10,12 @@ const require_sdk_utils_hex = require("../../utils/hex.js");
10
10
  require("../../utils/index.js");
11
11
  const require_sdk_base_SDKConstruct = require("../../base/SDKConstruct.js");
12
12
  require("../../base/index.js");
13
- const require_abi_rwa_iRWAFactory = require("../../../abi/rwa/iRWAFactory.js");
14
13
  const require_sdk_market_math = require("../../market/math.js");
15
14
  const require_sdk_market_credit_dominantCollateral = require("../../market/credit/dominantCollateral.js");
16
15
  const require_sdk_utils_viem_simulateWithPriceUpdates = require("../../utils/viem/simulateWithPriceUpdates.js");
17
16
  require("../../utils/viem/index.js");
18
17
  require("../../market/index.js");
18
+ const require_abi_rwa_iRWAFactory = require("../../../abi/rwa/iRWAFactory.js");
19
19
  const require_sdk_accounts_credit_account_compressor_CreditAccountCompressorV310Contract = require("./CreditAccountCompressorV310Contract.js");
20
20
  //#region src/sdk/accounts/credit-account-compressor/CreditAccountCompressor.ts
21
21
  /**
@@ -54,6 +54,7 @@ const require_sdk_market_math = require("./market/math.js");
54
54
  const require_sdk_market_credit_CreditManagerV310Contract = require("./market/credit/CreditManagerV310Contract.js");
55
55
  const require_sdk_market_credit_dominantCollateral = require("./market/credit/dominantCollateral.js");
56
56
  const require_sdk_market_credit_CreditSuite = require("./market/credit/CreditSuite.js");
57
+ const require_sdk_market_credit_expectedBalanceDeltas = require("./market/credit/expectedBalanceDeltas.js");
57
58
  const require_sdk_utils_viem_simulateMulticall = require("./utils/viem/simulateMulticall.js");
58
59
  const require_sdk_utils_viem_simulateWithPriceUpdates = require("./utils/viem/simulateWithPriceUpdates.js");
59
60
  const require_sdk_utils_viem_executeDelegatedMulticalls = require("./utils/viem/executeDelegatedMulticalls.js");
@@ -321,6 +322,7 @@ exports.YearnPriceFeedContract = require_sdk_market_pricefeeds_YearnPriceFeed.Ye
321
322
  exports.ZapperContract = require_sdk_market_zapper_ZapperContract.ZapperContract;
322
323
  exports.ZeroPriceFeedContract = require_sdk_market_pricefeeds_ZeroPriceFeed.ZeroPriceFeedContract;
323
324
  exports.ZodAddress = require_sdk_utils_zod.ZodAddress;
325
+ exports.ZodBigInt = require_sdk_utils_zod.ZodBigInt;
324
326
  exports.ZodHex = require_sdk_utils_zod.ZodHex;
325
327
  exports.additionalBorrowApyBps = require_sdk_market_math.additionalBorrowApyBps;
326
328
  exports.assetsMap = require_sdk_router_helpers.assetsMap;
@@ -347,6 +349,7 @@ exports.estimateRawTxGas = require_sdk_utils_viem_sendRawTx.estimateRawTxGas;
347
349
  exports.etherscanApiUrl = require_sdk_utils_etherscan.etherscanApiUrl;
348
350
  exports.etherscanUrl = require_sdk_utils_etherscan.etherscanUrl;
349
351
  exports.executeDelegatedMulticalls = require_sdk_utils_viem_executeDelegatedMulticalls.executeDelegatedMulticalls;
352
+ exports.expectedBalanceDeltas = require_sdk_market_credit_expectedBalanceDeltas.expectedBalanceDeltas;
350
353
  exports.fetchPythPayloads = require_sdk_market_pricefeeds_updates_fetchPythPayloads.fetchPythPayloads;
351
354
  exports.fetchRedstonePayloads = require_sdk_market_pricefeeds_updates_fetchRedstonePayloads.fetchRedstonePayloads;
352
355
  exports.filterDust = require_sdk_utils_filterDust.filterDust;
@@ -289,6 +289,16 @@ var CreditFacadeV310Contract = class extends require_sdk_market_credit_CreditFac
289
289
  })
290
290
  };
291
291
  }
292
+ /**
293
+ * {@inheritDoc ICreditFacadeContract.prepareWithBalanceCheck}
294
+ */
295
+ prepareWithBalanceCheck(deltas, calls) {
296
+ return [
297
+ this.prepareStoreExpectedBalances(deltas),
298
+ ...calls,
299
+ this.prepareCompareBalances()
300
+ ];
301
+ }
292
302
  };
293
303
  //#endregion
294
304
  exports.CreditFacadeV310Contract = CreditFacadeV310Contract;
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_sdk_utils_AssetsMap = require("../../utils/AssetsMap.js");
3
+ const require_sdk_constants_math = require("../../constants/math.js");
4
+ require("../../constants/index.js");
5
+ require("../../utils/index.js");
6
+ //#region src/sdk/market/credit/expectedBalanceDeltas.ts
7
+ /**
8
+ * Builds the `storeExpectedBalances` deltas of a multicall from the amounts it
9
+ * is expected to produce and the token it spends.
10
+ */
11
+ function expectedBalanceDeltas({ outputs, spentToken, spentAmount }) {
12
+ const sums = new require_sdk_utils_AssetsMap.AssetsMap();
13
+ for (const { token, amount } of outputs) sums.inc(token, amount);
14
+ const deltas = sums.entries().filter(([, amount]) => amount > require_sdk_constants_math.DUST_THRESHOLD).map(([token, amount]) => ({
15
+ token,
16
+ amount: amount - require_sdk_constants_math.DUST_THRESHOLD
17
+ }));
18
+ if (spentAmount > 0n) deltas.push({
19
+ token: spentToken,
20
+ amount: -spentAmount
21
+ });
22
+ return deltas;
23
+ }
24
+ //#endregion
25
+ exports.expectedBalanceDeltas = expectedBalanceDeltas;
@@ -5,6 +5,7 @@ const require_sdk_market_credit_CreditFacadeV310Contract = require("./CreditFaca
5
5
  const require_sdk_market_credit_CreditManagerV310Contract = require("./CreditManagerV310Contract.js");
6
6
  const require_sdk_market_credit_dominantCollateral = require("./dominantCollateral.js");
7
7
  const require_sdk_market_credit_CreditSuite = require("./CreditSuite.js");
8
+ const require_sdk_market_credit_expectedBalanceDeltas = require("./expectedBalanceDeltas.js");
8
9
  require("./types.js");
9
10
  exports.CreditConfiguratorV310Contract = require_sdk_market_credit_CreditConfiguratorV310Contract.CreditConfiguratorV310Contract;
10
11
  exports.CreditFacadeV310BaseContract = require_sdk_market_credit_CreditFacadeV310BaseContract.CreditFacadeV310BaseContract;
@@ -13,4 +14,5 @@ exports.CreditManagerV310Contract = require_sdk_market_credit_CreditManagerV310C
13
14
  exports.CreditSuite = require_sdk_market_credit_CreditSuite.CreditSuite;
14
15
  exports.creditFacadeV310Abi = require_sdk_market_credit_CreditFacadeV310BaseContract.creditFacadeV310Abi;
15
16
  exports.dominantCollateral = require_sdk_market_credit_dominantCollateral.dominantCollateral;
17
+ exports.expectedBalanceDeltas = require_sdk_market_credit_expectedBalanceDeltas.expectedBalanceDeltas;
16
18
  exports.mustGetDominantCollateral = require_sdk_market_credit_dominantCollateral.mustGetDominantCollateral;
@@ -8,6 +8,7 @@ const require_sdk_market_credit_CreditFacadeV310Contract = require("./credit/Cre
8
8
  const require_sdk_market_credit_CreditManagerV310Contract = require("./credit/CreditManagerV310Contract.js");
9
9
  const require_sdk_market_credit_dominantCollateral = require("./credit/dominantCollateral.js");
10
10
  const require_sdk_market_credit_CreditSuite = require("./credit/CreditSuite.js");
11
+ const require_sdk_market_credit_expectedBalanceDeltas = require("./credit/expectedBalanceDeltas.js");
11
12
  require("./credit/index.js");
12
13
  const require_sdk_market_pricefeeds_isUpdatablePriceFeed = require("./pricefeeds/isUpdatablePriceFeed.js");
13
14
  const require_sdk_market_pricefeeds_PriceFeedRef = require("./pricefeeds/PriceFeedRef.js");
@@ -114,6 +115,7 @@ exports.createPriceOracle = require_sdk_market_oracle_createPriceOracle.createPr
114
115
  exports.createZapper = require_sdk_market_zapper_createZapper.createZapper;
115
116
  exports.creditFacadeV310Abi = require_sdk_market_credit_CreditFacadeV310BaseContract.creditFacadeV310Abi;
116
117
  exports.dominantCollateral = require_sdk_market_credit_dominantCollateral.dominantCollateral;
118
+ exports.expectedBalanceDeltas = require_sdk_market_credit_expectedBalanceDeltas.expectedBalanceDeltas;
117
119
  exports.fetchPythPayloads = require_sdk_market_pricefeeds_updates_fetchPythPayloads.fetchPythPayloads;
118
120
  exports.fetchRedstonePayloads = require_sdk_market_pricefeeds_updates_fetchRedstonePayloads.fetchRedstonePayloads;
119
121
  exports.getRawPriceUpdates = require_sdk_market_pricefeeds_getRawPriceUpdates.getRawPriceUpdates;
@@ -24,6 +24,7 @@ exports.AssetsMap = require_sdk_utils_AssetsMap.AssetsMap;
24
24
  exports.BigIntMath = require_sdk_utils_bigint_math.BigIntMath;
25
25
  exports.TypedObjectUtils = require_sdk_utils_mappers.TypedObjectUtils;
26
26
  exports.ZodAddress = require_sdk_utils_zod.ZodAddress;
27
+ exports.ZodBigInt = require_sdk_utils_zod.ZodBigInt;
27
28
  exports.ZodHex = require_sdk_utils_zod.ZodHex;
28
29
  exports.bytes32ToString = require_sdk_utils_bytes32ToString.bytes32ToString;
29
30
  exports.childLogger = require_sdk_utils_childLogger.childLogger;
@@ -3,27 +3,49 @@ let viem = require("viem");
3
3
  let zod_v4 = require("zod/v4");
4
4
  //#region src/sdk/utils/zod.ts
5
5
  /**
6
+ * A `bigint` codec that serializes into string, deserializes into bigint.
7
+ */
8
+ const ZodBigInt = () => zod_v4.z.codec(zod_v4.z.union([zod_v4.z.string().regex(zod_v4.z.regexes.integer), zod_v4.z.bigint()]), zod_v4.z.bigint(), {
9
+ decode: (value) => typeof value === "bigint" ? value : BigInt(value),
10
+ encode: (value) => value.toString()
11
+ });
12
+ const addressOut = zod_v4.z.custom((val) => typeof val === "string" && (0, viem.isAddress)(val, { strict: false }));
13
+ /**
6
14
  * Like Address from abitype/zod, but converts an address into an address that is checksum encoded.
7
15
  */
8
- const ZodAddress = () => zod_v4.z.string().transform((val, ctx) => {
9
- if (!(0, viem.isAddress)(val)) ctx.issues.push({
10
- code: "custom",
11
- message: `invalid address ${val}`,
12
- input: ctx.value
13
- });
14
- return (0, viem.getAddress)(val);
16
+ const ZodAddress = () => zod_v4.z.codec(zod_v4.z.string(), addressOut, {
17
+ decode: (val, ctx) => {
18
+ if (!(0, viem.isAddress)(val, { strict: false })) {
19
+ ctx.issues.push({
20
+ code: "custom",
21
+ message: `invalid address ${val}`,
22
+ input: val
23
+ });
24
+ return zod_v4.z.NEVER;
25
+ }
26
+ return (0, viem.getAddress)(val);
27
+ },
28
+ encode: (address) => address
15
29
  });
30
+ const hexOut = zod_v4.z.custom((val) => typeof val === "string" && (0, viem.isHex)(val));
16
31
  /**
17
32
  * A `0x`-prefixed hex string, as viem's Hex.
18
33
  */
19
- const ZodHex = () => zod_v4.z.string().transform((val, ctx) => {
20
- if (!(0, viem.isHex)(val)) ctx.issues.push({
21
- code: "custom",
22
- message: `invalid hex string ${val}`,
23
- input: ctx.value
24
- });
25
- return val;
34
+ const ZodHex = () => zod_v4.z.codec(zod_v4.z.string(), hexOut, {
35
+ decode: (val, ctx) => {
36
+ if (!(0, viem.isHex)(val)) {
37
+ ctx.issues.push({
38
+ code: "custom",
39
+ message: `invalid hex string ${val}`,
40
+ input: val
41
+ });
42
+ return zod_v4.z.NEVER;
43
+ }
44
+ return val;
45
+ },
46
+ encode: (hex) => hex
26
47
  });
27
48
  //#endregion
28
49
  exports.ZodAddress = ZodAddress;
50
+ exports.ZodBigInt = ZodBigInt;
29
51
  exports.ZodHex = ZodHex;
@@ -1,9 +1,9 @@
1
+ import { ierc20Abi } from "../abi/iERC20.js";
1
2
  import { iCreditFacadeV310Abi } from "../abi/310/generated.js";
2
3
  import { AddressMap } from "../sdk/utils/AddressMap.js";
3
4
  import { AddressSet } from "../sdk/utils/AddressSet.js";
4
5
  import { AssetsMap } from "../sdk/utils/AssetsMap.js";
5
6
  import { childLogger } from "../sdk/utils/childLogger.js";
6
- import { ierc20Abi } from "../abi/iERC20.js";
7
7
  import "../sdk/constants/addresses.js";
8
8
  import { MAX_UINT256, PERCENTAGE_FACTOR } from "../sdk/constants/math.js";
9
9
  import { SDKConstruct } from "../sdk/base/SDKConstruct.js";
@@ -1,6 +1,6 @@
1
+ import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
1
2
  import { getNetworkType } from "../sdk/chain/chains.js";
2
3
  import { getWithdrawalCompressorAddress } from "../sdk/accounts/withdrawal-compressor/addresses.js";
3
- import { iWithdrawalCompressorV313Abi } from "../abi/IWithdrawalCompressorV313.js";
4
4
  import "../sdk/index.js";
5
5
  import { iMidasDataFeedAbi, iMidasRedemptionVaultAbi, midasGatewayAbi, midasRedeemerAbi, midasRedemptionVaultPhantomTokenAbi, securitizeRedeemerAbi, securitizeRedemptionGatewayAbi, securitizeRedemptionPhantomTokenAbi } from "./withdrawalAbi.js";
6
6
  import { erc20Abi, hexToString, parseAbi, parseEther } from "viem";
@@ -1,4 +1,4 @@
1
- import { ZodAddress, ZodHex } from "../sdk/utils/zod.js";
1
+ import { ZodAddress, ZodBigInt, ZodHex } from "../sdk/utils/zod.js";
2
2
  import { z } from "zod/v4";
3
3
  //#region src/model/primitives.schema.ts
4
4
  /**
@@ -30,14 +30,15 @@ const assetTypeSchema = z.union([
30
30
  z.literal("BTC")
31
31
  ]);
32
32
  /**
33
- * {@link Leverage}
33
+ * {@link Leverage}. Nonnegative rather than positive: `0` is the backend's
34
+ * encoding of "leverage unavailable".
34
35
  **/
35
- const leverageSchema = z.number().positive();
36
+ const leverageSchema = z.number().nonnegative();
36
37
  /**
37
38
  * {@link Amount}
38
39
  **/
39
40
  const amountSchema = z.object({
40
- value: z.bigint(),
41
+ value: ZodBigInt(),
41
42
  valueUsd: z.number().nullable()
42
43
  });
43
44
  /**
@@ -61,7 +62,7 @@ const tokenAmountSchema = amountSchema.extend({ token: tokenSchema });
61
62
  const txCallSchema = z.object({
62
63
  to: ZodAddress(),
63
64
  callData: ZodHex(),
64
- value: z.bigint().optional()
65
+ value: ZodBigInt().optional()
65
66
  });
66
67
  //#endregion
67
68
  export { amountSchema, assetTypeSchema, bpsSchema, chainIdSchema, leverageSchema, timestampSchema, tokenAmountSchema, tokenSchema, txCallSchema };
@@ -1,5 +1,5 @@
1
- import { MissingSerializedParamsError } from "../../../sdk/base/errors.js";
2
1
  import { ierc4626AdapterAbi } from "../../../abi/ierc4626Adapter.js";
2
+ import { MissingSerializedParamsError } from "../../../sdk/base/errors.js";
3
3
  import "../../../sdk/index.js";
4
4
  import { fnSigToName, swapFromTransfers } from "../transferHelpers.js";
5
5
  import { AbstractAdapterContract } from "./AbstractAdapter.js";
@@ -18,7 +18,7 @@ import { BalancePrerequisite } from "./prerequisites/BalancePrerequisite.js";
18
18
  import { RWAOpenRequirementsPrerequisite } from "./prerequisites/RWAOpenRequirementsPrerequisite.js";
19
19
  import { checkPrerequisites } from "./prerequisites/checkPrerequisites.js";
20
20
  import "./prerequisites/index.js";
21
- import { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST } from "./preview/types.js";
21
+ import { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN } from "./preview/types.js";
22
22
  import { buildDelayedPreview } from "./preview/buildDelayedPreview.js";
23
23
  import { CreditAccountState } from "./preview/CreditAccountState.js";
24
24
  import { classifyCloseOrRepay, isCloseOrRepay } from "./preview/detectCloseOrRepay.js";
@@ -32,4 +32,4 @@ import { previewCloseOrRepayCreditAccount } from "./preview/previewCloseOrRepayC
32
32
  import { previewOperation } from "./preview/previewOperation.js";
33
33
  import "./preview/index.js";
34
34
  import "./types.js";
35
- export { AllowancePrerequisite, BalancePrerequisite, CreditAccountState, ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST, Prerequisite, RWAOpenRequirementsPrerequisite, TransferAlignmentError, UnexpectedFacadeEventOrderError, UnknownAdapterError, UnknownFacadeCallError, UnsupportedOperationError, UnsupportedPoolFunctionError, UnsupportedTargetError, UnsupportedZapperFunctionError, WithdrawCollateralAlignmentError, buildDelayedPreview, checkPrerequisites, classifyCloseOrRepay, classifyInnerOperations, detectDelayedClaim, detectDelayedOperation, extractAdapterCallTraces, extractTransfers, findFacadeCalls, isCloseOrRepay, isPoolOperation, isRWAOperation, makeReplayState, parseFacadeOperationCalldata, parseOperationCalldata, parsePoolOperationCalldata, parseRWAFactoryOperationCalldata, previewAdjustCreditAccount, previewCloseOrRepayCreditAccount, previewOperation, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent };
35
+ export { AllowancePrerequisite, BalancePrerequisite, CreditAccountState, ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, Prerequisite, RWAOpenRequirementsPrerequisite, TransferAlignmentError, UnexpectedFacadeEventOrderError, UnknownAdapterError, UnknownFacadeCallError, UnsupportedOperationError, UnsupportedPoolFunctionError, UnsupportedTargetError, UnsupportedZapperFunctionError, WithdrawCollateralAlignmentError, buildDelayedPreview, checkPrerequisites, classifyCloseOrRepay, classifyInnerOperations, detectDelayedClaim, detectDelayedOperation, extractAdapterCallTraces, extractTransfers, findFacadeCalls, isCloseOrRepay, isPoolOperation, isRWAOperation, makeReplayState, parseFacadeOperationCalldata, parseOperationCalldata, parsePoolOperationCalldata, parseRWAFactoryOperationCalldata, previewAdjustCreditAccount, previewCloseOrRepayCreditAccount, previewOperation, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent };
@@ -1,8 +1,9 @@
1
1
  import { AssetsMap } from "../../sdk/utils/AssetsMap.js";
2
2
  import { BigIntMath } from "../../sdk/utils/bigint-math.js";
3
+ import { DUST_THRESHOLD } from "../../sdk/constants/math.js";
3
4
  import "../../sdk/index.js";
4
5
  import "../../common-utils/index.js";
5
- import { ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST } from "./types.js";
6
+ import { ERROR_UNPRICEABLE_TOKEN } from "./types.js";
6
7
  import { isAddressEqual } from "viem";
7
8
  //#region src/preview/preview/buildDelayedPreview.ts
8
9
  /**
@@ -171,7 +172,7 @@ function buildClosePreview(post, converter, receivedToken) {
171
172
  };
172
173
  }
173
174
  function buildAdjustPreview(post, before, collateralWithdrawn, converter) {
174
- const totalValue = totalValueInUnderlying(post, converter.convert, PREVIEW_DUST);
175
+ const totalValue = totalValueInUnderlying(post, converter.convert, DUST_THRESHOLD);
175
176
  return {
176
177
  operation: "AdjustCreditAccount",
177
178
  creditManager: post.creditManager,
@@ -183,8 +184,8 @@ function buildAdjustPreview(post, before, collateralWithdrawn, converter) {
183
184
  debtChange: post.debt - before.debt,
184
185
  quotas: post.quotas.toAssets(0n),
185
186
  quotasChange: post.quotas.difference(before.quotas).toAssets(),
186
- assets: post.balances.toAssets(PREVIEW_DUST),
187
- assetsChange: post.balances.difference(before.balances).toAssets(PREVIEW_DUST),
187
+ assets: post.balances.toAssets(DUST_THRESHOLD),
188
+ assetsChange: post.balances.difference(before.balances).toAssets(DUST_THRESHOLD),
188
189
  error: converter.error
189
190
  };
190
191
  }
@@ -1,4 +1,4 @@
1
- import { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST } from "./types.js";
1
+ import { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN } from "./types.js";
2
2
  import { buildDelayedPreview } from "./buildDelayedPreview.js";
3
3
  import { CreditAccountState } from "./CreditAccountState.js";
4
4
  import { classifyCloseOrRepay, isCloseOrRepay } from "./detectCloseOrRepay.js";
@@ -10,4 +10,4 @@ import { replayMulticall } from "./replayMulticall.js";
10
10
  import { previewAdjustCreditAccount } from "./previewAdjustCreditAccount.js";
11
11
  import { previewCloseOrRepayCreditAccount } from "./previewCloseOrRepayCreditAccount.js";
12
12
  import { previewOperation } from "./previewOperation.js";
13
- export { CreditAccountState, ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST, UnsupportedOperationError, buildDelayedPreview, classifyCloseOrRepay, detectDelayedClaim, detectDelayedOperation, isCloseOrRepay, makeReplayState, previewAdjustCreditAccount, previewCloseOrRepayCreditAccount, previewOperation, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent };
13
+ export { CreditAccountState, ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, UnsupportedOperationError, buildDelayedPreview, classifyCloseOrRepay, detectDelayedClaim, detectDelayedOperation, isCloseOrRepay, makeReplayState, previewAdjustCreditAccount, previewCloseOrRepayCreditAccount, previewOperation, replayInnerOperations, replayMulticall, resolveDelayedClaimIntent };
@@ -1,6 +1,7 @@
1
1
  import { AP_WETH_TOKEN } from "../../sdk/constants/address-provider.js";
2
+ import { DUST_THRESHOLD } from "../../sdk/constants/math.js";
2
3
  import "../../sdk/index.js";
3
- import { ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST } from "./types.js";
4
+ import { ERROR_UNPRICEABLE_TOKEN } from "./types.js";
4
5
  import { replayMulticall } from "./replayMulticall.js";
5
6
  import { unwrapNativeCollateral } from "./unwrapNativeCollateral.js";
6
7
  //#region src/preview/preview/previewAdjustCreditAccount.ts
@@ -19,8 +20,8 @@ async function previewAdjustCreditAccount(input, operation, options) {
19
20
  let error = replayError;
20
21
  const { assets: collateralAdded, error: unwrapError } = unwrapNativeCollateral(after.collateralAdded.toAssets(), value, sdk.addressProvider.getAddress(AP_WETH_TOKEN, 0));
21
22
  error ??= unwrapError;
22
- const assets = account.balances.toAssets(PREVIEW_DUST);
23
- const assetsChange = account.balances.difference(before.balances).toAssets(PREVIEW_DUST);
23
+ const assets = account.balances.toAssets(DUST_THRESHOLD);
24
+ const assetsChange = account.balances.difference(before.balances).toAssets(DUST_THRESHOLD);
24
25
  const totalValue = assets.reduce((acc, { token, balance }) => {
25
26
  try {
26
27
  return acc + market.priceOracle.convert(token, market.underlying, balance);
@@ -31,20 +31,5 @@ const ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP = 1005;
31
31
  const ERROR_INVALID_TRANSACTION_VALUE = 1006;
32
32
  /** A token in the preview could not be priced by the oracle */
33
33
  const ERROR_UNPRICEABLE_TOKEN = 2001;
34
- /**
35
- * Dust threshold for replayed preview balances and balance changes.
36
- *
37
- * Multicalls assembled by `CreditAccountsServiceV310` subtract a 10-unit
38
- * safety buffer from every expected output token in their
39
- * `storeExpectedBalances` deltas (`amount - 10n` in
40
- * `assembleStartDelayedWithdrawalCalls`/`assembleClaimDelayedCalls`), while
41
- * subsequent calls in the same multicall spend exact on-chain amounts. A
42
- * replay that credits only the min-guarantee can therefore be off by up to
43
- * 10 units per token, including small negative residues that are impossible
44
- * on-chain. Amounts within this threshold (in absolute value) are filtered
45
- * from preview outputs; anything beyond it is a genuine discrepancy and is
46
- * reported.
47
- */
48
- const PREVIEW_DUST = 10n;
49
34
  //#endregion
50
- export { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN, PREVIEW_DUST };
35
+ export { ERROR_ADAPTER_CALL_OUTSIDE_BRACKET, ERROR_INVALID_TRANSACTION_VALUE, ERROR_MALFORMED_BRACKET, ERROR_NON_ADAPTER_CALL_IN_BRACKET, ERROR_UNPREVIEWABLE_ADAPTER_CALL, ERROR_UNPREVIEWABLE_RWA_WRAP_UNWRAP, ERROR_UNPRICEABLE_TOKEN };
@@ -1,5 +1,5 @@
1
- import { iPoolV310Abi } from "../../abi/310/generated.js";
2
1
  import { iZapperAbi } from "../../abi/iZapper.js";
2
+ import { iPoolV310Abi } from "../../abi/310/generated.js";
3
3
  import { asPreviewSimulationError } from "./errors.js";
4
4
  //#region src/preview/simulate/simulatePoolOperation.ts
5
5
  function previewRead(operation) {
@@ -1,6 +1,6 @@
1
+ import { ierc20Abi } from "../../abi/iERC20.js";
1
2
  import { iCreditFacadeV310Abi } from "../../abi/310/generated.js";
2
3
  import { AddressMap } from "../../sdk/utils/AddressMap.js";
3
- import { ierc20Abi } from "../../abi/iERC20.js";
4
4
  import "../../sdk/index.js";
5
5
  import { UnexpectedFacadeEventOrderError } from "./errors.js";
6
6
  import { getAddress, isAddressEqual, parseEventLogs } from "viem";