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

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 (91) hide show
  1. package/dist/cjs/abi/iZapper.js +62 -24
  2. package/dist/cjs/preview/parse/errors.js +5 -2
  3. package/dist/cjs/preview/parse/index.js +2 -0
  4. package/dist/cjs/preview/parse/parseOperationCalldata.js +38 -1
  5. package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +10 -2
  6. package/dist/cjs/preview/parse/parseRWAFactoryOperationCalldata.js +92 -0
  7. package/dist/cjs/preview/prerequisites/buildPrerequisites.js +57 -10
  8. package/dist/cjs/preview/simulate/errors.js +0 -7
  9. package/dist/cjs/preview/simulate/index.js +0 -3
  10. package/dist/cjs/preview/simulate/simulatePoolOperation.js +154 -29
  11. package/dist/cjs/sdk/MultichainSDK.js +1 -0
  12. package/dist/cjs/sdk/OnchainSDK.js +7 -3
  13. package/dist/cjs/sdk/market/MarketRegister.js +10 -5
  14. package/dist/cjs/sdk/market/ZapperRegister.js +54 -0
  15. package/dist/cjs/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +20 -0
  16. package/dist/cjs/sdk/market/zapper/IERC20ZapperContract.js +3 -38
  17. package/dist/cjs/sdk/market/zapper/IETHZapperContract.js +3 -38
  18. package/dist/cjs/sdk/market/zapper/ZapperContract.js +109 -0
  19. package/dist/cjs/sdk/market/zapper/createZapper.js +12 -4
  20. package/dist/cjs/{preview/simulate/constants.js → sdk/market/zapper/errors.js} +15 -6
  21. package/dist/cjs/sdk/market/zapper/index.js +6 -2
  22. package/dist/cjs/sdk/market/zapper/types.js +16 -0
  23. package/dist/cjs/sdk/options.js +41 -17
  24. package/dist/esm/abi/iZapper.js +62 -24
  25. package/dist/esm/preview/parse/errors.js +3 -1
  26. package/dist/esm/preview/parse/index.js +1 -0
  27. package/dist/esm/preview/parse/parseOperationCalldata.js +41 -2
  28. package/dist/esm/preview/parse/parsePoolOperationCalldata.js +10 -2
  29. package/dist/esm/preview/parse/parseRWAFactoryOperationCalldata.js +71 -0
  30. package/dist/esm/preview/prerequisites/buildPrerequisites.js +57 -10
  31. package/dist/esm/preview/simulate/errors.js +0 -6
  32. package/dist/esm/preview/simulate/index.js +0 -2
  33. package/dist/esm/preview/simulate/simulatePoolOperation.js +155 -30
  34. package/dist/esm/sdk/MultichainSDK.js +1 -0
  35. package/dist/esm/sdk/OnchainSDK.js +7 -3
  36. package/dist/esm/sdk/market/MarketRegister.js +10 -5
  37. package/dist/esm/sdk/market/ZapperRegister.js +54 -0
  38. package/dist/esm/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +23 -1
  39. package/dist/esm/sdk/market/zapper/IERC20ZapperContract.js +3 -38
  40. package/dist/esm/sdk/market/zapper/IETHZapperContract.js +3 -38
  41. package/dist/esm/sdk/market/zapper/ZapperContract.js +85 -0
  42. package/dist/esm/sdk/market/zapper/createZapper.js +12 -4
  43. package/dist/esm/sdk/market/zapper/errors.js +13 -0
  44. package/dist/esm/sdk/market/zapper/index.js +3 -1
  45. package/dist/esm/sdk/market/zapper/types.js +0 -0
  46. package/dist/esm/sdk/options.js +39 -15
  47. package/dist/types/abi/iERC20Zapper.d.ts +91 -23
  48. package/dist/types/abi/iETHZapper.d.ts +91 -23
  49. package/dist/types/abi/iZapper.d.ts +91 -23
  50. package/dist/types/preview/parse/classifyInnerOperations.d.ts +0 -2
  51. package/dist/types/preview/parse/errors.d.ts +1 -0
  52. package/dist/types/preview/parse/index.d.ts +1 -0
  53. package/dist/types/preview/parse/parseOperationCalldata.d.ts +3 -3
  54. package/dist/types/preview/parse/parseRWAFactoryOperationCalldata.d.ts +23 -0
  55. package/dist/types/preview/parse/types-pools.d.ts +61 -1
  56. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +1 -1
  57. package/dist/types/preview/simulate/errors.d.ts +6 -12
  58. package/dist/types/preview/simulate/index.d.ts +0 -1
  59. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +22 -4
  60. package/dist/types/preview/simulate/types.d.ts +3 -16
  61. package/dist/types/sdk/MultichainSDK.d.ts +5 -0
  62. package/dist/types/sdk/OnchainSDK.d.ts +4 -0
  63. package/dist/types/sdk/market/MarketRegister.d.ts +15 -6
  64. package/dist/types/sdk/market/ZapperRegister.d.ts +25 -4
  65. package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +2 -1
  66. package/dist/types/sdk/market/zapper/IERC20ZapperContract.d.ts +93 -39
  67. package/dist/types/sdk/market/zapper/IETHZapperContract.d.ts +93 -39
  68. package/dist/types/sdk/market/zapper/ZapperContract.d.ts +35 -0
  69. package/dist/types/sdk/market/zapper/createZapper.d.ts +2 -4
  70. package/dist/types/sdk/market/zapper/errors.d.ts +10 -0
  71. package/dist/types/sdk/market/zapper/index.d.ts +3 -1
  72. package/dist/types/sdk/market/zapper/types.d.ts +64 -0
  73. package/dist/types/sdk/options.d.ts +10 -5
  74. package/dist/types/sdk/pools/types.d.ts +3 -3
  75. package/dist/types/sdk/types/state-human.d.ts +9 -0
  76. package/dist/types/sdk/types/state.d.ts +7 -0
  77. package/package.json +3 -3
  78. package/dist/cjs/preview/simulate/extractERC20Transfers.js +0 -47
  79. package/dist/cjs/preview/simulate/simulatePoolOpMulticall.js +0 -155
  80. package/dist/cjs/preview/simulate/simulatePoolOpV1.js +0 -106
  81. package/dist/cjs/sdk/market/zapper/Zapper.js +0 -47
  82. package/dist/esm/preview/simulate/constants.js +0 -4
  83. package/dist/esm/preview/simulate/extractERC20Transfers.js +0 -23
  84. package/dist/esm/preview/simulate/simulatePoolOpMulticall.js +0 -130
  85. package/dist/esm/preview/simulate/simulatePoolOpV1.js +0 -82
  86. package/dist/esm/sdk/market/zapper/Zapper.js +0 -23
  87. package/dist/types/preview/simulate/constants.d.ts +0 -6
  88. package/dist/types/preview/simulate/extractERC20Transfers.d.ts +0 -11
  89. package/dist/types/preview/simulate/simulatePoolOpMulticall.d.ts +0 -28
  90. package/dist/types/preview/simulate/simulatePoolOpV1.d.ts +0 -14
  91. package/dist/types/sdk/market/zapper/Zapper.d.ts +0 -13
@@ -24,80 +24,118 @@ module.exports = __toCommonJS(iZapper_exports);
24
24
  const iZapperAbi = [
25
25
  {
26
26
  type: "function",
27
+ name: "contractType",
27
28
  inputs: [],
29
+ outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
30
+ stateMutability: "view"
31
+ },
32
+ {
33
+ type: "function",
28
34
  name: "pool",
29
- outputs: [{ name: "", internalType: "address", type: "address" }],
35
+ inputs: [],
36
+ outputs: [{ name: "", type: "address", internalType: "address" }],
30
37
  stateMutability: "view"
31
38
  },
32
39
  {
33
40
  type: "function",
41
+ name: "previewDeposit",
34
42
  inputs: [
35
- { name: "tokenInAmount", internalType: "uint256", type: "uint256" }
43
+ { name: "tokenInAmount", type: "uint256", internalType: "uint256" }
36
44
  ],
37
- name: "previewDeposit",
38
45
  outputs: [
39
- { name: "tokenOutAmount", internalType: "uint256", type: "uint256" }
46
+ { name: "tokenOutAmount", type: "uint256", internalType: "uint256" }
40
47
  ],
41
48
  stateMutability: "view"
42
49
  },
43
50
  {
44
51
  type: "function",
52
+ name: "previewRedeem",
45
53
  inputs: [
46
- { name: "tokenOutAmount", internalType: "uint256", type: "uint256" }
54
+ { name: "tokenOutAmount", type: "uint256", internalType: "uint256" }
47
55
  ],
48
- name: "previewRedeem",
49
56
  outputs: [
50
- { name: "tokenInAmount", internalType: "uint256", type: "uint256" }
57
+ { name: "tokenInAmount", type: "uint256", internalType: "uint256" }
51
58
  ],
52
59
  stateMutability: "view"
53
60
  },
54
61
  {
55
62
  type: "function",
63
+ name: "redeem",
56
64
  inputs: [
57
- { name: "tokenOutAmount", internalType: "uint256", type: "uint256" },
58
- { name: "receiver", internalType: "address", type: "address" }
65
+ { name: "tokenOutAmount", type: "uint256", internalType: "uint256" },
66
+ { name: "receiver", type: "address", internalType: "address" }
59
67
  ],
60
- name: "redeem",
61
68
  outputs: [
62
- { name: "tokenInAmount", internalType: "uint256", type: "uint256" }
69
+ { name: "tokenInAmount", type: "uint256", internalType: "uint256" }
63
70
  ],
64
71
  stateMutability: "nonpayable"
65
72
  },
66
73
  {
67
74
  type: "function",
75
+ name: "redeemWithPermit",
68
76
  inputs: [
69
- { name: "tokenOutAmount", internalType: "uint256", type: "uint256" },
70
- { name: "receiver", internalType: "address", type: "address" },
71
- { name: "deadline", internalType: "uint256", type: "uint256" },
72
- { name: "v", internalType: "uint8", type: "uint8" },
73
- { name: "r", internalType: "bytes32", type: "bytes32" },
74
- { name: "s", internalType: "bytes32", type: "bytes32" }
77
+ { name: "tokenOutAmount", type: "uint256", internalType: "uint256" },
78
+ { name: "receiver", type: "address", internalType: "address" },
79
+ { name: "deadline", type: "uint256", internalType: "uint256" },
80
+ { name: "v", type: "uint8", internalType: "uint8" },
81
+ { name: "r", type: "bytes32", internalType: "bytes32" },
82
+ { name: "s", type: "bytes32", internalType: "bytes32" }
75
83
  ],
76
- name: "redeemWithPermit",
77
84
  outputs: [
78
- { name: "tokenInAmount", internalType: "uint256", type: "uint256" }
85
+ { name: "tokenInAmount", type: "uint256", internalType: "uint256" }
79
86
  ],
80
87
  stateMutability: "nonpayable"
81
88
  },
82
89
  {
83
90
  type: "function",
91
+ name: "redeemWithPermitAllowed",
92
+ inputs: [
93
+ { name: "tokenOutAmount", type: "uint256", internalType: "uint256" },
94
+ { name: "receiver", type: "address", internalType: "address" },
95
+ { name: "nonce", type: "uint256", internalType: "uint256" },
96
+ { name: "expiry", type: "uint256", internalType: "uint256" },
97
+ { name: "v", type: "uint8", internalType: "uint8" },
98
+ { name: "r", type: "bytes32", internalType: "bytes32" },
99
+ { name: "s", type: "bytes32", internalType: "bytes32" }
100
+ ],
101
+ outputs: [
102
+ { name: "tokenInAmount", type: "uint256", internalType: "uint256" }
103
+ ],
104
+ stateMutability: "nonpayable"
105
+ },
106
+ {
107
+ type: "function",
108
+ name: "serialize",
84
109
  inputs: [],
85
- name: "tokenIn",
86
- outputs: [{ name: "", internalType: "address", type: "address" }],
110
+ outputs: [{ name: "serializedData", type: "bytes", internalType: "bytes" }],
87
111
  stateMutability: "view"
88
112
  },
89
113
  {
90
114
  type: "function",
115
+ name: "tokenIn",
91
116
  inputs: [],
92
- name: "tokenOut",
93
- outputs: [{ name: "", internalType: "address", type: "address" }],
117
+ outputs: [{ name: "", type: "address", internalType: "address" }],
94
118
  stateMutability: "view"
95
119
  },
96
120
  {
97
121
  type: "function",
122
+ name: "tokenOut",
98
123
  inputs: [],
124
+ outputs: [{ name: "", type: "address", internalType: "address" }],
125
+ stateMutability: "view"
126
+ },
127
+ {
128
+ type: "function",
99
129
  name: "underlying",
100
- outputs: [{ name: "", internalType: "address", type: "address" }],
130
+ inputs: [],
131
+ outputs: [{ name: "", type: "address", internalType: "address" }],
132
+ stateMutability: "view"
133
+ },
134
+ {
135
+ type: "function",
136
+ name: "version",
137
+ inputs: [],
138
+ outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
101
139
  stateMutability: "view"
102
140
  }
103
141
  ];
@@ -19,9 +19,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var errors_exports = {};
20
20
  __export(errors_exports, {
21
21
  UnsupportedPoolFunctionError: () => UnsupportedPoolFunctionError,
22
- UnsupportedTargetError: () => UnsupportedTargetError
22
+ UnsupportedTargetError: () => UnsupportedTargetError,
23
+ UnsupportedZapperFunctionError: () => import_sdk.UnsupportedZapperFunctionError
23
24
  });
24
25
  module.exports = __toCommonJS(errors_exports);
26
+ var import_sdk = require("../../sdk/index.js");
25
27
  class UnsupportedTargetError extends Error {
26
28
  target;
27
29
  constructor(target) {
@@ -43,5 +45,6 @@ class UnsupportedPoolFunctionError extends Error {
43
45
  // Annotate the CommonJS export names for ESM import in node:
44
46
  0 && (module.exports = {
45
47
  UnsupportedPoolFunctionError,
46
- UnsupportedTargetError
48
+ UnsupportedTargetError,
49
+ UnsupportedZapperFunctionError
47
50
  });
@@ -21,6 +21,7 @@ __reExport(parse_exports, require("./extractExpectedBalanceChanges.js"), module.
21
21
  __reExport(parse_exports, require("./parseFacadeOperationCalldata.js"), module.exports);
22
22
  __reExport(parse_exports, require("./parseOperationCalldata.js"), module.exports);
23
23
  __reExport(parse_exports, require("./parsePoolOperationCalldata.js"), module.exports);
24
+ __reExport(parse_exports, require("./parseRWAFactoryOperationCalldata.js"), module.exports);
24
25
  __reExport(parse_exports, require("./types.js"), module.exports);
25
26
  // Annotate the CommonJS export names for ESM import in node:
26
27
  0 && (module.exports = {
@@ -30,5 +31,6 @@ __reExport(parse_exports, require("./types.js"), module.exports);
30
31
  ...require("./parseFacadeOperationCalldata.js"),
31
32
  ...require("./parseOperationCalldata.js"),
32
33
  ...require("./parsePoolOperationCalldata.js"),
34
+ ...require("./parseRWAFactoryOperationCalldata.js"),
33
35
  ...require("./types.js")
34
36
  });
@@ -25,12 +25,42 @@ var import_sdk = require("../../sdk/index.js");
25
25
  var import_errors = require("./errors.js");
26
26
  var import_parseFacadeOperationCalldata = require("./parseFacadeOperationCalldata.js");
27
27
  var import_parsePoolOperationCalldata = require("./parsePoolOperationCalldata.js");
28
+ var import_parseRWAFactoryOperationCalldata = require("./parseRWAFactoryOperationCalldata.js");
28
29
  function parseOperationCalldata(input) {
29
- const { sdk, to, calldata } = input;
30
+ const { sdk, to, calldata, value, sender } = input;
30
31
  const contract = sdk.getContract(to);
31
32
  if (contract instanceof import_sdk.PoolV310Contract) {
32
33
  return (0, import_parsePoolOperationCalldata.parsePoolOperationCalldata)({ sdk, pool: contract, calldata });
33
34
  }
35
+ if (contract instanceof import_sdk.ZapperContract) {
36
+ const parsed = contract.parseOperation(calldata, value);
37
+ if (parsed.operation === "Deposit") {
38
+ const op2 = {
39
+ operation: "Deposit",
40
+ pool: parsed.pool,
41
+ receiver: parsed.receiver,
42
+ assets: parsed.assets,
43
+ underlying: parsed.underlying,
44
+ tokenIn: parsed.token,
45
+ zapper: parsed.zapper,
46
+ referralCode: parsed.referralCode
47
+ };
48
+ return op2;
49
+ }
50
+ const op = {
51
+ operation: "Redeem",
52
+ pool: parsed.pool,
53
+ receiver: parsed.receiver,
54
+ // The zapper burns the caller's pool shares, so the share owner is the
55
+ // transaction sender.
56
+ owner: sender,
57
+ shares: parsed.shares,
58
+ underlying: parsed.underlying,
59
+ tokenOut: parsed.token,
60
+ zapper: parsed.zapper
61
+ };
62
+ return op;
63
+ }
34
64
  if (contract instanceof import_sdk.CreditFacadeV310Contract) {
35
65
  return (0, import_parseFacadeOperationCalldata.parseFacadeOperationCalldata)({
36
66
  sdk,
@@ -38,6 +68,13 @@ function parseOperationCalldata(input) {
38
68
  calldata
39
69
  });
40
70
  }
71
+ if (contract instanceof import_sdk.SecuritizeRWAFactory) {
72
+ return (0, import_parseRWAFactoryOperationCalldata.parseRWAFactoryOperationCalldata)({
73
+ sdk,
74
+ factory: contract,
75
+ calldata
76
+ });
77
+ }
41
78
  throw new import_errors.UnsupportedTargetError(to);
42
79
  }
43
80
  // Annotate the CommonJS export names for ESM import in node:
@@ -37,6 +37,8 @@ function parsePoolOperationCalldata(props) {
37
37
  receiver: rawArgs.receiver,
38
38
  assets: rawArgs.assets,
39
39
  underlying,
40
+ tokenIn: underlying,
41
+ zapper: void 0,
40
42
  referralCode: functionName === "depositWithReferral" ? rawArgs.referralCode : void 0
41
43
  };
42
44
  case "mint":
@@ -47,6 +49,8 @@ function parsePoolOperationCalldata(props) {
47
49
  receiver: rawArgs.receiver,
48
50
  shares: rawArgs.shares,
49
51
  underlying,
52
+ tokenIn: underlying,
53
+ zapper: void 0,
50
54
  referralCode: functionName === "mintWithReferral" ? rawArgs.referralCode : void 0
51
55
  };
52
56
  case "withdraw":
@@ -56,7 +60,9 @@ function parsePoolOperationCalldata(props) {
56
60
  receiver: rawArgs.receiver,
57
61
  owner: rawArgs.owner,
58
62
  assets: rawArgs.assets,
59
- underlying
63
+ underlying,
64
+ tokenOut: underlying,
65
+ zapper: void 0
60
66
  };
61
67
  case "redeem":
62
68
  return {
@@ -65,7 +71,9 @@ function parsePoolOperationCalldata(props) {
65
71
  receiver: rawArgs.receiver,
66
72
  owner: rawArgs.owner,
67
73
  shares: rawArgs.shares,
68
- underlying
74
+ underlying,
75
+ tokenOut: underlying,
76
+ zapper: void 0
69
77
  };
70
78
  default:
71
79
  throw new import_errors.UnsupportedPoolFunctionError(pool.address, parsed.functionName);
@@ -0,0 +1,92 @@
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 parseRWAFactoryOperationCalldata_exports = {};
20
+ __export(parseRWAFactoryOperationCalldata_exports, {
21
+ parseRWAFactoryOperationCalldata: () => parseRWAFactoryOperationCalldata
22
+ });
23
+ module.exports = __toCommonJS(parseRWAFactoryOperationCalldata_exports);
24
+ var import_viem = require("viem");
25
+ var import_adapters = require("../../plugins/adapters/index.js");
26
+ var import_sdk = require("../../sdk/index.js");
27
+ var import_classifyInnerOperations = require("./classifyInnerOperations.js");
28
+ var import_extractExpectedBalanceChanges = require("./extractExpectedBalanceChanges.js");
29
+ function parseRWAFactoryOperationCalldata(props) {
30
+ const { sdk, factory, calldata } = props;
31
+ const parsed = sdk.parseFunctionDataV2(factory.address, calldata);
32
+ const functionName = parsed.functionName.split("(")[0];
33
+ const { rawArgs } = parsed;
34
+ const innerCalls = rawArgs.calls ?? [];
35
+ const suite = functionName === "openCreditAccount" ? sdk.marketRegister.findCreditManager(rawArgs.creditManager) : resolveSuiteForMulticall(sdk, factory, innerCalls);
36
+ const metadata = {
37
+ creditManager: suite.creditManager.address,
38
+ creditFacade: suite.creditFacade.address
39
+ };
40
+ const multicall = (0, import_classifyInnerOperations.classifyInnerOperations)(innerCalls, {
41
+ sdk,
42
+ underlying: suite.underlying
43
+ });
44
+ const expectedBalanceChanges = (0, import_extractExpectedBalanceChanges.extractExpectedBalanceChanges)(innerCalls);
45
+ switch (functionName) {
46
+ case "openCreditAccount":
47
+ return {
48
+ ...metadata,
49
+ operation: "OpenCreditAccount",
50
+ creditAccount: import_viem.zeroAddress,
51
+ onBehalfOf: import_viem.zeroAddress,
52
+ referralCode: 0n,
53
+ multicall,
54
+ expectedBalanceChanges
55
+ };
56
+ case "multicall":
57
+ return {
58
+ ...metadata,
59
+ operation: "MultiCall",
60
+ creditAccount: rawArgs.creditAccount,
61
+ multicall,
62
+ expectedBalanceChanges
63
+ };
64
+ default:
65
+ throw new Error(
66
+ `unsupported RWA factory function "${parsed.functionName}" on ${factory.address}`
67
+ );
68
+ }
69
+ }
70
+ function resolveSuiteForMulticall(sdk, factory, innerCalls) {
71
+ for (const call of innerCalls) {
72
+ const contract = sdk.getContract(call.target);
73
+ if (contract instanceof import_sdk.CreditFacadeV310Contract) {
74
+ const suite = sdk.marketRegister.creditManagers.find(
75
+ (cm) => (0, import_sdk.hexEq)(cm.creditFacade.address, call.target)
76
+ );
77
+ if (suite) {
78
+ return suite;
79
+ }
80
+ }
81
+ if (contract instanceof import_adapters.AbstractAdapterContract) {
82
+ return sdk.marketRegister.findCreditManager(contract.creditManager);
83
+ }
84
+ }
85
+ throw new Error(
86
+ `cannot resolve credit manager for RWA factory multicall on ${factory.address}`
87
+ );
88
+ }
89
+ // Annotate the CommonJS export names for ESM import in node:
90
+ 0 && (module.exports = {
91
+ parseRWAFactoryOperationCalldata
92
+ });
@@ -24,7 +24,7 @@ module.exports = __toCommonJS(buildPrerequisites_exports);
24
24
  var import_viem = require("viem");
25
25
  var import_AllowancePrerequisite = require("./AllowancePrerequisite.js");
26
26
  var import_BalancePrerequisite = require("./BalancePrerequisite.js");
27
- function buildPrerequisites(tx, ctx) {
27
+ async function buildPrerequisites(tx, ctx) {
28
28
  const { wallet } = ctx;
29
29
  switch (tx.operation) {
30
30
  // Deposit and Mint both pull the underlying from the caller into the pool;
@@ -34,6 +34,23 @@ function buildPrerequisites(tx, ctx) {
34
34
  // here we approximate Mint by its shares amount (a lower bound on assets is
35
35
  // not knowable from calldata alone).
36
36
  case "Deposit":
37
+ if (tx.zapper) {
38
+ return [
39
+ new import_AllowancePrerequisite.AllowancePrerequisite({
40
+ token: tx.tokenIn,
41
+ owner: wallet,
42
+ spender: tx.zapper,
43
+ required: tx.assets,
44
+ title: "Token approved to zapper"
45
+ }),
46
+ new import_BalancePrerequisite.BalancePrerequisite({
47
+ token: tx.tokenIn,
48
+ owner: wallet,
49
+ required: tx.assets,
50
+ title: "Sufficient token balance"
51
+ })
52
+ ];
53
+ }
37
54
  return [
38
55
  new import_AllowancePrerequisite.AllowancePrerequisite({
39
56
  token: tx.underlying,
@@ -68,6 +85,23 @@ function buildPrerequisites(tx, ctx) {
68
85
  // Redeem and Withdraw both burn LP shares from `owner`; they only differ in
69
86
  // which side (shares vs assets) the caller specifies.
70
87
  case "Redeem": {
88
+ if (tx.zapper) {
89
+ return [
90
+ new import_BalancePrerequisite.BalancePrerequisite({
91
+ token: tx.pool,
92
+ owner: wallet,
93
+ required: tx.shares,
94
+ title: "Sufficient LP token balance"
95
+ }),
96
+ new import_AllowancePrerequisite.AllowancePrerequisite({
97
+ token: tx.pool,
98
+ owner: wallet,
99
+ spender: tx.zapper,
100
+ required: tx.shares,
101
+ title: "LP token approved to zapper"
102
+ })
103
+ ];
104
+ }
71
105
  const prereqs = [
72
106
  new import_BalancePrerequisite.BalancePrerequisite({
73
107
  token: tx.pool,
@@ -116,7 +150,13 @@ function buildPrerequisites(tx, ctx) {
116
150
  case "OpenCreditAccount":
117
151
  case "CloseCreditAccount":
118
152
  case "LiquidateCreditAccount":
119
- return collateralPrerequisites(tx.multicall, tx.creditManager, wallet);
153
+ return collateralPrerequisites(
154
+ tx.operation,
155
+ tx.multicall,
156
+ tx.creditManager,
157
+ tx.creditAccount,
158
+ ctx
159
+ );
120
160
  case "PartiallyLiquidateCreditAccount": {
121
161
  const underlying = underlyingOf(ctx.sdk, tx.creditManager);
122
162
  if (!underlying || tx.repaidAmount === 0n) {
@@ -142,28 +182,35 @@ function buildPrerequisites(tx, ctx) {
142
182
  return [];
143
183
  }
144
184
  }
145
- function collateralPrerequisites(multicall, creditManager, wallet) {
185
+ async function collateralPrerequisites(op, multicall, creditManager, creditAccount, ctx) {
186
+ const { sdk, wallet } = ctx;
146
187
  const required = /* @__PURE__ */ new Map();
147
- for (const op of multicall) {
148
- if (op.operation !== "AddCollateral" || op.amount === 0n) {
188
+ for (const op2 of multicall) {
189
+ if (op2.operation !== "AddCollateral" || op2.amount === 0n) {
149
190
  continue;
150
191
  }
151
- const key = op.token.toLowerCase();
192
+ const key = op2.token.toLowerCase();
152
193
  const existing = required.get(key);
153
194
  required.set(key, {
154
- token: op.token,
155
- amount: (existing?.amount ?? 0n) + op.amount
195
+ token: op2.token,
196
+ amount: (existing?.amount ?? 0n) + op2.amount
156
197
  });
157
198
  }
199
+ if (required.size === 0) {
200
+ return [];
201
+ }
202
+ const spender = await sdk.accounts.getApprovalAddress(
203
+ op === "OpenCreditAccount" ? { creditManager, borrower: wallet } : { creditManager, creditAccount }
204
+ );
158
205
  const prereqs = [];
159
206
  for (const { token, amount } of required.values()) {
160
207
  prereqs.push(
161
208
  new import_AllowancePrerequisite.AllowancePrerequisite({
162
209
  token,
163
210
  owner: wallet,
164
- spender: creditManager,
211
+ spender,
165
212
  required: amount,
166
- title: "Collateral approved to credit manager"
213
+ title: "Collateral approved"
167
214
  }),
168
215
  new import_BalancePrerequisite.BalancePrerequisite({
169
216
  token,
@@ -20,7 +20,6 @@ var errors_exports = {};
20
20
  __export(errors_exports, {
21
21
  PreviewSimulationError: () => PreviewSimulationError,
22
22
  asPreviewSimulationError: () => asPreviewSimulationError,
23
- combinePreviewSimulationErrors: () => combinePreviewSimulationErrors,
24
23
  decodeSimulationError: () => decodeSimulationError
25
24
  });
26
25
  module.exports = __toCommonJS(errors_exports);
@@ -49,11 +48,6 @@ function asPreviewSimulationError(reason, source) {
49
48
  { source, detail: decodeSimulationError({ error }) }
50
49
  ]);
51
50
  }
52
- function combinePreviewSimulationErrors(...errors) {
53
- return new PreviewSimulationError(
54
- errors.filter((e) => e).flatMap((e) => e?.failures ?? [])
55
- );
56
- }
57
51
  function decodeSimulationError(revert) {
58
52
  const { error, data } = revert;
59
53
  if (data && data !== "0x") {
@@ -93,6 +87,5 @@ function formatDecodedError(errorName, args) {
93
87
  0 && (module.exports = {
94
88
  PreviewSimulationError,
95
89
  asPreviewSimulationError,
96
- combinePreviewSimulationErrors,
97
90
  decodeSimulationError
98
91
  });
@@ -18,21 +18,18 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var simulate_exports = {};
20
20
  __export(simulate_exports, {
21
- ETH_SIMULATE_V1_NETWORKS: () => import_constants.ETH_SIMULATE_V1_NETWORKS,
22
21
  PreviewSimulationError: () => import_errors.PreviewSimulationError,
23
22
  simulateFacadeOperation: () => import_simulateFacadeOperation.simulateFacadeOperation,
24
23
  simulateOperation: () => import_simulateOperation.simulateOperation,
25
24
  simulatePoolOperation: () => import_simulatePoolOperation.simulatePoolOperation
26
25
  });
27
26
  module.exports = __toCommonJS(simulate_exports);
28
- var import_constants = require("./constants.js");
29
27
  var import_errors = require("./errors.js");
30
28
  var import_simulateFacadeOperation = require("./simulateFacadeOperation.js");
31
29
  var import_simulateOperation = require("./simulateOperation.js");
32
30
  var import_simulatePoolOperation = require("./simulatePoolOperation.js");
33
31
  // Annotate the CommonJS export names for ESM import in node:
34
32
  0 && (module.exports = {
35
- ETH_SIMULATE_V1_NETWORKS,
36
33
  PreviewSimulationError,
37
34
  simulateFacadeOperation,
38
35
  simulateOperation,