@ember-finance/sdk 2.1.3 → 2.2.0-rc.1

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 (44) hide show
  1. package/dist/src/abis/EmberDepositParkingLot.json +899 -0
  2. package/dist/src/abis/EmberProtocolConfig.json +20 -2
  3. package/dist/src/abis/EmberVault.json +143 -2
  4. package/dist/src/api/v2/apis/accounts-api.d.ts +114 -0
  5. package/dist/src/api/v2/apis/accounts-api.js +211 -0
  6. package/dist/src/api/v2/apis/vaults-api.d.ts +34 -0
  7. package/dist/src/api/v2/apis/vaults-api.js +70 -0
  8. package/dist/src/api/v2/models/account-parking-lot-claimable.d.ts +36 -0
  9. package/dist/src/api/v2/models/account-parking-lot-claimable.js +14 -0
  10. package/dist/src/api/v2/models/account-pending-deposit.d.ts +111 -0
  11. package/dist/src/api/v2/models/account-pending-deposit.js +19 -0
  12. package/dist/src/api/v2/models/account-transaction-transaction-data.d.ts +2 -1
  13. package/dist/src/api/v2/models/account-transaction.d.ts +4 -0
  14. package/dist/src/api/v2/models/account-transaction.js +4 -0
  15. package/dist/src/api/v2/models/chain-vault-details.d.ts +6 -0
  16. package/dist/src/api/v2/models/evm-contracts.d.ts +25 -0
  17. package/dist/src/api/v2/models/evm-deposit-parking-lot.d.ts +66 -0
  18. package/dist/src/api/v2/models/evm-deposit-parking-lot.js +14 -0
  19. package/dist/src/api/v2/models/evm-timelock.d.ts +60 -0
  20. package/dist/src/api/v2/models/evm-timelock.js +14 -0
  21. package/dist/src/api/v2/models/evm-vault-validator.d.ts +60 -0
  22. package/dist/src/api/v2/models/evm-vault-validator.js +14 -0
  23. package/dist/src/api/v2/models/evm-vault.d.ts +6 -0
  24. package/dist/src/api/v2/models/index.d.ts +7 -0
  25. package/dist/src/api/v2/models/index.js +7 -0
  26. package/dist/src/api/v2/models/parking-lot-deposit-transaction.d.ts +68 -0
  27. package/dist/src/api/v2/models/parking-lot-deposit-transaction.js +14 -0
  28. package/dist/src/api/v2/models/vault-detail.d.ts +6 -0
  29. package/dist/src/api/v2/models/vault-parking-lot-info.d.ts +60 -0
  30. package/dist/src/api/v2/models/vault-parking-lot-info.js +14 -0
  31. package/dist/src/evm-vaults/interfaces/index.d.ts +35 -0
  32. package/dist/src/evm-vaults/on-chain-calls/operator.d.ts +9 -0
  33. package/dist/src/evm-vaults/on-chain-calls/operator.js +13 -0
  34. package/dist/src/evm-vaults/on-chain-calls/tx-builder.d.ts +58 -0
  35. package/dist/src/evm-vaults/on-chain-calls/tx-builder.js +122 -0
  36. package/dist/src/evm-vaults/on-chain-calls/user.d.ts +14 -0
  37. package/dist/src/evm-vaults/on-chain-calls/user.js +30 -0
  38. package/dist/src/evm-vaults/on-chain-calls/vault-admin.d.ts +28 -0
  39. package/dist/src/evm-vaults/on-chain-calls/vault-admin.js +42 -0
  40. package/dist/src/evm-vaults/on-chain-calls/vault-reader.d.ts +25 -1
  41. package/dist/src/evm-vaults/on-chain-calls/vault-reader.js +53 -0
  42. package/dist/src/evm-vaults/utils/deployment-parser.d.ts +16 -0
  43. package/dist/src/evm-vaults/utils/deployment-parser.js +27 -0
  44. package/package.json +1 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Ember Protocol Vaults API
3
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
4
+ *
5
+ * The version of the OpenAPI document: 2.0.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /**
13
+ *
14
+ * @export
15
+ * @interface VaultParkingLotInfo
16
+ */
17
+ export interface VaultParkingLotInfo {
18
+ /**
19
+ * The address of the vault\'s deposit parking lot contract
20
+ * @type {string}
21
+ * @memberof VaultParkingLotInfo
22
+ */
23
+ parkingLotAddress: string;
24
+ /**
25
+ * Whether new deposit requests are currently paused
26
+ * @type {boolean}
27
+ * @memberof VaultParkingLotInfo
28
+ */
29
+ depositsPaused: boolean;
30
+ /**
31
+ * Whether the parking lot is the vault\'s active deposit gate
32
+ * @type {boolean}
33
+ * @memberof VaultParkingLotInfo
34
+ */
35
+ isActive: boolean;
36
+ /**
37
+ * Cron expression (UTC) describing when the deposit queue is processed
38
+ * @type {string}
39
+ * @memberof VaultParkingLotInfo
40
+ */
41
+ processingSchedule?: string;
42
+ /**
43
+ * Next estimated queue processing timestamp in ms (derived from processingSchedule)
44
+ * @type {number}
45
+ * @memberof VaultParkingLotInfo
46
+ */
47
+ nextProcessingAt?: number;
48
+ /**
49
+ * Total collateral currently escrowed across pending deposit requests
50
+ * @type {string}
51
+ * @memberof VaultParkingLotInfo
52
+ */
53
+ totalPendingAssets: string;
54
+ /**
55
+ * Number of pending deposit requests in the queue
56
+ * @type {string}
57
+ * @memberof VaultParkingLotInfo
58
+ */
59
+ totalPendingCount: string;
60
+ }
@@ -0,0 +1,14 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Ember Protocol Vaults API
5
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
6
+ *
7
+ * The version of the OpenAPI document: 2.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ export {};
@@ -153,15 +153,50 @@ export interface IEvmCallOptions {
153
153
  confirmations?: number;
154
154
  /** Gas limit override */
155
155
  gasLimit?: bigint;
156
+ /**
157
+ * Explicit deposit parking lot address for parking-lot actions (deposit /
158
+ * cancel / claim / process / operator / pause). When omitted it is read
159
+ * on-chain from `vault.parkingLot()`.
160
+ */
161
+ parkingLotAddress?: string;
156
162
  /** If true, uses EmberETHVault ABI instead of EmberVault ABI */
157
163
  isETHVault?: boolean;
158
164
  }
159
165
  /**
160
166
  * Optional parameters for user deposit/mint/redeem calls
161
167
  */
168
+ /**
169
+ * On-chain state of a vault's deposit parking lot (async deposits).
170
+ */
171
+ export interface IParkingLotInfo {
172
+ /** The parking lot contract address */
173
+ address: string;
174
+ /** The operator authorised to process the deposit queue */
175
+ operator: string;
176
+ /** Whether new deposit requests are currently paused */
177
+ depositsPaused: boolean;
178
+ /** Total collateral currently escrowed across pending requests */
179
+ totalPendingAssets: bigint;
180
+ /** Number of live (unprocessed, uncancelled) pending requests */
181
+ livePendingCount: bigint;
182
+ /** Latest assigned FIFO sequence number */
183
+ sequenceNumber: bigint;
184
+ /** Index of the next request the operator will process */
185
+ queueStartIndex: bigint;
186
+ }
162
187
  export interface IUserCallOptions extends IEvmCallOptions {
163
188
  /** Receiver address for shares/funds. Defaults to the caller's address if not provided */
164
189
  receiver?: string;
190
+ /**
191
+ * Route the deposit through the vault's deposit parking lot (async deposit).
192
+ * The collateral is escrowed in the parking lot and queued; the operator later
193
+ * forwards it into the vault, minting shares to the receiver.
194
+ *
195
+ * Note: the collateral must be approved to the PARKING LOT address (not the
196
+ * vault). Only supported by plain `deposit()` — the parking lot has no
197
+ * mint/permit entrypoint. Ignored for ETH vaults.
198
+ */
199
+ depositToParkingLot?: boolean;
165
200
  }
166
201
  /**
167
202
  * Optional parameters for high-level OFT bridge send calls.
@@ -52,6 +52,15 @@ export declare class EVMOperatorCalls extends EVMOnChainCalls {
52
52
  * @returns EvmOnChainCallResponse
53
53
  */
54
54
  processWithdrawalRequests(vaultAddress: string, maxRequestCount: NumStr, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
55
+ /**
56
+ * Process queued async (parked) deposits, forwarding escrowed collateral
57
+ * into the vault and minting shares to each request's receiver. Operator-only.
58
+ * @param vaultAddress The vault the parking lot serves
59
+ * @param numRequests Max number of FIFO requests to process this call
60
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
61
+ * @returns EvmOnChainCallResponse
62
+ */
63
+ processParkingLotDeposits(vaultAddress: string, numRequests: NumStr, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
55
64
  /**
56
65
  * Collect accrued platform fees from a vault
57
66
  * @param vaultAddress The address of the vault
@@ -63,6 +63,19 @@ export class EVMOperatorCalls extends EVMOnChainCalls {
63
63
  const txCall = this.txBuilder.processWithdrawalRequests(vaultAddress, maxRequestCount, options?.isETHVault);
64
64
  return this.execCall(txCall, options);
65
65
  }
66
+ /**
67
+ * Process queued async (parked) deposits, forwarding escrowed collateral
68
+ * into the vault and minting shares to each request's receiver. Operator-only.
69
+ * @param vaultAddress The vault the parking lot serves
70
+ * @param numRequests Max number of FIFO requests to process this call
71
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
72
+ * @returns EvmOnChainCallResponse
73
+ */
74
+ async processParkingLotDeposits(vaultAddress, numRequests, options) {
75
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options?.parkingLotAddress);
76
+ const txCall = this.txBuilder.processParkingLotDeposits(parkingLotAddress, numRequests);
77
+ return this.execCall(txCall, options);
78
+ }
66
79
  // ============================================
67
80
  // Fee Collection
68
81
  // ============================================
@@ -150,6 +150,39 @@ export declare class EVMTxBuilder {
150
150
  * @returns Transaction call object
151
151
  */
152
152
  updateVaultAdmin(vaultAddress: string, newAdmin: string): ITransactionCall;
153
+ /**
154
+ * Binds (or clears) a vault's deposit parking lot, enabling async-deposit
155
+ * gating. Routed through the protocol config; caller must be the vault admin.
156
+ * Pass the zero address to unbind and restore permissionless deposits.
157
+ * @param vaultAddress The vault to bind the parking lot to
158
+ * @param parkingLotAddress The parking lot address (or zero address to clear)
159
+ * @returns Transaction call object
160
+ */
161
+ setVaultParkingLot(vaultAddress: string, parkingLotAddress: string): ITransactionCall;
162
+ /**
163
+ * Processes up to `numRequests` queued deposit requests in a parking lot,
164
+ * forwarding escrowed collateral into the vault (operator-only).
165
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
166
+ * @param numRequests Max number of FIFO requests to process this call
167
+ * @returns Transaction call object
168
+ */
169
+ processParkingLotDeposits(parkingLotAddress: string, numRequests: NumStr): ITransactionCall;
170
+ /**
171
+ * Rotates the operator authorised to process a parking lot's queue
172
+ * (vault-admin only).
173
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
174
+ * @param newOperator The new operator address
175
+ * @returns Transaction call object
176
+ */
177
+ setParkingLotOperator(parkingLotAddress: string, newOperator: string): ITransactionCall;
178
+ /**
179
+ * Pauses or resumes new deposit requests into a parking lot (vault admin or
180
+ * protocol guardian). Processing and cancellation remain available while paused.
181
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
182
+ * @param paused True to pause new deposits, false to resume
183
+ * @returns Transaction call object
184
+ */
185
+ setParkingLotDepositsPaused(parkingLotAddress: string, paused: boolean): ITransactionCall;
153
186
  /**
154
187
  * Updates the paused status of a vault operation (called via ProtocolConfig)
155
188
  * @param vaultAddress Address of the vault
@@ -265,6 +298,31 @@ export declare class EVMTxBuilder {
265
298
  * @returns Transaction call object
266
299
  */
267
300
  deposit(vaultAddress: string, assets: NumStr, receiver: string, isETHVault?: boolean): ITransactionCall;
301
+ /**
302
+ * Deposits assets into a vault's deposit parking lot (async deposit). The
303
+ * collateral is escrowed and queued; the operator later forwards it into the
304
+ * vault, minting shares to `receiver`. The caller must have approved the
305
+ * collateral to the parking lot address.
306
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
307
+ * @param assets Amount of assets to park
308
+ * @param receiver Address that will receive the minted shares when processed
309
+ * @returns Transaction call object
310
+ */
311
+ depositToParkingLot(parkingLotAddress: string, assets: NumStr, receiver: string): ITransactionCall;
312
+ /**
313
+ * Cancels a pending parked deposit request, refunding the escrowed collateral.
314
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
315
+ * @param sequenceNumber FIFO sequence number of the request to cancel
316
+ * @returns Transaction call object
317
+ */
318
+ cancelParkingLotDeposit(parkingLotAddress: string, sequenceNumber: NumStr): ITransactionCall;
319
+ /**
320
+ * Withdraws the caller's accrued claimable balance (undeliverable refunds)
321
+ * from the parking lot.
322
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
323
+ * @returns Transaction call object
324
+ */
325
+ claimParkingLotRefund(parkingLotAddress: string): ITransactionCall;
268
326
  /**
269
327
  * Deposits assets to a vault using EIP-2612 permit (no separate approval needed)
270
328
  * @param vaultAddress Address of the vault
@@ -4,6 +4,7 @@ import EmberETHVaultABI from "../../abis/EmberETHVault.json" with { type: "json"
4
4
  import EmberProtocolConfigABI from "../../abis/EmberProtocolConfig.json" with { type: "json" };
5
5
  import ERC20TokenABI from "../../abis/ERC20Token.json" with { type: "json" };
6
6
  import EmberVaultOFTAdapterABI from "../../abis/EmberVaultMintBurnOFTAdapter.json" with { type: "json" };
7
+ import EmberDepositParkingLotABI from "../../abis/EmberDepositParkingLot.json" with { type: "json" };
7
8
  /**
8
9
  * EVM Transaction Builder for Ember Protocol (ERC-4626 Compatible)
9
10
  *
@@ -276,6 +277,75 @@ export class EVMTxBuilder {
276
277
  chainId: this.getChainId()
277
278
  };
278
279
  }
280
+ /**
281
+ * Binds (or clears) a vault's deposit parking lot, enabling async-deposit
282
+ * gating. Routed through the protocol config; caller must be the vault admin.
283
+ * Pass the zero address to unbind and restore permissionless deposits.
284
+ * @param vaultAddress The vault to bind the parking lot to
285
+ * @param parkingLotAddress The parking lot address (or zero address to clear)
286
+ * @returns Transaction call object
287
+ */
288
+ setVaultParkingLot(vaultAddress, parkingLotAddress) {
289
+ return {
290
+ to: this.parser.getProtocolConfigAddress(),
291
+ functionName: "setVaultParkingLot",
292
+ args: [vaultAddress, parkingLotAddress],
293
+ abi: EmberProtocolConfigABI.abi,
294
+ value: 0n,
295
+ chainId: this.getChainId()
296
+ };
297
+ }
298
+ /**
299
+ * Processes up to `numRequests` queued deposit requests in a parking lot,
300
+ * forwarding escrowed collateral into the vault (operator-only).
301
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
302
+ * @param numRequests Max number of FIFO requests to process this call
303
+ * @returns Transaction call object
304
+ */
305
+ processParkingLotDeposits(parkingLotAddress, numRequests) {
306
+ return {
307
+ to: parkingLotAddress,
308
+ functionName: "processDeposits",
309
+ args: [BigInt(numRequests)],
310
+ abi: EmberDepositParkingLotABI.abi,
311
+ value: 0n,
312
+ chainId: this.getChainId()
313
+ };
314
+ }
315
+ /**
316
+ * Rotates the operator authorised to process a parking lot's queue
317
+ * (vault-admin only).
318
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
319
+ * @param newOperator The new operator address
320
+ * @returns Transaction call object
321
+ */
322
+ setParkingLotOperator(parkingLotAddress, newOperator) {
323
+ return {
324
+ to: parkingLotAddress,
325
+ functionName: "setOperator",
326
+ args: [newOperator],
327
+ abi: EmberDepositParkingLotABI.abi,
328
+ value: 0n,
329
+ chainId: this.getChainId()
330
+ };
331
+ }
332
+ /**
333
+ * Pauses or resumes new deposit requests into a parking lot (vault admin or
334
+ * protocol guardian). Processing and cancellation remain available while paused.
335
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
336
+ * @param paused True to pause new deposits, false to resume
337
+ * @returns Transaction call object
338
+ */
339
+ setParkingLotDepositsPaused(parkingLotAddress, paused) {
340
+ return {
341
+ to: parkingLotAddress,
342
+ functionName: "setDepositsPaused",
343
+ args: [paused],
344
+ abi: EmberDepositParkingLotABI.abi,
345
+ value: 0n,
346
+ chainId: this.getChainId()
347
+ };
348
+ }
279
349
  /**
280
350
  * Updates the paused status of a vault operation (called via ProtocolConfig)
281
351
  * @param vaultAddress Address of the vault
@@ -533,6 +603,58 @@ export class EVMTxBuilder {
533
603
  chainId: this.getChainId()
534
604
  };
535
605
  }
606
+ /**
607
+ * Deposits assets into a vault's deposit parking lot (async deposit). The
608
+ * collateral is escrowed and queued; the operator later forwards it into the
609
+ * vault, minting shares to `receiver`. The caller must have approved the
610
+ * collateral to the parking lot address.
611
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
612
+ * @param assets Amount of assets to park
613
+ * @param receiver Address that will receive the minted shares when processed
614
+ * @returns Transaction call object
615
+ */
616
+ depositToParkingLot(parkingLotAddress, assets, receiver) {
617
+ return {
618
+ to: parkingLotAddress,
619
+ functionName: "deposit",
620
+ args: [BigInt(assets), receiver],
621
+ abi: EmberDepositParkingLotABI.abi,
622
+ value: 0n,
623
+ chainId: this.getChainId()
624
+ };
625
+ }
626
+ /**
627
+ * Cancels a pending parked deposit request, refunding the escrowed collateral.
628
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
629
+ * @param sequenceNumber FIFO sequence number of the request to cancel
630
+ * @returns Transaction call object
631
+ */
632
+ cancelParkingLotDeposit(parkingLotAddress, sequenceNumber) {
633
+ return {
634
+ to: parkingLotAddress,
635
+ functionName: "cancelDeposit",
636
+ args: [BigInt(sequenceNumber)],
637
+ abi: EmberDepositParkingLotABI.abi,
638
+ value: 0n,
639
+ chainId: this.getChainId()
640
+ };
641
+ }
642
+ /**
643
+ * Withdraws the caller's accrued claimable balance (undeliverable refunds)
644
+ * from the parking lot.
645
+ * @param parkingLotAddress Address of the EmberDepositParkingLot
646
+ * @returns Transaction call object
647
+ */
648
+ claimParkingLotRefund(parkingLotAddress) {
649
+ return {
650
+ to: parkingLotAddress,
651
+ functionName: "claim",
652
+ args: [],
653
+ abi: EmberDepositParkingLotABI.abi,
654
+ value: 0n,
655
+ chainId: this.getChainId()
656
+ };
657
+ }
536
658
  /**
537
659
  * Deposits assets to a vault using EIP-2612 permit (no separate approval needed)
538
660
  * @param vaultAddress Address of the vault
@@ -63,6 +63,20 @@ export declare class EVMUserCalls extends EVMOnChainCalls {
63
63
  * @returns EvmOnChainCallResponse
64
64
  */
65
65
  deposit(vaultAddress: string, assets: NumStr, options?: IUserCallOptions): Promise<EvmOnChainCallResponse>;
66
+ /**
67
+ * Cancels a pending async (parked) deposit, refunding the escrowed collateral.
68
+ * @param vaultAddress The vault the parking lot serves
69
+ * @param sequenceNumber FIFO sequence number of the request to cancel
70
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
71
+ */
72
+ cancelParkingLotDeposit(vaultAddress: string, sequenceNumber: NumStr, options?: IUserCallOptions): Promise<EvmOnChainCallResponse>;
73
+ /**
74
+ * Withdraws the caller's accrued claimable balance (undeliverable refunds)
75
+ * from the vault's parking lot.
76
+ * @param vaultAddress The vault the parking lot serves
77
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
78
+ */
79
+ claimParkingLotRefund(vaultAddress: string, options?: IUserCallOptions): Promise<EvmOnChainCallResponse>;
66
80
  /**
67
81
  * Deposit assets into a vault using EIP-2612 permit (no separate approval needed)
68
82
  *
@@ -69,9 +69,39 @@ export class EVMUserCalls extends EVMOnChainCalls {
69
69
  */
70
70
  async deposit(vaultAddress, assets, options) {
71
71
  const receiver = options?.receiver ?? (await this.getWalletAddress());
72
+ // Async deposit: route through the vault's deposit parking lot. Funds are
73
+ // escrowed + queued and forwarded into the vault later by the operator.
74
+ // The collateral must be approved to the parking lot (not the vault).
75
+ if (options?.depositToParkingLot) {
76
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options.parkingLotAddress);
77
+ const txCall = this.txBuilder.depositToParkingLot(parkingLotAddress, assets, receiver);
78
+ return this.execCall(txCall, options);
79
+ }
72
80
  const txCall = this.txBuilder.deposit(vaultAddress, assets, receiver, options?.isETHVault);
73
81
  return this.execCall(txCall, options);
74
82
  }
83
+ /**
84
+ * Cancels a pending async (parked) deposit, refunding the escrowed collateral.
85
+ * @param vaultAddress The vault the parking lot serves
86
+ * @param sequenceNumber FIFO sequence number of the request to cancel
87
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
88
+ */
89
+ async cancelParkingLotDeposit(vaultAddress, sequenceNumber, options) {
90
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options?.parkingLotAddress);
91
+ const txCall = this.txBuilder.cancelParkingLotDeposit(parkingLotAddress, sequenceNumber);
92
+ return this.execCall(txCall, options);
93
+ }
94
+ /**
95
+ * Withdraws the caller's accrued claimable balance (undeliverable refunds)
96
+ * from the vault's parking lot.
97
+ * @param vaultAddress The vault the parking lot serves
98
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
99
+ */
100
+ async claimParkingLotRefund(vaultAddress, options) {
101
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options?.parkingLotAddress);
102
+ const txCall = this.txBuilder.claimParkingLotRefund(parkingLotAddress);
103
+ return this.execCall(txCall, options);
104
+ }
75
105
  /**
76
106
  * Deposit assets into a vault using EIP-2612 permit (no separate approval needed)
77
107
  *
@@ -44,6 +44,34 @@ export declare class EVMVaultAdminCalls extends EVMOnChainCalls {
44
44
  * @returns EvmOnChainCallResponse
45
45
  */
46
46
  updateVaultOperator(vaultAddress: string, newOperator: string, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
47
+ /**
48
+ * Bind (or clear) a vault's deposit parking lot, enabling async-deposit
49
+ * gating. Pass the zero address to unbind and restore permissionless deposits.
50
+ * Routed through the protocol config; caller must be the vault admin.
51
+ * @param vaultAddress The vault to bind
52
+ * @param parkingLotAddress The parking lot address (or zero address to clear)
53
+ * @param options Optional tx execution params
54
+ * @returns EvmOnChainCallResponse
55
+ */
56
+ setVaultParkingLot(vaultAddress: string, parkingLotAddress: string, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
57
+ /**
58
+ * Rotate the operator authorised to process the vault's parking lot queue
59
+ * (vault-admin only).
60
+ * @param vaultAddress The vault the parking lot serves
61
+ * @param newOperator The new operator address
62
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
63
+ * @returns EvmOnChainCallResponse
64
+ */
65
+ setParkingLotOperator(vaultAddress: string, newOperator: string, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
66
+ /**
67
+ * Pause or resume new deposit requests into the vault's parking lot (vault
68
+ * admin or protocol guardian). Processing and cancellation stay available.
69
+ * @param vaultAddress The vault the parking lot serves
70
+ * @param paused True to pause new deposits, false to resume
71
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
72
+ * @returns EvmOnChainCallResponse
73
+ */
74
+ setParkingLotDepositsPaused(vaultAddress: string, paused: boolean, options?: IEvmCallOptions): Promise<EvmOnChainCallResponse>;
47
75
  /**
48
76
  * Update the rate manager of a vault
49
77
  * @param vaultAddress The address of the vault
@@ -49,6 +49,48 @@ export class EVMVaultAdminCalls extends EVMOnChainCalls {
49
49
  const txCall = this.txBuilder.updateVaultOperator(vaultAddress, newOperator);
50
50
  return this.execCall(txCall, options);
51
51
  }
52
+ // ============================================
53
+ // Async Deposits (parking lot)
54
+ // ============================================
55
+ /**
56
+ * Bind (or clear) a vault's deposit parking lot, enabling async-deposit
57
+ * gating. Pass the zero address to unbind and restore permissionless deposits.
58
+ * Routed through the protocol config; caller must be the vault admin.
59
+ * @param vaultAddress The vault to bind
60
+ * @param parkingLotAddress The parking lot address (or zero address to clear)
61
+ * @param options Optional tx execution params
62
+ * @returns EvmOnChainCallResponse
63
+ */
64
+ async setVaultParkingLot(vaultAddress, parkingLotAddress, options) {
65
+ const txCall = this.txBuilder.setVaultParkingLot(vaultAddress, parkingLotAddress);
66
+ return this.execCall(txCall, options);
67
+ }
68
+ /**
69
+ * Rotate the operator authorised to process the vault's parking lot queue
70
+ * (vault-admin only).
71
+ * @param vaultAddress The vault the parking lot serves
72
+ * @param newOperator The new operator address
73
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
74
+ * @returns EvmOnChainCallResponse
75
+ */
76
+ async setParkingLotOperator(vaultAddress, newOperator, options) {
77
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options?.parkingLotAddress);
78
+ const txCall = this.txBuilder.setParkingLotOperator(parkingLotAddress, newOperator);
79
+ return this.execCall(txCall, options);
80
+ }
81
+ /**
82
+ * Pause or resume new deposit requests into the vault's parking lot (vault
83
+ * admin or protocol guardian). Processing and cancellation stay available.
84
+ * @param vaultAddress The vault the parking lot serves
85
+ * @param paused True to pause new deposits, false to resume
86
+ * @param options Optional tx execution params (incl. optional parkingLotAddress override)
87
+ * @returns EvmOnChainCallResponse
88
+ */
89
+ async setParkingLotDepositsPaused(vaultAddress, paused, options) {
90
+ const parkingLotAddress = this.parser.resolveParkingLotAddress(vaultAddress, options?.parkingLotAddress);
91
+ const txCall = this.txBuilder.setParkingLotDepositsPaused(parkingLotAddress, paused);
92
+ return this.execCall(txCall, options);
93
+ }
52
94
  /**
53
95
  * Update the rate manager of a vault
54
96
  * @param vaultAddress The address of the vault
@@ -1,6 +1,6 @@
1
1
  import { Provider } from "ethers";
2
2
  import { EVMDeploymentParser } from "../utils/deployment-parser.js";
3
- import { EvmProtocolInfo, IOFTSendParam, IOFTFeeQuote, IOFTVaultSupportedChain } from "../interfaces/index.js";
3
+ import { EvmProtocolInfo, IOFTSendParam, IOFTFeeQuote, IOFTVaultSupportedChain, IParkingLotInfo } from "../interfaces/index.js";
4
4
  import { NumStr } from "../../common/types.js";
5
5
  import { Chain, VaultsApi } from "../../api/v2/index.js";
6
6
  /**
@@ -237,6 +237,30 @@ export declare class EVMVaultReader {
237
237
  * @returns Asset address
238
238
  */
239
239
  getAsset(vaultAddress: string, isETHVault?: boolean): Promise<string>;
240
+ /**
241
+ * Creates an ethers Contract instance for a deposit parking lot
242
+ */
243
+ private getParkingLotContract;
244
+ /**
245
+ * Gets the vault's bound deposit parking lot address (zero address if async
246
+ * deposits are not enabled for the vault).
247
+ * @param vaultAddress The vault address
248
+ * @param isETHVault If true, uses EmberETHVault ABI
249
+ */
250
+ getParkingLot(vaultAddress: string, isETHVault?: boolean): Promise<string>;
251
+ /**
252
+ * Reads the on-chain state of a deposit parking lot (operator, pause flag,
253
+ * pending totals, queue cursors).
254
+ * @param parkingLotAddress The parking lot address
255
+ */
256
+ getParkingLotInfo(parkingLotAddress: string): Promise<IParkingLotInfo>;
257
+ /**
258
+ * Gets an account's accrued claimable balance (undeliverable refunds) in a
259
+ * parking lot.
260
+ * @param parkingLotAddress The parking lot address
261
+ * @param account The account to query
262
+ */
263
+ getParkingLotClaimable(parkingLotAddress: string, account: string): Promise<bigint>;
240
264
  /**
241
265
  * Gets total assets under management
242
266
  * @param vaultAddress The vault address
@@ -5,6 +5,7 @@ import EmberETHVaultABI from "../../abis/EmberETHVault.json" with { type: "json"
5
5
  import EmberProtocolConfigABI from "../../abis/EmberProtocolConfig.json" with { type: "json" };
6
6
  import ERC20TokenABI from "../../abis/ERC20Token.json" with { type: "json" };
7
7
  import EmberVaultOFTAdapterABI from "../../abis/EmberVaultMintBurnOFTAdapter.json" with { type: "json" };
8
+ import EmberDepositParkingLotABI from "../../abis/EmberDepositParkingLot.json" with { type: "json" };
8
9
  import { Configuration, VaultsApi } from "../../api/v2/index.js";
9
10
  import { environmentConfig } from "../../common/constants.js";
10
11
  /**
@@ -202,6 +203,58 @@ export class EVMVaultReader {
202
203
  const vault = this.getVaultContract(vaultAddress, isETHVault);
203
204
  return vault.asset();
204
205
  }
206
+ // ========== Async Deposits (parking lot) ==========
207
+ /**
208
+ * Creates an ethers Contract instance for a deposit parking lot
209
+ */
210
+ getParkingLotContract(parkingLotAddress) {
211
+ return new Contract(parkingLotAddress, EmberDepositParkingLotABI.abi, this.provider);
212
+ }
213
+ /**
214
+ * Gets the vault's bound deposit parking lot address (zero address if async
215
+ * deposits are not enabled for the vault).
216
+ * @param vaultAddress The vault address
217
+ * @param isETHVault If true, uses EmberETHVault ABI
218
+ */
219
+ async getParkingLot(vaultAddress, isETHVault) {
220
+ const vault = this.getVaultContract(vaultAddress, isETHVault);
221
+ return vault.parkingLot();
222
+ }
223
+ /**
224
+ * Reads the on-chain state of a deposit parking lot (operator, pause flag,
225
+ * pending totals, queue cursors).
226
+ * @param parkingLotAddress The parking lot address
227
+ */
228
+ async getParkingLotInfo(parkingLotAddress) {
229
+ const parkingLot = this.getParkingLotContract(parkingLotAddress);
230
+ const [operator, depositsPaused, totalPendingAssets, livePendingCount, sequenceNumber, queueStartIndex] = await Promise.all([
231
+ parkingLot.operator(),
232
+ parkingLot.depositsPaused(),
233
+ parkingLot.totalPendingAssets(),
234
+ parkingLot.getLivePendingDepositsCount(),
235
+ parkingLot.sequenceNumber(),
236
+ parkingLot.queueStartIndex()
237
+ ]);
238
+ return {
239
+ address: parkingLotAddress,
240
+ operator,
241
+ depositsPaused,
242
+ totalPendingAssets,
243
+ livePendingCount,
244
+ sequenceNumber,
245
+ queueStartIndex
246
+ };
247
+ }
248
+ /**
249
+ * Gets an account's accrued claimable balance (undeliverable refunds) in a
250
+ * parking lot.
251
+ * @param parkingLotAddress The parking lot address
252
+ * @param account The account to query
253
+ */
254
+ async getParkingLotClaimable(parkingLotAddress, account) {
255
+ const parkingLot = this.getParkingLotContract(parkingLotAddress);
256
+ return parkingLot.claimable(account);
257
+ }
205
258
  /**
206
259
  * Gets total assets under management
207
260
  * @param vaultAddress The vault address
@@ -95,6 +95,22 @@ export declare class EVMDeploymentParser {
95
95
  * Gets all receipt token symbols
96
96
  */
97
97
  getReceiptTokenSymbols(): string[];
98
+ /**
99
+ * Finds the deposit parking lot address serving a given vault, from
100
+ * deployment info (async deposits). Returns undefined if the vault has no
101
+ * parking lot configured.
102
+ * @param vaultAddress The vault's proxy address
103
+ */
104
+ getParkingLotAddressByVaultAddress(vaultAddress: string): string | undefined;
105
+ /**
106
+ * Resolves the deposit parking lot address for a vault from deployment info:
107
+ * returns the caller override if given, otherwise looks it up in
108
+ * `contracts.depositParkingLots`.
109
+ * @param vaultAddress The vault whose parking lot to resolve
110
+ * @param override Optional explicit parking lot address (skips the lookup)
111
+ * @throws if no override is given and the deployment has no parking lot for the vault
112
+ */
113
+ resolveParkingLotAddress(vaultAddress: string, override?: string): string;
98
114
  /**
99
115
  * Finds the OFT adapter entry for a given vault address.
100
116
  * @param vaultAddress The vault address (receipt token address in EVM deployment data)