@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.
- package/dist/cjs/preview/index.js +2 -4
- package/dist/cjs/preview/parse/index.js +0 -2
- package/dist/cjs/preview/parse/parseFacadeOperationCalldata.js +5 -12
- package/dist/cjs/preview/parse/parseOperationCalldata.js +6 -4
- package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +4 -0
- package/dist/cjs/preview/parse/parseRWAFactoryOperationCalldata.js +22 -10
- package/dist/cjs/preview/parse/types-rwa.js +16 -0
- package/dist/cjs/preview/parse/types.js +9 -2
- package/dist/cjs/preview/prerequisites/AllowancePrerequisite.js +13 -13
- package/dist/cjs/preview/prerequisites/BalancePrerequisite.js +32 -14
- package/dist/cjs/preview/prerequisites/RWAOpenRequirementsPrerequisite.js +66 -0
- package/dist/cjs/preview/prerequisites/buildPrerequisites.js +95 -27
- package/dist/cjs/preview/prerequisites/index.js +2 -0
- package/dist/cjs/preview/{simulate/holders.js → preview/errors.js} +12 -21
- package/dist/cjs/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
- package/dist/cjs/preview/preview/index.js +26 -0
- package/dist/cjs/preview/preview/previewOpenCreditAccount.js +99 -0
- package/dist/cjs/preview/preview/previewOperation.js +41 -0
- package/dist/cjs/preview/preview/previewPoolOperation.js +75 -0
- package/dist/cjs/preview/preview/types.js +16 -0
- package/dist/cjs/preview/simulate/index.js +5 -2
- package/dist/cjs/preview/simulate/simulateOperation.js +4 -0
- package/dist/cjs/preview/simulate/simulatePoolOperation.js +20 -116
- package/dist/cjs/preview/simulate/simulateRWAOperation.js +30 -0
- package/dist/cjs/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +14 -4
- package/dist/cjs/sdk/market/rwa/types.js +5 -2
- package/dist/cjs/sdk/market/zapper/ZapperContract.js +0 -3
- package/dist/esm/preview/index.js +1 -2
- package/dist/esm/preview/parse/index.js +0 -1
- package/dist/esm/preview/parse/parseFacadeOperationCalldata.js +5 -12
- package/dist/esm/preview/parse/parseOperationCalldata.js +7 -5
- package/dist/esm/preview/parse/parsePoolOperationCalldata.js +4 -0
- package/dist/esm/preview/parse/parseRWAFactoryOperationCalldata.js +25 -11
- package/dist/esm/preview/parse/types-rwa.js +0 -0
- package/dist/esm/preview/parse/types.js +6 -1
- package/dist/esm/preview/prerequisites/AllowancePrerequisite.js +13 -13
- package/dist/esm/preview/prerequisites/BalancePrerequisite.js +32 -14
- package/dist/esm/preview/prerequisites/RWAOpenRequirementsPrerequisite.js +42 -0
- package/dist/esm/preview/prerequisites/buildPrerequisites.js +100 -27
- package/dist/esm/preview/prerequisites/index.js +1 -0
- package/dist/esm/preview/preview/errors.js +12 -0
- package/dist/esm/preview/{parse → preview}/extractExpectedBalanceChanges.js +1 -1
- package/dist/esm/preview/preview/index.js +3 -0
- package/dist/esm/preview/preview/previewOpenCreditAccount.js +77 -0
- package/dist/esm/preview/preview/previewOperation.js +17 -0
- package/dist/esm/preview/preview/previewPoolOperation.js +53 -0
- package/dist/esm/preview/preview/types.js +0 -0
- package/dist/esm/preview/simulate/index.js +3 -1
- package/dist/esm/preview/simulate/simulateOperation.js +8 -1
- package/dist/esm/preview/simulate/simulatePoolOperation.js +21 -120
- package/dist/esm/preview/simulate/simulateRWAOperation.js +6 -0
- package/dist/esm/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +14 -4
- package/dist/esm/sdk/market/rwa/types.js +5 -2
- package/dist/esm/sdk/market/zapper/ZapperContract.js +0 -3
- package/dist/types/history/types.d.ts +4 -4
- package/dist/types/preview/index.d.ts +1 -2
- package/dist/types/preview/parse/index.d.ts +0 -1
- package/dist/types/preview/parse/parseRWAFactoryOperationCalldata.d.ts +10 -11
- package/dist/types/preview/parse/types-facades.d.ts +0 -33
- package/dist/types/preview/parse/types-pools.d.ts +29 -1
- package/dist/types/preview/parse/types-rwa.d.ts +48 -0
- package/dist/types/preview/parse/types.d.ts +11 -6
- package/dist/types/preview/prerequisites/AllowancePrerequisite.d.ts +1 -3
- package/dist/types/preview/prerequisites/BalancePrerequisite.d.ts +9 -6
- package/dist/types/preview/prerequisites/RWAOpenRequirementsPrerequisite.d.ts +36 -0
- package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +15 -6
- package/dist/types/preview/prerequisites/index.d.ts +1 -0
- package/dist/types/preview/prerequisites/types.d.ts +10 -8
- package/dist/types/preview/preview/errors.d.ts +9 -0
- package/dist/types/preview/{parse → preview}/extractExpectedBalanceChanges.d.ts +4 -5
- package/dist/types/preview/preview/index.d.ts +3 -0
- package/dist/types/preview/preview/previewOpenCreditAccount.d.ts +4 -0
- package/dist/types/preview/preview/previewOperation.d.ts +8 -0
- package/dist/types/preview/preview/previewPoolOperation.d.ts +5 -0
- package/dist/types/preview/preview/types.d.ts +103 -0
- package/dist/types/preview/simulate/index.d.ts +3 -1
- package/dist/types/preview/simulate/simulateFacadeOperation.d.ts +0 -2
- package/dist/types/preview/simulate/simulateOperation.d.ts +0 -2
- package/dist/types/preview/simulate/simulatePoolOperation.d.ts +6 -18
- package/dist/types/preview/simulate/simulateRWAOperation.d.ts +23 -0
- package/dist/types/preview/simulate/types.d.ts +12 -26
- package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +4 -0
- package/dist/types/sdk/market/rwa/types.d.ts +13 -5
- package/dist/types/sdk/market/zapper/types.d.ts +6 -6
- package/package.json +1 -1
- package/dist/esm/preview/simulate/holders.js +0 -21
- 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("./
|
|
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("./
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
|
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: "
|
|
50
|
-
creditAccount: import_viem.zeroAddress,
|
|
51
|
-
onBehalfOf: import_viem.zeroAddress,
|
|
52
|
-
referralCode: 0n,
|
|
62
|
+
operation: "SecuritizeOpenCreditAccount",
|
|
53
63
|
multicall,
|
|
54
|
-
|
|
64
|
+
tokensToRegister,
|
|
65
|
+
signaturesToCache
|
|
55
66
|
};
|
|
56
67
|
case "multicall":
|
|
57
68
|
return {
|
|
58
69
|
...metadata,
|
|
59
|
-
operation: "
|
|
70
|
+
operation: "SecuritizeMulticall",
|
|
60
71
|
creditAccount: rawArgs.creditAccount,
|
|
61
72
|
multicall,
|
|
62
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
#id;
|
|
28
|
+
#title;
|
|
29
|
+
#detail;
|
|
30
30
|
constructor(props) {
|
|
31
31
|
super();
|
|
32
|
-
this
|
|
33
|
-
this
|
|
34
|
-
this
|
|
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
|
|
42
|
+
return this.#id;
|
|
43
43
|
}
|
|
44
44
|
get kind() {
|
|
45
45
|
return "allowance";
|
|
46
46
|
}
|
|
47
47
|
get title() {
|
|
48
|
-
return this
|
|
48
|
+
return this.#title;
|
|
49
49
|
}
|
|
50
50
|
get detail() {
|
|
51
|
-
return this
|
|
51
|
+
return this.#detail;
|
|
52
52
|
}
|
|
53
53
|
calls() {
|
|
54
54
|
return [
|
|
55
55
|
{
|
|
56
|
-
address: this.
|
|
56
|
+
address: this.#detail.token,
|
|
57
57
|
abi: import_viem.erc20Abi,
|
|
58
58
|
functionName: "allowance",
|
|
59
|
-
args: [this.
|
|
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.
|
|
70
|
-
...this
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
#id;
|
|
30
|
+
#title;
|
|
31
|
+
#detail;
|
|
30
32
|
constructor(props) {
|
|
31
33
|
super();
|
|
32
|
-
this
|
|
33
|
-
this
|
|
34
|
-
this
|
|
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
|
|
43
|
+
return this.#id;
|
|
42
44
|
}
|
|
43
45
|
get kind() {
|
|
44
46
|
return "balance";
|
|
45
47
|
}
|
|
46
48
|
get title() {
|
|
47
|
-
return this
|
|
49
|
+
return this.#title;
|
|
48
50
|
}
|
|
49
51
|
get detail() {
|
|
50
|
-
return this
|
|
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.
|
|
73
|
+
address: this.#detail.token,
|
|
56
74
|
abi: import_viem.erc20Abi,
|
|
57
75
|
functionName: "balanceOf",
|
|
58
|
-
args: [this.
|
|
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.
|
|
69
|
-
...this
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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.
|
|
102
|
+
token: tx.tokenIn,
|
|
92
103
|
owner: wallet,
|
|
93
104
|
required: tx.shares,
|
|
94
|
-
title: "Sufficient
|
|
105
|
+
title: "Sufficient share token balance"
|
|
95
106
|
}),
|
|
96
107
|
new import_AllowancePrerequisite.AllowancePrerequisite({
|
|
97
|
-
token: tx.
|
|
108
|
+
token: tx.tokenIn,
|
|
98
109
|
owner: wallet,
|
|
99
110
|
spender: tx.zapper,
|
|
100
111
|
required: tx.shares,
|
|
101
|
-
title: "
|
|
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(
|
|
220
|
+
async function collateralPrerequisites(spenderOptions, multicall, ctx) {
|
|
186
221
|
const { sdk, wallet } = ctx;
|
|
187
222
|
const required = /* @__PURE__ */ new Map();
|
|
188
|
-
for (const
|
|
189
|
-
if (
|
|
223
|
+
for (const op of multicall) {
|
|
224
|
+
if (op.operation !== "AddCollateral" || op.amount === 0n) {
|
|
190
225
|
continue;
|
|
191
226
|
}
|
|
192
|
-
const key =
|
|
227
|
+
const key = op.token.toLowerCase();
|
|
193
228
|
const existing = required.get(key);
|
|
194
229
|
required.set(key, {
|
|
195
|
-
token:
|
|
196
|
-
amount: (existing?.amount ?? 0n) +
|
|
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)
|