@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.
- package/dist/cjs/abi/iZapper.js +62 -24
- package/dist/cjs/preview/parse/errors.js +5 -2
- package/dist/cjs/preview/parse/index.js +2 -0
- package/dist/cjs/preview/parse/parseOperationCalldata.js +38 -1
- package/dist/cjs/preview/parse/parsePoolOperationCalldata.js +10 -2
- package/dist/cjs/preview/parse/parseRWAFactoryOperationCalldata.js +92 -0
- package/dist/cjs/preview/prerequisites/buildPrerequisites.js +57 -10
- package/dist/cjs/preview/simulate/errors.js +0 -7
- package/dist/cjs/preview/simulate/index.js +0 -3
- package/dist/cjs/preview/simulate/simulatePoolOperation.js +154 -29
- package/dist/cjs/sdk/MultichainSDK.js +1 -0
- package/dist/cjs/sdk/OnchainSDK.js +7 -3
- package/dist/cjs/sdk/market/MarketRegister.js +10 -5
- package/dist/cjs/sdk/market/ZapperRegister.js +54 -0
- package/dist/cjs/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +20 -0
- package/dist/cjs/sdk/market/zapper/IERC20ZapperContract.js +3 -38
- package/dist/cjs/sdk/market/zapper/IETHZapperContract.js +3 -38
- package/dist/cjs/sdk/market/zapper/ZapperContract.js +109 -0
- package/dist/cjs/sdk/market/zapper/createZapper.js +12 -4
- package/dist/cjs/{preview/simulate/constants.js → sdk/market/zapper/errors.js} +15 -6
- package/dist/cjs/sdk/market/zapper/index.js +6 -2
- package/dist/cjs/sdk/market/zapper/types.js +16 -0
- package/dist/cjs/sdk/options.js +41 -17
- package/dist/esm/abi/iZapper.js +62 -24
- package/dist/esm/preview/parse/errors.js +3 -1
- package/dist/esm/preview/parse/index.js +1 -0
- package/dist/esm/preview/parse/parseOperationCalldata.js +41 -2
- package/dist/esm/preview/parse/parsePoolOperationCalldata.js +10 -2
- package/dist/esm/preview/parse/parseRWAFactoryOperationCalldata.js +71 -0
- package/dist/esm/preview/prerequisites/buildPrerequisites.js +57 -10
- package/dist/esm/preview/simulate/errors.js +0 -6
- package/dist/esm/preview/simulate/index.js +0 -2
- package/dist/esm/preview/simulate/simulatePoolOperation.js +155 -30
- package/dist/esm/sdk/MultichainSDK.js +1 -0
- package/dist/esm/sdk/OnchainSDK.js +7 -3
- package/dist/esm/sdk/market/MarketRegister.js +10 -5
- package/dist/esm/sdk/market/ZapperRegister.js +54 -0
- package/dist/esm/sdk/market/rwa/securitize/SecuritizeRWAFactory.js +23 -1
- package/dist/esm/sdk/market/zapper/IERC20ZapperContract.js +3 -38
- package/dist/esm/sdk/market/zapper/IETHZapperContract.js +3 -38
- package/dist/esm/sdk/market/zapper/ZapperContract.js +85 -0
- package/dist/esm/sdk/market/zapper/createZapper.js +12 -4
- package/dist/esm/sdk/market/zapper/errors.js +13 -0
- package/dist/esm/sdk/market/zapper/index.js +3 -1
- package/dist/esm/sdk/market/zapper/types.js +0 -0
- package/dist/esm/sdk/options.js +39 -15
- package/dist/types/abi/iERC20Zapper.d.ts +91 -23
- package/dist/types/abi/iETHZapper.d.ts +91 -23
- package/dist/types/abi/iZapper.d.ts +91 -23
- package/dist/types/preview/parse/classifyInnerOperations.d.ts +0 -2
- package/dist/types/preview/parse/errors.d.ts +1 -0
- package/dist/types/preview/parse/index.d.ts +1 -0
- package/dist/types/preview/parse/parseOperationCalldata.d.ts +3 -3
- package/dist/types/preview/parse/parseRWAFactoryOperationCalldata.d.ts +23 -0
- package/dist/types/preview/parse/types-pools.d.ts +61 -1
- package/dist/types/preview/prerequisites/buildPrerequisites.d.ts +1 -1
- package/dist/types/preview/simulate/errors.d.ts +6 -12
- package/dist/types/preview/simulate/index.d.ts +0 -1
- package/dist/types/preview/simulate/simulatePoolOperation.d.ts +22 -4
- package/dist/types/preview/simulate/types.d.ts +3 -16
- package/dist/types/sdk/MultichainSDK.d.ts +5 -0
- package/dist/types/sdk/OnchainSDK.d.ts +4 -0
- package/dist/types/sdk/market/MarketRegister.d.ts +15 -6
- package/dist/types/sdk/market/ZapperRegister.d.ts +25 -4
- package/dist/types/sdk/market/rwa/securitize/SecuritizeRWAFactory.d.ts +2 -1
- package/dist/types/sdk/market/zapper/IERC20ZapperContract.d.ts +93 -39
- package/dist/types/sdk/market/zapper/IETHZapperContract.d.ts +93 -39
- package/dist/types/sdk/market/zapper/ZapperContract.d.ts +35 -0
- package/dist/types/sdk/market/zapper/createZapper.d.ts +2 -4
- package/dist/types/sdk/market/zapper/errors.d.ts +10 -0
- package/dist/types/sdk/market/zapper/index.d.ts +3 -1
- package/dist/types/sdk/market/zapper/types.d.ts +64 -0
- package/dist/types/sdk/options.d.ts +10 -5
- package/dist/types/sdk/pools/types.d.ts +3 -3
- package/dist/types/sdk/types/state-human.d.ts +9 -0
- package/dist/types/sdk/types/state.d.ts +7 -0
- package/package.json +3 -3
- package/dist/cjs/preview/simulate/extractERC20Transfers.js +0 -47
- package/dist/cjs/preview/simulate/simulatePoolOpMulticall.js +0 -155
- package/dist/cjs/preview/simulate/simulatePoolOpV1.js +0 -106
- package/dist/cjs/sdk/market/zapper/Zapper.js +0 -47
- package/dist/esm/preview/simulate/constants.js +0 -4
- package/dist/esm/preview/simulate/extractERC20Transfers.js +0 -23
- package/dist/esm/preview/simulate/simulatePoolOpMulticall.js +0 -130
- package/dist/esm/preview/simulate/simulatePoolOpV1.js +0 -82
- package/dist/esm/sdk/market/zapper/Zapper.js +0 -23
- package/dist/types/preview/simulate/constants.d.ts +0 -6
- package/dist/types/preview/simulate/extractERC20Transfers.d.ts +0 -11
- package/dist/types/preview/simulate/simulatePoolOpMulticall.d.ts +0 -28
- package/dist/types/preview/simulate/simulatePoolOpV1.d.ts +0 -14
- package/dist/types/sdk/market/zapper/Zapper.d.ts +0 -13
|
@@ -18,45 +18,170 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var simulatePoolOperation_exports = {};
|
|
20
20
|
__export(simulatePoolOperation_exports, {
|
|
21
|
+
computePoolOpBalanceChanges: () => computePoolOpBalanceChanges,
|
|
21
22
|
simulatePoolOperation: () => simulatePoolOperation
|
|
22
23
|
});
|
|
23
24
|
module.exports = __toCommonJS(simulatePoolOperation_exports);
|
|
24
|
-
var
|
|
25
|
+
var import_generated = require("../../abi/310/generated.js");
|
|
26
|
+
var import_iERC20 = require("../../abi/iERC20.js");
|
|
27
|
+
var import_iZapper = require("../../abi/iZapper.js");
|
|
28
|
+
var import_sdk = require("../../sdk/index.js");
|
|
25
29
|
var import_errors = require("./errors.js");
|
|
26
|
-
var
|
|
27
|
-
|
|
30
|
+
var import_holders = require("./holders.js");
|
|
31
|
+
function previewRead(operation) {
|
|
32
|
+
switch (operation.operation) {
|
|
33
|
+
case "Deposit":
|
|
34
|
+
return { functionName: "previewDeposit", amount: operation.assets };
|
|
35
|
+
case "Mint":
|
|
36
|
+
return { functionName: "previewMint", amount: operation.shares };
|
|
37
|
+
case "Withdraw":
|
|
38
|
+
return { functionName: "previewWithdraw", amount: operation.assets };
|
|
39
|
+
case "Redeem":
|
|
40
|
+
return { functionName: "previewRedeem", amount: operation.shares };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function outsideToken(operation) {
|
|
44
|
+
switch (operation.operation) {
|
|
45
|
+
case "Deposit":
|
|
46
|
+
case "Mint":
|
|
47
|
+
return operation.tokenIn;
|
|
48
|
+
case "Withdraw":
|
|
49
|
+
case "Redeem":
|
|
50
|
+
return operation.tokenOut;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function previewContract(operation) {
|
|
54
|
+
const { functionName, amount } = previewRead(operation);
|
|
55
|
+
if (operation.zapper) {
|
|
56
|
+
return {
|
|
57
|
+
address: operation.zapper,
|
|
58
|
+
abi: import_iZapper.iZapperAbi,
|
|
59
|
+
functionName,
|
|
60
|
+
args: [amount]
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
address: operation.pool,
|
|
65
|
+
abi: import_generated.iPoolV310Abi,
|
|
66
|
+
functionName,
|
|
67
|
+
args: [amount]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
28
70
|
async function simulatePoolOperation(input, options = {}) {
|
|
29
|
-
const { sdk } = input;
|
|
30
|
-
const { logger } = options;
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
71
|
+
const { sdk, operation, wallet } = input;
|
|
72
|
+
const { blockNumber, logger } = options;
|
|
73
|
+
const { pool } = operation;
|
|
74
|
+
try {
|
|
75
|
+
const holders = (0, import_holders.watchedHolders)(operation, wallet);
|
|
76
|
+
const tokens = [outsideToken(operation), pool];
|
|
77
|
+
const balanceCalls = holders.flatMap(
|
|
78
|
+
(holder) => tokens.map((token) => ({ holder, token }))
|
|
79
|
+
);
|
|
80
|
+
const balanceContracts = balanceCalls.map(
|
|
81
|
+
({ holder, token }) => ({
|
|
82
|
+
address: token,
|
|
83
|
+
abi: import_iERC20.ierc20Abi,
|
|
84
|
+
functionName: "balanceOf",
|
|
85
|
+
args: [holder]
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
const preview = previewContract(operation);
|
|
89
|
+
let results;
|
|
90
|
+
try {
|
|
91
|
+
results = await sdk.client.multicall({
|
|
92
|
+
allowFailure: false,
|
|
93
|
+
// `undefined` lets viem read at `latest`; `blockNumber` is only set for
|
|
94
|
+
// testnet forks pinned to a specific block.
|
|
95
|
+
blockNumber,
|
|
96
|
+
contracts: [...balanceContracts, preview]
|
|
97
|
+
});
|
|
98
|
+
} catch (cause) {
|
|
99
|
+
throw new import_errors.PreviewSimulationError([
|
|
100
|
+
{
|
|
101
|
+
source: "multicall",
|
|
102
|
+
detail: (0, import_errors.decodeSimulationError)({
|
|
103
|
+
error: cause instanceof Error ? cause : new Error(String(cause))
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
const previewAmount = results[balanceContracts.length];
|
|
109
|
+
const balances = new import_sdk.AddressMap();
|
|
110
|
+
for (const [i, { holder, token }] of balanceCalls.entries()) {
|
|
111
|
+
const tokenBalances = balances.get(holder) ?? new import_sdk.AddressMap();
|
|
112
|
+
tokenBalances.upsert(token, results[i]);
|
|
113
|
+
balances.upsert(holder, tokenBalances);
|
|
114
|
+
}
|
|
115
|
+
const before = (token, holder) => balances.get(holder)?.get(token) ?? 0n;
|
|
116
|
+
return {
|
|
117
|
+
status: "success",
|
|
118
|
+
balanceChanges: computePoolOpBalanceChanges(
|
|
119
|
+
operation,
|
|
120
|
+
wallet,
|
|
121
|
+
previewAmount,
|
|
122
|
+
before
|
|
123
|
+
)
|
|
124
|
+
};
|
|
125
|
+
} catch (cause) {
|
|
126
|
+
const error = (0, import_errors.asPreviewSimulationError)(cause, "multicall");
|
|
127
|
+
logger?.error(error, "pool operation simulation failed");
|
|
128
|
+
return { status: "failure", error };
|
|
42
129
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
130
|
+
}
|
|
131
|
+
function balanceLegs(operation, wallet, previewAmount) {
|
|
132
|
+
const { pool, receiver } = operation;
|
|
133
|
+
switch (operation.operation) {
|
|
134
|
+
case "Deposit":
|
|
135
|
+
return [
|
|
136
|
+
{ address: wallet, token: operation.tokenIn, delta: -operation.assets },
|
|
137
|
+
{ address: receiver, token: pool, delta: previewAmount }
|
|
138
|
+
];
|
|
139
|
+
case "Mint":
|
|
140
|
+
return [
|
|
141
|
+
{ address: wallet, token: operation.tokenIn, delta: -previewAmount },
|
|
142
|
+
{ address: receiver, token: pool, delta: operation.shares }
|
|
143
|
+
];
|
|
144
|
+
case "Withdraw":
|
|
145
|
+
return [
|
|
146
|
+
{ address: operation.owner, token: pool, delta: -previewAmount },
|
|
147
|
+
{
|
|
148
|
+
address: receiver,
|
|
149
|
+
token: operation.tokenOut,
|
|
150
|
+
delta: operation.assets
|
|
151
|
+
}
|
|
152
|
+
];
|
|
153
|
+
case "Redeem":
|
|
154
|
+
return [
|
|
155
|
+
{ address: operation.owner, token: pool, delta: -operation.shares },
|
|
156
|
+
{ address: receiver, token: operation.tokenOut, delta: previewAmount }
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function computePoolOpBalanceChanges(operation, wallet, previewAmount, before) {
|
|
161
|
+
const byAddress = new import_sdk.AddressMap();
|
|
162
|
+
for (const { address, token, delta } of balanceLegs(
|
|
163
|
+
operation,
|
|
164
|
+
wallet,
|
|
165
|
+
previewAmount
|
|
166
|
+
)) {
|
|
167
|
+
const beforeBalance = before(token, address);
|
|
168
|
+
const change = {
|
|
169
|
+
token,
|
|
170
|
+
before: beforeBalance,
|
|
171
|
+
after: beforeBalance + delta,
|
|
172
|
+
delta
|
|
173
|
+
};
|
|
174
|
+
const existing = byAddress.get(address);
|
|
175
|
+
if (existing) {
|
|
176
|
+
existing.changes.push(change);
|
|
177
|
+
} else {
|
|
178
|
+
byAddress.upsert(address, { address, changes: [change] });
|
|
49
179
|
}
|
|
50
|
-
return { status: "success", ...multicall.value };
|
|
51
180
|
}
|
|
52
|
-
|
|
53
|
-
v1.status === "rejected" ? (0, import_errors.asPreviewSimulationError)(v1.reason, "eth_simulateV1") : void 0,
|
|
54
|
-
(0, import_errors.asPreviewSimulationError)(multicall.reason, "multicall")
|
|
55
|
-
);
|
|
56
|
-
logger?.error(error, "pool operation simulation failed");
|
|
57
|
-
return { status: "failure", error };
|
|
181
|
+
return byAddress.values();
|
|
58
182
|
}
|
|
59
183
|
// Annotate the CommonJS export names for ESM import in node:
|
|
60
184
|
0 && (module.exports = {
|
|
185
|
+
computePoolOpBalanceChanges,
|
|
61
186
|
simulatePoolOperation
|
|
62
187
|
});
|
|
@@ -127,7 +127,8 @@ class OnchainSDK extends import_base.ChainContractsRegister {
|
|
|
127
127
|
ignoreMarkets,
|
|
128
128
|
marketConfigurators: mcs,
|
|
129
129
|
redstone,
|
|
130
|
-
pyth
|
|
130
|
+
pyth,
|
|
131
|
+
loadZappers
|
|
131
132
|
} = options ?? {};
|
|
132
133
|
const marketConfigurators = mcs ?? import_utils.TypedObjectUtils.keys(
|
|
133
134
|
this.client.chain.defaultMarketConfigurators
|
|
@@ -196,6 +197,9 @@ class OnchainSDK extends import_base.ChainContractsRegister {
|
|
|
196
197
|
blockNumber: this.currentBlock,
|
|
197
198
|
gas: this.gasLimit
|
|
198
199
|
});
|
|
200
|
+
if (loadZappers) {
|
|
201
|
+
await this.#marketRegister.loadZappers();
|
|
202
|
+
}
|
|
199
203
|
}
|
|
200
204
|
const pluginsList = import_utils.TypedObjectUtils.entries(this.plugins);
|
|
201
205
|
const pluginResponse = await Promise.allSettled(
|
|
@@ -248,7 +252,7 @@ class OnchainSDK extends import_base.ChainContractsRegister {
|
|
|
248
252
|
`address provider version: ${this.#addressProvider.version}`
|
|
249
253
|
);
|
|
250
254
|
this.#marketRegister = new import_MarketRegister.MarketRegister(this, ignoreMarkets);
|
|
251
|
-
this.#marketRegister.hydrate(state
|
|
255
|
+
this.#marketRegister.hydrate(state);
|
|
252
256
|
this.#rwa = new import_market.RWARegistry(this);
|
|
253
257
|
this.#rwa.setState(state.rwa);
|
|
254
258
|
for (const [name, plugin] of import_utils.TypedObjectUtils.entries(this.plugins)) {
|
|
@@ -313,7 +317,7 @@ class OnchainSDK extends import_base.ChainContractsRegister {
|
|
|
313
317
|
currentBlock: this.currentBlock,
|
|
314
318
|
timestamp: this.timestamp,
|
|
315
319
|
addressProvider: this.addressProvider.state,
|
|
316
|
-
|
|
320
|
+
...this.marketRegister.state,
|
|
317
321
|
rwa: this.#rwa.state,
|
|
318
322
|
plugins: Object.fromEntries(
|
|
319
323
|
import_utils.TypedObjectUtils.entries(this.plugins).map(([name, plugin]) => [
|
|
@@ -52,10 +52,11 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
52
52
|
* bypassing on-chain reads.
|
|
53
53
|
* @param state - Array of market data snapshots.
|
|
54
54
|
**/
|
|
55
|
-
hydrate(
|
|
56
|
-
const configurators = new Set(
|
|
55
|
+
hydrate({ markets, zappers }) {
|
|
56
|
+
const configurators = new Set(markets.map((m) => m.configurator));
|
|
57
57
|
this.#setMarketFilter([...configurators]);
|
|
58
|
-
this.#setMarkets(
|
|
58
|
+
this.#setMarkets(markets);
|
|
59
|
+
this.hydrateZappers(zappers);
|
|
59
60
|
}
|
|
60
61
|
/**
|
|
61
62
|
* @internal
|
|
@@ -174,7 +175,10 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
174
175
|
* Serializable snapshot of all loaded markets, suitable for hydration.
|
|
175
176
|
**/
|
|
176
177
|
get state() {
|
|
177
|
-
return
|
|
178
|
+
return {
|
|
179
|
+
markets: this.markets.map((market) => market.state),
|
|
180
|
+
zappers: this.zappersState
|
|
181
|
+
};
|
|
178
182
|
}
|
|
179
183
|
/**
|
|
180
184
|
* Returns a human-readable snapshot of all markets.
|
|
@@ -182,7 +186,8 @@ class MarketRegister extends import_ZapperRegister.ZapperRegister {
|
|
|
182
186
|
**/
|
|
183
187
|
stateHuman(raw = true) {
|
|
184
188
|
return {
|
|
185
|
-
markets: this.markets.map((market) => market.stateHuman(raw))
|
|
189
|
+
markets: this.markets.map((market) => market.stateHuman(raw)),
|
|
190
|
+
zappers: this.zappersStateHuman(raw)
|
|
186
191
|
};
|
|
187
192
|
}
|
|
188
193
|
/**
|
|
@@ -75,6 +75,60 @@ class ZapperRegister extends import_base.SDKConstruct {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Serializable snapshot of all loaded zappers, suitable for hydration.
|
|
80
|
+
* Returns `undefined` when zappers were never loaded (i.e. `loadZappers` was
|
|
81
|
+
* not called), so the not-loaded state round-trips cleanly.
|
|
82
|
+
**/
|
|
83
|
+
get zappersState() {
|
|
84
|
+
if (!this.#zappers) {
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
return this.#zappers.values().flatMap(
|
|
88
|
+
(zappers) => zappers.map((z) => ({
|
|
89
|
+
pool: z.pool,
|
|
90
|
+
type: z.type,
|
|
91
|
+
baseParams: z.baseParams,
|
|
92
|
+
tokenIn: z.tokenIn,
|
|
93
|
+
tokenOut: z.tokenOut
|
|
94
|
+
}))
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Restores zapper state from a previously serialized snapshot,
|
|
99
|
+
* bypassing on-chain reads.
|
|
100
|
+
* @param state - Array of zapper data snapshots, or `undefined` when zappers
|
|
101
|
+
* were not loaded in the snapshot (leaves the registry in the not-loaded state).
|
|
102
|
+
**/
|
|
103
|
+
hydrateZappers(state) {
|
|
104
|
+
if (!state) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
this.#zappers = new import_utils.AddressMap(void 0, "zappers");
|
|
108
|
+
for (const z of state) {
|
|
109
|
+
this.#addZapper(z);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Returns a human-readable snapshot of all loaded zappers.
|
|
114
|
+
* Returns `undefined` when zappers were never loaded.
|
|
115
|
+
* @param raw - When `true`, includes raw/unformatted values.
|
|
116
|
+
**/
|
|
117
|
+
zappersStateHuman(_ = true) {
|
|
118
|
+
if (!this.#zappers) {
|
|
119
|
+
return void 0;
|
|
120
|
+
}
|
|
121
|
+
return this.#zappers.values().flatMap(
|
|
122
|
+
(zappers) => zappers.map((z) => ({
|
|
123
|
+
address: this.labelAddress(z.baseParams.addr),
|
|
124
|
+
contractType: z.contractType,
|
|
125
|
+
type: z.type,
|
|
126
|
+
pool: this.labelAddress(z.pool),
|
|
127
|
+
tokenIn: this.sdk.labelAddress(z.tokenIn.addr),
|
|
128
|
+
tokenOut: this.sdk.labelAddress(z.tokenOut.addr)
|
|
129
|
+
}))
|
|
130
|
+
);
|
|
131
|
+
}
|
|
78
132
|
#addZapper(z) {
|
|
79
133
|
const zapper = (0, import_zapper.createZapper)(this.sdk, z);
|
|
80
134
|
const existing = this.zappers.get(z.pool);
|
|
@@ -70,6 +70,26 @@ class SecuritizeRWAFactory extends import_base.BaseContract {
|
|
|
70
70
|
operators: [...t.operators]
|
|
71
71
|
}));
|
|
72
72
|
}
|
|
73
|
+
parseFunctionParamsV2(params, strict) {
|
|
74
|
+
switch (params.functionName) {
|
|
75
|
+
case "openCreditAccount": {
|
|
76
|
+
const [creditManager, calls] = params.args;
|
|
77
|
+
return {
|
|
78
|
+
creditManager,
|
|
79
|
+
calls: this.register.parseMultiCallV2([...calls], strict)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
case "multicall": {
|
|
83
|
+
const [creditAccount, calls] = params.args;
|
|
84
|
+
return {
|
|
85
|
+
creditAccount,
|
|
86
|
+
calls: this.register.parseMultiCallV2([...calls], strict)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
return super.parseFunctionParamsV2(params, strict);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
73
93
|
/**
|
|
74
94
|
* {@inheritDoc IRWAFactory.decodeInvestorData}
|
|
75
95
|
*/
|
|
@@ -22,27 +22,11 @@ __export(IERC20ZapperContract_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(IERC20ZapperContract_exports);
|
|
24
24
|
var import_iERC20Zapper = require("../../../abi/iERC20Zapper.js");
|
|
25
|
-
var
|
|
25
|
+
var import_ZapperContract = require("./ZapperContract.js");
|
|
26
26
|
const abi = import_iERC20Zapper.ierc20ZapperAbi;
|
|
27
|
-
class IERC20ZapperContract extends
|
|
28
|
-
pool;
|
|
29
|
-
type;
|
|
30
|
-
baseParams;
|
|
31
|
-
tokenIn;
|
|
32
|
-
tokenOut;
|
|
27
|
+
class IERC20ZapperContract extends import_ZapperContract.ZapperContract {
|
|
33
28
|
constructor(sdk, data) {
|
|
34
|
-
super(sdk,
|
|
35
|
-
addr: data.baseParams.addr,
|
|
36
|
-
abi,
|
|
37
|
-
name: `ERC20Zapper(${sdk.labelAddress(data.baseParams.addr)})`,
|
|
38
|
-
version: data.baseParams.version,
|
|
39
|
-
contractType: data.baseParams.contractType
|
|
40
|
-
});
|
|
41
|
-
this.pool = data.pool;
|
|
42
|
-
this.type = data.type;
|
|
43
|
-
this.baseParams = data.baseParams;
|
|
44
|
-
this.tokenIn = data.tokenIn;
|
|
45
|
-
this.tokenOut = data.tokenOut;
|
|
29
|
+
super(sdk, data, abi, "ERC20Zapper");
|
|
46
30
|
}
|
|
47
31
|
/**
|
|
48
32
|
* Deposits ERC20 tokens into the pool via this zapper.
|
|
@@ -72,25 +56,6 @@ class IERC20ZapperContract extends import_base.BaseContract {
|
|
|
72
56
|
args: [tokenInAmount, receiver, referralCode, deadline, v, r, s]
|
|
73
57
|
});
|
|
74
58
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
|
|
77
|
-
*/
|
|
78
|
-
redeem(tokenInAmount, receiver) {
|
|
79
|
-
return this.createRawTx({
|
|
80
|
-
functionName: "redeem",
|
|
81
|
-
args: [tokenInAmount, receiver]
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Redeems pool shares via this zapper with an EIP-2612 permit signature,
|
|
86
|
-
* skipping a separate approve transaction.
|
|
87
|
-
*/
|
|
88
|
-
redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
|
|
89
|
-
return this.createRawTx({
|
|
90
|
-
functionName: "redeemWithPermit",
|
|
91
|
-
args: [tokenInAmount, receiver, deadline, v, r, s]
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
59
|
}
|
|
95
60
|
// Annotate the CommonJS export names for ESM import in node:
|
|
96
61
|
0 && (module.exports = {
|
|
@@ -22,27 +22,11 @@ __export(IETHZapperContract_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(IETHZapperContract_exports);
|
|
24
24
|
var import_iETHZapper = require("../../../abi/iETHZapper.js");
|
|
25
|
-
var
|
|
25
|
+
var import_ZapperContract = require("./ZapperContract.js");
|
|
26
26
|
const abi = import_iETHZapper.iethZapperAbi;
|
|
27
|
-
class IETHZapperContract extends
|
|
28
|
-
pool;
|
|
29
|
-
type;
|
|
30
|
-
baseParams;
|
|
31
|
-
tokenIn;
|
|
32
|
-
tokenOut;
|
|
27
|
+
class IETHZapperContract extends import_ZapperContract.ZapperContract {
|
|
33
28
|
constructor(sdk, data) {
|
|
34
|
-
super(sdk,
|
|
35
|
-
addr: data.baseParams.addr,
|
|
36
|
-
abi,
|
|
37
|
-
name: `ETHZapper(${sdk.labelAddress(data.baseParams.addr)})`,
|
|
38
|
-
version: data.baseParams.version,
|
|
39
|
-
contractType: data.baseParams.contractType
|
|
40
|
-
});
|
|
41
|
-
this.pool = data.pool;
|
|
42
|
-
this.type = data.type;
|
|
43
|
-
this.baseParams = data.baseParams;
|
|
44
|
-
this.tokenIn = data.tokenIn;
|
|
45
|
-
this.tokenOut = data.tokenOut;
|
|
29
|
+
super(sdk, data, abi, "ETHZapper");
|
|
46
30
|
}
|
|
47
31
|
/**
|
|
48
32
|
* Deposits native ETH into the pool via this zapper.
|
|
@@ -63,25 +47,6 @@ class IETHZapperContract extends import_base.BaseContract {
|
|
|
63
47
|
args: [receiver, referralCode]
|
|
64
48
|
});
|
|
65
49
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
|
|
68
|
-
*/
|
|
69
|
-
redeem(tokenInAmount, receiver) {
|
|
70
|
-
return this.createRawTx({
|
|
71
|
-
functionName: "redeem",
|
|
72
|
-
args: [tokenInAmount, receiver]
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Redeems pool shares via this zapper with an EIP-2612 permit signature,
|
|
77
|
-
* skipping a separate approve transaction.
|
|
78
|
-
*/
|
|
79
|
-
redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
|
|
80
|
-
return this.createRawTx({
|
|
81
|
-
functionName: "redeemWithPermit",
|
|
82
|
-
args: [tokenInAmount, receiver, deadline, v, r, s]
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
50
|
}
|
|
86
51
|
// Annotate the CommonJS export names for ESM import in node:
|
|
87
52
|
0 && (module.exports = {
|
|
@@ -0,0 +1,109 @@
|
|
|
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 ZapperContract_exports = {};
|
|
20
|
+
__export(ZapperContract_exports, {
|
|
21
|
+
ZapperContract: () => ZapperContract
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(ZapperContract_exports);
|
|
24
|
+
var import_iZapper = require("../../../abi/iZapper.js");
|
|
25
|
+
var import_base = require("../../base/index.js");
|
|
26
|
+
var import_errors = require("./errors.js");
|
|
27
|
+
class ZapperContract extends import_base.BaseContract {
|
|
28
|
+
sdk;
|
|
29
|
+
pool;
|
|
30
|
+
type;
|
|
31
|
+
baseParams;
|
|
32
|
+
tokenIn;
|
|
33
|
+
tokenOut;
|
|
34
|
+
constructor(sdk, data, abi = import_iZapper.iZapperAbi, namePrefix = "Zapper") {
|
|
35
|
+
super(sdk, {
|
|
36
|
+
addr: data.baseParams.addr,
|
|
37
|
+
abi,
|
|
38
|
+
name: `${namePrefix}(${sdk.labelAddress(data.baseParams.addr)})`,
|
|
39
|
+
version: data.baseParams.version,
|
|
40
|
+
contractType: data.baseParams.contractType
|
|
41
|
+
});
|
|
42
|
+
this.sdk = sdk;
|
|
43
|
+
this.pool = data.pool;
|
|
44
|
+
this.type = data.type;
|
|
45
|
+
this.baseParams = data.baseParams;
|
|
46
|
+
this.tokenIn = data.tokenIn;
|
|
47
|
+
this.tokenOut = data.tokenOut;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Decodes zapper calldata into {@link ParsedZapperOperation}.
|
|
51
|
+
* Throws {@link UnsupportedZapperFunctionError} for unknown selectors.
|
|
52
|
+
*/
|
|
53
|
+
parseOperation(calldata, value) {
|
|
54
|
+
const parsed = this.parseFunctionDataV2(calldata);
|
|
55
|
+
const { rawArgs } = parsed;
|
|
56
|
+
const pool = this.pool;
|
|
57
|
+
const zapper = this.address;
|
|
58
|
+
const token = this.tokenIn.addr;
|
|
59
|
+
const underlying = this.sdk.marketRegister.findByPool(pool).underlying;
|
|
60
|
+
const receiver = rawArgs.receiver;
|
|
61
|
+
if (parsed.functionName.startsWith("deposit")) {
|
|
62
|
+
return {
|
|
63
|
+
operation: "Deposit",
|
|
64
|
+
pool,
|
|
65
|
+
zapper,
|
|
66
|
+
receiver,
|
|
67
|
+
assets: rawArgs.tokenInAmount ?? value ?? 0n,
|
|
68
|
+
token,
|
|
69
|
+
underlying,
|
|
70
|
+
referralCode: rawArgs.referralCode
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (parsed.functionName.startsWith("redeem")) {
|
|
74
|
+
return {
|
|
75
|
+
operation: "Redeem",
|
|
76
|
+
pool,
|
|
77
|
+
zapper,
|
|
78
|
+
receiver,
|
|
79
|
+
shares: rawArgs.tokenOutAmount,
|
|
80
|
+
token,
|
|
81
|
+
underlying
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
throw new import_errors.UnsupportedZapperFunctionError(zapper, parsed.functionName);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Redeems pool shares (diesel tokens) for the underlying asset via this zapper.
|
|
88
|
+
*/
|
|
89
|
+
redeem(tokenInAmount, receiver) {
|
|
90
|
+
return this.createRawTx({
|
|
91
|
+
functionName: "redeem",
|
|
92
|
+
args: [tokenInAmount, receiver]
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Redeems pool shares via this zapper with an EIP-2612 permit signature,
|
|
97
|
+
* skipping a separate approve transaction.
|
|
98
|
+
*/
|
|
99
|
+
redeemWithPermit(tokenInAmount, receiver, deadline, v, r, s) {
|
|
100
|
+
return this.createRawTx({
|
|
101
|
+
functionName: "redeemWithPermit",
|
|
102
|
+
args: [tokenInAmount, receiver, deadline, v, r, s]
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
+
0 && (module.exports = {
|
|
108
|
+
ZapperContract
|
|
109
|
+
});
|
|
@@ -21,23 +21,31 @@ __export(createZapper_exports, {
|
|
|
21
21
|
createZapper: () => createZapper
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(createZapper_exports);
|
|
24
|
+
var import_utils = require("../../utils/index.js");
|
|
24
25
|
var import_IERC20ZapperContract = require("./IERC20ZapperContract.js");
|
|
25
26
|
var import_IETHZapperContract = require("./IETHZapperContract.js");
|
|
26
|
-
var
|
|
27
|
+
var import_ZapperContract = require("./ZapperContract.js");
|
|
27
28
|
function createZapper(sdk, data) {
|
|
29
|
+
const existing = sdk.getContract(data.baseParams.addr);
|
|
30
|
+
if (existing) {
|
|
31
|
+
return existing;
|
|
32
|
+
}
|
|
28
33
|
if (data.type === "base") {
|
|
29
|
-
const contractType =
|
|
34
|
+
const contractType = (0, import_utils.bytes32ToString)(data.baseParams.contractType);
|
|
30
35
|
switch (contractType) {
|
|
31
36
|
case "ZAPPER::ERC4626_UNDERLYING":
|
|
32
37
|
return new import_IERC20ZapperContract.IERC20ZapperContract(sdk, data);
|
|
33
38
|
case "ZAPPER::WETH_DEPOSIT":
|
|
34
39
|
return new import_IETHZapperContract.IETHZapperContract(sdk, data);
|
|
35
40
|
default:
|
|
41
|
+
if (sdk.strictContractTypes) {
|
|
42
|
+
throw new Error(`Unknown zapper contract type: ${contractType}`);
|
|
43
|
+
}
|
|
36
44
|
sdk.logger?.warn(`Unknown zapper contract type: ${contractType}`);
|
|
37
|
-
return new
|
|
45
|
+
return new import_ZapperContract.ZapperContract(sdk, data);
|
|
38
46
|
}
|
|
39
47
|
}
|
|
40
|
-
return new
|
|
48
|
+
return new import_ZapperContract.ZapperContract(sdk, data);
|
|
41
49
|
}
|
|
42
50
|
// Annotate the CommonJS export names for ESM import in node:
|
|
43
51
|
0 && (module.exports = {
|
|
@@ -16,13 +16,22 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var errors_exports = {};
|
|
20
|
+
__export(errors_exports, {
|
|
21
|
+
UnsupportedZapperFunctionError: () => UnsupportedZapperFunctionError
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
|
|
23
|
+
module.exports = __toCommonJS(errors_exports);
|
|
24
|
+
class UnsupportedZapperFunctionError extends Error {
|
|
25
|
+
zapper;
|
|
26
|
+
functionName;
|
|
27
|
+
constructor(zapper, functionName) {
|
|
28
|
+
super(`unsupported zapper function "${functionName}" on ${zapper}`);
|
|
29
|
+
this.name = "UnsupportedZapperFunctionError";
|
|
30
|
+
this.zapper = zapper;
|
|
31
|
+
this.functionName = functionName;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
25
34
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
35
|
0 && (module.exports = {
|
|
27
|
-
|
|
36
|
+
UnsupportedZapperFunctionError
|
|
28
37
|
});
|
|
@@ -16,13 +16,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
16
16
|
var zapper_exports = {};
|
|
17
17
|
module.exports = __toCommonJS(zapper_exports);
|
|
18
18
|
__reExport(zapper_exports, require("./createZapper.js"), module.exports);
|
|
19
|
+
__reExport(zapper_exports, require("./errors.js"), module.exports);
|
|
19
20
|
__reExport(zapper_exports, require("./IERC20ZapperContract.js"), module.exports);
|
|
20
21
|
__reExport(zapper_exports, require("./IETHZapperContract.js"), module.exports);
|
|
21
|
-
__reExport(zapper_exports, require("./
|
|
22
|
+
__reExport(zapper_exports, require("./types.js"), module.exports);
|
|
23
|
+
__reExport(zapper_exports, require("./ZapperContract.js"), module.exports);
|
|
22
24
|
// Annotate the CommonJS export names for ESM import in node:
|
|
23
25
|
0 && (module.exports = {
|
|
24
26
|
...require("./createZapper.js"),
|
|
27
|
+
...require("./errors.js"),
|
|
25
28
|
...require("./IERC20ZapperContract.js"),
|
|
26
29
|
...require("./IETHZapperContract.js"),
|
|
27
|
-
...require("./
|
|
30
|
+
...require("./types.js"),
|
|
31
|
+
...require("./ZapperContract.js")
|
|
28
32
|
});
|