@gauntlet-xyz/sdk 2.5.0 → 3.1.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 +121 -7
- package/dist/api/activity.d.ts +4 -2
- package/dist/api/activity.d.ts.map +1 -1
- package/dist/api/activityRows.d.ts +11 -0
- package/dist/api/activityRows.d.ts.map +1 -0
- 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/decimal.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/http.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 +47 -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 +8 -5
- package/dist/attribution/index.d.ts.map +1 -1
- package/dist/chunk-JJOLVL5V.js +546 -0
- package/dist/chunk-JJOLVL5V.js.map +7 -0
- package/dist/chunk-JRSNLXFY.js +2009 -0
- package/dist/chunk-JRSNLXFY.js.map +7 -0
- package/dist/chunk-MEKISE2T.js +367 -0
- package/dist/chunk-MEKISE2T.js.map +7 -0
- package/dist/chunk-YQXTLIJA.js +4477 -0
- package/dist/chunk-YQXTLIJA.js.map +7 -0
- package/dist/cjs/api/activity.d.ts +72 -0
- package/dist/cjs/api/activity.d.ts.map +1 -0
- package/dist/cjs/api/activity.js +138 -0
- package/dist/cjs/api/activity.js.map +7 -0
- package/dist/cjs/api/activityRows.d.ts +11 -0
- package/dist/cjs/api/activityRows.d.ts.map +1 -0
- package/dist/cjs/api/activityRows.js +139 -0
- package/dist/cjs/api/activityRows.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 +61 -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 +199 -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 +61 -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 +65 -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 +144 -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 +28 -0
- package/dist/cjs/attribution/index.d.ts.map +1 -0
- package/dist/cjs/attribution/index.js +70 -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 +500 -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 +85 -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 +234 -0
- package/dist/cjs/evm/aeraContracts.js.map +7 -0
- package/dist/cjs/evm/deposit.d.ts +51 -0
- package/dist/cjs/evm/deposit.d.ts.map +1 -0
- package/dist/cjs/evm/deposit.js +142 -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 +97 -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 +71 -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 +69 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
- package/dist/cjs/evm/userCurrentBalance.js +268 -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 +75 -0
- package/dist/cjs/evm/withdraw.d.ts.map +1 -0
- package/dist/cjs/evm/withdraw.js +174 -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 +257 -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 +6 -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 +7 -4
- 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 +86 -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 +21 -3
- 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 +5 -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 +137 -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/activity.ts +18 -15
- package/src/api/activityRows.ts +143 -0
- package/src/api/caip.ts +3 -1
- package/src/api/client.ts +105 -6
- package/src/api/decimal.ts +1 -0
- package/src/api/generated.ts +570 -7
- package/src/api/http.ts +1 -0
- package/src/api/index.ts +8 -0
- package/src/api/positionHistory.ts +20 -5
- package/src/attribution/index.ts +6 -2
- package/src/client.ts +4 -1
- package/src/constants.ts +2 -0
- package/src/errors.ts +7 -0
- package/src/evm/adapters/aera.ts +40 -19
- package/src/evm/adapters/types.ts +3 -0
- package/src/evm/aeraContracts/v2.ts +124 -16
- package/src/evm/aeraContracts.ts +29 -14
- package/src/evm/deposit.ts +61 -18
- package/src/evm/depositQuote.ts +138 -0
- package/src/evm/depositReceiverApproval.ts +14 -9
- package/src/evm/index.ts +10 -1
- package/src/evm/userCurrentBalance.ts +155 -60
- package/src/evm/vaults.ts +0 -7
- package/src/evm/withdraw.ts +20 -1
- package/src/evm/withdrawQuote.ts +126 -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,268 @@
|
|
|
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 LOG_CHUNK_CONCURRENCY = 16;
|
|
33
|
+
const DEPOSIT_REQUESTED_V1_ABI = [
|
|
34
|
+
{
|
|
35
|
+
type: "event",
|
|
36
|
+
name: "DepositRequested",
|
|
37
|
+
inputs: [
|
|
38
|
+
{ type: "address", name: "user", indexed: true },
|
|
39
|
+
{ type: "address", name: "token", indexed: true },
|
|
40
|
+
{ type: "uint256", name: "tokensIn", indexed: false },
|
|
41
|
+
{ type: "uint256", name: "minUnitsOut", indexed: false },
|
|
42
|
+
{ type: "uint256", name: "solverTip", indexed: false },
|
|
43
|
+
{ type: "uint256", name: "deadline", indexed: false },
|
|
44
|
+
{ type: "uint256", name: "maxPriceAge", indexed: false },
|
|
45
|
+
{ type: "bool", name: "isFixedPrice", indexed: false },
|
|
46
|
+
{ type: "bytes32", name: "depositRequestHash", indexed: false }
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
];
|
|
50
|
+
const REDEEM_REQUESTED_V1_ABI = [
|
|
51
|
+
{
|
|
52
|
+
type: "event",
|
|
53
|
+
name: "RedeemRequested",
|
|
54
|
+
inputs: [
|
|
55
|
+
{ type: "address", name: "user", indexed: true },
|
|
56
|
+
{ type: "address", name: "token", indexed: true },
|
|
57
|
+
{ type: "uint256", name: "minTokensOut", indexed: false },
|
|
58
|
+
{ type: "uint256", name: "unitsIn", indexed: false },
|
|
59
|
+
{ type: "uint256", name: "solverTip", indexed: false },
|
|
60
|
+
{ type: "uint256", name: "deadline", indexed: false },
|
|
61
|
+
{ type: "uint256", name: "maxPriceAge", indexed: false },
|
|
62
|
+
{ type: "bool", name: "isFixedPrice", indexed: false },
|
|
63
|
+
{ type: "bytes32", name: "redeemRequestHash", indexed: false }
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
const provisionerV1StateAbi = (0, import_viem.parseAbi)([
|
|
68
|
+
"function asyncDepositHashes(bytes32 asyncDepositHash) view returns (bool exists)",
|
|
69
|
+
"function asyncRedeemHashes(bytes32 asyncRedeemHash) view returns (bool exists)"
|
|
70
|
+
]);
|
|
71
|
+
function dedupeByRequestHash(logs, hashKey) {
|
|
72
|
+
const seen = /* @__PURE__ */ new Set();
|
|
73
|
+
return logs.filter((log) => {
|
|
74
|
+
const hash = log.args[hashKey];
|
|
75
|
+
if (hash == null || seen.has(hash)) return false;
|
|
76
|
+
seen.add(hash);
|
|
77
|
+
return true;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async function requestScanStart(publicClient, chainId, blockNumber, days, cutoff) {
|
|
81
|
+
let span = (import_constants.BLOCKS_3_DAYS[chainId] ?? import_constants.DEFAULT_BLOCKS_3_DAYS) * BigInt(days) / 3n;
|
|
82
|
+
for (; ; ) {
|
|
83
|
+
if (span >= blockNumber) return 0n;
|
|
84
|
+
const start = blockNumber - span;
|
|
85
|
+
const block = await publicClient.getBlock({ blockNumber: start });
|
|
86
|
+
if (block.timestamp <= cutoff) return start;
|
|
87
|
+
span *= 2n;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function mapInBatches(items, size, fn) {
|
|
91
|
+
const results = [];
|
|
92
|
+
for (let i = 0; i < items.length; i += size) {
|
|
93
|
+
results.push(...await Promise.all(items.slice(i, i + size).map(fn)));
|
|
94
|
+
}
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
async function queryDeploymentBalance(client, deployment, params) {
|
|
98
|
+
const publicClient = client.getPublicClient(deployment.chainId);
|
|
99
|
+
const { address } = params;
|
|
100
|
+
const token = deployment.supplyToken.length > 1 ? deployment.supplyToken.find((candidate) => candidate.symbol === params.assetSymbol) : deployment.supplyToken[0];
|
|
101
|
+
if (token === void 0)
|
|
102
|
+
throw new import_errors.UnsupportedAssetError(params.assetSymbol ?? "unknown", params.vaultId);
|
|
103
|
+
const snapshot = await publicClient.getBlock({ blockTag: "latest" });
|
|
104
|
+
if (snapshot.number === null) {
|
|
105
|
+
throw new import_errors.GauntletSDKError("The balance snapshot has no block number");
|
|
106
|
+
}
|
|
107
|
+
const blockNumber = snapshot.number;
|
|
108
|
+
const readOptions = { blockNumber };
|
|
109
|
+
const expirationDays = deployment.expirationDays ?? 3;
|
|
110
|
+
if (!Number.isSafeInteger(expirationDays) || expirationDays <= 0) {
|
|
111
|
+
throw new import_errors.GauntletSDKError("The request expiration must be a positive integer number of days");
|
|
112
|
+
}
|
|
113
|
+
const scanDays = Math.max(3, expirationDays);
|
|
114
|
+
const cutoff = snapshot.timestamp - BigInt(import_constants.DAY) * BigInt(scanDays);
|
|
115
|
+
const fromBlock = params.fromBlock ?? await requestScanStart(publicClient, deployment.chainId, blockNumber, scanDays, cutoff);
|
|
116
|
+
if (fromBlock < 0n || fromBlock > blockNumber) {
|
|
117
|
+
throw new import_errors.GauntletSDKError("The request scan range is invalid");
|
|
118
|
+
}
|
|
119
|
+
const vaultContract = (0, import_aeraContracts.getMultiDepositorVault)(publicClient, deployment.vaultAddress);
|
|
120
|
+
const [runtime, units] = await Promise.all([
|
|
121
|
+
(0, import_aeraContracts.resolveAeraRuntimeContracts)(publicClient, deployment, readOptions),
|
|
122
|
+
vaultContract.read.balanceOf([address], readOptions)
|
|
123
|
+
]);
|
|
124
|
+
const provisionerAddress = runtime.provisioner.address;
|
|
125
|
+
const isV2 = runtime.provisioner.version === import_types.ContractVersion.V2;
|
|
126
|
+
const unitsLockedUntilPromise = isV2 ? (0, import_v2.getUserUnitsRefundableUntil)(publicClient, provisionerAddress, address, readOptions) : Promise.resolve(void 0);
|
|
127
|
+
const balance = await (0, import_priceAndFeeCalculator.convertUnitsToToken)(
|
|
128
|
+
publicClient,
|
|
129
|
+
runtime.feeCalculator.address,
|
|
130
|
+
runtime.feeCalculator.version,
|
|
131
|
+
deployment.vaultAddress,
|
|
132
|
+
token.address,
|
|
133
|
+
units,
|
|
134
|
+
readOptions
|
|
135
|
+
);
|
|
136
|
+
const chunks = [];
|
|
137
|
+
for (let cursor = fromBlock; cursor <= blockNumber; cursor += import_constants.LOG_PAGE_SIZE + 1n) {
|
|
138
|
+
const end = cursor + import_constants.LOG_PAGE_SIZE <= blockNumber ? cursor + import_constants.LOG_PAGE_SIZE : blockNumber;
|
|
139
|
+
chunks.push([cursor, end]);
|
|
140
|
+
}
|
|
141
|
+
const [depositPages, redeemPages] = await Promise.all([
|
|
142
|
+
mapInBatches(
|
|
143
|
+
chunks,
|
|
144
|
+
LOG_CHUNK_CONCURRENCY,
|
|
145
|
+
([from, to]) => isV2 ? publicClient.getContractEvents({
|
|
146
|
+
address: provisionerAddress,
|
|
147
|
+
abi: import_provisionerV2.provisionerV2Abi,
|
|
148
|
+
eventName: "DepositRequested",
|
|
149
|
+
args: { receiver: address, token: token.address },
|
|
150
|
+
fromBlock: from,
|
|
151
|
+
toBlock: to
|
|
152
|
+
}) : publicClient.getContractEvents({
|
|
153
|
+
address: provisionerAddress,
|
|
154
|
+
abi: DEPOSIT_REQUESTED_V1_ABI,
|
|
155
|
+
eventName: "DepositRequested",
|
|
156
|
+
args: { user: address, token: token.address },
|
|
157
|
+
fromBlock: from,
|
|
158
|
+
toBlock: to
|
|
159
|
+
})
|
|
160
|
+
),
|
|
161
|
+
mapInBatches(
|
|
162
|
+
chunks,
|
|
163
|
+
LOG_CHUNK_CONCURRENCY,
|
|
164
|
+
([from, to]) => isV2 ? publicClient.getContractEvents({
|
|
165
|
+
address: provisionerAddress,
|
|
166
|
+
abi: import_provisionerV2.provisionerV2Abi,
|
|
167
|
+
eventName: "RedeemRequested",
|
|
168
|
+
args: { user: address, token: token.address },
|
|
169
|
+
fromBlock: from,
|
|
170
|
+
toBlock: to
|
|
171
|
+
}) : publicClient.getContractEvents({
|
|
172
|
+
address: provisionerAddress,
|
|
173
|
+
abi: REDEEM_REQUESTED_V1_ABI,
|
|
174
|
+
eventName: "RedeemRequested",
|
|
175
|
+
args: { user: address, token: token.address },
|
|
176
|
+
fromBlock: from,
|
|
177
|
+
toBlock: to
|
|
178
|
+
})
|
|
179
|
+
)
|
|
180
|
+
]);
|
|
181
|
+
const depositLogs = dedupeByRequestHash(depositPages.flat(), "depositRequestHash");
|
|
182
|
+
const redeemLogs = dedupeByRequestHash(redeemPages.flat(), "redeemRequestHash");
|
|
183
|
+
const pendingChecks = await publicClient.multicall({
|
|
184
|
+
contracts: [
|
|
185
|
+
...depositLogs.map((log) => ({
|
|
186
|
+
address: provisionerAddress,
|
|
187
|
+
abi: isV2 ? import_provisionerV2.provisionerV2Abi : provisionerV1StateAbi,
|
|
188
|
+
functionName: isV2 ? "asyncRequestHashes" : "asyncDepositHashes",
|
|
189
|
+
args: [log.args.depositRequestHash]
|
|
190
|
+
})),
|
|
191
|
+
...redeemLogs.map((log) => ({
|
|
192
|
+
address: provisionerAddress,
|
|
193
|
+
abi: isV2 ? import_provisionerV2.provisionerV2Abi : provisionerV1StateAbi,
|
|
194
|
+
functionName: isV2 ? "asyncRequestHashes" : "asyncRedeemHashes",
|
|
195
|
+
args: [log.args.redeemRequestHash]
|
|
196
|
+
}))
|
|
197
|
+
],
|
|
198
|
+
allowFailure: false,
|
|
199
|
+
blockNumber
|
|
200
|
+
});
|
|
201
|
+
const depositChecks = pendingChecks.slice(0, depositLogs.length);
|
|
202
|
+
const redeemChecks = pendingChecks.slice(depositLogs.length);
|
|
203
|
+
let pendingDeposit = 0n;
|
|
204
|
+
for (let i = 0; i < depositLogs.length; i++) {
|
|
205
|
+
if (depositChecks[i]) {
|
|
206
|
+
pendingDeposit += depositLogs[i].args.tokensIn ?? 0n;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
let pendingWithdrawUnits = 0n;
|
|
210
|
+
for (let i = 0; i < redeemLogs.length; i++) {
|
|
211
|
+
if (redeemChecks[i]) {
|
|
212
|
+
pendingWithdrawUnits += redeemLogs[i].args.unitsIn ?? 0n;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const pendingWithdraw = pendingWithdrawUnits > 0n ? await (0, import_priceAndFeeCalculator.convertUnitsToToken)(
|
|
216
|
+
publicClient,
|
|
217
|
+
runtime.feeCalculator.address,
|
|
218
|
+
runtime.feeCalculator.version,
|
|
219
|
+
deployment.vaultAddress,
|
|
220
|
+
token.address,
|
|
221
|
+
pendingWithdrawUnits,
|
|
222
|
+
readOptions
|
|
223
|
+
) : 0n;
|
|
224
|
+
const unitsLockedUntil = await unitsLockedUntilPromise;
|
|
225
|
+
return {
|
|
226
|
+
blockNumber,
|
|
227
|
+
fromBlock,
|
|
228
|
+
chain: import_constants.CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,
|
|
229
|
+
chainId: deployment.chainId,
|
|
230
|
+
token: token.address,
|
|
231
|
+
decimals: token.decimals,
|
|
232
|
+
pendingDeposit,
|
|
233
|
+
balance,
|
|
234
|
+
pendingWithdraw,
|
|
235
|
+
...unitsLockedUntil !== void 0 ? { unitsLockedUntil } : {}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
async function getUserCurrentBalance(client, params) {
|
|
239
|
+
params = { ...params };
|
|
240
|
+
const manifest = await client.manifest;
|
|
241
|
+
const vaultInfo = manifest.vaults.find((v) => v.vaultId === params.vaultId);
|
|
242
|
+
if (!vaultInfo) throw new import_errors.VaultNotFoundError(params.vaultId);
|
|
243
|
+
const evmDeployments = vaultInfo.deployments.filter(
|
|
244
|
+
(d) => d.chain === "evm" && d.vaultType === "multi-depositor"
|
|
245
|
+
);
|
|
246
|
+
if (vaultInfo.protocol !== "aera" || evmDeployments.length === 0) {
|
|
247
|
+
throw new import_errors.UnsupportedProtocolError(vaultInfo.protocol);
|
|
248
|
+
}
|
|
249
|
+
if (params.chainId !== void 0) {
|
|
250
|
+
const deployment = evmDeployments.find((d) => d.chainId === params.chainId);
|
|
251
|
+
if (!deployment) {
|
|
252
|
+
throw new import_errors.ChainMismatchError(
|
|
253
|
+
`${params.chainId}`,
|
|
254
|
+
evmDeployments.map((d) => `${d.chainId}`).join(", ")
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
return [await queryDeploymentBalance(client, deployment, params)];
|
|
258
|
+
}
|
|
259
|
+
if (params.fromBlock !== void 0 && evmDeployments.length > 1) {
|
|
260
|
+
throw new import_errors.GauntletSDKError("fromBlock requires chainId for a vault with several deployments");
|
|
261
|
+
}
|
|
262
|
+
return Promise.all(evmDeployments.map((d) => queryDeploymentBalance(client, d, params)));
|
|
263
|
+
}
|
|
264
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
265
|
+
0 && (module.exports = {
|
|
266
|
+
getUserCurrentBalance
|
|
267
|
+
});
|
|
268
|
+
//# 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 {\n ChainMismatchError,\n GauntletSDKError,\n UnsupportedAssetError,\n UnsupportedProtocolError,\n VaultNotFoundError,\n} 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 {\n BLOCKS_3_DAYS,\n CHAIN_NAMES,\n DAY,\n DEFAULT_BLOCKS_3_DAYS,\n LOG_PAGE_SIZE,\n} from '../constants';\n\n// Log chunks fetched at once per event type.\nconst LOG_CHUNK_CONCURRENCY = 16;\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 /** Required for deployments that support multiple assets, ignored otherwise. */\n assetSymbol?: string;\n /**\n * Scan from this block, including expired requests that still hold escrow.\n * Requires `chainId` for a vault with more than one deployment.\n */\n fromBlock?: bigint;\n}\n\nexport interface UserCurrentBalance {\n /** Block used for balances, conversions, and request state. */\n blockNumber: bigint;\n /** First block included in the request scan. Older escrow is outside this result. */\n fromBlock: bigint;\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\n/** Step back by the expected block count, and widen until the block predates the cutoff. */\nasync function requestScanStart(\n publicClient: ReturnType<GauntletClient['getPublicClient']>,\n chainId: number,\n blockNumber: bigint,\n days: number,\n cutoff: bigint\n): Promise<bigint> {\n let span = ((BLOCKS_3_DAYS[chainId] ?? DEFAULT_BLOCKS_3_DAYS) * BigInt(days)) / 3n;\n for (;;) {\n if (span >= blockNumber) return 0n;\n const start = blockNumber - span;\n const block = await publicClient.getBlock({ blockNumber: start });\n if (block.timestamp <= cutoff) return start;\n span *= 2n;\n }\n}\n\nasync function mapInBatches<T, P extends Promise<unknown>>(\n items: T[],\n size: number,\n fn: (item: T) => P\n): Promise<Awaited<P>[]> {\n const results: Awaited<P>[] = [];\n for (let i = 0; i < items.length; i += size) {\n results.push(...(await Promise.all(items.slice(i, i + size).map(fn))));\n }\n return results;\n}\n\nasync function queryDeploymentBalance(\n client: GauntletClient,\n deployment: EvmVaultDeployment,\n params: UserCurrentBalanceParams\n): Promise<UserCurrentBalance> {\n const publicClient = client.getPublicClient(deployment.chainId);\n const { address } = params;\n const token =\n deployment.supplyToken.length > 1\n ? deployment.supplyToken.find((candidate) => candidate.symbol === params.assetSymbol)\n : deployment.supplyToken[0];\n if (token === undefined)\n throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);\n const snapshot = await publicClient.getBlock({ blockTag: 'latest' });\n if (snapshot.number === null) {\n throw new GauntletSDKError('The balance snapshot has no block number');\n }\n const blockNumber = snapshot.number;\n const readOptions = { blockNumber };\n const expirationDays = deployment.expirationDays ?? 3;\n if (!Number.isSafeInteger(expirationDays) || expirationDays <= 0) {\n throw new GauntletSDKError('The request expiration must be a positive integer number of days');\n }\n const scanDays = Math.max(3, expirationDays);\n const cutoff = snapshot.timestamp - BigInt(DAY) * BigInt(scanDays);\n const fromBlock =\n params.fromBlock ??\n (await requestScanStart(publicClient, deployment.chainId, blockNumber, scanDays, cutoff));\n if (fromBlock < 0n || fromBlock > blockNumber) {\n throw new GauntletSDKError('The request scan range is invalid');\n }\n\n const vaultContract = getMultiDepositorVault(publicClient, deployment.vaultAddress);\n const [runtime, units] = await Promise.all([\n resolveAeraRuntimeContracts(publicClient, deployment, readOptions),\n vaultContract.read.balanceOf([address], readOptions),\n ]);\n const provisionerAddress = runtime.provisioner.address;\n const isV2 = runtime.provisioner.version === ContractVersion.V2;\n const unitsLockedUntilPromise = isV2\n ? getUserUnitsRefundableUntil(publicClient, provisionerAddress, address, readOptions)\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 readOptions\n );\n\n // Compute block-range chunks to stay within the 10,000-block RPC limit, then fetch in bounded batches\n const chunks: [bigint, bigint][] = [];\n for (let cursor = fromBlock; cursor <= blockNumber; cursor += LOG_PAGE_SIZE + 1n) {\n const end = cursor + LOG_PAGE_SIZE <= blockNumber ? cursor + LOG_PAGE_SIZE : blockNumber;\n chunks.push([cursor, end]);\n }\n\n // Each map keeps LOG_CHUNK_CONCURRENCY queries in flight.\n const [depositPages, redeemPages] = await Promise.all([\n mapInBatches(chunks, LOG_CHUNK_CONCURRENCY, ([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'DepositRequested',\n args: { receiver: address, token: token.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, token: token.address },\n fromBlock: from,\n toBlock: to,\n })\n ),\n mapInBatches(chunks, LOG_CHUNK_CONCURRENCY, ([from, to]) =>\n isV2\n ? publicClient.getContractEvents({\n address: provisionerAddress,\n abi: provisionerV2Abi,\n eventName: 'RedeemRequested',\n args: { user: address, token: token.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, token: token.address },\n fromBlock: from,\n toBlock: to,\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 blockNumber,\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 readOptions\n )\n : 0n;\n const unitsLockedUntil = await unitsLockedUntilPromise;\n\n return {\n blockNumber,\n fromBlock,\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 configured request lifetime, with a minimum of three days. Set `fromBlock` (with `chainId`\n * on a multi-chain vault) for older escrow.\n * All state reads use one block. The returned range identifies the scanned history.\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 * @throws {UnsupportedAssetError} If a multi-asset deployment gets no matching `assetSymbol`.\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 params = { ...params };\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)];\n }\n if (params.fromBlock !== undefined && evmDeployments.length > 1) {\n throw new GauntletSDKError('fromBlock requires chainId for a vault with several deployments');\n }\n\n return Promise.all(evmDeployments.map((d) => queryDeploymentBalance(client, d, params)));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
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,75 @@
|
|
|
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
|
+
/** Limit a sync withdrawal to the shares reviewed before a rate change. */
|
|
24
|
+
maxShares?: bigint;
|
|
25
|
+
} & ({
|
|
26
|
+
shares: bigint;
|
|
27
|
+
amount?: never;
|
|
28
|
+
entireAmount?: never;
|
|
29
|
+
} | {
|
|
30
|
+
amount: bigint;
|
|
31
|
+
shares?: never;
|
|
32
|
+
entireAmount?: never;
|
|
33
|
+
} | {
|
|
34
|
+
account?: Address;
|
|
35
|
+
entireAmount: true;
|
|
36
|
+
shares?: never;
|
|
37
|
+
amount?: never;
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Builds the ordered list of EVM transactions required to withdraw from a Gauntlet vault.
|
|
41
|
+
*
|
|
42
|
+
* Specify the withdrawal amount as one of: `shares` (vault units), `amount` (underlying
|
|
43
|
+
* token amount), or `entireAmount: true` (full balance). Returns an ERC-20 approval
|
|
44
|
+
* (only when needed for async redeem) followed by the withdraw or async redeem request,
|
|
45
|
+
* each returned as a `PreparedTx` ready to be signed and sent.
|
|
46
|
+
*
|
|
47
|
+
* @param client - A configured `GauntletClient` instance with an EVM public client and wallet.
|
|
48
|
+
* @param params - Withdrawal parameters including the vault identifier and exactly one of
|
|
49
|
+
* `shares`, `amount`, or `entireAmount`, plus optional chain, asset symbol, deposit mode,
|
|
50
|
+
* and receiver address.
|
|
51
|
+
* @returns Ordered array of prepared transactions to execute in sequence.
|
|
52
|
+
*
|
|
53
|
+
* @throws {VaultNotFoundError} If the vault ID is not found in the manifest.
|
|
54
|
+
* @throws {AccountRequiredError} If no wallet account is set on the client.
|
|
55
|
+
* @throws {UnsupportedDepositModeError} If the requested withdrawal mode is not supported.
|
|
56
|
+
* @throws {UnsupportedAssetError} If the specified asset symbol is not accepted by the vault.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* // Withdraw by token amount
|
|
61
|
+
* const txs = await getWithdrawTx(client, {
|
|
62
|
+
* vaultId: 'baseUsdcPrime',
|
|
63
|
+
* amount: 50_000_000n, // 50 USDC (6 decimals)
|
|
64
|
+
* });
|
|
65
|
+
*
|
|
66
|
+
* // Withdraw entire balance
|
|
67
|
+
* const txs = await getWithdrawTx(client, {
|
|
68
|
+
* vaultId: 'baseUsdcPrime',
|
|
69
|
+
* entireAmount: true,
|
|
70
|
+
* account: walletAddress,
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function getWithdrawTx(client: GauntletClient, params: EvmWithdrawParams): Promise<PreparedTx[]>;
|
|
75
|
+
//# 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;AA0B9E,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;IAC5C,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,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;AAwFF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAgHvB"}
|