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

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 (87) hide show
  1. package/dist/cjs/preview/index.js +2 -4
  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 +6 -4
  5. package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +4 -0
  6. package/dist/cjs/preview/parse/parseRWAFactoryOperationCalldata.js +22 -10
  7. package/dist/cjs/preview/parse/types-rwa.js +16 -0
  8. package/dist/cjs/preview/parse/types.js +9 -2
  9. package/dist/cjs/preview/prerequisites/AllowancePrerequisite.js +13 -13
  10. package/dist/cjs/preview/prerequisites/BalancePrerequisite.js +32 -14
  11. package/dist/cjs/preview/prerequisites/RWAOpenRequirementsPrerequisite.js +66 -0
  12. package/dist/cjs/preview/prerequisites/buildPrerequisites.js +95 -27
  13. package/dist/cjs/preview/prerequisites/index.js +2 -0
  14. package/dist/cjs/preview/{simulate/holders.js → preview/errors.js} +12 -21
  15. package/dist/cjs/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
  16. package/dist/cjs/preview/preview/index.js +26 -0
  17. package/dist/cjs/preview/preview/previewOpenCreditAccount.js +99 -0
  18. package/dist/cjs/preview/preview/previewOperation.js +41 -0
  19. package/dist/cjs/preview/preview/previewPoolOperation.js +75 -0
  20. package/dist/cjs/preview/preview/types.js +16 -0
  21. package/dist/cjs/preview/simulate/index.js +5 -2
  22. package/dist/cjs/preview/simulate/simulateOperation.js +4 -0
  23. package/dist/cjs/preview/simulate/simulatePoolOperation.js +20 -116
  24. package/dist/cjs/preview/simulate/simulateRWAOperation.js +30 -0
  25. package/dist/cjs/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +14 -4
  26. package/dist/cjs/sdk/market/rwa/types.js +5 -2
  27. package/dist/cjs/sdk/market/zapper/ZapperContract.js +0 -3
  28. package/dist/esm/preview/index.js +1 -2
  29. package/dist/esm/preview/parse/index.js +0 -1
  30. package/dist/esm/preview/parse/parseFacadeOperationCalldata.js +5 -12
  31. package/dist/esm/preview/parse/parseOperationCalldata.js +7 -5
  32. package/dist/esm/preview/parse/parsePoolOperationCalldata.js +4 -0
  33. package/dist/esm/preview/parse/parseRWAFactoryOperationCalldata.js +25 -11
  34. package/dist/esm/preview/parse/types-rwa.js +0 -0
  35. package/dist/esm/preview/parse/types.js +6 -1
  36. package/dist/esm/preview/prerequisites/AllowancePrerequisite.js +13 -13
  37. package/dist/esm/preview/prerequisites/BalancePrerequisite.js +32 -14
  38. package/dist/esm/preview/prerequisites/RWAOpenRequirementsPrerequisite.js +42 -0
  39. package/dist/esm/preview/prerequisites/buildPrerequisites.js +100 -27
  40. package/dist/esm/preview/prerequisites/index.js +1 -0
  41. package/dist/esm/preview/preview/errors.js +12 -0
  42. package/dist/esm/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
  43. package/dist/esm/preview/preview/index.js +3 -0
  44. package/dist/esm/preview/preview/previewOpenCreditAccount.js +77 -0
  45. package/dist/esm/preview/preview/previewOperation.js +17 -0
  46. package/dist/esm/preview/preview/previewPoolOperation.js +53 -0
  47. package/dist/esm/preview/preview/types.js +0 -0
  48. package/dist/esm/preview/simulate/index.js +3 -1
  49. package/dist/esm/preview/simulate/simulateOperation.js +8 -1
  50. package/dist/esm/preview/simulate/simulatePoolOperation.js +21 -120
  51. package/dist/esm/preview/simulate/simulateRWAOperation.js +6 -0
  52. package/dist/esm/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +14 -4
  53. package/dist/esm/sdk/market/rwa/types.js +5 -2
  54. package/dist/esm/sdk/market/zapper/ZapperContract.js +0 -3
  55. package/dist/types/history/types.d.ts +4 -4
  56. package/dist/types/preview/index.d.ts +1 -2
  57. package/dist/types/preview/parse/index.d.ts +0 -1
  58. package/dist/types/preview/parse/parseRWAFactoryOperationCalldata.d.ts +10 -11
  59. package/dist/types/preview/parse/types-facades.d.ts +0 -33
  60. package/dist/types/preview/parse/types-pools.d.ts +29 -1
  61. package/dist/types/preview/parse/types-rwa.d.ts +48 -0
  62. package/dist/types/preview/parse/types.d.ts +11 -6
  63. package/dist/types/preview/prerequisites/AllowancePrerequisite.d.ts +1 -3
  64. package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +9 -6
  65. package/dist/types/preview/prerequisites/RWAOpenRequirementsPrerequisite.d.ts +36 -0
  66. package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +15 -6
  67. package/dist/types/preview/prerequisites/index.d.ts +1 -0
  68. package/dist/types/preview/prerequisites/types.d.ts +10 -8
  69. package/dist/types/preview/preview/errors.d.ts +9 -0
  70. package/dist/types/preview/{parse → preview}/extractExpectedBalanceChanges.d.ts +4 -5
  71. package/dist/types/preview/preview/index.d.ts +3 -0
  72. package/dist/types/preview/preview/previewOpenCreditAccount.d.ts +4 -0
  73. package/dist/types/preview/preview/previewOperation.d.ts +8 -0
  74. package/dist/types/preview/preview/previewPoolOperation.d.ts +5 -0
  75. package/dist/types/preview/preview/types.d.ts +103 -0
  76. package/dist/types/preview/simulate/index.d.ts +3 -1
  77. package/dist/types/preview/simulate/simulateFacadeOperation.d.ts +0 -2
  78. package/dist/types/preview/simulate/simulateOperation.d.ts +0 -2
  79. package/dist/types/preview/simulate/simulatePoolOperation.d.ts +6 -18
  80. package/dist/types/preview/simulate/simulateRWAOperation.d.ts +23 -0
  81. package/dist/types/preview/simulate/types.d.ts +12 -26
  82. package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +4 -0
  83. package/dist/types/sdk/market/rwa/types.d.ts +13 -5
  84. package/dist/types/sdk/market/zapper/types.d.ts +6 -6
  85. package/package.json +1 -1
  86. package/dist/esm/preview/simulate/holders.js +0 -21
  87. package/dist/types/preview/simulate/holders.d.ts +0 -7
@@ -15,14 +15,12 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
15
15
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
16
  var preview_exports = {};
17
17
  module.exports = __toCommonJS(preview_exports);
18
- __reExport(preview_exports, require("./parse/index.js"), module.exports);
19
18
  __reExport(preview_exports, require("./prerequisites/index.js"), module.exports);
20
- __reExport(preview_exports, require("./simulate/index.js"), module.exports);
19
+ __reExport(preview_exports, require("./preview/index.js"), module.exports);
21
20
  __reExport(preview_exports, require("./trace/index.js"), module.exports);
22
21
  // Annotate the CommonJS export names for ESM import in node:
23
22
  0 && (module.exports = {
24
- ...require("./parse/index.js"),
25
23
  ...require("./prerequisites/index.js"),
26
- ...require("./simulate/index.js"),
24
+ ...require("./preview/index.js"),
27
25
  ...require("./trace/index.js")
28
26
  });
@@ -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;
@@ -68,7 +70,7 @@ function parseOperationCalldata(input) {
68
70
  calldata
69
71
  });
70
72
  }
71
- if (contract instanceof import_sdk.SecuritizeRWAFactory) {
73
+ if (contract && (0, import_sdk.isRWAFactory)(contract)) {
72
74
  return (0, import_parseRWAFactoryOperationCalldata.parseRWAFactoryOperationCalldata)({
73
75
  sdk,
74
76
  factory: contract,
@@ -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
  };
@@ -21,19 +21,33 @@ __export(parseRWAFactoryOperationCalldata_exports, {
21
21
  parseRWAFactoryOperationCalldata: () => parseRWAFactoryOperationCalldata
22
22
  });
23
23
  module.exports = __toCommonJS(parseRWAFactoryOperationCalldata_exports);
24
- var import_viem = require("viem");
25
24
  var import_adapters = require("../../plugins/adapters/index.js");
26
25
  var import_sdk = require("../../sdk/index.js");
27
26
  var import_classifyInnerOperations = require("./classifyInnerOperations.js");
28
- var import_extractExpectedBalanceChanges = require("./extractExpectedBalanceChanges.js");
29
27
  function parseRWAFactoryOperationCalldata(props) {
28
+ const { contractType, address } = props.factory;
29
+ if ((0, import_sdk.isRWAFactory)(props.factory, import_sdk.RWA_FACTORY_SECURITIZE)) {
30
+ return parseSecuritizeOperationCalldata(props);
31
+ }
32
+ throw new Error(
33
+ `unsupported RWA factory type "${contractType}" on ${address}`
34
+ );
35
+ }
36
+ function parseSecuritizeOperationCalldata(props) {
30
37
  const { sdk, factory, calldata } = props;
31
38
  const parsed = sdk.parseFunctionDataV2(factory.address, calldata);
32
39
  const functionName = parsed.functionName.split("(")[0];
33
40
  const { rawArgs } = parsed;
34
41
  const innerCalls = rawArgs.calls ?? [];
42
+ const tokensToRegister = [
43
+ ...rawArgs.tokensToRegister ?? []
44
+ ];
45
+ const signaturesToCache = [
46
+ ...rawArgs.signaturesToCache ?? []
47
+ ];
35
48
  const suite = functionName === "openCreditAccount" ? sdk.marketRegister.findCreditManager(rawArgs.creditManager) : resolveSuiteForMulticall(sdk, factory, innerCalls);
36
49
  const metadata = {
50
+ factory: factory.address,
37
51
  creditManager: suite.creditManager.address,
38
52
  creditFacade: suite.creditFacade.address
39
53
  };
@@ -41,25 +55,23 @@ function parseRWAFactoryOperationCalldata(props) {
41
55
  sdk,
42
56
  underlying: suite.underlying
43
57
  });
44
- const expectedBalanceChanges = (0, import_extractExpectedBalanceChanges.extractExpectedBalanceChanges)(innerCalls);
45
58
  switch (functionName) {
46
59
  case "openCreditAccount":
47
60
  return {
48
61
  ...metadata,
49
- operation: "OpenCreditAccount",
50
- creditAccount: import_viem.zeroAddress,
51
- onBehalfOf: import_viem.zeroAddress,
52
- referralCode: 0n,
62
+ operation: "SecuritizeOpenCreditAccount",
53
63
  multicall,
54
- expectedBalanceChanges
64
+ tokensToRegister,
65
+ signaturesToCache
55
66
  };
56
67
  case "multicall":
57
68
  return {
58
69
  ...metadata,
59
- operation: "MultiCall",
70
+ operation: "SecuritizeMulticall",
60
71
  creditAccount: rawArgs.creditAccount,
61
72
  multicall,
62
- expectedBalanceChanges
73
+ tokensToRegister,
74
+ signaturesToCache
63
75
  };
64
76
  default:
65
77
  throw new Error(
@@ -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_rwa_exports = {};
16
+ module.exports = __toCommonJS(types_rwa_exports);
@@ -19,19 +19,26 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
20
  var types_exports = {};
21
21
  __export(types_exports, {
22
- isPoolOperation: () => isPoolOperation
22
+ isPoolOperation: () => isPoolOperation,
23
+ isRWAOperation: () => isRWAOperation
23
24
  });
24
25
  module.exports = __toCommonJS(types_exports);
25
26
  __reExport(types_exports, require("./types-adapters.js"), module.exports);
26
27
  __reExport(types_exports, require("./types-facades.js"), module.exports);
27
28
  __reExport(types_exports, require("./types-pools.js"), module.exports);
29
+ __reExport(types_exports, require("./types-rwa.js"), module.exports);
28
30
  function isPoolOperation(tx) {
29
31
  return tx.operation === "Deposit" || tx.operation === "Mint" || tx.operation === "Withdraw" || tx.operation === "Redeem";
30
32
  }
33
+ function isRWAOperation(tx) {
34
+ return tx.operation === "SecuritizeOpenCreditAccount" || tx.operation === "SecuritizeMulticall";
35
+ }
31
36
  // Annotate the CommonJS export names for ESM import in node:
32
37
  0 && (module.exports = {
33
38
  isPoolOperation,
39
+ isRWAOperation,
34
40
  ...require("./types-adapters.js"),
35
41
  ...require("./types-facades.js"),
36
- ...require("./types-pools.js")
42
+ ...require("./types-pools.js"),
43
+ ...require("./types-rwa.js")
37
44
  });
@@ -24,14 +24,14 @@ module.exports = __toCommonJS(AllowancePrerequisite_exports);
24
24
  var import_viem = require("viem");
25
25
  var import_Prerequisite = require("./Prerequisite.js");
26
26
  class AllowancePrerequisite extends import_Prerequisite.Prerequisite {
27
- _id;
28
- _title;
29
- _detail;
27
+ #id;
28
+ #title;
29
+ #detail;
30
30
  constructor(props) {
31
31
  super();
32
- this._id = props.id ?? `allowance:${props.token}:${props.owner}:${props.spender}`;
33
- this._title = props.title ?? "Token approval";
34
- this._detail = {
32
+ this.#id = props.id ?? `allowance:${props.token}:${props.owner}:${props.spender}`;
33
+ this.#title = props.title ?? "Token approval";
34
+ this.#detail = {
35
35
  token: props.token,
36
36
  owner: props.owner,
37
37
  spender: props.spender,
@@ -39,24 +39,24 @@ class AllowancePrerequisite extends import_Prerequisite.Prerequisite {
39
39
  };
40
40
  }
41
41
  get id() {
42
- return this._id;
42
+ return this.#id;
43
43
  }
44
44
  get kind() {
45
45
  return "allowance";
46
46
  }
47
47
  get title() {
48
- return this._title;
48
+ return this.#title;
49
49
  }
50
50
  get detail() {
51
- return this._detail;
51
+ return this.#detail;
52
52
  }
53
53
  calls() {
54
54
  return [
55
55
  {
56
- address: this._detail.token,
56
+ address: this.#detail.token,
57
57
  abi: import_viem.erc20Abi,
58
58
  functionName: "allowance",
59
- args: [this._detail.owner, this._detail.spender]
59
+ args: [this.#detail.owner, this.#detail.spender]
60
60
  }
61
61
  ];
62
62
  }
@@ -66,8 +66,8 @@ class AllowancePrerequisite extends import_Prerequisite.Prerequisite {
66
66
  return this.errorResult((0, import_Prerequisite.toPrerequisiteError)(res?.error));
67
67
  }
68
68
  const actual = res.result;
69
- return this.satisfiedResult(actual >= this._detail.required, {
70
- ...this._detail,
69
+ return this.satisfiedResult(actual >= this.#detail.required, {
70
+ ...this.#detail,
71
71
  actual
72
72
  });
73
73
  }
@@ -22,40 +22,58 @@ __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
- _id;
28
- _title;
29
- _detail;
29
+ #id;
30
+ #title;
31
+ #detail;
30
32
  constructor(props) {
31
33
  super();
32
- this._id = props.id ?? `balance:${props.token}:${props.owner}`;
33
- this._title = props.title ?? "Sufficient balance";
34
- this._detail = {
34
+ this.#id = props.id ?? `balance:${props.token}:${props.owner}`;
35
+ this.#title = props.title ?? "Sufficient balance";
36
+ this.#detail = {
35
37
  token: props.token,
36
38
  owner: props.owner,
37
39
  required: props.required
38
40
  };
39
41
  }
40
42
  get id() {
41
- return this._id;
43
+ return this.#id;
42
44
  }
43
45
  get kind() {
44
46
  return "balance";
45
47
  }
46
48
  get title() {
47
- return this._title;
49
+ return this.#title;
48
50
  }
49
51
  get detail() {
50
- return this._detail;
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
- address: this._detail.token,
73
+ address: this.#detail.token,
56
74
  abi: import_viem.erc20Abi,
57
75
  functionName: "balanceOf",
58
- args: [this._detail.owner]
76
+ args: [this.#detail.owner]
59
77
  }
60
78
  ];
61
79
  }
@@ -65,8 +83,8 @@ class BalancePrerequisite extends import_Prerequisite.Prerequisite {
65
83
  return this.errorResult((0, import_Prerequisite.toPrerequisiteError)(res?.error));
66
84
  }
67
85
  const actual = res.result;
68
- return this.satisfiedResult(actual >= this._detail.required, {
69
- ...this._detail,
86
+ return this.satisfiedResult(actual >= this.#detail.required, {
87
+ ...this.#detail,
70
88
  actual
71
89
  });
72
90
  }
@@ -0,0 +1,66 @@
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 RWAOpenRequirementsPrerequisite_exports = {};
20
+ __export(RWAOpenRequirementsPrerequisite_exports, {
21
+ RWAOpenRequirementsPrerequisite: () => RWAOpenRequirementsPrerequisite
22
+ });
23
+ module.exports = __toCommonJS(RWAOpenRequirementsPrerequisite_exports);
24
+ var import_Prerequisite = require("./Prerequisite.js");
25
+ class RWAOpenRequirementsPrerequisite extends import_Prerequisite.Prerequisite {
26
+ #id;
27
+ #title;
28
+ #detail;
29
+ constructor(props) {
30
+ super();
31
+ this.#id = props.id ?? `rwaOpenRequirements:${props.factory}:${props.token}`;
32
+ this.#title = props.title ?? "RWA account requirements fulfilled";
33
+ this.#detail = props.requirements;
34
+ }
35
+ get id() {
36
+ return this.#id;
37
+ }
38
+ get kind() {
39
+ return "rwaOpenRequirements";
40
+ }
41
+ get title() {
42
+ return this.#title;
43
+ }
44
+ get detail() {
45
+ return this.#detail;
46
+ }
47
+ /** Pre-resolved: no on-chain reads to contribute. */
48
+ calls() {
49
+ return [];
50
+ }
51
+ resolve() {
52
+ return this.satisfiedResult(this.#satisfied(), this.#detail);
53
+ }
54
+ /**
55
+ * Satisfied when the borrower has nothing left to do: no tokens pending
56
+ * issuer-side registration and no messages left to sign.
57
+ */
58
+ #satisfied() {
59
+ const { securitizeTokensToRegister, requiredSignatures } = this.#detail;
60
+ return securitizeTokensToRegister.length === 0 && requiredSignatures.length === 0;
61
+ }
62
+ }
63
+ // Annotate the CommonJS export names for ESM import in node:
64
+ 0 && (module.exports = {
65
+ RWAOpenRequirementsPrerequisite
66
+ });
@@ -22,10 +22,15 @@ __export(buildPrerequisites_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(buildPrerequisites_exports);
24
24
  var import_viem = require("viem");
25
+ var import_sdk = require("../../sdk/index.js");
26
+ var import_parseOperationCalldata = require("../parse/parseOperationCalldata.js");
25
27
  var import_AllowancePrerequisite = require("./AllowancePrerequisite.js");
26
28
  var import_BalancePrerequisite = require("./BalancePrerequisite.js");
27
- async function buildPrerequisites(tx, ctx) {
28
- const { wallet } = ctx;
29
+ var import_RWAOpenRequirementsPrerequisite = require("./RWAOpenRequirementsPrerequisite.js");
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 };
29
34
  switch (tx.operation) {
30
35
  // Deposit and Mint both pull the underlying from the caller into the pool;
31
36
  // they only differ in which side (assets vs shares) the caller specifies.
@@ -35,21 +40,27 @@ async function buildPrerequisites(tx, ctx) {
35
40
  // not knowable from calldata alone).
36
41
  case "Deposit":
37
42
  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
- }),
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(
46
56
  new import_BalancePrerequisite.BalancePrerequisite({
47
57
  token: tx.tokenIn,
48
58
  owner: wallet,
49
59
  required: tx.assets,
50
60
  title: "Sufficient token balance"
51
61
  })
52
- ];
62
+ );
63
+ return prereqs;
53
64
  }
54
65
  return [
55
66
  new import_AllowancePrerequisite.AllowancePrerequisite({
@@ -88,17 +99,17 @@ async function buildPrerequisites(tx, ctx) {
88
99
  if (tx.zapper) {
89
100
  return [
90
101
  new import_BalancePrerequisite.BalancePrerequisite({
91
- token: tx.pool,
102
+ token: tx.tokenIn,
92
103
  owner: wallet,
93
104
  required: tx.shares,
94
- title: "Sufficient LP token balance"
105
+ title: "Sufficient share token balance"
95
106
  }),
96
107
  new import_AllowancePrerequisite.AllowancePrerequisite({
97
- token: tx.pool,
108
+ token: tx.tokenIn,
98
109
  owner: wallet,
99
110
  spender: tx.zapper,
100
111
  required: tx.shares,
101
- title: "LP token approved to zapper"
112
+ title: "Share token approved to zapper"
102
113
  })
103
114
  ];
104
115
  }
@@ -151,10 +162,34 @@ async function buildPrerequisites(tx, ctx) {
151
162
  case "CloseCreditAccount":
152
163
  case "LiquidateCreditAccount":
153
164
  return collateralPrerequisites(
154
- tx.operation,
165
+ tx.operation === "OpenCreditAccount" ? { creditManager: tx.creditManager, borrower: wallet } : {
166
+ creditManager: tx.creditManager,
167
+ creditAccount: tx.creditAccount
168
+ },
169
+ tx.multicall,
170
+ ctx
171
+ );
172
+ // RWA-factory operations: same collateral checks as facade operations,
173
+ // plus (for opening) the factory's open-account requirements. The parsed
174
+ // operation carries template (empty) `tokensToRegister`/`signaturesToCache`;
175
+ // the prerequisite detail provides the real values.
176
+ case "SecuritizeOpenCreditAccount":
177
+ return [
178
+ ...await collateralPrerequisites(
179
+ { creditManager: tx.creditManager, borrower: wallet },
180
+ tx.multicall,
181
+ ctx
182
+ ),
183
+ ...await rwaOpenRequirementsPrerequisites(
184
+ tx.multicall,
185
+ tx.creditManager,
186
+ ctx
187
+ )
188
+ ];
189
+ case "SecuritizeMulticall":
190
+ return collateralPrerequisites(
191
+ { creditManager: tx.creditManager, creditAccount: tx.creditAccount },
155
192
  tx.multicall,
156
- tx.creditManager,
157
- tx.creditAccount,
158
193
  ctx
159
194
  );
160
195
  case "PartiallyLiquidateCreditAccount": {
@@ -182,26 +217,24 @@ async function buildPrerequisites(tx, ctx) {
182
217
  return [];
183
218
  }
184
219
  }
185
- async function collateralPrerequisites(op, multicall, creditManager, creditAccount, ctx) {
220
+ async function collateralPrerequisites(spenderOptions, multicall, ctx) {
186
221
  const { sdk, wallet } = ctx;
187
222
  const required = /* @__PURE__ */ new Map();
188
- for (const op2 of multicall) {
189
- if (op2.operation !== "AddCollateral" || op2.amount === 0n) {
223
+ for (const op of multicall) {
224
+ if (op.operation !== "AddCollateral" || op.amount === 0n) {
190
225
  continue;
191
226
  }
192
- const key = op2.token.toLowerCase();
227
+ const key = op.token.toLowerCase();
193
228
  const existing = required.get(key);
194
229
  required.set(key, {
195
- token: op2.token,
196
- amount: (existing?.amount ?? 0n) + op2.amount
230
+ token: op.token,
231
+ amount: (existing?.amount ?? 0n) + op.amount
197
232
  });
198
233
  }
199
234
  if (required.size === 0) {
200
235
  return [];
201
236
  }
202
- const spender = await sdk.accounts.getApprovalAddress(
203
- op === "OpenCreditAccount" ? { creditManager, borrower: wallet } : { creditManager, creditAccount }
204
- );
237
+ const spender = await sdk.accounts.getApprovalAddress(spenderOptions);
205
238
  const prereqs = [];
206
239
  for (const { token, amount } of required.values()) {
207
240
  prereqs.push(
@@ -222,6 +255,41 @@ async function collateralPrerequisites(op, multicall, creditManager, creditAccou
222
255
  }
223
256
  return prereqs;
224
257
  }
258
+ async function rwaOpenRequirementsPrerequisites(multicall, creditManager, ctx) {
259
+ const { sdk, wallet } = ctx;
260
+ const { rwaFactory } = sdk.marketRegister.findByCreditManager(creditManager);
261
+ if (!rwaFactory) {
262
+ return [];
263
+ }
264
+ const rwaTokens = new import_sdk.AddressSet(rwaFactory.getTokens());
265
+ const candidates = new import_sdk.AddressSet();
266
+ for (const op of multicall) {
267
+ if (op.operation === "AddCollateral" || op.operation === "UpdateQuota") {
268
+ candidates.add(op.token);
269
+ }
270
+ }
271
+ const prereqs = [];
272
+ for (const token of candidates) {
273
+ if (!rwaTokens.has(token)) {
274
+ continue;
275
+ }
276
+ const requirements = await sdk.accounts.getOpenAccountRequirements(
277
+ wallet,
278
+ creditManager,
279
+ { tokenOutAddress: token }
280
+ );
281
+ if (requirements) {
282
+ prereqs.push(
283
+ new import_RWAOpenRequirementsPrerequisite.RWAOpenRequirementsPrerequisite({
284
+ requirements,
285
+ token,
286
+ factory: rwaFactory.address
287
+ })
288
+ );
289
+ }
290
+ }
291
+ return prereqs;
292
+ }
225
293
  function underlyingOf(sdk, creditManager) {
226
294
  const suite = sdk.marketRegister.creditManagers.find(
227
295
  (cm) => (0, import_viem.isAddressEqual)(cm.creditManager.address, creditManager)