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

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 (39) 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 +110 -0
  5. package/dist/src/api/v2/apis/accounts-api.js +207 -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/chain-vault-details.d.ts +6 -0
  13. package/dist/src/api/v2/models/evm-contracts.d.ts +25 -0
  14. package/dist/src/api/v2/models/evm-deposit-parking-lot.d.ts +66 -0
  15. package/dist/src/api/v2/models/evm-deposit-parking-lot.js +14 -0
  16. package/dist/src/api/v2/models/evm-timelock.d.ts +60 -0
  17. package/dist/src/api/v2/models/evm-timelock.js +14 -0
  18. package/dist/src/api/v2/models/evm-vault-validator.d.ts +60 -0
  19. package/dist/src/api/v2/models/evm-vault-validator.js +14 -0
  20. package/dist/src/api/v2/models/evm-vault.d.ts +6 -0
  21. package/dist/src/api/v2/models/index.d.ts +6 -0
  22. package/dist/src/api/v2/models/index.js +6 -0
  23. package/dist/src/api/v2/models/vault-detail.d.ts +6 -0
  24. package/dist/src/api/v2/models/vault-parking-lot-info.d.ts +60 -0
  25. package/dist/src/api/v2/models/vault-parking-lot-info.js +14 -0
  26. package/dist/src/evm-vaults/interfaces/index.d.ts +35 -0
  27. package/dist/src/evm-vaults/on-chain-calls/operator.d.ts +9 -0
  28. package/dist/src/evm-vaults/on-chain-calls/operator.js +13 -0
  29. package/dist/src/evm-vaults/on-chain-calls/tx-builder.d.ts +58 -0
  30. package/dist/src/evm-vaults/on-chain-calls/tx-builder.js +122 -0
  31. package/dist/src/evm-vaults/on-chain-calls/user.d.ts +14 -0
  32. package/dist/src/evm-vaults/on-chain-calls/user.js +30 -0
  33. package/dist/src/evm-vaults/on-chain-calls/vault-admin.d.ts +28 -0
  34. package/dist/src/evm-vaults/on-chain-calls/vault-admin.js +42 -0
  35. package/dist/src/evm-vaults/on-chain-calls/vault-reader.d.ts +25 -1
  36. package/dist/src/evm-vaults/on-chain-calls/vault-reader.js +53 -0
  37. package/dist/src/evm-vaults/utils/deployment-parser.d.ts +16 -0
  38. package/dist/src/evm-vaults/utils/deployment-parser.js +27 -0
  39. package/package.json +1 -1
@@ -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)
@@ -157,6 +157,33 @@ export class EVMDeploymentParser {
157
157
  getReceiptTokenSymbols() {
158
158
  return Object.keys(this.deployment.contracts?.receiptTokens ?? {});
159
159
  }
160
+ /**
161
+ * Finds the deposit parking lot address serving a given vault, from
162
+ * deployment info (async deposits). Returns undefined if the vault has no
163
+ * parking lot configured.
164
+ * @param vaultAddress The vault's proxy address
165
+ */
166
+ getParkingLotAddressByVaultAddress(vaultAddress) {
167
+ const entry = Object.values(this.deployment.contracts?.depositParkingLots ?? {}).find(parkingLot => parkingLot.vault?.toLowerCase() === vaultAddress.toLowerCase());
168
+ return entry?.proxyAddress;
169
+ }
170
+ /**
171
+ * Resolves the deposit parking lot address for a vault from deployment info:
172
+ * returns the caller override if given, otherwise looks it up in
173
+ * `contracts.depositParkingLots`.
174
+ * @param vaultAddress The vault whose parking lot to resolve
175
+ * @param override Optional explicit parking lot address (skips the lookup)
176
+ * @throws if no override is given and the deployment has no parking lot for the vault
177
+ */
178
+ resolveParkingLotAddress(vaultAddress, override) {
179
+ if (override)
180
+ return override;
181
+ const parkingLot = this.getParkingLotAddressByVaultAddress(vaultAddress);
182
+ if (!parkingLot) {
183
+ throw new Error(`No parking lot configured for vault ${vaultAddress} in deployment info (async deposits not enabled, or the protocol info is stale — pass options.parkingLotAddress to override).`);
184
+ }
185
+ return parkingLot;
186
+ }
160
187
  /**
161
188
  * Finds the OFT adapter entry for a given vault address.
162
189
  * @param vaultAddress The vault address (receipt token address in EVM deployment data)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ember-finance/sdk",
3
3
  "description": "Ember Protocol SDK",
4
- "version": "2.1.3",
4
+ "version": "2.2.0-rc.0",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
7
7
  "main": "./dist/index.js",