@gearbox-protocol/sdk 14.11.2 → 14.12.0-next.1

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 (183) hide show
  1. package/dist/cjs/common-utils/utils/index.js +2 -0
  2. package/dist/cjs/{history/trace-utils.js → common-utils/utils/trace.js} +62 -5
  3. package/dist/cjs/dev/abi.js +162 -6
  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 +47 -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 +46 -0
  22. package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +77 -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 +187 -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/constants.js +28 -0
  36. package/dist/cjs/preview/simulate/errors.js +98 -0
  37. package/dist/cjs/preview/simulate/extractERC20Transfers.js +47 -0
  38. package/dist/cjs/preview/simulate/holders.js +45 -0
  39. package/dist/cjs/preview/simulate/index.js +40 -0
  40. package/dist/cjs/preview/simulate/simulateFacadeOperation.js +30 -0
  41. package/dist/cjs/preview/simulate/simulateOperation.js +37 -0
  42. package/dist/cjs/preview/simulate/simulatePoolOpMulticall.js +155 -0
  43. package/dist/cjs/preview/simulate/simulatePoolOpV1.js +106 -0
  44. package/dist/cjs/preview/simulate/simulatePoolOperation.js +62 -0
  45. package/dist/cjs/preview/simulate/types.js +16 -0
  46. package/dist/cjs/{history → preview/trace}/errors.js +0 -26
  47. package/dist/cjs/preview/trace/extractAdapterCallTraces.js +58 -0
  48. package/dist/cjs/{history → preview/trace}/extractTransfers.js +9 -12
  49. package/dist/cjs/{history → preview/trace}/findFacadeCalls.js +3 -3
  50. package/dist/cjs/preview/trace/index.js +30 -0
  51. package/dist/cjs/preview/trace/types.js +16 -0
  52. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +154 -0
  53. package/dist/esm/common-utils/utils/index.js +1 -0
  54. package/dist/esm/common-utils/utils/trace.js +93 -0
  55. package/dist/esm/dev/abi.js +162 -6
  56. package/dist/esm/dev/index.js +1 -0
  57. package/dist/esm/dev/verifyTestnet.js +27 -0
  58. package/dist/esm/history/assembleOperations.js +8 -6
  59. package/dist/esm/history/classifyMulticallOperations.js +29 -23
  60. package/dist/esm/history/index.js +0 -1
  61. package/dist/esm/history/parseCreditAccountTransaction.js +3 -4
  62. package/dist/esm/history/toLegacyOperation.js +5 -1
  63. package/dist/esm/plugins/adapters/contracts/AbstractAdapter.js +28 -38
  64. package/dist/esm/plugins/adapters/contracts/AccountMigratorAdapterContract.js +9 -0
  65. package/dist/esm/preview/index.js +4 -0
  66. package/dist/esm/preview/package.json +1 -0
  67. package/dist/esm/preview/parse/classifyInnerOperations.js +68 -0
  68. package/dist/esm/preview/parse/errors.js +22 -0
  69. package/dist/esm/preview/parse/extractExpectedBalanceChanges.js +24 -0
  70. package/dist/esm/preview/parse/index.js +7 -0
  71. package/dist/esm/preview/parse/parseFacadeOperationCalldata.js +91 -0
  72. package/dist/esm/preview/parse/parseOperationCalldata.js +25 -0
  73. package/dist/esm/preview/parse/parsePoolOperationCalldata.js +53 -0
  74. package/dist/esm/preview/parse/types-facades.js +0 -0
  75. package/dist/esm/preview/parse/types-pools.js +0 -0
  76. package/dist/esm/preview/parse/types.js +9 -0
  77. package/dist/esm/preview/prerequisites/AllowancePrerequisite.js +57 -0
  78. package/dist/esm/preview/prerequisites/BalancePrerequisite.js +56 -0
  79. package/dist/esm/preview/prerequisites/Prerequisite.js +63 -0
  80. package/dist/esm/preview/prerequisites/buildPrerequisites.js +163 -0
  81. package/dist/esm/preview/prerequisites/index.js +7 -0
  82. package/dist/esm/preview/prerequisites/prepareAction.js +23 -0
  83. package/dist/esm/preview/prerequisites/runPrerequisites.js +47 -0
  84. package/dist/esm/preview/prerequisites/types.js +0 -0
  85. package/dist/esm/preview/simulate/constants.js +4 -0
  86. package/dist/esm/preview/simulate/errors.js +75 -0
  87. package/dist/esm/preview/simulate/extractERC20Transfers.js +23 -0
  88. package/dist/esm/preview/simulate/holders.js +21 -0
  89. package/dist/esm/preview/simulate/index.js +12 -0
  90. package/dist/esm/preview/simulate/simulateFacadeOperation.js +6 -0
  91. package/dist/esm/preview/simulate/simulateOperation.js +13 -0
  92. package/dist/esm/preview/simulate/simulatePoolOpMulticall.js +130 -0
  93. package/dist/esm/preview/simulate/simulatePoolOpV1.js +82 -0
  94. package/dist/esm/preview/simulate/simulatePoolOperation.js +41 -0
  95. package/dist/esm/preview/simulate/types.js +0 -0
  96. package/dist/esm/{history → preview/trace}/errors.js +0 -24
  97. package/dist/esm/preview/trace/extractAdapterCallTraces.js +40 -0
  98. package/dist/esm/{history → preview/trace}/extractTransfers.js +9 -12
  99. package/dist/esm/{history → preview/trace}/findFacadeCalls.js +4 -2
  100. package/dist/esm/preview/trace/index.js +5 -0
  101. package/dist/esm/preview/trace/types.js +0 -0
  102. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +154 -0
  103. package/dist/types/common-utils/utils/index.d.ts +1 -0
  104. package/dist/types/common-utils/utils/trace.d.ts +73 -0
  105. package/dist/types/dev/abi.d.ts +98 -16
  106. package/dist/types/dev/index.d.ts +1 -0
  107. package/dist/types/dev/verifyTestnet.d.ts +24 -0
  108. package/dist/types/history/assembleOperations.d.ts +11 -6
  109. package/dist/types/history/classifyMulticallOperations.d.ts +21 -9
  110. package/dist/types/history/index.d.ts +0 -1
  111. package/dist/types/history/mapOperations.d.ts +7 -9
  112. package/dist/types/history/types.d.ts +22 -71
  113. package/dist/types/plugins/adapters/contracts/AbstractAdapter.d.ts +16 -17
  114. package/dist/types/plugins/adapters/contracts/AccountMigratorAdapterContract.d.ts +10 -1
  115. package/dist/types/plugins/adapters/contracts/ConvexV1BaseRewardPoolAdapterContract.d.ts +1 -1
  116. package/dist/types/plugins/adapters/contracts/ConvexV1BoosterAdapterContract.d.ts +1 -1
  117. package/dist/types/plugins/adapters/contracts/Curve2AssetsAdapterContract.d.ts +1 -1
  118. package/dist/types/plugins/adapters/contracts/Curve3AssetsAdapterContract.d.ts +1 -1
  119. package/dist/types/plugins/adapters/contracts/Curve4AssetsAdapterContract.d.ts +1 -1
  120. package/dist/types/plugins/adapters/contracts/CurveV1AdapterDeposit.d.ts +1 -1
  121. package/dist/types/plugins/adapters/contracts/CurveV1AdapterStETHContract.d.ts +1 -1
  122. package/dist/types/plugins/adapters/contracts/CurveV1StableNGAdapterContract.d.ts +1 -1
  123. package/dist/types/plugins/adapters/contracts/DaiUsdsAdapterContract.d.ts +1 -1
  124. package/dist/types/plugins/adapters/contracts/ERC4626AdapterContract.d.ts +1 -1
  125. package/dist/types/plugins/adapters/contracts/ERC4626ReferralAdapterContract.d.ts +1 -1
  126. package/dist/types/plugins/adapters/contracts/LidoV1AdapterContract.d.ts +1 -1
  127. package/dist/types/plugins/adapters/contracts/MellowDVVAdapterContract.d.ts +1 -1
  128. package/dist/types/plugins/adapters/contracts/MellowERC4626VaultAdapterContract.d.ts +1 -1
  129. package/dist/types/plugins/adapters/contracts/UniswapV2AdapterContract.d.ts +1 -1
  130. package/dist/types/plugins/adapters/contracts/UniswapV4AdapterContract.d.ts +1 -1
  131. package/dist/types/plugins/adapters/contracts/WstETHV1AdapterContract.d.ts +1 -1
  132. package/dist/types/plugins/adapters/transferHelpers.d.ts +1 -1
  133. package/dist/types/plugins/adapters/transfers.d.ts +17 -0
  134. package/dist/types/plugins/adapters/types.d.ts +8 -46
  135. package/dist/types/preview/index.d.ts +4 -0
  136. package/dist/types/preview/parse/classifyInnerOperations.d.ts +21 -0
  137. package/dist/types/preview/parse/errors.d.ts +17 -0
  138. package/dist/types/preview/parse/extractExpectedBalanceChanges.d.ts +22 -0
  139. package/dist/types/preview/parse/index.d.ts +7 -0
  140. package/dist/types/preview/parse/parseFacadeOperationCalldata.d.ts +19 -0
  141. package/dist/types/preview/parse/parseOperationCalldata.d.ts +23 -0
  142. package/dist/types/preview/parse/parsePoolOperationCalldata.d.ts +17 -0
  143. package/dist/types/preview/parse/types-adapters.d.ts +69 -0
  144. package/dist/types/preview/parse/types-facades.d.ts +158 -0
  145. package/dist/types/preview/parse/types-pools.d.ts +55 -0
  146. package/dist/types/preview/parse/types.d.ts +44 -0
  147. package/dist/types/preview/prerequisites/AllowancePrerequisite.d.ts +24 -0
  148. package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +23 -0
  149. package/dist/types/preview/prerequisites/Prerequisite.d.ts +60 -0
  150. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +16 -0
  151. package/dist/types/preview/prerequisites/index.d.ts +7 -0
  152. package/dist/types/preview/prerequisites/prepareAction.d.ts +52 -0
  153. package/dist/types/preview/prerequisites/runPrerequisites.d.ts +12 -0
  154. package/dist/types/preview/prerequisites/types.d.ts +78 -0
  155. package/dist/types/preview/simulate/constants.d.ts +6 -0
  156. package/dist/types/preview/simulate/errors.d.ts +51 -0
  157. package/dist/types/preview/simulate/extractERC20Transfers.d.ts +11 -0
  158. package/dist/types/preview/simulate/holders.d.ts +7 -0
  159. package/dist/types/preview/simulate/index.d.ts +9 -0
  160. package/dist/types/preview/simulate/simulateFacadeOperation.d.ts +25 -0
  161. package/dist/types/preview/simulate/simulateOperation.d.ts +20 -0
  162. package/dist/types/preview/simulate/simulatePoolOpMulticall.d.ts +28 -0
  163. package/dist/types/preview/simulate/simulatePoolOpV1.d.ts +14 -0
  164. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +8 -0
  165. package/dist/types/preview/simulate/types.d.ts +79 -0
  166. package/dist/types/{history → preview/trace}/errors.d.ts +0 -10
  167. package/dist/types/preview/trace/extractAdapterCallTraces.d.ts +23 -0
  168. package/dist/types/{history → preview/trace}/extractTransfers.d.ts +14 -5
  169. package/dist/types/{history → preview/trace}/findFacadeCalls.d.ts +3 -2
  170. package/dist/types/preview/trace/index.d.ts +5 -0
  171. package/dist/types/preview/trace/types.d.ts +21 -0
  172. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +21 -1
  173. package/dist/types/sdk/accounts/types.d.ts +82 -0
  174. package/package.json +6 -1
  175. package/dist/cjs/history/extractProtocolCalls.js +0 -53
  176. package/dist/esm/history/extractProtocolCalls.js +0 -32
  177. package/dist/esm/history/trace-utils.js +0 -36
  178. package/dist/types/history/extractProtocolCalls.d.ts +0 -8
  179. package/dist/types/history/inner-operations.d.ts +0 -57
  180. package/dist/types/history/internal-types.d.ts +0 -47
  181. package/dist/types/history/trace-utils.d.ts +0 -12
  182. /package/dist/esm/{history/inner-operations.js → plugins/adapters/transfers.js} +0 -0
  183. /package/dist/esm/{history/internal-types.js → preview/parse/types-adapters.js} +0 -0
@@ -22,9 +22,9 @@ __export(extractTransfers_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(extractTransfers_exports);
24
24
  var import_viem = require("viem");
25
- var import_generated = require("../abi/310/generated.js");
26
- var import_iERC20 = require("../abi/iERC20.js");
27
- var import_sdk = require("../sdk/index.js");
25
+ var import_generated = require("../../abi/310/generated.js");
26
+ var import_iERC20 = require("../../abi/iERC20.js");
27
+ var import_sdk = require("../../sdk/index.js");
28
28
  var import_errors = require("./errors.js");
29
29
  function extractTransfers(logs, creditAccount, pool, creditFacade) {
30
30
  const ranges = buildOperationRanges(logs, creditFacade, creditAccount);
@@ -33,7 +33,7 @@ function extractTransfers(logs, creditAccount, pool, creditFacade) {
33
33
  return !!e && (e.eventName === "LiquidateCreditAccount" || e.eventName === "PartiallyLiquidateCreditAccount") && (0, import_viem.isAddressEqual)(e.args.creditAccount, creditAccount);
34
34
  });
35
35
  let currentEntries = [];
36
- const executeResults = [];
36
+ const executeTransfers = [];
37
37
  const directTransfers = [];
38
38
  const phantomTokens = new import_sdk.AddressMap();
39
39
  const withdrawCollateralEvents = [];
@@ -42,20 +42,17 @@ function extractTransfers(logs, creditAccount, pool, creditFacade) {
42
42
  const facadeEvent = tryDecodeFacadeEvent(log, creditFacade);
43
43
  if (facadeEvent) {
44
44
  if (isExecute(facadeEvent, creditAccount)) {
45
- executeResults.push({
46
- transfers: currentEntries,
47
- targetContract: facadeEvent.args.targetContract
48
- });
45
+ executeTransfers.push(currentEntries);
49
46
  } else if (isLiquidation(facadeEvent, creditAccount)) {
50
47
  liquidationRemainingFunds = facadeEvent.args.remainingFunds;
51
48
  } else if (isWithdrawPhantomToken(facadeEvent, creditAccount)) {
52
- const phantomExec = executeResults.pop();
53
- if (!phantomExec) {
49
+ const phantomTransfers = executeTransfers.pop();
50
+ if (!phantomTransfers) {
54
51
  throw new Error(
55
52
  `WithdrawPhantomToken without preceding Execute at logIndex ${facadeEvent.logIndex}`
56
53
  );
57
54
  }
58
- const rawDeposit = phantomExec.transfers.find(
55
+ const rawDeposit = phantomTransfers.find(
59
56
  (t) => (0, import_viem.isAddressEqual)(t.to, creditAccount)
60
57
  );
61
58
  if (!rawDeposit) {
@@ -99,7 +96,7 @@ function extractTransfers(logs, creditAccount, pool, creditFacade) {
99
96
  }
100
97
  }
101
98
  return {
102
- executeResults,
99
+ executeTransfers,
103
100
  directTransfers,
104
101
  liquidationRemainingFunds,
105
102
  phantomTokens,
@@ -22,9 +22,9 @@ __export(findFacadeCalls_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(findFacadeCalls_exports);
24
24
  var import_viem = require("viem");
25
- var import_generated = require("../abi/310/generated.js");
25
+ var import_generated = require("../../abi/310/generated.js");
26
+ var import_trace = require("../../common-utils/utils/trace.js");
26
27
  var import_errors = require("./errors.js");
27
- var import_trace_utils = require("./trace-utils.js");
28
28
  const FACADE_CALL_TYPES = {
29
29
  multicall: "MultiCall",
30
30
  botMulticall: "BotMulticall",
@@ -48,7 +48,7 @@ function extractCreditAccount(operation, rawArgs, traceOutput) {
48
48
  return ca;
49
49
  }
50
50
  function findFacadeCalls(trace, creditFacade, creditAccount, register, strict) {
51
- const facadeTraces = (0, import_trace_utils.collectTraces)(trace, creditFacade);
51
+ const facadeTraces = (0, import_trace.collectTraces)(trace, creditFacade);
52
52
  const results = [];
53
53
  for (const trace2 of facadeTraces) {
54
54
  const parsed = register.parseFunctionDataV2(
@@ -0,0 +1,30 @@
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var trace_exports = {};
17
+ module.exports = __toCommonJS(trace_exports);
18
+ __reExport(trace_exports, require("./errors.js"), module.exports);
19
+ __reExport(trace_exports, require("./extractAdapterCallTraces.js"), module.exports);
20
+ __reExport(trace_exports, require("./extractTransfers.js"), module.exports);
21
+ __reExport(trace_exports, require("./findFacadeCalls.js"), module.exports);
22
+ __reExport(trace_exports, require("./types.js"), module.exports);
23
+ // Annotate the CommonJS export names for ESM import in node:
24
+ 0 && (module.exports = {
25
+ ...require("./errors.js"),
26
+ ...require("./extractAdapterCallTraces.js"),
27
+ ...require("./extractTransfers.js"),
28
+ ...require("./findFacadeCalls.js"),
29
+ ...require("./types.js")
30
+ });
@@ -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);
@@ -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) {
@@ -5,4 +5,5 @@ export * from "./constants.js";
5
5
  export * from "./creditAccount/index.js";
6
6
  export * from "./price-math.js";
7
7
  export * from "./strategies/index.js";
8
+ export * from "./trace.js";
8
9
  export * from "./validation/index.js";
@@ -0,0 +1,93 @@
1
+ import {
2
+ decodeAbiParameters,
3
+ getAddress,
4
+ isAddressEqual
5
+ } from "viem";
6
+ const EXECUTE_BYTES_SELECTOR = "0x09c5eabe";
7
+ function findExecuteBytes(node) {
8
+ const queue = [node];
9
+ while (queue.length > 0) {
10
+ const current = queue.shift();
11
+ if (current.error) {
12
+ continue;
13
+ }
14
+ if (current.input.slice(0, 10).toLowerCase() === EXECUTE_BYTES_SELECTOR) {
15
+ return current;
16
+ }
17
+ if (current.calls) {
18
+ queue.push(...current.calls);
19
+ }
20
+ }
21
+ return void 0;
22
+ }
23
+ function findCallWithInput(node, input) {
24
+ if (node.error) {
25
+ return void 0;
26
+ }
27
+ if (node.type === "CALL" && node.input.toLowerCase() === input.toLowerCase()) {
28
+ return node;
29
+ }
30
+ if (node.calls) {
31
+ for (const child of node.calls) {
32
+ const found = findCallWithInput(child, input);
33
+ if (found) {
34
+ return found;
35
+ }
36
+ }
37
+ }
38
+ return void 0;
39
+ }
40
+ function resolveProtocolCall(node) {
41
+ const executeNode = findExecuteBytes(node);
42
+ if (!executeNode) {
43
+ return void 0;
44
+ }
45
+ const [calldata] = decodeAbiParameters(
46
+ [{ type: "bytes" }],
47
+ `0x${executeNode.input.slice(10)}`
48
+ );
49
+ const targetCall = findCallWithInput(executeNode, calldata);
50
+ if (!targetCall) {
51
+ return void 0;
52
+ }
53
+ return { contract: getAddress(targetCall.to), calldata };
54
+ }
55
+ function findCallTo(node, target) {
56
+ if (node.error) {
57
+ return void 0;
58
+ }
59
+ if (node.type === "CALL" && isAddressEqual(node.to, target)) {
60
+ return node;
61
+ }
62
+ if (node.calls) {
63
+ for (const child of node.calls) {
64
+ const found = findCallTo(child, target);
65
+ if (found) {
66
+ return found;
67
+ }
68
+ }
69
+ }
70
+ return void 0;
71
+ }
72
+ function collectTraces(node, target) {
73
+ const results = [];
74
+ if (node.error) {
75
+ return results;
76
+ }
77
+ if (node.type === "CALL" && isAddressEqual(node.to, target)) {
78
+ results.push(node);
79
+ } else if (node.calls) {
80
+ for (const child of node.calls) {
81
+ results.push(...collectTraces(child, target));
82
+ }
83
+ }
84
+ return results;
85
+ }
86
+ export {
87
+ EXECUTE_BYTES_SELECTOR,
88
+ collectTraces,
89
+ findCallTo,
90
+ findCallWithInput,
91
+ findExecuteBytes,
92
+ resolveProtocolCall
93
+ };
@@ -9,12 +9,168 @@ const iDegenNftv2Abi = parseAbi([
9
9
  "function minter() external view returns (address)",
10
10
  "function mint(address to, uint256 amount) external"
11
11
  ]);
12
- const faucetAbi = parseAbi([
13
- "function minAmountUSD() external view returns (uint256)",
14
- "function claim() external",
15
- "function claim(uint256 amountUSD) external",
16
- "function claim((address token, uint256 amount)[] claims) external"
17
- ]);
12
+ const faucetAbi = [
13
+ {
14
+ type: "function",
15
+ name: "assets",
16
+ inputs: [
17
+ {
18
+ name: "",
19
+ type: "uint256",
20
+ internalType: "uint256"
21
+ }
22
+ ],
23
+ outputs: [
24
+ {
25
+ name: "",
26
+ type: "address",
27
+ internalType: "address"
28
+ }
29
+ ],
30
+ stateMutability: "view"
31
+ },
32
+ {
33
+ type: "function",
34
+ name: "claim",
35
+ inputs: [
36
+ {
37
+ name: "amountUSD",
38
+ type: "uint256",
39
+ internalType: "uint256"
40
+ }
41
+ ],
42
+ outputs: [],
43
+ stateMutability: "nonpayable"
44
+ },
45
+ {
46
+ type: "function",
47
+ name: "claim",
48
+ inputs: [],
49
+ outputs: [],
50
+ stateMutability: "nonpayable"
51
+ },
52
+ {
53
+ type: "function",
54
+ name: "claim",
55
+ inputs: [
56
+ {
57
+ name: "claims",
58
+ type: "tuple[]",
59
+ internalType: "struct TokenClaim[]",
60
+ components: [
61
+ {
62
+ name: "token",
63
+ type: "address",
64
+ internalType: "address"
65
+ },
66
+ {
67
+ name: "amount",
68
+ type: "uint256",
69
+ internalType: "uint256"
70
+ }
71
+ ]
72
+ }
73
+ ],
74
+ outputs: [],
75
+ stateMutability: "nonpayable"
76
+ },
77
+ {
78
+ type: "function",
79
+ name: "getAssets",
80
+ inputs: [],
81
+ outputs: [
82
+ {
83
+ name: "",
84
+ type: "address[]",
85
+ internalType: "address[]"
86
+ }
87
+ ],
88
+ stateMutability: "view"
89
+ },
90
+ {
91
+ type: "function",
92
+ name: "hasClaimed",
93
+ inputs: [
94
+ {
95
+ name: "user",
96
+ type: "address",
97
+ internalType: "address"
98
+ }
99
+ ],
100
+ outputs: [
101
+ {
102
+ name: "",
103
+ type: "bool",
104
+ internalType: "bool"
105
+ }
106
+ ],
107
+ stateMutability: "view"
108
+ },
109
+ {
110
+ type: "function",
111
+ name: "minAmountUSD",
112
+ inputs: [],
113
+ outputs: [
114
+ {
115
+ name: "",
116
+ type: "uint256",
117
+ internalType: "uint256"
118
+ }
119
+ ],
120
+ stateMutability: "view"
121
+ },
122
+ {
123
+ type: "function",
124
+ name: "owner",
125
+ inputs: [],
126
+ outputs: [
127
+ {
128
+ name: "",
129
+ type: "address",
130
+ internalType: "address"
131
+ }
132
+ ],
133
+ stateMutability: "view"
134
+ },
135
+ {
136
+ type: "function",
137
+ name: "prices",
138
+ inputs: [
139
+ {
140
+ name: "",
141
+ type: "address",
142
+ internalType: "address"
143
+ }
144
+ ],
145
+ outputs: [
146
+ {
147
+ name: "",
148
+ type: "uint256",
149
+ internalType: "uint256"
150
+ }
151
+ ],
152
+ stateMutability: "view"
153
+ },
154
+ {
155
+ type: "function",
156
+ name: "scales",
157
+ inputs: [
158
+ {
159
+ name: "",
160
+ type: "address",
161
+ internalType: "address"
162
+ }
163
+ ],
164
+ outputs: [
165
+ {
166
+ name: "",
167
+ type: "uint256",
168
+ internalType: "uint256"
169
+ }
170
+ ],
171
+ stateMutability: "view"
172
+ }
173
+ ];
18
174
  const iOnchainExecutionIdAbi = [
19
175
  {
20
176
  type: "function",
@@ -23,6 +23,7 @@ export * from "./replaceStorage.js";
23
23
  export * from "./resilientTransport.js";
24
24
  export * from "./transports.js";
25
25
  export * from "./types.js";
26
+ export * from "./verifyTestnet.js";
26
27
  export {
27
28
  isRangeError,
28
29
  logSplitterTransport
@@ -0,0 +1,27 @@
1
+ import { iOnchainExecutionIdAbi } from "./abi.js";
2
+ const ONCHAIN_EXECUTION_ID_ADDRESS = "0x34131bc13eaa4ef5f98c2a423f93bc88d6ee01ba";
3
+ async function verifyTestnet(client, expected) {
4
+ try {
5
+ const { deployer, executionId, forkAlias } = await client.readContract({
6
+ abi: iOnchainExecutionIdAbi,
7
+ address: ONCHAIN_EXECUTION_ID_ADDRESS,
8
+ functionName: "info"
9
+ });
10
+ if (deployer !== "anvil-manager") {
11
+ return false;
12
+ }
13
+ if ("executionId" in expected && expected.executionId && expected.executionId !== executionId) {
14
+ return false;
15
+ }
16
+ if ("alias" in expected && expected.alias && expected.alias !== forkAlias) {
17
+ return false;
18
+ }
19
+ return true;
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+ export {
25
+ ONCHAIN_EXECUTION_ID_ADDRESS,
26
+ verifyTestnet
27
+ };
@@ -1,10 +1,12 @@
1
1
  import { AbstractAdapterContract } from "../plugins/adapters/index.js";
2
+ import {
3
+ extractAdapterCallTraces
4
+ } from "../preview/trace/index.js";
2
5
  import { classifyMulticallOperations } from "./classifyMulticallOperations.js";
3
- import { extractProtocolCalls } from "./extractProtocolCalls.js";
4
6
  function assembleOperations(input) {
5
7
  const {
6
8
  facadeCalls,
7
- executeResults,
9
+ executeTransfers,
8
10
  register,
9
11
  underlying,
10
12
  liquidationRemainingFunds,
@@ -19,7 +21,7 @@ function assembleOperations(input) {
19
21
  return assemblePartialLiquidation(fc);
20
22
  }
21
23
  const count = countAdapterCalls(fc.innerCalls, register);
22
- const sliced = executeResults.slice(executeOffset, executeOffset + count);
24
+ const sliced = executeTransfers.slice(executeOffset, executeOffset + count);
23
25
  executeOffset += count;
24
26
  const withdrawCount = countWithdrawCollateralCalls(fc.innerCalls);
25
27
  const slicedWithdrawEvents = withdrawCollateralEvents.slice(
@@ -27,11 +29,11 @@ function assembleOperations(input) {
27
29
  withdrawOffset + withdrawCount
28
30
  );
29
31
  withdrawOffset += withdrawCount;
30
- const protocolCalldatas = extractProtocolCalls(fc.trace, sliced);
32
+ const adapterTraces = extractAdapterCallTraces(fc.trace);
31
33
  const multicall = classifyMulticallOperations({
32
34
  innerCalls: fc.innerCalls,
33
- executeResults: sliced,
34
- protocolCalldatas,
35
+ executeTransfers: sliced,
36
+ adapterTraces,
35
37
  register,
36
38
  creditAccount: fc.creditAccount,
37
39
  underlying,