@gearbox-protocol/sdk 14.11.3 → 14.12.0-next.2

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 (214) hide show
  1. package/dist/cjs/abi/iZapper.js +62 -24
  2. package/dist/cjs/common-utils/utils/index.js +2 -0
  3. package/dist/cjs/{history/trace-utils.js → common-utils/utils/trace.js} +62 -5
  4. package/dist/cjs/dev/index.js +3 -1
  5. package/dist/cjs/dev/verifyTestnet.js +52 -0
  6. package/dist/cjs/history/assembleOperations.js +6 -6
  7. package/dist/cjs/history/classifyMulticallOperations.js +31 -25
  8. package/dist/cjs/history/index.js +0 -2
  9. package/dist/cjs/history/parseCreditAccountTransaction.js +5 -6
  10. package/dist/cjs/history/toLegacyOperation.js +5 -1
  11. package/dist/cjs/plugins/adapters/contracts/AbstractAdapter.js +25 -37
  12. package/dist/cjs/plugins/adapters/contracts/AccountMigratorAdapterContract.js +9 -0
  13. package/dist/cjs/{history/internal-types.js → plugins/adapters/transfers.js} +2 -2
  14. package/dist/cjs/preview/index.js +28 -0
  15. package/dist/cjs/preview/package.json +1 -0
  16. package/dist/cjs/preview/parse/classifyInnerOperations.js +92 -0
  17. package/dist/cjs/preview/parse/errors.js +50 -0
  18. package/dist/cjs/preview/parse/extractExpectedBalanceChanges.js +48 -0
  19. package/dist/cjs/preview/parse/index.js +34 -0
  20. package/dist/cjs/preview/parse/parseFacadeOperationCalldata.js +115 -0
  21. package/dist/cjs/preview/parse/parseOperationCalldata.js +75 -0
  22. package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +85 -0
  23. package/dist/cjs/{history/inner-operations.js → preview/parse/types-adapters.js} +2 -2
  24. package/dist/cjs/preview/parse/types-facades.js +16 -0
  25. package/dist/cjs/preview/parse/types-pools.js +16 -0
  26. package/dist/cjs/preview/parse/types.js +37 -0
  27. package/dist/cjs/preview/prerequisites/AllowancePrerequisite.js +78 -0
  28. package/dist/cjs/preview/prerequisites/BalancePrerequisite.js +77 -0
  29. package/dist/cjs/preview/prerequisites/Prerequisite.js +85 -0
  30. package/dist/cjs/preview/prerequisites/buildPrerequisites.js +221 -0
  31. package/dist/cjs/preview/prerequisites/index.js +34 -0
  32. package/dist/cjs/preview/prerequisites/prepareAction.js +48 -0
  33. package/dist/cjs/preview/prerequisites/runPrerequisites.js +71 -0
  34. package/dist/cjs/preview/prerequisites/types.js +16 -0
  35. package/dist/cjs/preview/simulate/errors.js +91 -0
  36. package/dist/cjs/{sdk/market/zapper/Zapper.js → preview/simulate/holders.js} +21 -23
  37. package/dist/cjs/preview/simulate/index.js +37 -0
  38. package/dist/cjs/preview/simulate/simulateFacadeOperation.js +30 -0
  39. package/dist/cjs/preview/simulate/simulateOperation.js +37 -0
  40. package/dist/cjs/preview/simulate/simulatePoolOperation.js +187 -0
  41. package/dist/cjs/preview/simulate/types.js +16 -0
  42. package/dist/cjs/{history → preview/trace}/errors.js +0 -26
  43. package/dist/cjs/preview/trace/extractAdapterCallTraces.js +58 -0
  44. package/dist/cjs/{history → preview/trace}/extractTransfers.js +9 -12
  45. package/dist/cjs/{history → preview/trace}/findFacadeCalls.js +3 -3
  46. package/dist/cjs/preview/trace/index.js +30 -0
  47. package/dist/cjs/preview/trace/types.js +16 -0
  48. package/dist/cjs/sdk/MultichainSDK.js +1 -0
  49. package/dist/cjs/sdk/OnchainSDK.js +7 -3
  50. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +154 -0
  51. package/dist/cjs/sdk/market/MarketRegister.js +10 -5
  52. package/dist/cjs/sdk/market/ZapperRegister.js +54 -0
  53. package/dist/cjs/sdk/market/zapper/IERC20ZapperContract.js +3 -38
  54. package/dist/cjs/sdk/market/zapper/IETHZapperContract.js +3 -38
  55. package/dist/cjs/sdk/market/zapper/ZapperContract.js +109 -0
  56. package/dist/cjs/sdk/market/zapper/createZapper.js +12 -4
  57. package/dist/cjs/sdk/market/zapper/errors.js +37 -0
  58. package/dist/cjs/sdk/market/zapper/index.js +6 -2
  59. package/dist/cjs/sdk/market/zapper/types.js +16 -0
  60. package/dist/cjs/sdk/options.js +41 -17
  61. package/dist/esm/abi/iZapper.js +62 -24
  62. package/dist/esm/common-utils/utils/index.js +1 -0
  63. package/dist/esm/common-utils/utils/trace.js +93 -0
  64. package/dist/esm/dev/index.js +1 -0
  65. package/dist/esm/dev/verifyTestnet.js +27 -0
  66. package/dist/esm/history/assembleOperations.js +8 -6
  67. package/dist/esm/history/classifyMulticallOperations.js +29 -23
  68. package/dist/esm/history/index.js +0 -1
  69. package/dist/esm/history/parseCreditAccountTransaction.js +3 -4
  70. package/dist/esm/history/toLegacyOperation.js +5 -1
  71. package/dist/esm/plugins/adapters/contracts/AbstractAdapter.js +28 -38
  72. package/dist/esm/plugins/adapters/contracts/AccountMigratorAdapterContract.js +9 -0
  73. package/dist/esm/preview/index.js +4 -0
  74. package/dist/esm/preview/package.json +1 -0
  75. package/dist/esm/preview/parse/classifyInnerOperations.js +68 -0
  76. package/dist/esm/preview/parse/errors.js +24 -0
  77. package/dist/esm/preview/parse/extractExpectedBalanceChanges.js +24 -0
  78. package/dist/esm/preview/parse/index.js +7 -0
  79. package/dist/esm/preview/parse/parseFacadeOperationCalldata.js +91 -0
  80. package/dist/esm/preview/parse/parseOperationCalldata.js +55 -0
  81. package/dist/esm/preview/parse/parsePoolOperationCalldata.js +61 -0
  82. package/dist/esm/preview/parse/types-facades.js +0 -0
  83. package/dist/esm/preview/parse/types-pools.js +0 -0
  84. package/dist/esm/preview/parse/types.js +9 -0
  85. package/dist/esm/preview/prerequisites/AllowancePrerequisite.js +57 -0
  86. package/dist/esm/preview/prerequisites/BalancePrerequisite.js +56 -0
  87. package/dist/esm/preview/prerequisites/Prerequisite.js +63 -0
  88. package/dist/esm/preview/prerequisites/buildPrerequisites.js +197 -0
  89. package/dist/esm/preview/prerequisites/index.js +7 -0
  90. package/dist/esm/preview/prerequisites/prepareAction.js +23 -0
  91. package/dist/esm/preview/prerequisites/runPrerequisites.js +47 -0
  92. package/dist/esm/preview/prerequisites/types.js +0 -0
  93. package/dist/esm/preview/simulate/errors.js +69 -0
  94. package/dist/esm/preview/simulate/holders.js +21 -0
  95. package/dist/esm/preview/simulate/index.js +10 -0
  96. package/dist/esm/preview/simulate/simulateFacadeOperation.js +6 -0
  97. package/dist/esm/preview/simulate/simulateOperation.js +13 -0
  98. package/dist/esm/preview/simulate/simulatePoolOperation.js +166 -0
  99. package/dist/esm/preview/simulate/types.js +0 -0
  100. package/dist/esm/{history → preview/trace}/errors.js +0 -24
  101. package/dist/esm/preview/trace/extractAdapterCallTraces.js +40 -0
  102. package/dist/esm/{history → preview/trace}/extractTransfers.js +9 -12
  103. package/dist/esm/{history → preview/trace}/findFacadeCalls.js +4 -2
  104. package/dist/esm/preview/trace/index.js +5 -0
  105. package/dist/esm/preview/trace/types.js +0 -0
  106. package/dist/esm/sdk/MultichainSDK.js +1 -0
  107. package/dist/esm/sdk/OnchainSDK.js +7 -3
  108. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +154 -0
  109. package/dist/esm/sdk/market/MarketRegister.js +10 -5
  110. package/dist/esm/sdk/market/ZapperRegister.js +54 -0
  111. package/dist/esm/sdk/market/zapper/IERC20ZapperContract.js +3 -38
  112. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +3 -38
  113. package/dist/esm/sdk/market/zapper/ZapperContract.js +85 -0
  114. package/dist/esm/sdk/market/zapper/createZapper.js +12 -4
  115. package/dist/esm/sdk/market/zapper/errors.js +13 -0
  116. package/dist/esm/sdk/market/zapper/index.js +3 -1
  117. package/dist/esm/sdk/market/zapper/types.js +0 -0
  118. package/dist/esm/sdk/options.js +39 -15
  119. package/dist/types/abi/iERC20Zapper.d.ts +91 -23
  120. package/dist/types/abi/iETHZapper.d.ts +91 -23
  121. package/dist/types/abi/iZapper.d.ts +91 -23
  122. package/dist/types/common-utils/utils/index.d.ts +1 -0
  123. package/dist/types/common-utils/utils/trace.d.ts +73 -0
  124. package/dist/types/dev/index.d.ts +1 -0
  125. package/dist/types/dev/verifyTestnet.d.ts +24 -0
  126. package/dist/types/history/assembleOperations.d.ts +11 -6
  127. package/dist/types/history/classifyMulticallOperations.d.ts +21 -9
  128. package/dist/types/history/index.d.ts +0 -1
  129. package/dist/types/history/mapOperations.d.ts +7 -9
  130. package/dist/types/history/types.d.ts +22 -71
  131. package/dist/types/plugins/adapters/contracts/AbstractAdapter.d.ts +16 -17
  132. package/dist/types/plugins/adapters/contracts/AccountMigratorAdapterContract.d.ts +10 -1
  133. package/dist/types/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.d.ts +1 -1
  134. package/dist/types/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.d.ts +1 -1
  135. package/dist/types/plugins/adapters/contracts/Curve2AssetsAdapterContract.d.ts +1 -1
  136. package/dist/types/plugins/adapters/contracts/Curve3AssetsAdapterContract.d.ts +1 -1
  137. package/dist/types/plugins/adapters/contracts/Curve4AssetsAdapterContract.d.ts +1 -1
  138. package/dist/types/plugins/adapters/contracts/CurveV1AdapterDeposit.d.ts +1 -1
  139. package/dist/types/plugins/adapters/contracts/CurveV1AdapterStETHContract.d.ts +1 -1
  140. package/dist/types/plugins/adapters/contracts/CurveV1StableNGAdapterContract.d.ts +1 -1
  141. package/dist/types/plugins/adapters/contracts/DaiUsdsAdapterContract.d.ts +1 -1
  142. package/dist/types/plugins/adapters/contracts/ERC4626AdapterContract.d.ts +1 -1
  143. package/dist/types/plugins/adapters/contracts/ERC4626ReferralAdapterContract.d.ts +1 -1
  144. package/dist/types/plugins/adapters/contracts/LidoV1AdapterContract.d.ts +1 -1
  145. package/dist/types/plugins/adapters/contracts/MellowDVVAdapterContract.d.ts +1 -1
  146. package/dist/types/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.d.ts +1 -1
  147. package/dist/types/plugins/adapters/contracts/UniswapV2AdapterContract.d.ts +1 -1
  148. package/dist/types/plugins/adapters/contracts/UniswapV4AdapterContract.d.ts +1 -1
  149. package/dist/types/plugins/adapters/contracts/WstETHV1AdapterContract.d.ts +1 -1
  150. package/dist/types/plugins/adapters/transferHelpers.d.ts +1 -1
  151. package/dist/types/plugins/adapters/transfers.d.ts +17 -0
  152. package/dist/types/plugins/adapters/types.d.ts +8 -46
  153. package/dist/types/preview/index.d.ts +4 -0
  154. package/dist/types/preview/parse/classifyInnerOperations.d.ts +21 -0
  155. package/dist/types/preview/parse/errors.d.ts +18 -0
  156. package/dist/types/preview/parse/extractExpectedBalanceChanges.d.ts +22 -0
  157. package/dist/types/preview/parse/index.d.ts +7 -0
  158. package/dist/types/preview/parse/parseFacadeOperationCalldata.d.ts +19 -0
  159. package/dist/types/preview/parse/parseOperationCalldata.d.ts +23 -0
  160. package/dist/types/preview/parse/parsePoolOperationCalldata.d.ts +17 -0
  161. package/dist/types/preview/parse/types-adapters.d.ts +69 -0
  162. package/dist/types/preview/parse/types-facades.d.ts +158 -0
  163. package/dist/types/preview/parse/types-pools.d.ts +115 -0
  164. package/dist/types/preview/parse/types.d.ts +44 -0
  165. package/dist/types/preview/prerequisites/AllowancePrerequisite.d.ts +24 -0
  166. package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +23 -0
  167. package/dist/types/preview/prerequisites/Prerequisite.d.ts +60 -0
  168. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +16 -0
  169. package/dist/types/preview/prerequisites/index.d.ts +7 -0
  170. package/dist/types/preview/prerequisites/prepareAction.d.ts +52 -0
  171. package/dist/types/preview/prerequisites/runPrerequisites.d.ts +12 -0
  172. package/dist/types/preview/prerequisites/types.d.ts +78 -0
  173. package/dist/types/preview/simulate/errors.d.ts +45 -0
  174. package/dist/types/preview/simulate/holders.d.ts +7 -0
  175. package/dist/types/preview/simulate/index.d.ts +8 -0
  176. package/dist/types/preview/simulate/simulateFacadeOperation.d.ts +25 -0
  177. package/dist/types/preview/simulate/simulateOperation.d.ts +20 -0
  178. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +26 -0
  179. package/dist/types/preview/simulate/types.d.ts +66 -0
  180. package/dist/types/{history → preview/trace}/errors.d.ts +0 -10
  181. package/dist/types/preview/trace/extractAdapterCallTraces.d.ts +23 -0
  182. package/dist/types/{history → preview/trace}/extractTransfers.d.ts +14 -5
  183. package/dist/types/{history → preview/trace}/findFacadeCalls.d.ts +3 -2
  184. package/dist/types/preview/trace/index.d.ts +5 -0
  185. package/dist/types/preview/trace/types.d.ts +21 -0
  186. package/dist/types/sdk/MultichainSDK.d.ts +5 -0
  187. package/dist/types/sdk/OnchainSDK.d.ts +4 -0
  188. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +21 -1
  189. package/dist/types/sdk/accounts/types.d.ts +82 -0
  190. package/dist/types/sdk/market/MarketRegister.d.ts +15 -6
  191. package/dist/types/sdk/market/ZapperRegister.d.ts +25 -4
  192. package/dist/types/sdk/market/zapper/IERC20ZapperContract.d.ts +93 -39
  193. package/dist/types/sdk/market/zapper/IETHZapperContract.d.ts +93 -39
  194. package/dist/types/sdk/market/zapper/ZapperContract.d.ts +35 -0
  195. package/dist/types/sdk/market/zapper/createZapper.d.ts +2 -4
  196. package/dist/types/sdk/market/zapper/errors.d.ts +10 -0
  197. package/dist/types/sdk/market/zapper/index.d.ts +3 -1
  198. package/dist/types/sdk/market/zapper/types.d.ts +64 -0
  199. package/dist/types/sdk/options.d.ts +10 -5
  200. package/dist/types/sdk/pools/types.d.ts +3 -3
  201. package/dist/types/sdk/types/state-human.d.ts +9 -0
  202. package/dist/types/sdk/types/state.d.ts +7 -0
  203. package/package.json +8 -3
  204. package/dist/cjs/history/extractProtocolCalls.js +0 -53
  205. package/dist/esm/history/extractProtocolCalls.js +0 -32
  206. package/dist/esm/history/trace-utils.js +0 -36
  207. package/dist/esm/sdk/market/zapper/Zapper.js +0 -23
  208. package/dist/types/history/extractProtocolCalls.d.ts +0 -8
  209. package/dist/types/history/inner-operations.d.ts +0 -57
  210. package/dist/types/history/internal-types.d.ts +0 -47
  211. package/dist/types/history/trace-utils.d.ts +0 -12
  212. package/dist/types/sdk/market/zapper/Zapper.d.ts +0 -13
  213. /package/dist/esm/{history/inner-operations.js → plugins/adapters/transfers.js} +0 -0
  214. /package/dist/esm/{history/internal-types.js → preview/parse/types-adapters.js} +0 -0
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
@@ -81,6 +81,7 @@ class MultichainSDK {
81
81
  const perChainOpts = options?.perChain?.[network] ?? {};
82
82
  return sdk.attach({
83
83
  ...perChainOpts,
84
+ loadZappers: perChainOpts.loadZappers ?? options?.loadZappers,
84
85
  redstone: {
85
86
  ...options?.redstone,
86
87
  cache: this.#redstoneCache,
@@ -127,7 +127,8 @@ class OnchainSDK extends import_base.ChainContractsRegister {
127
127
  ignoreMarkets,
128
128
  marketConfigurators: mcs,
129
129
  redstone,
130
- pyth
130
+ pyth,
131
+ loadZappers
131
132
  } = options ?? {};
132
133
  const marketConfigurators = mcs ?? import_utils.TypedObjectUtils.keys(
133
134
  this.client.chain.defaultMarketConfigurators
@@ -196,6 +197,9 @@ class OnchainSDK extends import_base.ChainContractsRegister {
196
197
  blockNumber: this.currentBlock,
197
198
  gas: this.gasLimit
198
199
  });
200
+ if (loadZappers) {
201
+ await this.#marketRegister.loadZappers();
202
+ }
199
203
  }
200
204
  const pluginsList = import_utils.TypedObjectUtils.entries(this.plugins);
201
205
  const pluginResponse = await Promise.allSettled(
@@ -248,7 +252,7 @@ class OnchainSDK extends import_base.ChainContractsRegister {
248
252
  `address provider version: ${this.#addressProvider.version}`
249
253
  );
250
254
  this.#marketRegister = new import_MarketRegister.MarketRegister(this, ignoreMarkets);
251
- this.#marketRegister.hydrate(state.markets);
255
+ this.#marketRegister.hydrate(state);
252
256
  this.#rwa = new import_market.RWARegistry(this);
253
257
  this.#rwa.setState(state.rwa);
254
258
  for (const [name, plugin] of import_utils.TypedObjectUtils.entries(this.plugins)) {
@@ -313,7 +317,7 @@ class OnchainSDK extends import_base.ChainContractsRegister {
313
317
  currentBlock: this.currentBlock,
314
318
  timestamp: this.timestamp,
315
319
  addressProvider: this.addressProvider.state,
316
- markets: this.marketRegister.state,
320
+ ...this.marketRegister.state,
317
321
  rwa: this.#rwa.state,
318
322
  plugins: Object.fromEntries(
319
323
  import_utils.TypedObjectUtils.entries(this.plugins).map(([name, plugin]) => [
@@ -1552,6 +1552,160 @@ class CreditAccountsServiceV310 extends import_base.SDKConstruct {
1552
1552
  callsWithPrices
1553
1553
  );
1554
1554
  }
1555
+ /**
1556
+ * {@inheritDoc ICreditAccountsService.prependPriceUpdates}
1557
+ */
1558
+ async prependPriceUpdates(creditManager, calls, creditAccount, options) {
1559
+ return this.#prependPriceUpdates(
1560
+ creditManager,
1561
+ calls,
1562
+ creditAccount,
1563
+ options
1564
+ );
1565
+ }
1566
+ /**
1567
+ * {@inheritDoc ICreditAccountsService.assembleCaUpdateCalls}
1568
+ */
1569
+ assembleCaUpdateCalls({
1570
+ operations,
1571
+ routerCallGroups,
1572
+ creditFacade,
1573
+ withdrawTo,
1574
+ creditAccount,
1575
+ underlyingToken
1576
+ }) {
1577
+ const calls = [];
1578
+ let swapGroupIndex = 0;
1579
+ let routerGroupsConsumed = 0;
1580
+ for (const op of operations) {
1581
+ switch (op.type) {
1582
+ case "increaseDebt":
1583
+ calls.push(this.#prepareIncreaseDebt(creditFacade, op.amount));
1584
+ break;
1585
+ case "decreaseDebt":
1586
+ calls.push(this.#prepareChangeDebt(creditFacade, op.amount, true));
1587
+ break;
1588
+ case "addCollateral":
1589
+ calls.push(
1590
+ ...this.#prepareAddCollateral(
1591
+ creditFacade,
1592
+ [{ token: op.token, balance: op.amount }],
1593
+ {}
1594
+ )
1595
+ );
1596
+ break;
1597
+ case "withdrawCollateral":
1598
+ calls.push(
1599
+ this.#prepareWithdrawToken(
1600
+ creditFacade,
1601
+ op.token,
1602
+ op.amount,
1603
+ withdrawTo
1604
+ )
1605
+ );
1606
+ break;
1607
+ case "swap": {
1608
+ const routerCalls = routerCallGroups[swapGroupIndex];
1609
+ if (!routerCalls) {
1610
+ throw new Error(
1611
+ `assembleCaUpdateCalls: missing router calls for swap leg ${swapGroupIndex}`
1612
+ );
1613
+ }
1614
+ calls.push(...routerCalls);
1615
+ swapGroupIndex += 1;
1616
+ routerGroupsConsumed += 1;
1617
+ break;
1618
+ }
1619
+ case "changeQuota": {
1620
+ const quotaAssets = [...op.quotaIncrease, ...op.quotaDecrease];
1621
+ if (quotaAssets.length === 0) {
1622
+ break;
1623
+ }
1624
+ calls.push(
1625
+ ...this.#prepareUpdateQuotas(creditFacade, {
1626
+ averageQuota: quotaAssets,
1627
+ minQuota: quotaAssets
1628
+ })
1629
+ );
1630
+ break;
1631
+ }
1632
+ case "closeCreditAccount": {
1633
+ for (const group of routerCallGroups) {
1634
+ calls.push(...group);
1635
+ routerGroupsConsumed += 1;
1636
+ }
1637
+ calls.push(
1638
+ ...this.#prepareDisableQuotas({
1639
+ creditFacade,
1640
+ tokens: Object.entries(creditAccount.initialQuotas).map(
1641
+ ([token, { quota }]) => ({
1642
+ token,
1643
+ quota
1644
+ })
1645
+ )
1646
+ })
1647
+ );
1648
+ if (creditAccount.debt > 0n) {
1649
+ calls.push(
1650
+ ...this.#prepareDecreaseDebt({
1651
+ creditFacade,
1652
+ debt: creditAccount.debt
1653
+ })
1654
+ );
1655
+ }
1656
+ const hasAssets = creditAccount.assets.some(
1657
+ (asset) => asset.balance > 0n
1658
+ );
1659
+ if (hasAssets) {
1660
+ calls.push(
1661
+ this.#prepareWithdrawToken(
1662
+ creditFacade,
1663
+ underlyingToken,
1664
+ import_constants.MAX_UINT256,
1665
+ withdrawTo
1666
+ )
1667
+ );
1668
+ }
1669
+ break;
1670
+ }
1671
+ default: {
1672
+ const _exhaustive = op;
1673
+ throw new Error(
1674
+ `assembleCaUpdateCalls: unsupported operation ${_exhaustive}`
1675
+ );
1676
+ }
1677
+ }
1678
+ }
1679
+ if (routerGroupsConsumed !== routerCallGroups.length) {
1680
+ throw new Error(
1681
+ `assembleCaUpdateCalls: router call group mismatch (consumed ${routerGroupsConsumed}, got ${routerCallGroups.length})`
1682
+ );
1683
+ }
1684
+ return calls;
1685
+ }
1686
+ /**
1687
+ * {@inheritDoc ICreditAccountsService.executeCaUpdate}
1688
+ */
1689
+ async executeCaUpdate(creditAccount, calls, options) {
1690
+ const cm = this.sdk.marketRegister.findCreditManager(
1691
+ creditAccount.creditManager
1692
+ );
1693
+ const callsWithPrices = await this.#prependPriceUpdates(
1694
+ creditAccount.creditManager,
1695
+ calls,
1696
+ creditAccount,
1697
+ { ignoreReservePrices: options?.ignoreReservePrices }
1698
+ );
1699
+ const tx = await this.#multicallTx(
1700
+ cm,
1701
+ creditAccount.creditAccount,
1702
+ callsWithPrices
1703
+ );
1704
+ if (options?.ethAmount && options.ethAmount > 0n) {
1705
+ tx.value = options.ethAmount.toString(10);
1706
+ }
1707
+ return { tx, calls: callsWithPrices };
1708
+ }
1555
1709
  #prepareDisableQuotas(ca) {
1556
1710
  const calls = [];
1557
1711
  for (const { token, quota } of ca.tokens) {
@@ -52,10 +52,11 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
52
52
  * bypassing on-chain reads.
53
53
  * @param state - Array of market data snapshots.
54
54
  **/
55
- hydrate(state) {
56
- const configurators = new Set(state.map((m) => m.configurator));
55
+ hydrate({ markets, zappers }) {
56
+ const configurators = new Set(markets.map((m) => m.configurator));
57
57
  this.#setMarketFilter([...configurators]);
58
- this.#setMarkets(state);
58
+ this.#setMarkets(markets);
59
+ this.hydrateZappers(zappers);
59
60
  }
60
61
  /**
61
62
  * @internal
@@ -174,7 +175,10 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
174
175
  * Serializable snapshot of all loaded markets, suitable for hydration.
175
176
  **/
176
177
  get state() {
177
- return this.markets.map((market) => market.state);
178
+ return {
179
+ markets: this.markets.map((market) => market.state),
180
+ zappers: this.zappersState
181
+ };
178
182
  }
179
183
  /**
180
184
  * Returns a human-readable snapshot of all markets.
@@ -182,7 +186,8 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
182
186
  **/
183
187
  stateHuman(raw = true) {
184
188
  return {
185
- markets: this.markets.map((market) => market.stateHuman(raw))
189
+ markets: this.markets.map((market) => market.stateHuman(raw)),
190
+ zappers: this.zappersStateHuman(raw)
186
191
  };
187
192
  }
188
193
  /**
@@ -75,6 +75,60 @@ class ZapperRegister extends import_base.SDKConstruct {
75
75
  }
76
76
  }
77
77
  }
78
+ /**
79
+ * Serializable snapshot of all loaded zappers, suitable for hydration.
80
+ * Returns `undefined` when zappers were never loaded (i.e. `loadZappers` was
81
+ * not called), so the not-loaded state round-trips cleanly.
82
+ **/
83
+ get zappersState() {
84
+ if (!this.#zappers) {
85
+ return void 0;
86
+ }
87
+ return this.#zappers.values().flatMap(
88
+ (zappers) => zappers.map((z) => ({
89
+ pool: z.pool,
90
+ type: z.type,
91
+ baseParams: z.baseParams,
92
+ tokenIn: z.tokenIn,
93
+ tokenOut: z.tokenOut
94
+ }))
95
+ );
96
+ }
97
+ /**
98
+ * Restores zapper state from a previously serialized snapshot,
99
+ * bypassing on-chain reads.
100
+ * @param state - Array of zapper data snapshots, or `undefined` when zappers
101
+ * were not loaded in the snapshot (leaves the registry in the not-loaded state).
102
+ **/
103
+ hydrateZappers(state) {
104
+ if (!state) {
105
+ return;
106
+ }
107
+ this.#zappers = new import_utils.AddressMap(void 0, "zappers");
108
+ for (const z of state) {
109
+ this.#addZapper(z);
110
+ }
111
+ }
112
+ /**
113
+ * Returns a human-readable snapshot of all loaded zappers.
114
+ * Returns `undefined` when zappers were never loaded.
115
+ * @param raw - When `true`, includes raw/unformatted values.
116
+ **/
117
+ zappersStateHuman(_ = true) {
118
+ if (!this.#zappers) {
119
+ return void 0;
120
+ }
121
+ return this.#zappers.values().flatMap(
122
+ (zappers) => zappers.map((z) => ({
123
+ address: this.labelAddress(z.baseParams.addr),
124
+ contractType: z.contractType,
125
+ type: z.type,
126
+ pool: this.labelAddress(z.pool),
127
+ tokenIn: this.sdk.labelAddress(z.tokenIn.addr),
128
+ tokenOut: this.sdk.labelAddress(z.tokenOut.addr)
129
+ }))
130
+ );
131
+ }
78
132
  #addZapper(z) {
79
133
  const zapper = (0, import_zapper.createZapper)(this.sdk, z);
80
134
  const existing = this.zappers.get(z.pool);
@@ -22,27 +22,11 @@ __export(IERC20ZapperContract_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(IERC20ZapperContract_exports);
24
24
  var import_iERC20Zapper = require("../../../abi/iERC20Zapper.js");
25
- var import_base = require("../../base/index.js");
25
+ var import_ZapperContract = require("./ZapperContract.js");
26
26
  const abi = import_iERC20Zapper.ierc20ZapperAbi;
27
- class IERC20ZapperContract extends import_base.BaseContract {
28
- pool;
29
- type;
30
- baseParams;
31
- tokenIn;
32
- tokenOut;
27
+ class IERC20ZapperContract extends import_ZapperContract.ZapperContract {
33
28
  constructor(sdk, data) {
34
- super(sdk, {
35
- addr: data.baseParams.addr,
36
- abi,
37
- name: `ERC20Zapper(${sdk.labelAddress(data.baseParams.addr)})`,
38
- version: data.baseParams.version,
39
- contractType: data.baseParams.contractType
40
- });
41
- this.pool = data.pool;
42
- this.type = data.type;
43
- this.baseParams = data.baseParams;
44
- this.tokenIn = data.tokenIn;
45
- this.tokenOut = data.tokenOut;
29
+ super(sdk, data, abi, "ERC20Zapper");
46
30
  }
47
31
  /**
48
32
  * Deposits ERC20 tokens into the pool via this zapper.
@@ -72,25 +56,6 @@ class IERC20ZapperContract extends import_base.BaseContract {
72
56
  args: [tokenInAmount, receiver, referralCode, deadline, v, r, s]
73
57
  });
74
58
  }
75
- /**
76
- * Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
77
- */
78
- redeem(tokenInAmount, receiver) {
79
- return this.createRawTx({
80
- functionName: "redeem",
81
- args: [tokenInAmount, receiver]
82
- });
83
- }
84
- /**
85
- * Redeems pool shares via this zapper with an EIP-2612 permit signature,
86
- * skipping a separate approve transaction.
87
- */
88
- redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
89
- return this.createRawTx({
90
- functionName: "redeemWithPermit",
91
- args: [tokenInAmount, receiver, deadline, v, r, s]
92
- });
93
- }
94
59
  }
95
60
  // Annotate the CommonJS export names for ESM import in node:
96
61
  0 && (module.exports = {
@@ -22,27 +22,11 @@ __export(IETHZapperContract_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(IETHZapperContract_exports);
24
24
  var import_iETHZapper = require("../../../abi/iETHZapper.js");
25
- var import_base = require("../../base/index.js");
25
+ var import_ZapperContract = require("./ZapperContract.js");
26
26
  const abi = import_iETHZapper.iethZapperAbi;
27
- class IETHZapperContract extends import_base.BaseContract {
28
- pool;
29
- type;
30
- baseParams;
31
- tokenIn;
32
- tokenOut;
27
+ class IETHZapperContract extends import_ZapperContract.ZapperContract {
33
28
  constructor(sdk, data) {
34
- super(sdk, {
35
- addr: data.baseParams.addr,
36
- abi,
37
- name: `ETHZapper(${sdk.labelAddress(data.baseParams.addr)})`,
38
- version: data.baseParams.version,
39
- contractType: data.baseParams.contractType
40
- });
41
- this.pool = data.pool;
42
- this.type = data.type;
43
- this.baseParams = data.baseParams;
44
- this.tokenIn = data.tokenIn;
45
- this.tokenOut = data.tokenOut;
29
+ super(sdk, data, abi, "ETHZapper");
46
30
  }
47
31
  /**
48
32
  * Deposits native ETH into the pool via this zapper.
@@ -63,25 +47,6 @@ class IETHZapperContract extends import_base.BaseContract {
63
47
  args: [receiver, referralCode]
64
48
  });
65
49
  }
66
- /**
67
- * Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
68
- */
69
- redeem(tokenInAmount, receiver) {
70
- return this.createRawTx({
71
- functionName: "redeem",
72
- args: [tokenInAmount, receiver]
73
- });
74
- }
75
- /**
76
- * Redeems pool shares via this zapper with an EIP-2612 permit signature,
77
- * skipping a separate approve transaction.
78
- */
79
- redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
80
- return this.createRawTx({
81
- functionName: "redeemWithPermit",
82
- args: [tokenInAmount, receiver, deadline, v, r, s]
83
- });
84
- }
85
50
  }
86
51
  // Annotate the CommonJS export names for ESM import in node:
87
52
  0 && (module.exports = {
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ZapperContract_exports = {};
20
+ __export(ZapperContract_exports, {
21
+ ZapperContract: () => ZapperContract
22
+ });
23
+ module.exports = __toCommonJS(ZapperContract_exports);
24
+ var import_iZapper = require("../../../abi/iZapper.js");
25
+ var import_base = require("../../base/index.js");
26
+ var import_errors = require("./errors.js");
27
+ class ZapperContract extends import_base.BaseContract {
28
+ sdk;
29
+ pool;
30
+ type;
31
+ baseParams;
32
+ tokenIn;
33
+ tokenOut;
34
+ constructor(sdk, data, abi = import_iZapper.iZapperAbi, namePrefix = "Zapper") {
35
+ super(sdk, {
36
+ addr: data.baseParams.addr,
37
+ abi,
38
+ name: `${namePrefix}(${sdk.labelAddress(data.baseParams.addr)})`,
39
+ version: data.baseParams.version,
40
+ contractType: data.baseParams.contractType
41
+ });
42
+ this.sdk = sdk;
43
+ this.pool = data.pool;
44
+ this.type = data.type;
45
+ this.baseParams = data.baseParams;
46
+ this.tokenIn = data.tokenIn;
47
+ this.tokenOut = data.tokenOut;
48
+ }
49
+ /**
50
+ * Decodes zapper calldata into {@link ParsedZapperOperation}.
51
+ * Throws {@link UnsupportedZapperFunctionError} for unknown selectors.
52
+ */
53
+ parseOperation(calldata, value) {
54
+ const parsed = this.parseFunctionDataV2(calldata);
55
+ const { rawArgs } = parsed;
56
+ const pool = this.pool;
57
+ const zapper = this.address;
58
+ const token = this.tokenIn.addr;
59
+ const underlying = this.sdk.marketRegister.findByPool(pool).underlying;
60
+ const receiver = rawArgs.receiver;
61
+ if (parsed.functionName.startsWith("deposit")) {
62
+ return {
63
+ operation: "Deposit",
64
+ pool,
65
+ zapper,
66
+ receiver,
67
+ assets: rawArgs.tokenInAmount ?? value ?? 0n,
68
+ token,
69
+ underlying,
70
+ referralCode: rawArgs.referralCode
71
+ };
72
+ }
73
+ if (parsed.functionName.startsWith("redeem")) {
74
+ return {
75
+ operation: "Redeem",
76
+ pool,
77
+ zapper,
78
+ receiver,
79
+ shares: rawArgs.tokenOutAmount,
80
+ token,
81
+ underlying
82
+ };
83
+ }
84
+ throw new import_errors.UnsupportedZapperFunctionError(zapper, parsed.functionName);
85
+ }
86
+ /**
87
+ * Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
88
+ */
89
+ redeem(tokenInAmount, receiver) {
90
+ return this.createRawTx({
91
+ functionName: "redeem",
92
+ args: [tokenInAmount, receiver]
93
+ });
94
+ }
95
+ /**
96
+ * Redeems pool shares via this zapper with an EIP-2612 permit signature,
97
+ * skipping a separate approve transaction.
98
+ */
99
+ redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
100
+ return this.createRawTx({
101
+ functionName: "redeemWithPermit",
102
+ args: [tokenInAmount, receiver, deadline, v, r, s]
103
+ });
104
+ }
105
+ }
106
+ // Annotate the CommonJS export names for ESM import in node:
107
+ 0 && (module.exports = {
108
+ ZapperContract
109
+ });
@@ -21,23 +21,31 @@ __export(createZapper_exports, {
21
21
  createZapper: () => createZapper
22
22
  });
23
23
  module.exports = __toCommonJS(createZapper_exports);
24
+ var import_utils = require("../../utils/index.js");
24
25
  var import_IERC20ZapperContract = require("./IERC20ZapperContract.js");
25
26
  var import_IETHZapperContract = require("./IETHZapperContract.js");
26
- var import_Zapper = require("./Zapper.js");
27
+ var import_ZapperContract = require("./ZapperContract.js");
27
28
  function createZapper(sdk, data) {
29
+ const existing = sdk.getContract(data.baseParams.addr);
30
+ if (existing) {
31
+ return existing;
32
+ }
28
33
  if (data.type === "base") {
29
- const contractType = import_Zapper.Zapper.contractType(data.baseParams);
34
+ const contractType = (0, import_utils.bytes32ToString)(data.baseParams.contractType);
30
35
  switch (contractType) {
31
36
  case "ZAPPER::ERC4626_UNDERLYING":
32
37
  return new import_IERC20ZapperContract.IERC20ZapperContract(sdk, data);
33
38
  case "ZAPPER::WETH_DEPOSIT":
34
39
  return new import_IETHZapperContract.IETHZapperContract(sdk, data);
35
40
  default:
41
+ if (sdk.strictContractTypes) {
42
+ throw new Error(`Unknown zapper contract type: ${contractType}`);
43
+ }
36
44
  sdk.logger?.warn(`Unknown zapper contract type: ${contractType}`);
37
- return new import_Zapper.Zapper(data);
45
+ return new import_ZapperContract.ZapperContract(sdk, data);
38
46
  }
39
47
  }
40
- return new import_Zapper.Zapper(data);
48
+ return new import_ZapperContract.ZapperContract(sdk, data);
41
49
  }
42
50
  // Annotate the CommonJS export names for ESM import in node:
43
51
  0 && (module.exports = {
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var errors_exports = {};
20
+ __export(errors_exports, {
21
+ UnsupportedZapperFunctionError: () => UnsupportedZapperFunctionError
22
+ });
23
+ module.exports = __toCommonJS(errors_exports);
24
+ class UnsupportedZapperFunctionError extends Error {
25
+ zapper;
26
+ functionName;
27
+ constructor(zapper, functionName) {
28
+ super(`unsupported zapper function "${functionName}" on ${zapper}`);
29
+ this.name = "UnsupportedZapperFunctionError";
30
+ this.zapper = zapper;
31
+ this.functionName = functionName;
32
+ }
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ UnsupportedZapperFunctionError
37
+ });
@@ -16,13 +16,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
16
16
  var zapper_exports = {};
17
17
  module.exports = __toCommonJS(zapper_exports);
18
18
  __reExport(zapper_exports, require("./createZapper.js"), module.exports);
19
+ __reExport(zapper_exports, require("./errors.js"), module.exports);
19
20
  __reExport(zapper_exports, require("./IERC20ZapperContract.js"), module.exports);
20
21
  __reExport(zapper_exports, require("./IETHZapperContract.js"), module.exports);
21
- __reExport(zapper_exports, require("./Zapper.js"), module.exports);
22
+ __reExport(zapper_exports, require("./types.js"), module.exports);
23
+ __reExport(zapper_exports, require("./ZapperContract.js"), module.exports);
22
24
  // Annotate the CommonJS export names for ESM import in node:
23
25
  0 && (module.exports = {
24
26
  ...require("./createZapper.js"),
27
+ ...require("./errors.js"),
25
28
  ...require("./IERC20ZapperContract.js"),
26
29
  ...require("./IETHZapperContract.js"),
27
- ...require("./Zapper.js")
30
+ ...require("./types.js"),
31
+ ...require("./ZapperContract.js")
28
32
  });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);