@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
package/dist/evm/withdraw.js
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { getAdapter } from './adapters';
|
|
2
|
-
import { encodeTransactionWithAttribution } from '../attribution';
|
|
3
|
-
import { AccountMismatchError, AccountRequiredError, VaultNotFoundError, UnsupportedAssetError, InvalidSlippageBPSError, InvalidWithdrawParamsError, } from '../errors';
|
|
4
|
-
import { requireAeraSyncRedeemRuntime, resolveAeraRuntimeContracts, resolveAeraTokenModeSupport, } from './aeraContracts';
|
|
5
|
-
import { resolveVault } from './vaults';
|
|
6
|
-
import { DEFAULT_BPS, MAX_BPS } from '../constants';
|
|
7
|
-
import { parseOperationMode, resolveOperationMode, resolveSyncOnlyOperationMode, } from './operationMode';
|
|
8
|
-
import { ContractVersion } from './types';
|
|
9
|
-
function validateWithdrawParams(params) {
|
|
10
|
-
const modes = [
|
|
11
|
-
'amount' in params && params.amount != null,
|
|
12
|
-
'shares' in params && params.shares != null,
|
|
13
|
-
'entireAmount' in params && params.entireAmount === true,
|
|
14
|
-
].filter(Boolean).length;
|
|
15
|
-
if (modes !== 1)
|
|
16
|
-
throw new InvalidWithdrawParamsError();
|
|
17
|
-
}
|
|
18
|
-
function sameAddress(left, right) {
|
|
19
|
-
return left.toLowerCase() === right.toLowerCase();
|
|
20
|
-
}
|
|
21
|
-
function validateSyncWithdrawQuote({ params, account, chainId, slippageBps, tokenAddress, }) {
|
|
22
|
-
const quote = params.syncWithdrawQuote;
|
|
23
|
-
if (quote === undefined)
|
|
24
|
-
return;
|
|
25
|
-
const { context } = quote;
|
|
26
|
-
if (context.vaultId !== params.vaultId ||
|
|
27
|
-
context.chainId !== chainId ||
|
|
28
|
-
!sameAddress(context.tokenAddress, tokenAddress) ||
|
|
29
|
-
context.slippageBps !== slippageBps) {
|
|
30
|
-
throw new InvalidWithdrawParamsError();
|
|
31
|
-
}
|
|
32
|
-
if (context.account !== undefined && !sameAddress(context.account, account)) {
|
|
33
|
-
throw new InvalidWithdrawParamsError();
|
|
34
|
-
}
|
|
35
|
-
switch (context.request.mode) {
|
|
36
|
-
case 'amount':
|
|
37
|
-
if (quote.kind !== 'withdraw' ||
|
|
38
|
-
!('amount' in params && params.amount != null) ||
|
|
39
|
-
context.request.amount !== params.amount ||
|
|
40
|
-
quote.tokensOut !== params.amount) {
|
|
41
|
-
throw new InvalidWithdrawParamsError();
|
|
42
|
-
}
|
|
43
|
-
return;
|
|
44
|
-
case 'shares':
|
|
45
|
-
if (quote.kind !== 'redeem' ||
|
|
46
|
-
!('shares' in params && params.shares != null) ||
|
|
47
|
-
context.request.shares !== params.shares ||
|
|
48
|
-
quote.shares !== params.shares) {
|
|
49
|
-
throw new InvalidWithdrawParamsError();
|
|
50
|
-
}
|
|
51
|
-
return;
|
|
52
|
-
case 'entireAmount':
|
|
53
|
-
if (quote.kind !== 'redeem' ||
|
|
54
|
-
!('entireAmount' in params && params.entireAmount) ||
|
|
55
|
-
!sameAddress(context.request.account, account)) {
|
|
56
|
-
throw new InvalidWithdrawParamsError();
|
|
57
|
-
}
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Builds the ordered list of EVM transactions required to withdraw from a Gauntlet vault.
|
|
63
|
-
*
|
|
64
|
-
* Specify the withdrawal amount as one of: `shares` (vault units), `amount` (underlying
|
|
65
|
-
* token amount), or `entireAmount: true` (full balance). Returns an ERC-20 approval
|
|
66
|
-
* (only when needed for async redeem) followed by the withdraw or async redeem request,
|
|
67
|
-
* each returned as a `PreparedTx` ready to be signed and sent.
|
|
68
|
-
*
|
|
69
|
-
* @param client - A configured `GauntletClient` instance with an EVM public client and wallet.
|
|
70
|
-
* @param params - Withdrawal parameters including the vault identifier and exactly one of
|
|
71
|
-
* `shares`, `amount`, or `entireAmount`, plus optional chain, asset symbol, deposit mode,
|
|
72
|
-
* and receiver address.
|
|
73
|
-
* @returns Ordered array of prepared transactions to execute in sequence.
|
|
74
|
-
*
|
|
75
|
-
* @throws {VaultNotFoundError} If the vault ID is not found in the manifest.
|
|
76
|
-
* @throws {AccountRequiredError} If no wallet account is set on the client.
|
|
77
|
-
* @throws {UnsupportedDepositModeError} If the requested withdrawal mode is not supported.
|
|
78
|
-
* @throws {UnsupportedAssetError} If the specified asset symbol is not accepted by the vault.
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```ts
|
|
82
|
-
* // Withdraw by token amount
|
|
83
|
-
* const txs = await getWithdrawTx(client, {
|
|
84
|
-
* vaultId: 'baseUsdcPrime',
|
|
85
|
-
* amount: 50_000_000n, // 50 USDC (6 decimals)
|
|
86
|
-
* });
|
|
87
|
-
*
|
|
88
|
-
* // Withdraw entire balance
|
|
89
|
-
* const txs = await getWithdrawTx(client, {
|
|
90
|
-
* vaultId: 'baseUsdcPrime',
|
|
91
|
-
* entireAmount: true,
|
|
92
|
-
* account: walletAddress,
|
|
93
|
-
* });
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
export async function getWithdrawTx(client, params) {
|
|
97
|
-
validateWithdrawParams(params);
|
|
98
|
-
if (params.slippageBps !== undefined &&
|
|
99
|
-
(!Number.isInteger(params.slippageBps) ||
|
|
100
|
-
params.slippageBps < 0 ||
|
|
101
|
-
params.slippageBps > Number(MAX_BPS))) {
|
|
102
|
-
throw new InvalidSlippageBPSError(params.slippageBps);
|
|
103
|
-
}
|
|
104
|
-
const resolved = await resolveVault(client, params.vaultId, params.chainId);
|
|
105
|
-
if (!resolved)
|
|
106
|
-
throw new VaultNotFoundError(params.vaultId);
|
|
107
|
-
const chainId = params.chainId ?? resolved.vault.chainId;
|
|
108
|
-
const account = client.wallet?.account?.address;
|
|
109
|
-
if (!account)
|
|
110
|
-
throw new AccountRequiredError();
|
|
111
|
-
if ('entireAmount' in params && params.entireAmount && params.account !== undefined) {
|
|
112
|
-
if (!sameAddress(params.account, account)) {
|
|
113
|
-
throw new AccountMismatchError(account, params.account);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const { vault, protocol } = resolved;
|
|
117
|
-
const token = vault.supplyToken.length > 1
|
|
118
|
-
? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)
|
|
119
|
-
: vault.supplyToken[0];
|
|
120
|
-
if (token === undefined) {
|
|
121
|
-
throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);
|
|
122
|
-
}
|
|
123
|
-
const adapter = getAdapter(protocol);
|
|
124
|
-
const publicClient = client.getPublicClient(chainId);
|
|
125
|
-
const requestedWithdrawMode = parseOperationMode(params.vaultId, params.depositMode);
|
|
126
|
-
const slippageBps = params.slippageBps ?? params.syncWithdrawQuote?.context.slippageBps ?? DEFAULT_BPS;
|
|
127
|
-
let modifiedDepositMode;
|
|
128
|
-
let aeraRuntime;
|
|
129
|
-
if (params.syncWithdrawQuote !== undefined) {
|
|
130
|
-
if (protocol !== 'aera' || requestedWithdrawMode === 'async') {
|
|
131
|
-
throw new InvalidWithdrawParamsError();
|
|
132
|
-
}
|
|
133
|
-
validateSyncWithdrawQuote({
|
|
134
|
-
params,
|
|
135
|
-
account,
|
|
136
|
-
chainId,
|
|
137
|
-
slippageBps,
|
|
138
|
-
tokenAddress: token.address,
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
if (protocol === 'aera') {
|
|
142
|
-
aeraRuntime = await resolveAeraRuntimeContracts(publicClient, vault);
|
|
143
|
-
if (aeraRuntime.provisioner.version === ContractVersion.V2 &&
|
|
144
|
-
(requestedWithdrawMode === 'sync' || params.syncWithdrawQuote !== undefined)) {
|
|
145
|
-
requireAeraSyncRedeemRuntime(aeraRuntime);
|
|
146
|
-
}
|
|
147
|
-
const tokenModeSupport = await resolveAeraTokenModeSupport(publicClient, aeraRuntime, token.address, { includeSyncModes: requestedWithdrawMode !== 'async' });
|
|
148
|
-
modifiedDepositMode = resolveOperationMode(params.vaultId, params.syncWithdrawQuote !== undefined ? 'sync' : requestedWithdrawMode, {
|
|
149
|
-
async: tokenModeSupport.asyncRedeem,
|
|
150
|
-
sync: tokenModeSupport.syncRedeem,
|
|
151
|
-
});
|
|
152
|
-
if (modifiedDepositMode === 'sync')
|
|
153
|
-
requireAeraSyncRedeemRuntime(aeraRuntime);
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
modifiedDepositMode = resolveSyncOnlyOperationMode(params.vaultId, requestedWithdrawMode);
|
|
157
|
-
}
|
|
158
|
-
const withdrawParams = {
|
|
159
|
-
vault,
|
|
160
|
-
receiver: params.receiver ?? account,
|
|
161
|
-
account,
|
|
162
|
-
async: modifiedDepositMode === 'async',
|
|
163
|
-
asset: token,
|
|
164
|
-
publicClient,
|
|
165
|
-
slippageBps,
|
|
166
|
-
solverTip: params.solverTip,
|
|
167
|
-
maxPriceAge: params.maxPriceAge,
|
|
168
|
-
aeraRuntime,
|
|
169
|
-
syncWithdrawQuote: params.syncWithdrawQuote,
|
|
170
|
-
...('shares' in params && params.shares != null ? { shares: params.shares } : {}),
|
|
171
|
-
...('amount' in params && params.amount != null ? { amount: params.amount } : {}),
|
|
172
|
-
...('entireAmount' in params && params.entireAmount ? { entireAmount: true } : {}),
|
|
173
|
-
};
|
|
174
|
-
const steps = await adapter.buildWithdraw(withdrawParams);
|
|
175
|
-
return await Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=withdraw.js.map
|
package/dist/evm/withdraw.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withdraw.js","sourceRoot":"","sources":["../../src/evm/withdraw.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { AccountRequiredError, InvalidSlippageBPSError, InvalidWithdrawParamsError, requireNonZeroSyncWithdrawBound, UnsupportedAssetError, UnsupportedFeatureError, VaultNotFoundError, } from '../errors';
|
|
2
|
-
import { DEFAULT_BPS, MAX_BPS } from '../constants';
|
|
3
|
-
import { resolveVault } from './vaults';
|
|
4
|
-
import { applySlippageDown, applySlippageUp, requireAeraSyncRedeemRuntime, resolveAeraRuntimeContracts, resolveAeraTokenModeSupport, } from './aeraContracts';
|
|
5
|
-
import { multiDepositorVaultAbi } from './abis/multiDepositorVault';
|
|
6
|
-
import { convertNumeraireToToken, convertTokenToNumeraire, } from './aeraContracts/priceAndFeeCalculator';
|
|
7
|
-
import { getSyncRedeemEpochState, getSyncRedeemRate, getSyncRedeemTokenOut, getSyncWithdrawUnitsIn, getUserUnitsRefundableUntil, } from './aeraContracts/v2';
|
|
8
|
-
import { resolveOperationMode } from './operationMode';
|
|
9
|
-
function validateSyncWithdrawQuoteParams(params) {
|
|
10
|
-
const modes = [
|
|
11
|
-
'amount' in params && params.amount != null,
|
|
12
|
-
'shares' in params && params.shares != null,
|
|
13
|
-
'entireAmount' in params && params.entireAmount === true,
|
|
14
|
-
].filter(Boolean).length;
|
|
15
|
-
if (modes !== 1)
|
|
16
|
-
throw new InvalidWithdrawParamsError();
|
|
17
|
-
if ('entireAmount' in params && params.entireAmount === true && !params.account) {
|
|
18
|
-
throw new AccountRequiredError();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Builds a live quote for an instant (sync) withdraw without sending a transaction.
|
|
23
|
-
*
|
|
24
|
-
* Surfaces everything the on-chain `redeem`/`withdraw` would apply or check but that a plain
|
|
25
|
-
* transaction build does not pre-validate: the effective rate (including the price-age dynamic
|
|
26
|
-
* premium), slippage bounds, the global per-epoch redeem capacity, and whether the caller's units
|
|
27
|
-
* are still locked from a recent sync deposit.
|
|
28
|
-
*
|
|
29
|
-
* @throws {VaultNotFoundError} If the vault ID is not found.
|
|
30
|
-
* @throws {UnsupportedAssetError} If the asset symbol is not accepted by the vault.
|
|
31
|
-
* @throws {UnsupportedFeatureError} If the vault is not an Aera V2 deployment.
|
|
32
|
-
* @throws {UnsupportedDepositModeError} If sync redeem is not enabled for the token.
|
|
33
|
-
* @throws {StalePriceError} If the oracle price is too stale for an instant redeem.
|
|
34
|
-
*/
|
|
35
|
-
export async function getSyncWithdrawQuote(client, params) {
|
|
36
|
-
validateSyncWithdrawQuoteParams(params);
|
|
37
|
-
if (params.slippageBps !== undefined &&
|
|
38
|
-
(!Number.isInteger(params.slippageBps) ||
|
|
39
|
-
params.slippageBps < 0 ||
|
|
40
|
-
params.slippageBps > Number(MAX_BPS))) {
|
|
41
|
-
throw new InvalidSlippageBPSError(params.slippageBps);
|
|
42
|
-
}
|
|
43
|
-
const slippageBps = params.slippageBps ?? DEFAULT_BPS;
|
|
44
|
-
const resolved = await resolveVault(client, params.vaultId, params.chainId);
|
|
45
|
-
if (!resolved)
|
|
46
|
-
throw new VaultNotFoundError(params.vaultId);
|
|
47
|
-
const { vault, protocol } = resolved;
|
|
48
|
-
if (protocol !== 'aera') {
|
|
49
|
-
throw new UnsupportedFeatureError('Sync withdraw quote is only available for Aera vaults');
|
|
50
|
-
}
|
|
51
|
-
const chainId = params.chainId ?? vault.chainId;
|
|
52
|
-
const publicClient = client.getPublicClient(chainId);
|
|
53
|
-
const token = vault.supplyToken.length > 1
|
|
54
|
-
? vault.supplyToken.find((tInfo) => tInfo.symbol === params.assetSymbol)
|
|
55
|
-
: vault.supplyToken[0];
|
|
56
|
-
if (token === undefined) {
|
|
57
|
-
throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);
|
|
58
|
-
}
|
|
59
|
-
const quoteBlock = await publicClient.getBlock();
|
|
60
|
-
if (quoteBlock.number === null) {
|
|
61
|
-
throw new UnsupportedFeatureError('Aera: sync withdraw quote requires a numbered block');
|
|
62
|
-
}
|
|
63
|
-
const quoteReadContext = {
|
|
64
|
-
blockNumber: quoteBlock.number,
|
|
65
|
-
blockTimestamp: BigInt(quoteBlock.timestamp),
|
|
66
|
-
};
|
|
67
|
-
const runtime = await resolveAeraRuntimeContracts(publicClient, vault, quoteReadContext);
|
|
68
|
-
requireAeraSyncRedeemRuntime(runtime);
|
|
69
|
-
const support = await resolveAeraTokenModeSupport(publicClient, runtime, token.address, quoteReadContext);
|
|
70
|
-
resolveOperationMode(params.vaultId, 'sync', {
|
|
71
|
-
async: support.asyncRedeem,
|
|
72
|
-
sync: support.syncRedeem,
|
|
73
|
-
});
|
|
74
|
-
const provisioner = runtime.provisioner.address;
|
|
75
|
-
const feeCalculator = runtime.feeCalculator.address;
|
|
76
|
-
const feeVersion = runtime.feeCalculator.version;
|
|
77
|
-
const vaultAddress = vault.vaultAddress;
|
|
78
|
-
const rate = await getSyncRedeemRate(publicClient, provisioner, vaultAddress, token.address, feeCalculator, quoteReadContext);
|
|
79
|
-
let kind;
|
|
80
|
-
let shares;
|
|
81
|
-
let tokensOut;
|
|
82
|
-
let minTokensOut;
|
|
83
|
-
let maxUnitsIn;
|
|
84
|
-
let request;
|
|
85
|
-
if ('amount' in params && params.amount != null) {
|
|
86
|
-
// Exact token out: shares burned is the estimate, bounded above by slippage.
|
|
87
|
-
kind = 'withdraw';
|
|
88
|
-
request = { mode: 'amount', amount: params.amount };
|
|
89
|
-
tokensOut = params.amount;
|
|
90
|
-
requireNonZeroSyncWithdrawBound(tokensOut, 'tokensOut');
|
|
91
|
-
minTokensOut = params.amount;
|
|
92
|
-
shares = await getSyncWithdrawUnitsIn(publicClient, provisioner, feeCalculator, feeVersion, vaultAddress, token.address, params.amount, rate.effectiveMultiplierBps, quoteReadContext);
|
|
93
|
-
maxUnitsIn = applySlippageUp(shares, slippageBps);
|
|
94
|
-
requireNonZeroSyncWithdrawBound(maxUnitsIn, 'maxUnitsIn');
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
// Exact shares in: tokens out is the estimate, bounded below by slippage.
|
|
98
|
-
kind = 'redeem';
|
|
99
|
-
if ('entireAmount' in params && params.entireAmount) {
|
|
100
|
-
if (!params.account)
|
|
101
|
-
throw new AccountRequiredError();
|
|
102
|
-
request = { mode: 'entireAmount', account: params.account };
|
|
103
|
-
shares = await publicClient.readContract({
|
|
104
|
-
address: vaultAddress,
|
|
105
|
-
abi: multiDepositorVaultAbi,
|
|
106
|
-
functionName: 'balanceOf',
|
|
107
|
-
args: [params.account],
|
|
108
|
-
blockNumber: quoteReadContext.blockNumber,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
else if ('shares' in params && params.shares != null) {
|
|
112
|
-
request = { mode: 'shares', shares: params.shares };
|
|
113
|
-
shares = params.shares;
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
throw new InvalidWithdrawParamsError();
|
|
117
|
-
}
|
|
118
|
-
requireNonZeroSyncWithdrawBound(shares, 'unitsIn');
|
|
119
|
-
tokensOut = await getSyncRedeemTokenOut(publicClient, provisioner, feeCalculator, feeVersion, vaultAddress, token.address, shares, rate.effectiveMultiplierBps, quoteReadContext);
|
|
120
|
-
minTokensOut = applySlippageDown(tokensOut, slippageBps);
|
|
121
|
-
requireNonZeroSyncWithdrawBound(minTokensOut, 'minTokensOut');
|
|
122
|
-
maxUnitsIn = shares;
|
|
123
|
-
}
|
|
124
|
-
const [epoch, requestNumeraire, unitsLockedUntil] = await Promise.all([
|
|
125
|
-
getSyncRedeemEpochState(publicClient, provisioner, quoteReadContext),
|
|
126
|
-
convertTokenToNumeraire(publicClient, feeCalculator, feeVersion, vaultAddress, token.address, tokensOut, quoteReadContext),
|
|
127
|
-
params.account
|
|
128
|
-
? getUserUnitsRefundableUntil(publicClient, provisioner, params.account, quoteReadContext)
|
|
129
|
-
: Promise.resolve(undefined),
|
|
130
|
-
]);
|
|
131
|
-
const remainingNumeraire = epoch.epochCapNumeraire > epoch.epochRedeemedNumeraire
|
|
132
|
-
? epoch.epochCapNumeraire - epoch.epochRedeemedNumeraire
|
|
133
|
-
: 0n;
|
|
134
|
-
const remainingTokens = await convertNumeraireToToken(publicClient, feeCalculator, feeVersion, vaultAddress, token.address, remainingNumeraire, quoteReadContext);
|
|
135
|
-
const quoteDetails = {
|
|
136
|
-
shares,
|
|
137
|
-
maxUnitsIn,
|
|
138
|
-
tokensOut,
|
|
139
|
-
minTokensOut,
|
|
140
|
-
rate,
|
|
141
|
-
capacity: {
|
|
142
|
-
epochCapNumeraire: epoch.epochCapNumeraire,
|
|
143
|
-
epochRedeemedNumeraire: epoch.epochRedeemedNumeraire,
|
|
144
|
-
remainingNumeraire,
|
|
145
|
-
remainingTokens,
|
|
146
|
-
requestNumeraire,
|
|
147
|
-
exceedsCapacity: requestNumeraire > remainingNumeraire,
|
|
148
|
-
},
|
|
149
|
-
unitsLockedUntil,
|
|
150
|
-
context: {
|
|
151
|
-
vaultId: params.vaultId,
|
|
152
|
-
chainId,
|
|
153
|
-
tokenAddress: token.address,
|
|
154
|
-
...(params.account ? { account: params.account } : {}),
|
|
155
|
-
slippageBps,
|
|
156
|
-
blockNumber: quoteReadContext.blockNumber,
|
|
157
|
-
request,
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
if (kind === 'redeem')
|
|
161
|
-
return { kind, ...quoteDetails };
|
|
162
|
-
return { kind, ...quoteDetails };
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=withdrawQuote.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"withdrawQuote.js","sourceRoot":"","sources":["../../src/evm/withdrawQuote.ts"],"names":[],"mappings":"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"}
|