@gearbox-protocol/sdk 14.12.0-next.4 → 14.12.0-next.6

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 (59) hide show
  1. package/dist/cjs/preview/index.js +2 -2
  2. package/dist/cjs/preview/parse/index.js +0 -2
  3. package/dist/cjs/preview/parse/parseFacadeOperationCalldata.js +5 -12
  4. package/dist/cjs/preview/parse/parseOperationCalldata.js +5 -3
  5. package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +4 -0
  6. package/dist/cjs/preview/parse/parseRWAFactoryOperationCalldata.js +0 -4
  7. package/dist/cjs/preview/prerequisites/BalancePrerequisite.js +19 -1
  8. package/dist/cjs/preview/prerequisites/buildPrerequisites.js +24 -15
  9. package/dist/cjs/preview/{simulate/holders.js → preview/errors.js} +12 -21
  10. package/dist/cjs/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
  11. package/dist/cjs/preview/preview/index.js +26 -0
  12. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +99 -0
  13. package/dist/cjs/preview/preview/previewOperation.js +41 -0
  14. package/dist/cjs/preview/preview/previewPoolOperation.js +75 -0
  15. package/dist/cjs/preview/preview/types.js +16 -0
  16. package/dist/cjs/preview/simulate/simulatePoolOperation.js +20 -116
  17. package/dist/cjs/sdk/market/zapper/ZapperContract.js +0 -3
  18. package/dist/esm/preview/index.js +1 -1
  19. package/dist/esm/preview/parse/index.js +0 -1
  20. package/dist/esm/preview/parse/parseFacadeOperationCalldata.js +5 -12
  21. package/dist/esm/preview/parse/parseOperationCalldata.js +5 -3
  22. package/dist/esm/preview/parse/parsePoolOperationCalldata.js +4 -0
  23. package/dist/esm/preview/parse/parseRWAFactoryOperationCalldata.js +0 -4
  24. package/dist/esm/preview/prerequisites/BalancePrerequisite.js +19 -1
  25. package/dist/esm/preview/prerequisites/buildPrerequisites.js +28 -16
  26. package/dist/esm/preview/preview/errors.js +12 -0
  27. package/dist/esm/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
  28. package/dist/esm/preview/preview/index.js +3 -0
  29. package/dist/esm/preview/preview/previewOpenCreditAccount.js +77 -0
  30. package/dist/esm/preview/preview/previewOperation.js +17 -0
  31. package/dist/esm/preview/preview/previewPoolOperation.js +53 -0
  32. package/dist/esm/preview/preview/types.js +0 -0
  33. package/dist/esm/preview/simulate/simulatePoolOperation.js +21 -120
  34. package/dist/esm/sdk/market/zapper/ZapperContract.js +0 -3
  35. package/dist/types/history/types.d.ts +4 -4
  36. package/dist/types/preview/index.d.ts +1 -1
  37. package/dist/types/preview/parse/index.d.ts +0 -1
  38. package/dist/types/preview/parse/types-facades.d.ts +0 -33
  39. package/dist/types/preview/parse/types-pools.d.ts +29 -1
  40. package/dist/types/preview/parse/types-rwa.d.ts +1 -13
  41. package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +8 -3
  42. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +15 -6
  43. package/dist/types/preview/preview/errors.d.ts +9 -0
  44. package/dist/types/preview/{parse → preview}/extractExpectedBalanceChanges.d.ts +4 -5
  45. package/dist/types/preview/preview/index.d.ts +3 -0
  46. package/dist/types/preview/preview/previewOpenCreditAccount.d.ts +4 -0
  47. package/dist/types/preview/preview/previewOperation.d.ts +8 -0
  48. package/dist/types/preview/preview/previewPoolOperation.d.ts +5 -0
  49. package/dist/types/preview/preview/types.d.ts +103 -0
  50. package/dist/types/preview/simulate/index.d.ts +1 -1
  51. package/dist/types/preview/simulate/simulateFacadeOperation.d.ts +0 -2
  52. package/dist/types/preview/simulate/simulateOperation.d.ts +0 -2
  53. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +6 -18
  54. package/dist/types/preview/simulate/simulateRWAOperation.d.ts +0 -2
  55. package/dist/types/preview/simulate/types.d.ts +12 -26
  56. package/dist/types/sdk/market/zapper/types.d.ts +6 -6
  57. package/package.json +1 -1
  58. package/dist/esm/preview/simulate/holders.js +0 -21
  59. package/dist/types/preview/simulate/holders.d.ts +0 -7
@@ -17,12 +17,12 @@ var preview_exports = {};
17
17
  module.exports = __toCommonJS(preview_exports);
18
18
  __reExport(preview_exports, require("./parse/index.js"), module.exports);
19
19
  __reExport(preview_exports, require("./prerequisites/index.js"), module.exports);
20
- __reExport(preview_exports, require("./simulate/index.js"), module.exports);
20
+ __reExport(preview_exports, require("./preview/index.js"), module.exports);
21
21
  __reExport(preview_exports, require("./trace/index.js"), module.exports);
22
22
  // Annotate the CommonJS export names for ESM import in node:
23
23
  0 && (module.exports = {
24
24
  ...require("./parse/index.js"),
25
25
  ...require("./prerequisites/index.js"),
26
- ...require("./simulate/index.js"),
26
+ ...require("./preview/index.js"),
27
27
  ...require("./trace/index.js")
28
28
  });
@@ -17,7 +17,6 @@ var parse_exports = {};
17
17
  module.exports = __toCommonJS(parse_exports);
18
18
  __reExport(parse_exports, require("./classifyInnerOperations.js"), module.exports);
19
19
  __reExport(parse_exports, require("./errors.js"), module.exports);
20
- __reExport(parse_exports, require("./extractExpectedBalanceChanges.js"), module.exports);
21
20
  __reExport(parse_exports, require("./parseFacadeOperationCalldata.js"), module.exports);
22
21
  __reExport(parse_exports, require("./parseOperationCalldata.js"), module.exports);
23
22
  __reExport(parse_exports, require("./parsePoolOperationCalldata.js"), module.exports);
@@ -27,7 +26,6 @@ __reExport(parse_exports, require("./types.js"), module.exports);
27
26
  0 && (module.exports = {
28
27
  ...require("./classifyInnerOperations.js"),
29
28
  ...require("./errors.js"),
30
- ...require("./extractExpectedBalanceChanges.js"),
31
29
  ...require("./parseFacadeOperationCalldata.js"),
32
30
  ...require("./parseOperationCalldata.js"),
33
31
  ...require("./parsePoolOperationCalldata.js"),
@@ -23,7 +23,6 @@ __export(parseFacadeOperationCalldata_exports, {
23
23
  module.exports = __toCommonJS(parseFacadeOperationCalldata_exports);
24
24
  var import_viem = require("viem");
25
25
  var import_classifyInnerOperations = require("./classifyInnerOperations.js");
26
- var import_extractExpectedBalanceChanges = require("./extractExpectedBalanceChanges.js");
27
26
  function parseFacadeOperationCalldata(props) {
28
27
  const { sdk, facade, calldata } = props;
29
28
  const parsed = sdk.parseFunctionDataV2(facade.address, calldata);
@@ -44,23 +43,20 @@ function parseFacadeOperationCalldata(props) {
44
43
  sdk,
45
44
  underlying: suite.underlying
46
45
  });
47
- const expectedBalanceChanges = (0, import_extractExpectedBalanceChanges.extractExpectedBalanceChanges)(innerCalls);
48
46
  switch (functionName) {
49
47
  case "multicall":
50
48
  return {
51
49
  ...metadata,
52
50
  operation: "MultiCall",
53
51
  creditAccount: rawArgs.creditAccount,
54
- multicall,
55
- expectedBalanceChanges
52
+ multicall
56
53
  };
57
54
  case "botMulticall":
58
55
  return {
59
56
  ...metadata,
60
57
  operation: "BotMulticall",
61
58
  creditAccount: rawArgs.creditAccount,
62
- multicall,
63
- expectedBalanceChanges
59
+ multicall
64
60
  };
65
61
  case "openCreditAccount":
66
62
  return {
@@ -69,16 +65,14 @@ function parseFacadeOperationCalldata(props) {
69
65
  creditAccount: import_viem.zeroAddress,
70
66
  onBehalfOf: rawArgs.onBehalfOf,
71
67
  referralCode: rawArgs.referralCode,
72
- multicall,
73
- expectedBalanceChanges
68
+ multicall
74
69
  };
75
70
  case "closeCreditAccount":
76
71
  return {
77
72
  ...metadata,
78
73
  operation: "CloseCreditAccount",
79
74
  creditAccount: rawArgs.creditAccount,
80
- multicall,
81
- expectedBalanceChanges
75
+ multicall
82
76
  };
83
77
  case "liquidateCreditAccount":
84
78
  return {
@@ -90,8 +84,7 @@ function parseFacadeOperationCalldata(props) {
90
84
  // liquidation, so they are not recoverable from raw calldata.
91
85
  token: import_viem.zeroAddress,
92
86
  remainingFunds: 0n,
93
- multicall,
94
- expectedBalanceChanges
87
+ multicall
95
88
  };
96
89
  case "partiallyLiquidateCreditAccount":
97
90
  return {
@@ -41,7 +41,8 @@ function parseOperationCalldata(input) {
41
41
  receiver: parsed.receiver,
42
42
  assets: parsed.assets,
43
43
  underlying: parsed.underlying,
44
- tokenIn: parsed.token,
44
+ tokenIn: contract.tokenIn.addr,
45
+ tokenOut: contract.tokenOut.addr,
45
46
  zapper: parsed.zapper,
46
47
  referralCode: parsed.referralCode
47
48
  };
@@ -51,12 +52,13 @@ function parseOperationCalldata(input) {
51
52
  operation: "Redeem",
52
53
  pool: parsed.pool,
53
54
  receiver: parsed.receiver,
54
- // The zapper burns the caller's pool shares, so the share owner is the
55
+ // The zapper burns the caller's share tokens, so the share owner is the
55
56
  // transaction sender.
56
57
  owner: sender,
57
58
  shares: parsed.shares,
58
59
  underlying: parsed.underlying,
59
- tokenOut: parsed.token,
60
+ tokenIn: contract.tokenOut.addr,
61
+ tokenOut: contract.tokenIn.addr,
60
62
  zapper: parsed.zapper
61
63
  };
62
64
  return op;
@@ -38,6 +38,7 @@ function parsePoolOperationCalldata(props) {
38
38
  assets: rawArgs.assets,
39
39
  underlying,
40
40
  tokenIn: underlying,
41
+ tokenOut: pool.address,
41
42
  zapper: void 0,
42
43
  referralCode: functionName === "depositWithReferral" ? rawArgs.referralCode : void 0
43
44
  };
@@ -50,6 +51,7 @@ function parsePoolOperationCalldata(props) {
50
51
  shares: rawArgs.shares,
51
52
  underlying,
52
53
  tokenIn: underlying,
54
+ tokenOut: pool.address,
53
55
  zapper: void 0,
54
56
  referralCode: functionName === "mintWithReferral" ? rawArgs.referralCode : void 0
55
57
  };
@@ -61,6 +63,7 @@ function parsePoolOperationCalldata(props) {
61
63
  owner: rawArgs.owner,
62
64
  assets: rawArgs.assets,
63
65
  underlying,
66
+ tokenIn: pool.address,
64
67
  tokenOut: underlying,
65
68
  zapper: void 0
66
69
  };
@@ -72,6 +75,7 @@ function parsePoolOperationCalldata(props) {
72
75
  owner: rawArgs.owner,
73
76
  shares: rawArgs.shares,
74
77
  underlying,
78
+ tokenIn: pool.address,
75
79
  tokenOut: underlying,
76
80
  zapper: void 0
77
81
  };
@@ -24,7 +24,6 @@ module.exports = __toCommonJS(parseRWAFactoryOperationCalldata_exports);
24
24
  var import_adapters = require("../../plugins/adapters/index.js");
25
25
  var import_sdk = require("../../sdk/index.js");
26
26
  var import_classifyInnerOperations = require("./classifyInnerOperations.js");
27
- var import_extractExpectedBalanceChanges = require("./extractExpectedBalanceChanges.js");
28
27
  function parseRWAFactoryOperationCalldata(props) {
29
28
  const { contractType, address } = props.factory;
30
29
  if ((0, import_sdk.isRWAFactory)(props.factory, import_sdk.RWA_FACTORY_SECURITIZE)) {
@@ -56,14 +55,12 @@ function parseSecuritizeOperationCalldata(props) {
56
55
  sdk,
57
56
  underlying: suite.underlying
58
57
  });
59
- const expectedBalanceChanges = (0, import_extractExpectedBalanceChanges.extractExpectedBalanceChanges)(innerCalls);
60
58
  switch (functionName) {
61
59
  case "openCreditAccount":
62
60
  return {
63
61
  ...metadata,
64
62
  operation: "SecuritizeOpenCreditAccount",
65
63
  multicall,
66
- expectedBalanceChanges,
67
64
  tokensToRegister,
68
65
  signaturesToCache
69
66
  };
@@ -73,7 +70,6 @@ function parseSecuritizeOperationCalldata(props) {
73
70
  operation: "SecuritizeMulticall",
74
71
  creditAccount: rawArgs.creditAccount,
75
72
  multicall,
76
- expectedBalanceChanges,
77
73
  tokensToRegister,
78
74
  signaturesToCache
79
75
  };
@@ -22,6 +22,8 @@ __export(BalancePrerequisite_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(BalancePrerequisite_exports);
24
24
  var import_viem = require("viem");
25
+ var import_iMulticall3 = require("../../abi/iMulticall3.js");
26
+ var import_sdk = require("../../sdk/index.js");
25
27
  var import_Prerequisite = require("./Prerequisite.js");
26
28
  class BalancePrerequisite extends import_Prerequisite.Prerequisite {
27
29
  #id;
@@ -49,7 +51,23 @@ class BalancePrerequisite extends import_Prerequisite.Prerequisite {
49
51
  get detail() {
50
52
  return this.#detail;
51
53
  }
52
- calls() {
54
+ calls(ctx) {
55
+ if ((0, import_sdk.hexEq)(this.#detail.token, import_sdk.NATIVE_ADDRESS)) {
56
+ const multicall3 = ctx.sdk.client.chain.contracts?.multicall3?.address;
57
+ if (!multicall3) {
58
+ throw new Error(
59
+ "multicall3 is not configured for this chain, cannot read native balance"
60
+ );
61
+ }
62
+ return [
63
+ {
64
+ address: multicall3,
65
+ abi: import_iMulticall3.iMulticall3Abi,
66
+ functionName: "getEthBalance",
67
+ args: [this.#detail.owner]
68
+ }
69
+ ];
70
+ }
53
71
  return [
54
72
  {
55
73
  address: this.#detail.token,
@@ -23,11 +23,14 @@ __export(buildPrerequisites_exports, {
23
23
  module.exports = __toCommonJS(buildPrerequisites_exports);
24
24
  var import_viem = require("viem");
25
25
  var import_sdk = require("../../sdk/index.js");
26
+ var import_parseOperationCalldata = require("../parse/parseOperationCalldata.js");
26
27
  var import_AllowancePrerequisite = require("./AllowancePrerequisite.js");
27
28
  var import_BalancePrerequisite = require("./BalancePrerequisite.js");
28
29
  var import_RWAOpenRequirementsPrerequisite = require("./RWAOpenRequirementsPrerequisite.js");
29
- async function buildPrerequisites(tx, ctx) {
30
- const { wallet } = ctx;
30
+ async function buildPrerequisites(input) {
31
+ const { sdk, sender: wallet, blockNumber } = input;
32
+ const tx = (0, import_parseOperationCalldata.parseOperationCalldata)(input);
33
+ const ctx = { sdk, wallet, blockNumber };
31
34
  switch (tx.operation) {
32
35
  // Deposit and Mint both pull the underlying from the caller into the pool;
33
36
  // they only differ in which side (assets vs shares) the caller specifies.
@@ -37,21 +40,27 @@ async function buildPrerequisites(tx, ctx) {
37
40
  // not knowable from calldata alone).
38
41
  case "Deposit":
39
42
  if (tx.zapper) {
40
- return [
41
- new import_AllowancePrerequisite.AllowancePrerequisite({
42
- token: tx.tokenIn,
43
- owner: wallet,
44
- spender: tx.zapper,
45
- required: tx.assets,
46
- title: "Token approved to zapper"
47
- }),
43
+ const prereqs = [];
44
+ if (!(0, import_viem.isAddressEqual)(tx.tokenIn, import_sdk.NATIVE_ADDRESS)) {
45
+ prereqs.push(
46
+ new import_AllowancePrerequisite.AllowancePrerequisite({
47
+ token: tx.tokenIn,
48
+ owner: wallet,
49
+ spender: tx.zapper,
50
+ required: tx.assets,
51
+ title: "Token approved to zapper"
52
+ })
53
+ );
54
+ }
55
+ prereqs.push(
48
56
  new import_BalancePrerequisite.BalancePrerequisite({
49
57
  token: tx.tokenIn,
50
58
  owner: wallet,
51
59
  required: tx.assets,
52
60
  title: "Sufficient token balance"
53
61
  })
54
- ];
62
+ );
63
+ return prereqs;
55
64
  }
56
65
  return [
57
66
  new import_AllowancePrerequisite.AllowancePrerequisite({
@@ -90,17 +99,17 @@ async function buildPrerequisites(tx, ctx) {
90
99
  if (tx.zapper) {
91
100
  return [
92
101
  new import_BalancePrerequisite.BalancePrerequisite({
93
- token: tx.pool,
102
+ token: tx.tokenIn,
94
103
  owner: wallet,
95
104
  required: tx.shares,
96
- title: "Sufficient LP token balance"
105
+ title: "Sufficient share token balance"
97
106
  }),
98
107
  new import_AllowancePrerequisite.AllowancePrerequisite({
99
- token: tx.pool,
108
+ token: tx.tokenIn,
100
109
  owner: wallet,
101
110
  spender: tx.zapper,
102
111
  required: tx.shares,
103
- title: "LP token approved to zapper"
112
+ title: "Share token approved to zapper"
104
113
  })
105
114
  ];
106
115
  }
@@ -16,30 +16,21 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var holders_exports = {};
20
- __export(holders_exports, {
21
- watchedHolders: () => watchedHolders
19
+ var errors_exports = {};
20
+ __export(errors_exports, {
21
+ UnsupportedOperationError: () => UnsupportedOperationError
22
22
  });
23
- module.exports = __toCommonJS(holders_exports);
24
- var import_sdk = require("../../sdk/index.js");
25
- function sourceHolder(operation, wallet) {
26
- switch (operation.operation) {
27
- case "Deposit":
28
- case "Mint":
29
- return wallet;
30
- case "Withdraw":
31
- case "Redeem":
32
- return operation.owner;
23
+ module.exports = __toCommonJS(errors_exports);
24
+ class UnsupportedOperationError extends Error {
25
+ /** The parsed operation kind (the `operation` discriminant). */
26
+ operation;
27
+ constructor(operation) {
28
+ super(`operation "${operation}" is not supported by previewOperation`);
29
+ this.name = "UnsupportedOperationError";
30
+ this.operation = operation;
33
31
  }
34
32
  }
35
- function watchedHolders(operation, wallet) {
36
- const holders = new import_sdk.AddressSet([
37
- sourceHolder(operation, wallet),
38
- operation.receiver
39
- ]);
40
- return holders.asArray();
41
- }
42
33
  // Annotate the CommonJS export names for ESM import in node:
43
34
  0 && (module.exports = {
44
- watchedHolders
35
+ UnsupportedOperationError
45
36
  });
@@ -37,7 +37,7 @@ function extractExpectedBalanceChanges(innerCalls) {
37
37
  if (!balanceDeltas) {
38
38
  return void 0;
39
39
  }
40
- return balanceDeltas.map(({ token, amount }) => ({ token, delta: amount }));
40
+ return balanceDeltas.map(({ token, amount }) => ({ token, balance: amount }));
41
41
  }
42
42
  function functionName(call) {
43
43
  return call.functionName.split("(")[0];
@@ -0,0 +1,26 @@
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 preview_exports = {};
17
+ module.exports = __toCommonJS(preview_exports);
18
+ __reExport(preview_exports, require("./errors.js"), module.exports);
19
+ __reExport(preview_exports, require("./previewOperation.js"), module.exports);
20
+ __reExport(preview_exports, require("./types.js"), module.exports);
21
+ // Annotate the CommonJS export names for ESM import in node:
22
+ 0 && (module.exports = {
23
+ ...require("./errors.js"),
24
+ ...require("./previewOperation.js"),
25
+ ...require("./types.js")
26
+ });
@@ -0,0 +1,99 @@
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 previewOpenCreditAccount_exports = {};
20
+ __export(previewOpenCreditAccount_exports, {
21
+ previewOpenCreditAccount: () => previewOpenCreditAccount
22
+ });
23
+ module.exports = __toCommonJS(previewOpenCreditAccount_exports);
24
+ var import_sdk = require("../../sdk/index.js");
25
+ var import_extractExpectedBalanceChanges = require("./extractExpectedBalanceChanges.js");
26
+ function previewOpenCreditAccount(input, operation) {
27
+ const { sdk, to, calldata } = input;
28
+ const market = sdk.marketRegister.findByCreditManager(
29
+ operation.creditManager
30
+ );
31
+ const collateralByToken = new import_sdk.AddressMap();
32
+ const balances = new import_sdk.AddressMap();
33
+ const addBalance = (token, amount) => {
34
+ balances.upsert(token, (balances.get(token) ?? 0n) + amount);
35
+ };
36
+ let debt = 0n;
37
+ const quotas = [];
38
+ for (const op of operation.multicall) {
39
+ switch (op.operation) {
40
+ case "AddCollateral": {
41
+ const balance = collateralByToken.get(op.token)?.balance ?? 0n;
42
+ collateralByToken.upsert(op.token, {
43
+ token: op.token,
44
+ balance: balance + op.amount
45
+ });
46
+ addBalance(op.token, op.amount);
47
+ break;
48
+ }
49
+ case "WithdrawCollateral":
50
+ addBalance(op.token, -op.amount);
51
+ break;
52
+ case "IncreaseBorrowedAmount":
53
+ debt += op.amount;
54
+ addBalance(op.token, op.amount);
55
+ break;
56
+ case "DecreaseBorrowedAmount":
57
+ debt -= op.amount;
58
+ addBalance(op.token, -op.amount);
59
+ break;
60
+ case "UpdateQuota":
61
+ quotas.push({ token: op.token, balance: op.change });
62
+ break;
63
+ }
64
+ }
65
+ const collateral = collateralByToken.values();
66
+ const collateralValue = collateral.reduce(
67
+ (acc, { token, balance }) => acc + market.priceOracle.convert(token, market.underlying, balance),
68
+ 0n
69
+ );
70
+ const parsed = sdk.parseFunctionDataV2(to, calldata);
71
+ const innerCalls = parsed.rawArgs.calls ?? [];
72
+ const deltas = (0, import_extractExpectedBalanceChanges.extractExpectedBalanceChanges)(innerCalls) ?? [];
73
+ for (const { token, balance } of deltas) {
74
+ addBalance(token, balance);
75
+ }
76
+ const assets = balances.entries().filter(([, balance]) => balance > 1n).map(([token, balance]) => ({ token, balance }));
77
+ return {
78
+ operation: operation.operation,
79
+ target: inferTargetAsset(operation.multicall, balances),
80
+ collateral,
81
+ collateralValue,
82
+ debt,
83
+ quotas,
84
+ assets
85
+ };
86
+ }
87
+ function inferTargetAsset(multicall, balances) {
88
+ for (const op of multicall) {
89
+ if (op.operation === "UpdateQuota" && op.change > 0n) {
90
+ const balance = balances.get(op.token);
91
+ return balance ? { token: op.token, balance } : void 0;
92
+ }
93
+ }
94
+ return void 0;
95
+ }
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ previewOpenCreditAccount
99
+ });
@@ -0,0 +1,41 @@
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 previewOperation_exports = {};
20
+ __export(previewOperation_exports, {
21
+ previewOperation: () => previewOperation
22
+ });
23
+ module.exports = __toCommonJS(previewOperation_exports);
24
+ var import_parse = require("../parse/index.js");
25
+ var import_errors = require("./errors.js");
26
+ var import_previewOpenCreditAccount = require("./previewOpenCreditAccount.js");
27
+ var import_previewPoolOperation = require("./previewPoolOperation.js");
28
+ async function previewOperation(input, options) {
29
+ const operation = (0, import_parse.parseOperationCalldata)(input);
30
+ if ((0, import_parse.isPoolOperation)(operation)) {
31
+ return (0, import_previewPoolOperation.previewPoolOperation)(input, operation, options);
32
+ }
33
+ if (operation.operation === "OpenCreditAccount" || operation.operation === "SecuritizeOpenCreditAccount") {
34
+ return (0, import_previewOpenCreditAccount.previewOpenCreditAccount)(input, operation);
35
+ }
36
+ throw new import_errors.UnsupportedOperationError(operation.operation);
37
+ }
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ previewOperation
41
+ });
@@ -0,0 +1,75 @@
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 previewPoolOperation_exports = {};
20
+ __export(previewPoolOperation_exports, {
21
+ previewPoolOperation: () => previewPoolOperation
22
+ });
23
+ module.exports = __toCommonJS(previewPoolOperation_exports);
24
+ var import_simulate = require("../simulate/index.js");
25
+ async function previewPoolOperation(input, operation, options) {
26
+ const { sdk, to, calldata } = input;
27
+ const { tokenIn, tokenOut } = operation;
28
+ const sim = await (0, import_simulate.simulatePoolOperation)(
29
+ { sdk, operation, to, calldata },
30
+ options
31
+ );
32
+ if (sim.status === "success") {
33
+ return {
34
+ operation: operation.operation,
35
+ pool: operation.pool,
36
+ tokenIn: { token: tokenIn, balance: sim.amountIn },
37
+ tokenOut: { token: tokenOut, balance: sim.amountOut }
38
+ };
39
+ }
40
+ const { error } = sim;
41
+ switch (operation.operation) {
42
+ case "Deposit":
43
+ return {
44
+ operation: "Deposit",
45
+ pool: operation.pool,
46
+ tokenIn: { token: tokenIn, balance: operation.assets },
47
+ tokenOut: { token: tokenOut, error }
48
+ };
49
+ case "Mint":
50
+ return {
51
+ operation: "Mint",
52
+ pool: operation.pool,
53
+ tokenIn: { token: tokenIn, error },
54
+ tokenOut: { token: tokenOut, balance: operation.shares }
55
+ };
56
+ case "Withdraw":
57
+ return {
58
+ operation: "Withdraw",
59
+ pool: operation.pool,
60
+ tokenIn: { token: tokenIn, error },
61
+ tokenOut: { token: tokenOut, balance: operation.assets }
62
+ };
63
+ case "Redeem":
64
+ return {
65
+ operation: "Redeem",
66
+ pool: operation.pool,
67
+ tokenIn: { token: tokenIn, balance: operation.shares },
68
+ tokenOut: { token: tokenOut, error }
69
+ };
70
+ }
71
+ }
72
+ // Annotate the CommonJS export names for ESM import in node:
73
+ 0 && (module.exports = {
74
+ previewPoolOperation
75
+ });
@@ -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);