@gauntlet-xyz/sdk 2.5.0 → 3.0.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.
- package/README.md +89 -6
- package/dist/api/activity.d.ts +1 -1
- package/dist/api/activity.d.ts.map +1 -1
- package/dist/api/caip.d.ts +1 -1
- package/dist/api/caip.d.ts.map +1 -1
- package/dist/api/client.d.ts +43 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/errors.d.ts +1 -1
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/generated.d.ts +570 -7
- package/dist/api/generated.d.ts.map +1 -1
- package/dist/api/index.d.ts +13 -13
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +48 -8
- package/dist/api/index.js.map +7 -1
- package/dist/api/positionHistory.d.ts +1 -1
- package/dist/api/positionHistory.d.ts.map +1 -1
- package/dist/attribution/index.d.ts +3 -3
- package/dist/attribution/index.d.ts.map +1 -1
- package/dist/chunk-7TA2OJUK.js +4364 -0
- package/dist/chunk-7TA2OJUK.js.map +7 -0
- package/dist/chunk-HC2BS7MK.js +439 -0
- package/dist/chunk-HC2BS7MK.js.map +7 -0
- package/dist/chunk-S2TTA45N.js +2009 -0
- package/dist/chunk-S2TTA45N.js.map +7 -0
- package/dist/chunk-STIV2CC4.js +57 -0
- package/dist/chunk-STIV2CC4.js.map +7 -0
- package/dist/chunk-SU6JAKIA.js +283 -0
- package/dist/chunk-SU6JAKIA.js.map +7 -0
- package/dist/cjs/api/activity.d.ts +70 -0
- package/dist/cjs/api/activity.d.ts.map +1 -0
- package/dist/cjs/api/activity.js +136 -0
- package/dist/cjs/api/activity.js.map +7 -0
- package/dist/cjs/api/caip.d.ts +29 -0
- package/dist/cjs/api/caip.d.ts.map +1 -0
- package/dist/cjs/api/caip.js +59 -0
- package/dist/cjs/api/caip.js.map +7 -0
- package/dist/cjs/api/client.d.ts +173 -0
- package/dist/cjs/api/client.d.ts.map +1 -0
- package/dist/cjs/api/client.js +171 -0
- package/dist/cjs/api/client.js.map +7 -0
- package/dist/cjs/api/decimal.d.ts +21 -0
- package/dist/cjs/api/decimal.d.ts.map +1 -0
- package/dist/cjs/api/decimal.js +60 -0
- package/dist/cjs/api/decimal.js.map +7 -0
- package/dist/cjs/api/errors.d.ts +32 -0
- package/dist/cjs/api/errors.d.ts.map +1 -0
- package/dist/cjs/api/errors.js +80 -0
- package/dist/cjs/api/errors.js.map +7 -0
- package/dist/cjs/api/generated.d.ts +2068 -0
- package/dist/cjs/api/generated.d.ts.map +1 -0
- package/dist/cjs/api/generated.js +17 -0
- package/dist/cjs/api/generated.js.map +7 -0
- package/dist/cjs/api/http.d.ts +16 -0
- package/dist/cjs/api/http.d.ts.map +1 -0
- package/dist/cjs/api/http.js +64 -0
- package/dist/cjs/api/http.js.map +7 -0
- package/dist/cjs/api/index.d.ts +14 -0
- package/dist/cjs/api/index.d.ts.map +1 -0
- package/dist/cjs/api/index.js +73 -0
- package/dist/cjs/api/index.js.map +7 -0
- package/dist/cjs/api/positionHistory.d.ts +44 -0
- package/dist/cjs/api/positionHistory.d.ts.map +1 -0
- package/dist/cjs/api/positionHistory.js +131 -0
- package/dist/cjs/api/positionHistory.js.map +7 -0
- package/dist/cjs/attribution/erc8021.d.ts +9 -0
- package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
- package/dist/cjs/attribution/erc8021.js +37 -0
- package/dist/cjs/attribution/erc8021.js.map +7 -0
- package/dist/cjs/attribution/index.d.ts +25 -0
- package/dist/cjs/attribution/index.d.ts.map +1 -0
- package/dist/cjs/attribution/index.js +68 -0
- package/dist/cjs/attribution/index.js.map +7 -0
- package/dist/cjs/client.d.ts +72 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +80 -0
- package/dist/cjs/client.js.map +7 -0
- package/dist/cjs/constants.d.ts +16 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +83 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/errors.d.ts +85 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +210 -0
- package/dist/cjs/errors.js.map +7 -0
- package/dist/cjs/evm/abis/erc20.d.ts +41 -0
- package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc20.js +57 -0
- package/dist/cjs/evm/abis/erc20.js.map +7 -0
- package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
- package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc4626.js +97 -0
- package/dist/cjs/evm/abis/erc4626.js.map +7 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
- package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
- package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisioner.js +2785 -0
- package/dist/cjs/evm/abis/provisioner.js.map +7 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisionerV2.js +320 -0
- package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
- package/dist/cjs/evm/adapters/aera.d.ts +6 -0
- package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/aera.js +491 -0
- package/dist/cjs/evm/adapters/aera.js.map +7 -0
- package/dist/cjs/evm/adapters/index.d.ts +3 -0
- package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/index.js +41 -0
- package/dist/cjs/evm/adapters/index.js.map +7 -0
- package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
- package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/morpho.js +103 -0
- package/dist/cjs/evm/adapters/morpho.js.map +7 -0
- package/dist/cjs/evm/adapters/types.d.ts +84 -0
- package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/types.js +17 -0
- package/dist/cjs/evm/adapters/types.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v1.js +120 -0
- package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v2.js +449 -0
- package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
- package/dist/cjs/evm/aeraContracts.d.ts +33 -0
- package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts.js +224 -0
- package/dist/cjs/evm/aeraContracts.js.map +7 -0
- package/dist/cjs/evm/deposit.d.ts +50 -0
- package/dist/cjs/evm/deposit.d.ts.map +1 -0
- package/dist/cjs/evm/deposit.js +112 -0
- package/dist/cjs/evm/deposit.js.map +7 -0
- package/dist/cjs/evm/depositQuote.d.ts +32 -0
- package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
- package/dist/cjs/evm/depositQuote.js +96 -0
- package/dist/cjs/evm/depositQuote.js.map +7 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
- package/dist/cjs/evm/depositReceiverApproval.js +66 -0
- package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
- package/dist/cjs/evm/index.d.ts +28 -0
- package/dist/cjs/evm/index.d.ts.map +1 -0
- package/dist/cjs/evm/index.js +116 -0
- package/dist/cjs/evm/index.js.map +7 -0
- package/dist/cjs/evm/operationMode.d.ts +9 -0
- package/dist/cjs/evm/operationMode.d.ts.map +1 -0
- package/dist/cjs/evm/operationMode.js +65 -0
- package/dist/cjs/evm/operationMode.js.map +7 -0
- package/dist/cjs/evm/tokenModes.d.ts +22 -0
- package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
- package/dist/cjs/evm/tokenModes.js +47 -0
- package/dist/cjs/evm/tokenModes.js.map +7 -0
- package/dist/cjs/evm/types.d.ts +34 -0
- package/dist/cjs/evm/types.d.ts.map +1 -0
- package/dist/cjs/evm/types.js +32 -0
- package/dist/cjs/evm/types.js.map +7 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts +55 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
- package/dist/cjs/evm/userCurrentBalance.js +225 -0
- package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
- package/dist/cjs/evm/vaults.d.ts +44 -0
- package/dist/cjs/evm/vaults.d.ts.map +1 -0
- package/dist/cjs/evm/vaults.js +78 -0
- package/dist/cjs/evm/vaults.js.map +7 -0
- package/dist/cjs/evm/withdraw.d.ts +73 -0
- package/dist/cjs/evm/withdraw.d.ts.map +1 -0
- package/dist/cjs/evm/withdraw.js +161 -0
- package/dist/cjs/evm/withdraw.js.map +7 -0
- package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
- package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
- package/dist/cjs/evm/withdrawQuote.js +256 -0
- package/dist/cjs/evm/withdrawQuote.js.map +7 -0
- package/dist/cjs/index.d.ts +31 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +128 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/privy/index.d.ts +52 -0
- package/dist/cjs/privy/index.d.ts.map +1 -0
- package/dist/cjs/privy/index.js +57 -0
- package/dist/cjs/privy/index.js.map +7 -0
- package/dist/client.d.ts +4 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/errors.d.ts +4 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/evm/adapters/aera.d.ts +1 -1
- package/dist/evm/adapters/aera.d.ts.map +1 -1
- package/dist/evm/adapters/index.d.ts +1 -1
- package/dist/evm/adapters/index.d.ts.map +1 -1
- package/dist/evm/adapters/morpho.d.ts +1 -1
- package/dist/evm/adapters/morpho.d.ts.map +1 -1
- package/dist/evm/adapters/types.d.ts +5 -3
- package/dist/evm/adapters/types.d.ts.map +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v1.d.ts +2 -2
- package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v2.d.ts +25 -4
- package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
- package/dist/evm/aeraContracts.d.ts +2 -2
- package/dist/evm/aeraContracts.d.ts.map +1 -1
- package/dist/evm/deposit.d.ts +4 -2
- package/dist/evm/deposit.d.ts.map +1 -1
- package/dist/evm/depositQuote.d.ts +32 -0
- package/dist/evm/depositQuote.d.ts.map +1 -0
- package/dist/evm/depositReceiverApproval.d.ts +2 -2
- package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
- package/dist/evm/index.d.ts +27 -25
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +88 -12
- package/dist/evm/index.js.map +7 -1
- package/dist/evm/tokenModes.d.ts +2 -2
- package/dist/evm/tokenModes.d.ts.map +1 -1
- package/dist/evm/userCurrentBalance.d.ts +6 -2
- package/dist/evm/userCurrentBalance.d.ts.map +1 -1
- package/dist/evm/vaults.d.ts +2 -9
- package/dist/evm/vaults.d.ts.map +1 -1
- package/dist/evm/withdraw.d.ts +3 -3
- package/dist/evm/withdraw.d.ts.map +1 -1
- package/dist/evm/withdrawQuote.d.ts +14 -6
- package/dist/evm/withdrawQuote.d.ts.map +1 -1
- package/dist/index.d.ts +30 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -14
- package/dist/index.js.map +7 -1
- package/dist/manifest/vaults.json +1958 -0
- package/dist/privy/index.d.ts +1 -1
- package/dist/privy/index.d.ts.map +1 -1
- package/dist/privy/index.js +39 -48
- package/dist/privy/index.js.map +7 -1
- package/manifest/vaults.json +22 -395
- package/package.json +43 -9
- package/src/api/client.ts +69 -5
- package/src/api/generated.ts +570 -7
- package/src/api/index.ts +8 -0
- package/src/client.ts +4 -1
- package/src/constants.ts +2 -0
- package/src/errors.ts +7 -0
- package/src/evm/adapters/aera.ts +14 -11
- package/src/evm/adapters/types.ts +2 -0
- package/src/evm/aeraContracts/v2.ts +124 -16
- package/src/evm/deposit.ts +19 -7
- package/src/evm/depositQuote.ts +137 -0
- package/src/evm/index.ts +10 -1
- package/src/evm/userCurrentBalance.ts +12 -1
- package/src/evm/vaults.ts +0 -7
- package/src/evm/withdrawQuote.ts +125 -51
- package/src/index.ts +11 -2
- package/dist/api/activity.js +0 -154
- package/dist/api/activity.js.map +0 -1
- package/dist/api/caip.js +0 -38
- package/dist/api/caip.js.map +0 -1
- package/dist/api/client.js +0 -119
- package/dist/api/client.js.map +0 -1
- package/dist/api/decimal.js +0 -44
- package/dist/api/decimal.js.map +0 -1
- package/dist/api/errors.js +0 -41
- package/dist/api/errors.js.map +0 -1
- package/dist/api/generated.js +0 -6
- package/dist/api/generated.js.map +0 -1
- package/dist/api/http.js +0 -39
- package/dist/api/http.js.map +0 -1
- package/dist/api/positionHistory.js +0 -126
- package/dist/api/positionHistory.js.map +0 -1
- package/dist/attribution/erc8021.js +0 -17
- package/dist/attribution/erc8021.js.map +0 -1
- package/dist/attribution/index.js +0 -45
- package/dist/attribution/index.js.map +0 -1
- package/dist/client.js +0 -72
- package/dist/client.js.map +0 -1
- package/dist/constants.js +0 -28
- package/dist/constants.js.map +0 -1
- package/dist/errors.js +0 -134
- package/dist/errors.js.map +0 -1
- package/dist/evm/abis/erc20.js +0 -30
- package/dist/evm/abis/erc20.js.map +0 -1
- package/dist/evm/abis/erc4626.js +0 -70
- package/dist/evm/abis/erc4626.js.map +0 -1
- package/dist/evm/abis/multiDepositorVault.js +0 -587
- package/dist/evm/abis/multiDepositorVault.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
- package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -141
- package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
- package/dist/evm/abis/provisioner.js +0 -2768
- package/dist/evm/abis/provisioner.js.map +0 -1
- package/dist/evm/abis/provisionerV2.js +0 -295
- package/dist/evm/abis/provisionerV2.js.map +0 -1
- package/dist/evm/adapters/aera.js +0 -280
- package/dist/evm/adapters/aera.js.map +0 -1
- package/dist/evm/adapters/index.js +0 -14
- package/dist/evm/adapters/index.js.map +0 -1
- package/dist/evm/adapters/morpho.js +0 -79
- package/dist/evm/adapters/morpho.js.map +0 -1
- package/dist/evm/adapters/types.js +0 -2
- package/dist/evm/adapters/types.js.map +0 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -174
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/aeraContracts/readOptions.js +0 -4
- package/dist/evm/aeraContracts/readOptions.js.map +0 -1
- package/dist/evm/aeraContracts/v1.js +0 -59
- package/dist/evm/aeraContracts/v1.js.map +0 -1
- package/dist/evm/aeraContracts/v2.js +0 -273
- package/dist/evm/aeraContracts/v2.js.map +0 -1
- package/dist/evm/aeraContracts.js +0 -195
- package/dist/evm/aeraContracts.js.map +0 -1
- package/dist/evm/deposit.js +0 -109
- package/dist/evm/deposit.js.map +0 -1
- package/dist/evm/depositReceiverApproval.js +0 -32
- package/dist/evm/depositReceiverApproval.js.map +0 -1
- package/dist/evm/operationMode.js +0 -41
- package/dist/evm/operationMode.js.map +0 -1
- package/dist/evm/tokenModes.js +0 -34
- package/dist/evm/tokenModes.js.map +0 -1
- package/dist/evm/types.js +0 -5
- package/dist/evm/types.js.map +0 -1
- package/dist/evm/userCurrentBalance.js +0 -211
- package/dist/evm/userCurrentBalance.js.map +0 -1
- package/dist/evm/vaults.js +0 -75
- package/dist/evm/vaults.js.map +0 -1
- package/dist/evm/withdraw.js +0 -177
- package/dist/evm/withdraw.js.map +0 -1
- package/dist/evm/withdrawQuote.js +0 -164
- package/dist/evm/withdrawQuote.js.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
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 userCurrentBalance_exports = {};
|
|
20
|
+
__export(userCurrentBalance_exports, {
|
|
21
|
+
getUserCurrentBalance: () => getUserCurrentBalance
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(userCurrentBalance_exports);
|
|
24
|
+
var import_viem = require("viem");
|
|
25
|
+
var import_errors = require("../errors");
|
|
26
|
+
var import_aeraContracts = require("./aeraContracts");
|
|
27
|
+
var import_priceAndFeeCalculator = require("./aeraContracts/priceAndFeeCalculator");
|
|
28
|
+
var import_v2 = require("./aeraContracts/v2");
|
|
29
|
+
var import_provisionerV2 = require("./abis/provisionerV2");
|
|
30
|
+
var import_types = require("./types");
|
|
31
|
+
var import_constants = require("../constants");
|
|
32
|
+
const DEPOSIT_REQUESTED_V1_ABI = [
|
|
33
|
+
{
|
|
34
|
+
type: "event",
|
|
35
|
+
name: "DepositRequested",
|
|
36
|
+
inputs: [
|
|
37
|
+
{ type: "address", name: "user", indexed: true },
|
|
38
|
+
{ type: "address", name: "token", indexed: true },
|
|
39
|
+
{ type: "uint256", name: "tokensIn", indexed: false },
|
|
40
|
+
{ type: "uint256", name: "minUnitsOut", indexed: false },
|
|
41
|
+
{ type: "uint256", name: "solverTip", indexed: false },
|
|
42
|
+
{ type: "uint256", name: "deadline", indexed: false },
|
|
43
|
+
{ type: "uint256", name: "maxPriceAge", indexed: false },
|
|
44
|
+
{ type: "bool", name: "isFixedPrice", indexed: false },
|
|
45
|
+
{ type: "bytes32", name: "depositRequestHash", indexed: false }
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
];
|
|
49
|
+
const REDEEM_REQUESTED_V1_ABI = [
|
|
50
|
+
{
|
|
51
|
+
type: "event",
|
|
52
|
+
name: "RedeemRequested",
|
|
53
|
+
inputs: [
|
|
54
|
+
{ type: "address", name: "user", indexed: true },
|
|
55
|
+
{ type: "address", name: "token", indexed: true },
|
|
56
|
+
{ type: "uint256", name: "minTokensOut", indexed: false },
|
|
57
|
+
{ type: "uint256", name: "unitsIn", indexed: false },
|
|
58
|
+
{ type: "uint256", name: "solverTip", indexed: false },
|
|
59
|
+
{ type: "uint256", name: "deadline", indexed: false },
|
|
60
|
+
{ type: "uint256", name: "maxPriceAge", indexed: false },
|
|
61
|
+
{ type: "bool", name: "isFixedPrice", indexed: false },
|
|
62
|
+
{ type: "bytes32", name: "redeemRequestHash", indexed: false }
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
const provisionerV1StateAbi = (0, import_viem.parseAbi)([
|
|
67
|
+
"function asyncDepositHashes(bytes32 asyncDepositHash) view returns (bool exists)",
|
|
68
|
+
"function asyncRedeemHashes(bytes32 asyncRedeemHash) view returns (bool exists)"
|
|
69
|
+
]);
|
|
70
|
+
function dedupeByRequestHash(logs, hashKey) {
|
|
71
|
+
const seen = /* @__PURE__ */ new Set();
|
|
72
|
+
return logs.filter((log) => {
|
|
73
|
+
const hash = log.args[hashKey];
|
|
74
|
+
if (hash == null || seen.has(hash)) return false;
|
|
75
|
+
seen.add(hash);
|
|
76
|
+
return true;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async function queryDeploymentBalance(client, deployment, address) {
|
|
80
|
+
const publicClient = client.getPublicClient(deployment.chainId);
|
|
81
|
+
const token = deployment.supplyToken[0];
|
|
82
|
+
const vaultContract = (0, import_aeraContracts.getMultiDepositorVault)(publicClient, deployment.vaultAddress);
|
|
83
|
+
const [runtime, units] = await Promise.all([
|
|
84
|
+
(0, import_aeraContracts.resolveAeraRuntimeContracts)(publicClient, deployment),
|
|
85
|
+
vaultContract.read.balanceOf([address])
|
|
86
|
+
]);
|
|
87
|
+
const provisionerAddress = runtime.provisioner.address;
|
|
88
|
+
const isV2 = runtime.provisioner.version === import_types.ContractVersion.V2;
|
|
89
|
+
const unitsLockedUntilPromise = isV2 ? (0, import_v2.getUserUnitsRefundableUntil)(publicClient, provisionerAddress, address) : Promise.resolve(void 0);
|
|
90
|
+
const balance = await (0, import_priceAndFeeCalculator.convertUnitsToToken)(
|
|
91
|
+
publicClient,
|
|
92
|
+
runtime.feeCalculator.address,
|
|
93
|
+
runtime.feeCalculator.version,
|
|
94
|
+
deployment.vaultAddress,
|
|
95
|
+
token.address,
|
|
96
|
+
units
|
|
97
|
+
);
|
|
98
|
+
const currentBlock = await publicClient.getBlockNumber();
|
|
99
|
+
const lookback = import_constants.BLOCKS_3_DAYS[deployment.chainId] ?? import_constants.DEFAULT_BLOCKS_3_DAYS;
|
|
100
|
+
const fromBlock = currentBlock > lookback ? currentBlock - lookback : 0n;
|
|
101
|
+
const chunks = [];
|
|
102
|
+
for (let cursor = fromBlock; cursor <= currentBlock; cursor += import_constants.LOG_PAGE_SIZE + 1n) {
|
|
103
|
+
const end = cursor + import_constants.LOG_PAGE_SIZE <= currentBlock ? cursor + import_constants.LOG_PAGE_SIZE : currentBlock;
|
|
104
|
+
chunks.push([cursor, end]);
|
|
105
|
+
}
|
|
106
|
+
const [depositPages, redeemPages] = await Promise.all([
|
|
107
|
+
Promise.all(
|
|
108
|
+
chunks.map(
|
|
109
|
+
([from, to]) => isV2 ? publicClient.getContractEvents({
|
|
110
|
+
address: provisionerAddress,
|
|
111
|
+
abi: import_provisionerV2.provisionerV2Abi,
|
|
112
|
+
eventName: "DepositRequested",
|
|
113
|
+
args: { receiver: address },
|
|
114
|
+
fromBlock: from,
|
|
115
|
+
toBlock: to
|
|
116
|
+
}) : publicClient.getContractEvents({
|
|
117
|
+
address: provisionerAddress,
|
|
118
|
+
abi: DEPOSIT_REQUESTED_V1_ABI,
|
|
119
|
+
eventName: "DepositRequested",
|
|
120
|
+
args: { user: address },
|
|
121
|
+
fromBlock: from,
|
|
122
|
+
toBlock: to
|
|
123
|
+
})
|
|
124
|
+
)
|
|
125
|
+
),
|
|
126
|
+
Promise.all(
|
|
127
|
+
chunks.map(
|
|
128
|
+
([from, to]) => isV2 ? publicClient.getContractEvents({
|
|
129
|
+
address: provisionerAddress,
|
|
130
|
+
abi: import_provisionerV2.provisionerV2Abi,
|
|
131
|
+
eventName: "RedeemRequested",
|
|
132
|
+
args: { user: address },
|
|
133
|
+
fromBlock: from,
|
|
134
|
+
toBlock: to
|
|
135
|
+
}) : publicClient.getContractEvents({
|
|
136
|
+
address: provisionerAddress,
|
|
137
|
+
abi: REDEEM_REQUESTED_V1_ABI,
|
|
138
|
+
eventName: "RedeemRequested",
|
|
139
|
+
args: { user: address },
|
|
140
|
+
fromBlock: from,
|
|
141
|
+
toBlock: to
|
|
142
|
+
})
|
|
143
|
+
)
|
|
144
|
+
)
|
|
145
|
+
]);
|
|
146
|
+
const depositLogs = dedupeByRequestHash(depositPages.flat(), "depositRequestHash");
|
|
147
|
+
const redeemLogs = dedupeByRequestHash(redeemPages.flat(), "redeemRequestHash");
|
|
148
|
+
const pendingChecks = await publicClient.multicall({
|
|
149
|
+
contracts: [
|
|
150
|
+
...depositLogs.map((log) => ({
|
|
151
|
+
address: provisionerAddress,
|
|
152
|
+
abi: isV2 ? import_provisionerV2.provisionerV2Abi : provisionerV1StateAbi,
|
|
153
|
+
functionName: isV2 ? "asyncRequestHashes" : "asyncDepositHashes",
|
|
154
|
+
args: [log.args.depositRequestHash]
|
|
155
|
+
})),
|
|
156
|
+
...redeemLogs.map((log) => ({
|
|
157
|
+
address: provisionerAddress,
|
|
158
|
+
abi: isV2 ? import_provisionerV2.provisionerV2Abi : provisionerV1StateAbi,
|
|
159
|
+
functionName: isV2 ? "asyncRequestHashes" : "asyncRedeemHashes",
|
|
160
|
+
args: [log.args.redeemRequestHash]
|
|
161
|
+
}))
|
|
162
|
+
],
|
|
163
|
+
allowFailure: false
|
|
164
|
+
});
|
|
165
|
+
const depositChecks = pendingChecks.slice(0, depositLogs.length);
|
|
166
|
+
const redeemChecks = pendingChecks.slice(depositLogs.length);
|
|
167
|
+
let pendingDeposit = 0n;
|
|
168
|
+
for (let i = 0; i < depositLogs.length; i++) {
|
|
169
|
+
if (depositChecks[i]) {
|
|
170
|
+
pendingDeposit += depositLogs[i].args.tokensIn ?? 0n;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let pendingWithdrawUnits = 0n;
|
|
174
|
+
for (let i = 0; i < redeemLogs.length; i++) {
|
|
175
|
+
if (redeemChecks[i]) {
|
|
176
|
+
pendingWithdrawUnits += redeemLogs[i].args.unitsIn ?? 0n;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const pendingWithdraw = pendingWithdrawUnits > 0n ? await (0, import_priceAndFeeCalculator.convertUnitsToToken)(
|
|
180
|
+
publicClient,
|
|
181
|
+
runtime.feeCalculator.address,
|
|
182
|
+
runtime.feeCalculator.version,
|
|
183
|
+
deployment.vaultAddress,
|
|
184
|
+
token.address,
|
|
185
|
+
pendingWithdrawUnits
|
|
186
|
+
) : 0n;
|
|
187
|
+
const unitsLockedUntil = await unitsLockedUntilPromise;
|
|
188
|
+
return {
|
|
189
|
+
chain: import_constants.CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,
|
|
190
|
+
chainId: deployment.chainId,
|
|
191
|
+
token: token.address,
|
|
192
|
+
decimals: token.decimals,
|
|
193
|
+
pendingDeposit,
|
|
194
|
+
balance,
|
|
195
|
+
pendingWithdraw,
|
|
196
|
+
...unitsLockedUntil !== void 0 ? { unitsLockedUntil } : {}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
async function getUserCurrentBalance(client, params) {
|
|
200
|
+
const manifest = await client.manifest;
|
|
201
|
+
const vaultInfo = manifest.vaults.find((v) => v.vaultId === params.vaultId);
|
|
202
|
+
if (!vaultInfo) throw new import_errors.VaultNotFoundError(params.vaultId);
|
|
203
|
+
const evmDeployments = vaultInfo.deployments.filter(
|
|
204
|
+
(d) => d.chain === "evm" && d.vaultType === "multi-depositor"
|
|
205
|
+
);
|
|
206
|
+
if (vaultInfo.protocol !== "aera" || evmDeployments.length === 0) {
|
|
207
|
+
throw new import_errors.UnsupportedProtocolError(vaultInfo.protocol);
|
|
208
|
+
}
|
|
209
|
+
if (params.chainId !== void 0) {
|
|
210
|
+
const deployment = evmDeployments.find((d) => d.chainId === params.chainId);
|
|
211
|
+
if (!deployment) {
|
|
212
|
+
throw new import_errors.ChainMismatchError(
|
|
213
|
+
`${params.chainId}`,
|
|
214
|
+
evmDeployments.map((d) => `${d.chainId}`).join(", ")
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
return [await queryDeploymentBalance(client, deployment, params.address)];
|
|
218
|
+
}
|
|
219
|
+
return Promise.all(evmDeployments.map((d) => queryDeploymentBalance(client, d, params.address)));
|
|
220
|
+
}
|
|
221
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
222
|
+
0 && (module.exports = {
|
|
223
|
+
getUserCurrentBalance
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=userCurrentBalance.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/evm/userCurrentBalance.ts"],
|
|
4
|
+
"sourcesContent": ["import { parseAbi, type Address } from 'viem';\nimport type { GauntletClient } from '../client';\nimport type { EvmVaultDeployment } from './types';\nimport { ChainMismatchError, UnsupportedProtocolError, VaultNotFoundError } from '../errors';\nimport { getMultiDepositorVault, resolveAeraRuntimeContracts } from './aeraContracts';\nimport { convertUnitsToToken } from './aeraContracts/priceAndFeeCalculator';\nimport { getUserUnitsRefundableUntil } from './aeraContracts/v2';\nimport { provisionerV2Abi } from './abis/provisionerV2';\nimport { ContractVersion } from './types';\nimport { BLOCKS_3_DAYS, CHAIN_NAMES, DEFAULT_BLOCKS_3_DAYS, LOG_PAGE_SIZE } from '../constants';\n\n// Inline as-const ABI items give viem full type inference for args and return types.\nconst DEPOSIT_REQUESTED_V1_ABI = [\n {\n type: 'event',\n name: 'DepositRequested',\n inputs: [\n { type: 'address', name: 'user', indexed: true },\n { type: 'address', name: 'token', indexed: true },\n { type: 'uint256', name: 'tokensIn', indexed: false },\n { type: 'uint256', name: 'minUnitsOut', indexed: false },\n { type: 'uint256', name: 'solverTip', indexed: false },\n { type: 'uint256', name: 'deadline', indexed: false },\n { type: 'uint256', name: 'maxPriceAge', indexed: false },\n { type: 'bool', name: 'isFixedPrice', indexed: false },\n { type: 'bytes32', name: 'depositRequestHash', indexed: false },\n ],\n },\n] as const;\n\nconst REDEEM_REQUESTED_V1_ABI = [\n {\n type: 'event',\n name: 'RedeemRequested',\n inputs: [\n { type: 'address', name: 'user', indexed: true },\n { type: 'address', name: 'token', indexed: true },\n { type: 'uint256', name: 'minTokensOut', indexed: false },\n { type: 'uint256', name: 'unitsIn', indexed: false },\n { type: 'uint256', name: 'solverTip', indexed: false },\n { type: 'uint256', name: 'deadline', indexed: false },\n { type: 'uint256', name: 'maxPriceAge', indexed: false },\n { type: 'bool', name: 'isFixedPrice', indexed: false },\n { type: 'bytes32', name: 'redeemRequestHash', indexed: false },\n ],\n },\n] as const;\n\nconst provisionerV1StateAbi = parseAbi([\n 'function asyncDepositHashes(bytes32 asyncDepositHash) view returns (bool exists)',\n 'function asyncRedeemHashes(bytes32 asyncRedeemHash) view returns (bool exists)',\n]);\n\nexport interface UserCurrentBalanceParams {\n vaultId: string;\n address: Address;\n chainId?: number;\n}\n\nexport interface UserCurrentBalance {\n /** Chain identifier, e.g. \"base\" */\n chain: string;\n /** EVM chain id of the deployment, e.g. 8453 */\n chainId: number;\n token: Address;\n decimals: number;\n /** Assets queued via async deposit, not yet earning */\n pendingDeposit: bigint;\n /** Assets actively earning in the vault */\n balance: bigint;\n /** Assets queued via async withdraw, not yet claimable */\n pendingWithdraw: bigint;\n /** Timestamp until which this account cannot redeem vault units. */\n unitsLockedUntil?: bigint;\n}\n\n// V2 legacy wrapper calls can emit both receiver-aware and legacy events for one request.\n// Keep one row per request hash before state checks and summing pending amounts.\nfunction dedupeByRequestHash<TLog extends { args: { [key: string]: unknown } }>(\n logs: TLog[],\n hashKey: 'depositRequestHash' | 'redeemRequestHash'\n): TLog[] {\n const seen = new Set<unknown>();\n\n return logs.filter((log) => {\n const hash = log.args[hashKey];\n // Drop malformed events and duplicates so one pending request cannot be counted twice.\n if (hash == null || seen.has(hash)) return false;\n seen.add(hash);\n return true;\n });\n}\n\nasync function queryDeploymentBalance(\n client: GauntletClient,\n deployment: EvmVaultDeployment,\n address: Address\n): Promise<UserCurrentBalance> {\n const publicClient = client.getPublicClient(deployment.chainId);\n const token = deployment.supplyToken[0];\n\n const vaultContract = getMultiDepositorVault(publicClient, deployment.vaultAddress);\n const [runtime, units] = await Promise.all([\n resolveAeraRuntimeContracts(publicClient, deployment),\n vaultContract.read.balanceOf([address]),\n ]);\n const provisionerAddress = runtime.provisioner.address;\n const isV2 = runtime.provisioner.version === ContractVersion.V2;\n const unitsLockedUntilPromise = isV2\n ? getUserUnitsRefundableUntil(publicClient, provisionerAddress, address)\n : Promise.resolve(undefined);\n\n const balance = await convertUnitsToToken(\n publicClient,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n deployment.vaultAddress,\n token.address,\n units\n );\n\n // Look back ~3 days for pending async requests\n const currentBlock = await publicClient.getBlockNumber();\n const lookback = BLOCKS_3_DAYS[deployment.chainId] ?? DEFAULT_BLOCKS_3_DAYS;\n const fromBlock = currentBlock > lookback ? currentBlock - lookback : 0n;\n\n // Compute block-range chunks to stay within the 10,000-block RPC limit, then fetch in parallel\n const chunks: [bigint, bigint][] = [];\n for (let cursor = fromBlock; cursor <= currentBlock; cursor += LOG_PAGE_SIZE + 1n) {\n const end = cursor + LOG_PAGE_SIZE <= currentBlock ? cursor + LOG_PAGE_SIZE : currentBlock;\n chunks.push([cursor, end]);\n }\n\n const [depositPages, redeemPages] = await Promise.all([\n Promise.all(\n chunks.map(([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'DepositRequested',\n args: { receiver: address },\n fromBlock: from,\n toBlock: to,\n })\n : publicClient.getContractEvents({\n address: provisionerAddress,\n abi: DEPOSIT_REQUESTED_V1_ABI,\n eventName: 'DepositRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n )\n ),\n Promise.all(\n chunks.map(([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'RedeemRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n : publicClient.getContractEvents({\n address: provisionerAddress,\n abi: REDEEM_REQUESTED_V1_ABI,\n eventName: 'RedeemRequested',\n args: { user: address },\n fromBlock: from,\n toBlock: to,\n })\n )\n ),\n ]);\n\n const depositLogs = dedupeByRequestHash(depositPages.flat(), 'depositRequestHash');\n const redeemLogs = dedupeByRequestHash(redeemPages.flat(), 'redeemRequestHash');\n\n // Check which requests are still pending on-chain via a single multicall\n const pendingChecks = await publicClient.multicall({\n contracts: [\n ...depositLogs.map((log) => ({\n address: provisionerAddress,\n abi: isV2 ? provisionerV2Abi : provisionerV1StateAbi,\n functionName: isV2 ? ('asyncRequestHashes' as const) : ('asyncDepositHashes' as const),\n args: [log.args.depositRequestHash!] as const,\n })),\n ...redeemLogs.map((log) => ({\n address: provisionerAddress,\n abi: isV2 ? provisionerV2Abi : provisionerV1StateAbi,\n functionName: isV2 ? ('asyncRequestHashes' as const) : ('asyncRedeemHashes' as const),\n args: [log.args.redeemRequestHash!] as const,\n })),\n ],\n allowFailure: false,\n });\n\n const depositChecks = pendingChecks.slice(0, depositLogs.length);\n const redeemChecks = pendingChecks.slice(depositLogs.length);\n\n let pendingDeposit = 0n;\n for (let i = 0; i < depositLogs.length; i++) {\n if (depositChecks[i]) {\n pendingDeposit += depositLogs[i].args.tokensIn ?? 0n;\n }\n }\n\n let pendingWithdrawUnits = 0n;\n for (let i = 0; i < redeemLogs.length; i++) {\n if (redeemChecks[i]) {\n pendingWithdrawUnits += redeemLogs[i].args.unitsIn ?? 0n;\n }\n }\n\n const pendingWithdraw =\n pendingWithdrawUnits > 0n\n ? await convertUnitsToToken(\n publicClient,\n runtime.feeCalculator.address,\n runtime.feeCalculator.version,\n deployment.vaultAddress,\n token.address,\n pendingWithdrawUnits\n )\n : 0n;\n const unitsLockedUntil = await unitsLockedUntilPromise;\n\n return {\n chain: CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,\n chainId: deployment.chainId,\n token: token.address,\n decimals: token.decimals,\n pendingDeposit,\n balance,\n pendingWithdraw,\n ...(unitsLockedUntil !== undefined ? { unitsLockedUntil } : {}),\n };\n}\n\n/**\n * Returns the current balance breakdown for a user across all EVM deployments of a vault.\n *\n * Queries the vault's on-chain state to split the user's position into three buckets:\n * - `balance` \u2014 assets actively earning inside the vault (converted from vault units to tokens).\n * - `pendingDeposit` \u2014 tokens submitted via async deposit but not yet processed by a solver.\n * - `pendingWithdraw` \u2014 vault units locked in a pending async redeem request (converted to tokens).\n *\n * Only supported for Aera multi-depositor vaults. Pending amounts are detected by scanning\n * the last ~3 days of provisioner events and cross-checking hash existence on-chain.\n *\n * @param client - A configured `GauntletClient` instance with an EVM public client for each\n * chain the vault is deployed on.\n * @param params - Query parameters including `vaultId`, the user `address`, and an optional\n * `chainId` to limit the query to a single deployment.\n * @returns One `UserCurrentBalance` entry per chain queried.\n *\n * @throws {VaultNotFoundError} If the vault ID is not found in the manifest.\n * @throws {UnsupportedProtocolError} If the vault is not an Aera multi-depositor vault.\n * @throws {ChainMismatchError} If `chainId` is specified but no deployment exists for that chain.\n *\n * @example\n * ```ts\n * const balances = await getUserCurrentBalance(client, {\n * vaultId: 'baseUsdcPrime',\n * address: '0xYourWalletAddress',\n * });\n * // [{ chain: 'base', chainId: 8453, token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]\n * ```\n */\nexport async function getUserCurrentBalance(\n client: GauntletClient,\n params: UserCurrentBalanceParams\n): Promise<UserCurrentBalance[]> {\n const manifest = await client.manifest;\n const vaultInfo = manifest.vaults.find((v) => v.vaultId === params.vaultId);\n if (!vaultInfo) throw new VaultNotFoundError(params.vaultId);\n\n const evmDeployments = vaultInfo.deployments.filter(\n (d): d is EvmVaultDeployment => d.chain === 'evm' && d.vaultType === 'multi-depositor'\n );\n\n if (vaultInfo.protocol !== 'aera' || evmDeployments.length === 0) {\n throw new UnsupportedProtocolError(vaultInfo.protocol);\n }\n\n if (params.chainId !== undefined) {\n const deployment = evmDeployments.find((d) => d.chainId === params.chainId);\n if (!deployment) {\n throw new ChainMismatchError(\n `${params.chainId}`,\n evmDeployments.map((d) => `${d.chainId}`).join(', ')\n );\n }\n return [await queryDeploymentBalance(client, deployment, params.address)];\n }\n\n return Promise.all(evmDeployments.map((d) => queryDeploymentBalance(client, d, params.address)));\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAuC;AAGvC,oBAAiF;AACjF,2BAAoE;AACpE,mCAAoC;AACpC,gBAA4C;AAC5C,2BAAiC;AACjC,mBAAgC;AAChC,uBAAiF;AAGjF,MAAM,2BAA2B;AAAA,EAC/B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,SAAS,SAAS,KAAK;AAAA,MAChD,EAAE,MAAM,WAAW,MAAM,YAAY,SAAS,MAAM;AAAA,MACpD,EAAE,MAAM,WAAW,MAAM,eAAe,SAAS,MAAM;AAAA,MACvD,EAAE,MAAM,WAAW,MAAM,aAAa,SAAS,MAAM;AAAA,MACrD,EAAE,MAAM,WAAW,MAAM,YAAY,SAAS,MAAM;AAAA,MACpD,EAAE,MAAM,WAAW,MAAM,eAAe,SAAS,MAAM;AAAA,MACvD,EAAE,MAAM,QAAQ,MAAM,gBAAgB,SAAS,MAAM;AAAA,MACrD,EAAE,MAAM,WAAW,MAAM,sBAAsB,SAAS,MAAM;AAAA,IAChE;AAAA,EACF;AACF;AAEA,MAAM,0BAA0B;AAAA,EAC9B;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,WAAW,MAAM,SAAS,SAAS,KAAK;AAAA,MAChD,EAAE,MAAM,WAAW,MAAM,gBAAgB,SAAS,MAAM;AAAA,MACxD,EAAE,MAAM,WAAW,MAAM,WAAW,SAAS,MAAM;AAAA,MACnD,EAAE,MAAM,WAAW,MAAM,aAAa,SAAS,MAAM;AAAA,MACrD,EAAE,MAAM,WAAW,MAAM,YAAY,SAAS,MAAM;AAAA,MACpD,EAAE,MAAM,WAAW,MAAM,eAAe,SAAS,MAAM;AAAA,MACvD,EAAE,MAAM,QAAQ,MAAM,gBAAgB,SAAS,MAAM;AAAA,MACrD,EAAE,MAAM,WAAW,MAAM,qBAAqB,SAAS,MAAM;AAAA,IAC/D;AAAA,EACF;AACF;AAEA,MAAM,4BAAwB,sBAAS;AAAA,EACrC;AAAA,EACA;AACF,CAAC;AA2BD,SAAS,oBACP,MACA,SACQ;AACR,QAAM,OAAO,oBAAI,IAAa;AAE9B,SAAO,KAAK,OAAO,CAAC,QAAQ;AAC1B,UAAM,OAAO,IAAI,KAAK,OAAO;AAE7B,QAAI,QAAQ,QAAQ,KAAK,IAAI,IAAI,EAAG,QAAO;AAC3C,SAAK,IAAI,IAAI;AACb,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAe,uBACb,QACA,YACA,SAC6B;AAC7B,QAAM,eAAe,OAAO,gBAAgB,WAAW,OAAO;AAC9D,QAAM,QAAQ,WAAW,YAAY,CAAC;AAEtC,QAAM,oBAAgB,6CAAuB,cAAc,WAAW,YAAY;AAClF,QAAM,CAAC,SAAS,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,QACzC,kDAA4B,cAAc,UAAU;AAAA,IACpD,cAAc,KAAK,UAAU,CAAC,OAAO,CAAC;AAAA,EACxC,CAAC;AACD,QAAM,qBAAqB,QAAQ,YAAY;AAC/C,QAAM,OAAO,QAAQ,YAAY,YAAY,6BAAgB;AAC7D,QAAM,0BAA0B,WAC5B,uCAA4B,cAAc,oBAAoB,OAAO,IACrE,QAAQ,QAAQ,MAAS;AAE7B,QAAM,UAAU,UAAM;AAAA,IACpB;AAAA,IACA,QAAQ,cAAc;AAAA,IACtB,QAAQ,cAAc;AAAA,IACtB,WAAW;AAAA,IACX,MAAM;AAAA,IACN;AAAA,EACF;AAGA,QAAM,eAAe,MAAM,aAAa,eAAe;AACvD,QAAM,WAAW,+BAAc,WAAW,OAAO,KAAK;AACtD,QAAM,YAAY,eAAe,WAAW,eAAe,WAAW;AAGtE,QAAM,SAA6B,CAAC;AACpC,WAAS,SAAS,WAAW,UAAU,cAAc,UAAU,iCAAgB,IAAI;AACjF,UAAM,MAAM,SAAS,kCAAiB,eAAe,SAAS,iCAAgB;AAC9E,WAAO,KAAK,CAAC,QAAQ,GAAG,CAAC;AAAA,EAC3B;AAEA,QAAM,CAAC,cAAc,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,IACpD,QAAQ;AAAA,MACN,OAAO;AAAA,QAAI,CAAC,CAAC,MAAM,EAAE,MACnB,OACI,aAAa,kBAAkB;AAAA,UAC7B,SAAS;AAAA,UACT,KAAK;AAAA,UACL,WAAW;AAAA,UACX,MAAM,EAAE,UAAU,QAAQ;AAAA,UAC1B,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC,IACD,aAAa,kBAAkB;AAAA,UAC7B,SAAS;AAAA,UACT,KAAK;AAAA,UACL,WAAW;AAAA,UACX,MAAM,EAAE,MAAM,QAAQ;AAAA,UACtB,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC;AAAA,MACP;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QAAI,CAAC,CAAC,MAAM,EAAE,MACnB,OACI,aAAa,kBAAkB;AAAA,UAC7B,SAAS;AAAA,UACT,KAAK;AAAA,UACL,WAAW;AAAA,UACX,MAAM,EAAE,MAAM,QAAQ;AAAA,UACtB,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC,IACD,aAAa,kBAAkB;AAAA,UAC7B,SAAS;AAAA,UACT,KAAK;AAAA,UACL,WAAW;AAAA,UACX,MAAM,EAAE,MAAM,QAAQ;AAAA,UACtB,WAAW;AAAA,UACX,SAAS;AAAA,QACX,CAAC;AAAA,MACP;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,cAAc,oBAAoB,aAAa,KAAK,GAAG,oBAAoB;AACjF,QAAM,aAAa,oBAAoB,YAAY,KAAK,GAAG,mBAAmB;AAG9E,QAAM,gBAAgB,MAAM,aAAa,UAAU;AAAA,IACjD,WAAW;AAAA,MACT,GAAG,YAAY,IAAI,CAAC,SAAS;AAAA,QAC3B,SAAS;AAAA,QACT,KAAK,OAAO,wCAAmB;AAAA,QAC/B,cAAc,OAAQ,uBAAkC;AAAA,QACxD,MAAM,CAAC,IAAI,KAAK,kBAAmB;AAAA,MACrC,EAAE;AAAA,MACF,GAAG,WAAW,IAAI,CAAC,SAAS;AAAA,QAC1B,SAAS;AAAA,QACT,KAAK,OAAO,wCAAmB;AAAA,QAC/B,cAAc,OAAQ,uBAAkC;AAAA,QACxD,MAAM,CAAC,IAAI,KAAK,iBAAkB;AAAA,MACpC,EAAE;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,EAChB,CAAC;AAED,QAAM,gBAAgB,cAAc,MAAM,GAAG,YAAY,MAAM;AAC/D,QAAM,eAAe,cAAc,MAAM,YAAY,MAAM;AAE3D,MAAI,iBAAiB;AACrB,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,QAAI,cAAc,CAAC,GAAG;AACpB,wBAAkB,YAAY,CAAC,EAAE,KAAK,YAAY;AAAA,IACpD;AAAA,EACF;AAEA,MAAI,uBAAuB;AAC3B,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,QAAI,aAAa,CAAC,GAAG;AACnB,8BAAwB,WAAW,CAAC,EAAE,KAAK,WAAW;AAAA,IACxD;AAAA,EACF;AAEA,QAAM,kBACJ,uBAAuB,KACnB,UAAM;AAAA,IACJ;AAAA,IACA,QAAQ,cAAc;AAAA,IACtB,QAAQ,cAAc;AAAA,IACtB,WAAW;AAAA,IACX,MAAM;AAAA,IACN;AAAA,EACF,IACA;AACN,QAAM,mBAAmB,MAAM;AAE/B,SAAO;AAAA,IACL,OAAO,6BAAY,WAAW,OAAO,KAAK,SAAS,WAAW,OAAO;AAAA,IACrE,SAAS,WAAW;AAAA,IACpB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,qBAAqB,SAAY,EAAE,iBAAiB,IAAI,CAAC;AAAA,EAC/D;AACF;AAgCA,eAAsB,sBACpB,QACA,QAC+B;AAC/B,QAAM,WAAW,MAAM,OAAO;AAC9B,QAAM,YAAY,SAAS,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO,OAAO;AAC1E,MAAI,CAAC,UAAW,OAAM,IAAI,iCAAmB,OAAO,OAAO;AAE3D,QAAM,iBAAiB,UAAU,YAAY;AAAA,IAC3C,CAAC,MAA+B,EAAE,UAAU,SAAS,EAAE,cAAc;AAAA,EACvE;AAEA,MAAI,UAAU,aAAa,UAAU,eAAe,WAAW,GAAG;AAChE,UAAM,IAAI,uCAAyB,UAAU,QAAQ;AAAA,EACvD;AAEA,MAAI,OAAO,YAAY,QAAW;AAChC,UAAM,aAAa,eAAe,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO,OAAO;AAC1E,QAAI,CAAC,YAAY;AACf,YAAM,IAAI;AAAA,QACR,GAAG,OAAO,OAAO;AAAA,QACjB,eAAe,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;AAAA,MACrD;AAAA,IACF;AACA,WAAO,CAAC,MAAM,uBAAuB,QAAQ,YAAY,OAAO,OAAO,CAAC;AAAA,EAC1E;AAEA,SAAO,QAAQ,IAAI,eAAe,IAAI,CAAC,MAAM,uBAAuB,QAAQ,GAAG,OAAO,OAAO,CAAC,CAAC;AACjG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { GauntletClient } from "../client.js";
|
|
2
|
+
import type { VaultDeployment, VaultInfo } from "./types.js";
|
|
3
|
+
export declare enum VaultId {
|
|
4
|
+
BaseUsdcPrime = "baseUsdcPrime",
|
|
5
|
+
EthUsdcPrime = "ethUsdcPrime",
|
|
6
|
+
AeraUsdAlpha = "gtusda",
|
|
7
|
+
EthUsdcPrimeV2 = "ethUsdcPrimeV2",
|
|
8
|
+
AeraLeveredFalconX = "gpaafalconx",
|
|
9
|
+
AeraSyrupUsdc = "gpsyrupusdc",
|
|
10
|
+
AeraBtcYield = "gtbtc",
|
|
11
|
+
AeraLeveredUscc = "gtuscc",
|
|
12
|
+
AeraLend = "gtlend",
|
|
13
|
+
AeraKastEth = "kasteth"
|
|
14
|
+
}
|
|
15
|
+
export interface VaultFilter {
|
|
16
|
+
/** Filter to vaults that have at least one EVM deployment on this chainId. */
|
|
17
|
+
chainId?: number;
|
|
18
|
+
protocol?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns vaults from the bundled manifest, optionally filtered by chain and/or protocol.
|
|
22
|
+
* Does not make any network requests.
|
|
23
|
+
*
|
|
24
|
+
* @param client - A configured `GauntletClient` instance.
|
|
25
|
+
* @param filter - Optional filter criteria. `chainId` restricts results to vaults that have
|
|
26
|
+
* at least one EVM deployment on that chain. `protocol` restricts results to a specific
|
|
27
|
+
* protocol (e.g. `'aera'`, `'morpho'`).
|
|
28
|
+
* @returns Array of `VaultInfo` objects matching the filter, or all vaults if no filter is given.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* // All vaults on Base
|
|
33
|
+
* const vaults = await getVaults(client, { chainId: base.id });
|
|
34
|
+
*
|
|
35
|
+
* // All Aera vaults
|
|
36
|
+
* const aeraVaults = await getVaults(client, { protocol: 'aera' });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function getVaults(client: GauntletClient, filter?: VaultFilter): Promise<VaultInfo[]>;
|
|
40
|
+
export declare function resolveVault(client: GauntletClient, vaultId: string, chainId?: string | number): Promise<{
|
|
41
|
+
vault: VaultDeployment;
|
|
42
|
+
protocol: string;
|
|
43
|
+
} | undefined>;
|
|
44
|
+
//# sourceMappingURL=vaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaults.d.ts","sourceRoot":"","sources":["../../../src/evm/vaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAkB;AAChD,OAAO,KAAK,EAAsB,eAAe,EAAE,SAAS,EAAE,mBAAgB;AAG9E,oBAAY,OAAO;IACjB,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,WAAW;IACvB,cAAc,mBAAmB;IACjC,kBAAkB,gBAAgB;IAClC,aAAa,gBAAgB;IAC7B,YAAY,UAAU;IACtB,eAAe,WAAW;IAC1B,QAAQ,WAAW;IACnB,WAAW,YAAY;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAetB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CA0BnE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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 vaults_exports = {};
|
|
20
|
+
__export(vaults_exports, {
|
|
21
|
+
VaultId: () => VaultId,
|
|
22
|
+
getVaults: () => getVaults,
|
|
23
|
+
resolveVault: () => resolveVault
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(vaults_exports);
|
|
26
|
+
var import_chains = require("viem/chains");
|
|
27
|
+
var import_errors = require("../errors");
|
|
28
|
+
var VaultId = /* @__PURE__ */ ((VaultId2) => {
|
|
29
|
+
VaultId2["BaseUsdcPrime"] = "baseUsdcPrime";
|
|
30
|
+
VaultId2["EthUsdcPrime"] = "ethUsdcPrime";
|
|
31
|
+
VaultId2["AeraUsdAlpha"] = "gtusda";
|
|
32
|
+
VaultId2["EthUsdcPrimeV2"] = "ethUsdcPrimeV2";
|
|
33
|
+
VaultId2["AeraLeveredFalconX"] = "gpaafalconx";
|
|
34
|
+
VaultId2["AeraSyrupUsdc"] = "gpsyrupusdc";
|
|
35
|
+
VaultId2["AeraBtcYield"] = "gtbtc";
|
|
36
|
+
VaultId2["AeraLeveredUscc"] = "gtuscc";
|
|
37
|
+
VaultId2["AeraLend"] = "gtlend";
|
|
38
|
+
VaultId2["AeraKastEth"] = "kasteth";
|
|
39
|
+
return VaultId2;
|
|
40
|
+
})(VaultId || {});
|
|
41
|
+
async function getVaults(client, filter) {
|
|
42
|
+
const manifest = await client.manifest;
|
|
43
|
+
let vaults = manifest.vaults;
|
|
44
|
+
if (filter?.chainId) {
|
|
45
|
+
vaults = vaults.filter(
|
|
46
|
+
(v) => v.deployments.some((d) => d.chain === "evm" && d.chainId === filter.chainId)
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (filter?.protocol) {
|
|
50
|
+
vaults = vaults.filter((v) => v.protocol === filter.protocol);
|
|
51
|
+
}
|
|
52
|
+
return vaults;
|
|
53
|
+
}
|
|
54
|
+
async function resolveVault(client, vaultId, chainId) {
|
|
55
|
+
const manifest = await client.manifest;
|
|
56
|
+
const vaultInfo = manifest.vaults.find((v) => v.vaultId === vaultId);
|
|
57
|
+
if (!vaultInfo) return void 0;
|
|
58
|
+
const evmDeployments = vaultInfo.deployments.filter(
|
|
59
|
+
(d) => d.chain === "evm"
|
|
60
|
+
);
|
|
61
|
+
if (evmDeployments.length === 1) {
|
|
62
|
+
if (chainId !== void 0 && evmDeployments[0].chainId !== chainId) {
|
|
63
|
+
throw new import_errors.ChainMismatchError(`${chainId}`, `${evmDeployments[0].chainId}`);
|
|
64
|
+
}
|
|
65
|
+
return { vault: evmDeployments[0], protocol: vaultInfo.protocol };
|
|
66
|
+
}
|
|
67
|
+
const defaultChainId = chainId ?? import_chains.base.id;
|
|
68
|
+
const deployment = evmDeployments.find((d) => d.chainId === defaultChainId);
|
|
69
|
+
if (!deployment) return void 0;
|
|
70
|
+
return { vault: deployment, protocol: vaultInfo.protocol };
|
|
71
|
+
}
|
|
72
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
73
|
+
0 && (module.exports = {
|
|
74
|
+
VaultId,
|
|
75
|
+
getVaults,
|
|
76
|
+
resolveVault
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=vaults.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/evm/vaults.ts"],
|
|
4
|
+
"sourcesContent": ["import { base } from 'viem/chains';\nimport type { GauntletClient } from '../client';\nimport type { EvmVaultDeployment, VaultDeployment, VaultInfo } from './types';\nimport { ChainMismatchError } from '../errors';\n\nexport enum VaultId {\n BaseUsdcPrime = 'baseUsdcPrime',\n EthUsdcPrime = 'ethUsdcPrime',\n AeraUsdAlpha = 'gtusda',\n EthUsdcPrimeV2 = 'ethUsdcPrimeV2',\n AeraLeveredFalconX = 'gpaafalconx',\n AeraSyrupUsdc = 'gpsyrupusdc',\n AeraBtcYield = 'gtbtc',\n AeraLeveredUscc = 'gtuscc',\n AeraLend = 'gtlend',\n AeraKastEth = 'kasteth',\n}\n\nexport interface VaultFilter {\n /** Filter to vaults that have at least one EVM deployment on this chainId. */\n chainId?: number;\n protocol?: string;\n}\n\n/**\n * Returns vaults from the bundled manifest, optionally filtered by chain and/or protocol.\n * Does not make any network requests.\n *\n * @param client - A configured `GauntletClient` instance.\n * @param filter - Optional filter criteria. `chainId` restricts results to vaults that have\n * at least one EVM deployment on that chain. `protocol` restricts results to a specific\n * protocol (e.g. `'aera'`, `'morpho'`).\n * @returns Array of `VaultInfo` objects matching the filter, or all vaults if no filter is given.\n *\n * @example\n * ```ts\n * // All vaults on Base\n * const vaults = await getVaults(client, { chainId: base.id });\n *\n * // All Aera vaults\n * const aeraVaults = await getVaults(client, { protocol: 'aera' });\n * ```\n */\nexport async function getVaults(\n client: GauntletClient,\n filter?: VaultFilter\n): Promise<VaultInfo[]> {\n const manifest = await client.manifest;\n let vaults = manifest.vaults;\n\n if (filter?.chainId) {\n vaults = vaults.filter((v) =>\n v.deployments.some((d) => d.chain === 'evm' && d.chainId === filter.chainId)\n );\n }\n\n if (filter?.protocol) {\n vaults = vaults.filter((v) => v.protocol === filter.protocol);\n }\n\n return vaults;\n}\n\nexport async function resolveVault(\n client: GauntletClient,\n vaultId: string,\n chainId?: string | number\n): Promise<{ vault: VaultDeployment; protocol: string } | undefined> {\n const manifest = await client.manifest;\n const vaultInfo = manifest.vaults.find((v) => v.vaultId === vaultId);\n if (!vaultInfo) return undefined;\n\n const evmDeployments = vaultInfo.deployments.filter(\n (d): d is EvmVaultDeployment => d.chain === 'evm'\n );\n\n if (evmDeployments.length === 1) {\n // if user specifies a chain we need to make sure they get it\n if (chainId !== undefined && evmDeployments[0].chainId !== chainId) {\n throw new ChainMismatchError(`${chainId}`, `${evmDeployments[0].chainId}`);\n }\n // otherwise they're expected to know what chain\n // the single chain vault they request is on\n return { vault: evmDeployments[0], protocol: vaultInfo.protocol };\n }\n\n // now we default to base\n const defaultChainId = chainId ?? base.id;\n\n const deployment = evmDeployments.find((d) => d.chainId === defaultChainId);\n if (!deployment) return undefined;\n\n return { vault: deployment, protocol: vaultInfo.protocol };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAqB;AAGrB,oBAAmC;AAE5B,IAAK,UAAL,kBAAKA,aAAL;AACL,EAAAA,SAAA,mBAAgB;AAChB,EAAAA,SAAA,kBAAe;AACf,EAAAA,SAAA,kBAAe;AACf,EAAAA,SAAA,oBAAiB;AACjB,EAAAA,SAAA,wBAAqB;AACrB,EAAAA,SAAA,mBAAgB;AAChB,EAAAA,SAAA,kBAAe;AACf,EAAAA,SAAA,qBAAkB;AAClB,EAAAA,SAAA,cAAW;AACX,EAAAA,SAAA,iBAAc;AAVJ,SAAAA;AAAA,GAAA;AAsCZ,eAAsB,UACpB,QACA,QACsB;AACtB,QAAM,WAAW,MAAM,OAAO;AAC9B,MAAI,SAAS,SAAS;AAEtB,MAAI,QAAQ,SAAS;AACnB,aAAS,OAAO;AAAA,MAAO,CAAC,MACtB,EAAE,YAAY,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS,EAAE,YAAY,OAAO,OAAO;AAAA,IAC7E;AAAA,EACF;AAEA,MAAI,QAAQ,UAAU;AACpB,aAAS,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,OAAO,QAAQ;AAAA,EAC9D;AAEA,SAAO;AACT;AAEA,eAAsB,aACpB,QACA,SACA,SACmE;AACnE,QAAM,WAAW,MAAM,OAAO;AAC9B,QAAM,YAAY,SAAS,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO;AACnE,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,iBAAiB,UAAU,YAAY;AAAA,IAC3C,CAAC,MAA+B,EAAE,UAAU;AAAA,EAC9C;AAEA,MAAI,eAAe,WAAW,GAAG;AAE/B,QAAI,YAAY,UAAa,eAAe,CAAC,EAAE,YAAY,SAAS;AAClE,YAAM,IAAI,iCAAmB,GAAG,OAAO,IAAI,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE;AAAA,IAC3E;AAGA,WAAO,EAAE,OAAO,eAAe,CAAC,GAAG,UAAU,UAAU,SAAS;AAAA,EAClE;AAGA,QAAM,iBAAiB,WAAW,mBAAK;AAEvC,QAAM,aAAa,eAAe,KAAK,CAAC,MAAM,EAAE,YAAY,cAAc;AAC1E,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO,EAAE,OAAO,YAAY,UAAU,UAAU,SAAS;AAC3D;",
|
|
6
|
+
"names": ["VaultId"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { GauntletClient } from "../client.js";
|
|
3
|
+
import type { SyncWithdrawQuoteBounds } from "./withdrawQuote.js";
|
|
4
|
+
import { PreparedTx } from "../attribution/index.js";
|
|
5
|
+
export type EvmWithdrawParams = {
|
|
6
|
+
vaultId: string;
|
|
7
|
+
chainId?: number;
|
|
8
|
+
assetSymbol?: string;
|
|
9
|
+
/** Request async (queued) or sync withdraw. Availability is read from live vault configuration. */
|
|
10
|
+
depositMode?: string;
|
|
11
|
+
receiver?: Address;
|
|
12
|
+
/** Slippage tolerance in basis points (e.g. 100 = 1%). Defaults to 100. */
|
|
13
|
+
slippageBps?: number;
|
|
14
|
+
/** Solver tip passed to async Aera provisioner requests. Defaults to 0. */
|
|
15
|
+
solverTip?: bigint;
|
|
16
|
+
/** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */
|
|
17
|
+
maxPriceAge?: bigint;
|
|
18
|
+
/**
|
|
19
|
+
* Current sync quote bounds to pin instant withdraw transaction construction.
|
|
20
|
+
* Supplying bounds implies `depositMode: 'sync'`; explicit async requests are rejected.
|
|
21
|
+
*/
|
|
22
|
+
syncWithdrawQuote?: SyncWithdrawQuoteBounds;
|
|
23
|
+
} & ({
|
|
24
|
+
shares: bigint;
|
|
25
|
+
amount?: never;
|
|
26
|
+
entireAmount?: never;
|
|
27
|
+
} | {
|
|
28
|
+
amount: bigint;
|
|
29
|
+
shares?: never;
|
|
30
|
+
entireAmount?: never;
|
|
31
|
+
} | {
|
|
32
|
+
account?: Address;
|
|
33
|
+
entireAmount: true;
|
|
34
|
+
shares?: never;
|
|
35
|
+
amount?: never;
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Builds the ordered list of EVM transactions required to withdraw from a Gauntlet vault.
|
|
39
|
+
*
|
|
40
|
+
* Specify the withdrawal amount as one of: `shares` (vault units), `amount` (underlying
|
|
41
|
+
* token amount), or `entireAmount: true` (full balance). Returns an ERC-20 approval
|
|
42
|
+
* (only when needed for async redeem) followed by the withdraw or async redeem request,
|
|
43
|
+
* each returned as a `PreparedTx` ready to be signed and sent.
|
|
44
|
+
*
|
|
45
|
+
* @param client - A configured `GauntletClient` instance with an EVM public client and wallet.
|
|
46
|
+
* @param params - Withdrawal parameters including the vault identifier and exactly one of
|
|
47
|
+
* `shares`, `amount`, or `entireAmount`, plus optional chain, asset symbol, deposit mode,
|
|
48
|
+
* and receiver address.
|
|
49
|
+
* @returns Ordered array of prepared transactions to execute in sequence.
|
|
50
|
+
*
|
|
51
|
+
* @throws {VaultNotFoundError} If the vault ID is not found in the manifest.
|
|
52
|
+
* @throws {AccountRequiredError} If no wallet account is set on the client.
|
|
53
|
+
* @throws {UnsupportedDepositModeError} If the requested withdrawal mode is not supported.
|
|
54
|
+
* @throws {UnsupportedAssetError} If the specified asset symbol is not accepted by the vault.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* // Withdraw by token amount
|
|
59
|
+
* const txs = await getWithdrawTx(client, {
|
|
60
|
+
* vaultId: 'baseUsdcPrime',
|
|
61
|
+
* amount: 50_000_000n, // 50 USDC (6 decimals)
|
|
62
|
+
* });
|
|
63
|
+
*
|
|
64
|
+
* // Withdraw entire balance
|
|
65
|
+
* const txs = await getWithdrawTx(client, {
|
|
66
|
+
* vaultId: 'baseUsdcPrime',
|
|
67
|
+
* entireAmount: true,
|
|
68
|
+
* account: walletAddress,
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function getWithdrawTx(client: GauntletClient, params: EvmWithdrawParams): Promise<PreparedTx[]>;
|
|
73
|
+
//# sourceMappingURL=withdraw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["../../../src/evm/withdraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAkB;AAEhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,2BAAwB;AAE/D,OAAO,EAAoC,UAAU,EAAE,gCAAuB;AAyB9E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,GAAG,CACA;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,GACxD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,GACxD;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CAC5E,CAAC;AA+EF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAyGvB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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 withdraw_exports = {};
|
|
20
|
+
__export(withdraw_exports, {
|
|
21
|
+
getWithdrawTx: () => getWithdrawTx
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(withdraw_exports);
|
|
24
|
+
var import_adapters = require("./adapters");
|
|
25
|
+
var import_attribution = require("../attribution");
|
|
26
|
+
var import_errors = require("../errors");
|
|
27
|
+
var import_aeraContracts = require("./aeraContracts");
|
|
28
|
+
var import_vaults = require("./vaults");
|
|
29
|
+
var import_constants = require("../constants");
|
|
30
|
+
var import_operationMode = require("./operationMode");
|
|
31
|
+
var import_types = require("./types");
|
|
32
|
+
function validateWithdrawParams(params) {
|
|
33
|
+
const modes = [
|
|
34
|
+
"amount" in params && params.amount != null,
|
|
35
|
+
"shares" in params && params.shares != null,
|
|
36
|
+
"entireAmount" in params && params.entireAmount === true
|
|
37
|
+
].filter(Boolean).length;
|
|
38
|
+
if (modes !== 1) throw new import_errors.InvalidWithdrawParamsError();
|
|
39
|
+
}
|
|
40
|
+
function sameAddress(left, right) {
|
|
41
|
+
return left.toLowerCase() === right.toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
function validateSyncWithdrawQuote({
|
|
44
|
+
params,
|
|
45
|
+
account,
|
|
46
|
+
chainId,
|
|
47
|
+
slippageBps,
|
|
48
|
+
tokenAddress
|
|
49
|
+
}) {
|
|
50
|
+
const quote = params.syncWithdrawQuote;
|
|
51
|
+
if (quote === void 0) return;
|
|
52
|
+
const { context } = quote;
|
|
53
|
+
if (context.vaultId !== params.vaultId || context.chainId !== chainId || !sameAddress(context.tokenAddress, tokenAddress) || context.slippageBps !== slippageBps) {
|
|
54
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
55
|
+
}
|
|
56
|
+
if (context.account !== void 0 && !sameAddress(context.account, account)) {
|
|
57
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
58
|
+
}
|
|
59
|
+
switch (context.request.mode) {
|
|
60
|
+
case "amount":
|
|
61
|
+
if (quote.kind !== "withdraw" || !("amount" in params && params.amount != null) || context.request.amount !== params.amount || quote.tokensOut !== params.amount) {
|
|
62
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
case "shares":
|
|
66
|
+
if (quote.kind !== "redeem" || !("shares" in params && params.shares != null) || context.request.shares !== params.shares || quote.shares !== params.shares) {
|
|
67
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
case "entireAmount":
|
|
71
|
+
if (quote.kind !== "redeem" || !("entireAmount" in params && params.entireAmount) || !sameAddress(context.request.account, account)) {
|
|
72
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function getWithdrawTx(client, params) {
|
|
78
|
+
validateWithdrawParams(params);
|
|
79
|
+
if (params.slippageBps !== void 0 && (!Number.isInteger(params.slippageBps) || params.slippageBps < 0 || params.slippageBps > Number(import_constants.MAX_BPS))) {
|
|
80
|
+
throw new import_errors.InvalidSlippageBPSError(params.slippageBps);
|
|
81
|
+
}
|
|
82
|
+
const resolved = await (0, import_vaults.resolveVault)(client, params.vaultId, params.chainId);
|
|
83
|
+
if (!resolved) throw new import_errors.VaultNotFoundError(params.vaultId);
|
|
84
|
+
const chainId = params.chainId ?? resolved.vault.chainId;
|
|
85
|
+
const account = client.wallet?.account?.address;
|
|
86
|
+
if (!account) throw new import_errors.AccountRequiredError();
|
|
87
|
+
if ("entireAmount" in params && params.entireAmount && params.account !== void 0) {
|
|
88
|
+
if (!sameAddress(params.account, account)) {
|
|
89
|
+
throw new import_errors.AccountMismatchError(account, params.account);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const { vault, protocol } = resolved;
|
|
93
|
+
const token = vault.supplyToken.length > 1 ? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol) : vault.supplyToken[0];
|
|
94
|
+
if (token === void 0) {
|
|
95
|
+
throw new import_errors.UnsupportedAssetError(params.assetSymbol ?? "unknown", params.vaultId);
|
|
96
|
+
}
|
|
97
|
+
const adapter = (0, import_adapters.getAdapter)(protocol);
|
|
98
|
+
const publicClient = client.getPublicClient(chainId);
|
|
99
|
+
const requestedWithdrawMode = (0, import_operationMode.parseOperationMode)(params.vaultId, params.depositMode);
|
|
100
|
+
const slippageBps = params.slippageBps ?? params.syncWithdrawQuote?.context.slippageBps ?? import_constants.DEFAULT_BPS;
|
|
101
|
+
let modifiedDepositMode;
|
|
102
|
+
let aeraRuntime;
|
|
103
|
+
if (params.syncWithdrawQuote !== void 0) {
|
|
104
|
+
if (protocol !== "aera" || requestedWithdrawMode === "async") {
|
|
105
|
+
throw new import_errors.InvalidWithdrawParamsError();
|
|
106
|
+
}
|
|
107
|
+
validateSyncWithdrawQuote({
|
|
108
|
+
params,
|
|
109
|
+
account,
|
|
110
|
+
chainId,
|
|
111
|
+
slippageBps,
|
|
112
|
+
tokenAddress: token.address
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
if (protocol === "aera") {
|
|
116
|
+
aeraRuntime = await (0, import_aeraContracts.resolveAeraRuntimeContracts)(publicClient, vault);
|
|
117
|
+
if (aeraRuntime.provisioner.version === import_types.ContractVersion.V2 && (requestedWithdrawMode === "sync" || params.syncWithdrawQuote !== void 0)) {
|
|
118
|
+
(0, import_aeraContracts.requireAeraSyncRedeemRuntime)(aeraRuntime);
|
|
119
|
+
}
|
|
120
|
+
const tokenModeSupport = await (0, import_aeraContracts.resolveAeraTokenModeSupport)(
|
|
121
|
+
publicClient,
|
|
122
|
+
aeraRuntime,
|
|
123
|
+
token.address,
|
|
124
|
+
{ includeSyncModes: requestedWithdrawMode !== "async" }
|
|
125
|
+
);
|
|
126
|
+
modifiedDepositMode = (0, import_operationMode.resolveOperationMode)(
|
|
127
|
+
params.vaultId,
|
|
128
|
+
params.syncWithdrawQuote !== void 0 ? "sync" : requestedWithdrawMode,
|
|
129
|
+
{
|
|
130
|
+
async: tokenModeSupport.asyncRedeem,
|
|
131
|
+
sync: tokenModeSupport.syncRedeem
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
if (modifiedDepositMode === "sync") (0, import_aeraContracts.requireAeraSyncRedeemRuntime)(aeraRuntime);
|
|
135
|
+
} else {
|
|
136
|
+
modifiedDepositMode = (0, import_operationMode.resolveSyncOnlyOperationMode)(params.vaultId, requestedWithdrawMode);
|
|
137
|
+
}
|
|
138
|
+
const withdrawParams = {
|
|
139
|
+
vault,
|
|
140
|
+
receiver: params.receiver ?? account,
|
|
141
|
+
account,
|
|
142
|
+
async: modifiedDepositMode === "async",
|
|
143
|
+
asset: token,
|
|
144
|
+
publicClient,
|
|
145
|
+
slippageBps,
|
|
146
|
+
solverTip: params.solverTip,
|
|
147
|
+
maxPriceAge: params.maxPriceAge,
|
|
148
|
+
aeraRuntime,
|
|
149
|
+
syncWithdrawQuote: params.syncWithdrawQuote,
|
|
150
|
+
..."shares" in params && params.shares != null ? { shares: params.shares } : {},
|
|
151
|
+
..."amount" in params && params.amount != null ? { amount: params.amount } : {},
|
|
152
|
+
..."entireAmount" in params && params.entireAmount ? { entireAmount: true } : {}
|
|
153
|
+
};
|
|
154
|
+
const steps = await adapter.buildWithdraw(withdrawParams);
|
|
155
|
+
return await Promise.all(steps.map((step) => (0, import_attribution.encodeTransactionWithAttribution)(client, step)));
|
|
156
|
+
}
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
getWithdrawTx
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=withdraw.js.map
|