@gauntlet-xyz/sdk 2.5.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -6
- package/dist/api/activity.d.ts +1 -1
- package/dist/api/activity.d.ts.map +1 -1
- package/dist/api/caip.d.ts +1 -1
- package/dist/api/caip.d.ts.map +1 -1
- package/dist/api/client.d.ts +43 -5
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/errors.d.ts +1 -1
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/generated.d.ts +570 -7
- package/dist/api/generated.d.ts.map +1 -1
- package/dist/api/index.d.ts +13 -13
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +48 -8
- package/dist/api/index.js.map +7 -1
- package/dist/api/positionHistory.d.ts +1 -1
- package/dist/api/positionHistory.d.ts.map +1 -1
- package/dist/attribution/index.d.ts +3 -3
- package/dist/attribution/index.d.ts.map +1 -1
- package/dist/chunk-7TA2OJUK.js +4364 -0
- package/dist/chunk-7TA2OJUK.js.map +7 -0
- package/dist/chunk-HC2BS7MK.js +439 -0
- package/dist/chunk-HC2BS7MK.js.map +7 -0
- package/dist/chunk-S2TTA45N.js +2009 -0
- package/dist/chunk-S2TTA45N.js.map +7 -0
- package/dist/chunk-STIV2CC4.js +57 -0
- package/dist/chunk-STIV2CC4.js.map +7 -0
- package/dist/chunk-SU6JAKIA.js +283 -0
- package/dist/chunk-SU6JAKIA.js.map +7 -0
- package/dist/cjs/api/activity.d.ts +70 -0
- package/dist/cjs/api/activity.d.ts.map +1 -0
- package/dist/cjs/api/activity.js +136 -0
- package/dist/cjs/api/activity.js.map +7 -0
- package/dist/cjs/api/caip.d.ts +29 -0
- package/dist/cjs/api/caip.d.ts.map +1 -0
- package/dist/cjs/api/caip.js +59 -0
- package/dist/cjs/api/caip.js.map +7 -0
- package/dist/cjs/api/client.d.ts +173 -0
- package/dist/cjs/api/client.d.ts.map +1 -0
- package/dist/cjs/api/client.js +171 -0
- package/dist/cjs/api/client.js.map +7 -0
- package/dist/cjs/api/decimal.d.ts +21 -0
- package/dist/cjs/api/decimal.d.ts.map +1 -0
- package/dist/cjs/api/decimal.js +60 -0
- package/dist/cjs/api/decimal.js.map +7 -0
- package/dist/cjs/api/errors.d.ts +32 -0
- package/dist/cjs/api/errors.d.ts.map +1 -0
- package/dist/cjs/api/errors.js +80 -0
- package/dist/cjs/api/errors.js.map +7 -0
- package/dist/cjs/api/generated.d.ts +2068 -0
- package/dist/cjs/api/generated.d.ts.map +1 -0
- package/dist/cjs/api/generated.js +17 -0
- package/dist/cjs/api/generated.js.map +7 -0
- package/dist/cjs/api/http.d.ts +16 -0
- package/dist/cjs/api/http.d.ts.map +1 -0
- package/dist/cjs/api/http.js +64 -0
- package/dist/cjs/api/http.js.map +7 -0
- package/dist/cjs/api/index.d.ts +14 -0
- package/dist/cjs/api/index.d.ts.map +1 -0
- package/dist/cjs/api/index.js +73 -0
- package/dist/cjs/api/index.js.map +7 -0
- package/dist/cjs/api/positionHistory.d.ts +44 -0
- package/dist/cjs/api/positionHistory.d.ts.map +1 -0
- package/dist/cjs/api/positionHistory.js +131 -0
- package/dist/cjs/api/positionHistory.js.map +7 -0
- package/dist/cjs/attribution/erc8021.d.ts +9 -0
- package/dist/cjs/attribution/erc8021.d.ts.map +1 -0
- package/dist/cjs/attribution/erc8021.js +37 -0
- package/dist/cjs/attribution/erc8021.js.map +7 -0
- package/dist/cjs/attribution/index.d.ts +25 -0
- package/dist/cjs/attribution/index.d.ts.map +1 -0
- package/dist/cjs/attribution/index.js +68 -0
- package/dist/cjs/attribution/index.js.map +7 -0
- package/dist/cjs/client.d.ts +72 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +80 -0
- package/dist/cjs/client.js.map +7 -0
- package/dist/cjs/constants.d.ts +16 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +83 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/errors.d.ts +85 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +210 -0
- package/dist/cjs/errors.js.map +7 -0
- package/dist/cjs/evm/abis/erc20.d.ts +41 -0
- package/dist/cjs/evm/abis/erc20.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc20.js +57 -0
- package/dist/cjs/evm/abis/erc20.js.map +7 -0
- package/dist/cjs/evm/abis/erc4626.d.ts +105 -0
- package/dist/cjs/evm/abis/erc4626.d.ts.map +1 -0
- package/dist/cjs/evm/abis/erc4626.js +97 -0
- package/dist/cjs/evm/abis/erc4626.js.map +7 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts +1048 -0
- package/dist/cjs/evm/abis/multiDepositorVault.d.ts.map +1 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js +614 -0
- package/dist/cjs/evm/abis/multiDepositorVault.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts +910 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js +517 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts +277 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js +166 -0
- package/dist/cjs/evm/abis/priceAndFeeCalculatorV2.js.map +7 -0
- package/dist/cjs/evm/abis/provisioner.d.ts +4984 -0
- package/dist/cjs/evm/abis/provisioner.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisioner.js +2785 -0
- package/dist/cjs/evm/abis/provisioner.js.map +7 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts +740 -0
- package/dist/cjs/evm/abis/provisionerV2.d.ts.map +1 -0
- package/dist/cjs/evm/abis/provisionerV2.js +320 -0
- package/dist/cjs/evm/abis/provisionerV2.js.map +7 -0
- package/dist/cjs/evm/adapters/aera.d.ts +6 -0
- package/dist/cjs/evm/adapters/aera.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/aera.js +491 -0
- package/dist/cjs/evm/adapters/aera.js.map +7 -0
- package/dist/cjs/evm/adapters/index.d.ts +3 -0
- package/dist/cjs/evm/adapters/index.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/index.js +41 -0
- package/dist/cjs/evm/adapters/index.js.map +7 -0
- package/dist/cjs/evm/adapters/morpho.d.ts +3 -0
- package/dist/cjs/evm/adapters/morpho.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/morpho.js +103 -0
- package/dist/cjs/evm/adapters/morpho.js.map +7 -0
- package/dist/cjs/evm/adapters/types.d.ts +84 -0
- package/dist/cjs/evm/adapters/types.d.ts.map +1 -0
- package/dist/cjs/evm/adapters/types.js +17 -0
- package/dist/cjs/evm/adapters/types.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts +46 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js +223 -0
- package/dist/cjs/evm/aeraContracts/priceAndFeeCalculator.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts +8 -0
- package/dist/cjs/evm/aeraContracts/readOptions.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js +31 -0
- package/dist/cjs/evm/aeraContracts/readOptions.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts +2317 -0
- package/dist/cjs/evm/aeraContracts/v1.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v1.js +120 -0
- package/dist/cjs/evm/aeraContracts/v1.js.map +7 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts +4538 -0
- package/dist/cjs/evm/aeraContracts/v2.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts/v2.js +449 -0
- package/dist/cjs/evm/aeraContracts/v2.js.map +7 -0
- package/dist/cjs/evm/aeraContracts.d.ts +33 -0
- package/dist/cjs/evm/aeraContracts.d.ts.map +1 -0
- package/dist/cjs/evm/aeraContracts.js +224 -0
- package/dist/cjs/evm/aeraContracts.js.map +7 -0
- package/dist/cjs/evm/deposit.d.ts +50 -0
- package/dist/cjs/evm/deposit.d.ts.map +1 -0
- package/dist/cjs/evm/deposit.js +112 -0
- package/dist/cjs/evm/deposit.js.map +7 -0
- package/dist/cjs/evm/depositQuote.d.ts +32 -0
- package/dist/cjs/evm/depositQuote.d.ts.map +1 -0
- package/dist/cjs/evm/depositQuote.js +96 -0
- package/dist/cjs/evm/depositQuote.js.map +7 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts +17 -0
- package/dist/cjs/evm/depositReceiverApproval.d.ts.map +1 -0
- package/dist/cjs/evm/depositReceiverApproval.js +66 -0
- package/dist/cjs/evm/depositReceiverApproval.js.map +7 -0
- package/dist/cjs/evm/index.d.ts +28 -0
- package/dist/cjs/evm/index.d.ts.map +1 -0
- package/dist/cjs/evm/index.js +116 -0
- package/dist/cjs/evm/index.js.map +7 -0
- package/dist/cjs/evm/operationMode.d.ts +9 -0
- package/dist/cjs/evm/operationMode.d.ts.map +1 -0
- package/dist/cjs/evm/operationMode.js +65 -0
- package/dist/cjs/evm/operationMode.js.map +7 -0
- package/dist/cjs/evm/tokenModes.d.ts +22 -0
- package/dist/cjs/evm/tokenModes.d.ts.map +1 -0
- package/dist/cjs/evm/tokenModes.js +47 -0
- package/dist/cjs/evm/tokenModes.js.map +7 -0
- package/dist/cjs/evm/types.d.ts +34 -0
- package/dist/cjs/evm/types.d.ts.map +1 -0
- package/dist/cjs/evm/types.js +32 -0
- package/dist/cjs/evm/types.js.map +7 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts +55 -0
- package/dist/cjs/evm/userCurrentBalance.d.ts.map +1 -0
- package/dist/cjs/evm/userCurrentBalance.js +225 -0
- package/dist/cjs/evm/userCurrentBalance.js.map +7 -0
- package/dist/cjs/evm/vaults.d.ts +44 -0
- package/dist/cjs/evm/vaults.d.ts.map +1 -0
- package/dist/cjs/evm/vaults.js +78 -0
- package/dist/cjs/evm/vaults.js.map +7 -0
- package/dist/cjs/evm/withdraw.d.ts +73 -0
- package/dist/cjs/evm/withdraw.d.ts.map +1 -0
- package/dist/cjs/evm/withdraw.js +161 -0
- package/dist/cjs/evm/withdraw.js.map +7 -0
- package/dist/cjs/evm/withdrawQuote.d.ts +135 -0
- package/dist/cjs/evm/withdrawQuote.d.ts.map +1 -0
- package/dist/cjs/evm/withdrawQuote.js +256 -0
- package/dist/cjs/evm/withdrawQuote.js.map +7 -0
- package/dist/cjs/index.d.ts +31 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +128 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/privy/index.d.ts +52 -0
- package/dist/cjs/privy/index.d.ts.map +1 -0
- package/dist/cjs/privy/index.js +57 -0
- package/dist/cjs/privy/index.js.map +7 -0
- package/dist/client.d.ts +4 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/errors.d.ts +4 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/evm/adapters/aera.d.ts +1 -1
- package/dist/evm/adapters/aera.d.ts.map +1 -1
- package/dist/evm/adapters/index.d.ts +1 -1
- package/dist/evm/adapters/index.d.ts.map +1 -1
- package/dist/evm/adapters/morpho.d.ts +1 -1
- package/dist/evm/adapters/morpho.d.ts.map +1 -1
- package/dist/evm/adapters/types.d.ts +5 -3
- package/dist/evm/adapters/types.d.ts.map +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts +1 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v1.d.ts +2 -2
- package/dist/evm/aeraContracts/v1.d.ts.map +1 -1
- package/dist/evm/aeraContracts/v2.d.ts +25 -4
- package/dist/evm/aeraContracts/v2.d.ts.map +1 -1
- package/dist/evm/aeraContracts.d.ts +2 -2
- package/dist/evm/aeraContracts.d.ts.map +1 -1
- package/dist/evm/deposit.d.ts +4 -2
- package/dist/evm/deposit.d.ts.map +1 -1
- package/dist/evm/depositQuote.d.ts +32 -0
- package/dist/evm/depositQuote.d.ts.map +1 -0
- package/dist/evm/depositReceiverApproval.d.ts +2 -2
- package/dist/evm/depositReceiverApproval.d.ts.map +1 -1
- package/dist/evm/index.d.ts +27 -25
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +88 -12
- package/dist/evm/index.js.map +7 -1
- package/dist/evm/tokenModes.d.ts +2 -2
- package/dist/evm/tokenModes.d.ts.map +1 -1
- package/dist/evm/userCurrentBalance.d.ts +6 -2
- package/dist/evm/userCurrentBalance.d.ts.map +1 -1
- package/dist/evm/vaults.d.ts +2 -9
- package/dist/evm/vaults.d.ts.map +1 -1
- package/dist/evm/withdraw.d.ts +3 -3
- package/dist/evm/withdraw.d.ts.map +1 -1
- package/dist/evm/withdrawQuote.d.ts +14 -6
- package/dist/evm/withdrawQuote.d.ts.map +1 -1
- package/dist/index.d.ts +30 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +139 -14
- package/dist/index.js.map +7 -1
- package/dist/manifest/vaults.json +1958 -0
- package/dist/privy/index.d.ts +1 -1
- package/dist/privy/index.d.ts.map +1 -1
- package/dist/privy/index.js +39 -48
- package/dist/privy/index.js.map +7 -1
- package/manifest/vaults.json +22 -395
- package/package.json +43 -9
- package/src/api/client.ts +69 -5
- package/src/api/generated.ts +570 -7
- package/src/api/index.ts +8 -0
- package/src/client.ts +4 -1
- package/src/constants.ts +2 -0
- package/src/errors.ts +7 -0
- package/src/evm/adapters/aera.ts +14 -11
- package/src/evm/adapters/types.ts +2 -0
- package/src/evm/aeraContracts/v2.ts +124 -16
- package/src/evm/deposit.ts +19 -7
- package/src/evm/depositQuote.ts +137 -0
- package/src/evm/index.ts +10 -1
- package/src/evm/userCurrentBalance.ts +12 -1
- package/src/evm/vaults.ts +0 -7
- package/src/evm/withdrawQuote.ts +125 -51
- package/src/index.ts +11 -2
- package/dist/api/activity.js +0 -154
- package/dist/api/activity.js.map +0 -1
- package/dist/api/caip.js +0 -38
- package/dist/api/caip.js.map +0 -1
- package/dist/api/client.js +0 -119
- package/dist/api/client.js.map +0 -1
- package/dist/api/decimal.js +0 -44
- package/dist/api/decimal.js.map +0 -1
- package/dist/api/errors.js +0 -41
- package/dist/api/errors.js.map +0 -1
- package/dist/api/generated.js +0 -6
- package/dist/api/generated.js.map +0 -1
- package/dist/api/http.js +0 -39
- package/dist/api/http.js.map +0 -1
- package/dist/api/positionHistory.js +0 -126
- package/dist/api/positionHistory.js.map +0 -1
- package/dist/attribution/erc8021.js +0 -17
- package/dist/attribution/erc8021.js.map +0 -1
- package/dist/attribution/index.js +0 -45
- package/dist/attribution/index.js.map +0 -1
- package/dist/client.js +0 -72
- package/dist/client.js.map +0 -1
- package/dist/constants.js +0 -28
- package/dist/constants.js.map +0 -1
- package/dist/errors.js +0 -134
- package/dist/errors.js.map +0 -1
- package/dist/evm/abis/erc20.js +0 -30
- package/dist/evm/abis/erc20.js.map +0 -1
- package/dist/evm/abis/erc4626.js +0 -70
- package/dist/evm/abis/erc4626.js.map +0 -1
- package/dist/evm/abis/multiDepositorVault.js +0 -587
- package/dist/evm/abis/multiDepositorVault.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculator.js +0 -490
- package/dist/evm/abis/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/abis/priceAndFeeCalculatorV2.js +0 -141
- package/dist/evm/abis/priceAndFeeCalculatorV2.js.map +0 -1
- package/dist/evm/abis/provisioner.js +0 -2768
- package/dist/evm/abis/provisioner.js.map +0 -1
- package/dist/evm/abis/provisionerV2.js +0 -295
- package/dist/evm/abis/provisionerV2.js.map +0 -1
- package/dist/evm/adapters/aera.js +0 -280
- package/dist/evm/adapters/aera.js.map +0 -1
- package/dist/evm/adapters/index.js +0 -14
- package/dist/evm/adapters/index.js.map +0 -1
- package/dist/evm/adapters/morpho.js +0 -79
- package/dist/evm/adapters/morpho.js.map +0 -1
- package/dist/evm/adapters/types.js +0 -2
- package/dist/evm/adapters/types.js.map +0 -1
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js +0 -174
- package/dist/evm/aeraContracts/priceAndFeeCalculator.js.map +0 -1
- package/dist/evm/aeraContracts/readOptions.js +0 -4
- package/dist/evm/aeraContracts/readOptions.js.map +0 -1
- package/dist/evm/aeraContracts/v1.js +0 -59
- package/dist/evm/aeraContracts/v1.js.map +0 -1
- package/dist/evm/aeraContracts/v2.js +0 -273
- package/dist/evm/aeraContracts/v2.js.map +0 -1
- package/dist/evm/aeraContracts.js +0 -195
- package/dist/evm/aeraContracts.js.map +0 -1
- package/dist/evm/deposit.js +0 -109
- package/dist/evm/deposit.js.map +0 -1
- package/dist/evm/depositReceiverApproval.js +0 -32
- package/dist/evm/depositReceiverApproval.js.map +0 -1
- package/dist/evm/operationMode.js +0 -41
- package/dist/evm/operationMode.js.map +0 -1
- package/dist/evm/tokenModes.js +0 -34
- package/dist/evm/tokenModes.js.map +0 -1
- package/dist/evm/types.js +0 -5
- package/dist/evm/types.js.map +0 -1
- package/dist/evm/userCurrentBalance.js +0 -211
- package/dist/evm/userCurrentBalance.js.map +0 -1
- package/dist/evm/vaults.js +0 -75
- package/dist/evm/vaults.js.map +0 -1
- package/dist/evm/withdraw.js +0 -177
- package/dist/evm/withdraw.js.map +0 -1
- package/dist/evm/withdrawQuote.js +0 -164
- package/dist/evm/withdrawQuote.js.map +0 -1
package/src/api/index.ts
CHANGED
|
@@ -19,7 +19,10 @@ export type {
|
|
|
19
19
|
TimeseriesMeta,
|
|
20
20
|
TimeWindowOptions,
|
|
21
21
|
TokenRef,
|
|
22
|
+
TvlBreakdownMode,
|
|
22
23
|
TvlResponse,
|
|
24
|
+
TvlTimeseriesPoint,
|
|
25
|
+
TvlTimeseriesResponse,
|
|
23
26
|
UserActivity,
|
|
24
27
|
UserActivityResponse,
|
|
25
28
|
UserAllPositionsResponse,
|
|
@@ -28,7 +31,12 @@ export type {
|
|
|
28
31
|
UserPositionsTimeseriesResponse,
|
|
29
32
|
VaultDetail,
|
|
30
33
|
VaultDetailResponse,
|
|
34
|
+
VaultAllocations,
|
|
35
|
+
VaultAllocationsResponse,
|
|
31
36
|
VaultMetrics,
|
|
37
|
+
VaultsOptions,
|
|
38
|
+
VaultGroupTimeseriesPoint,
|
|
39
|
+
VaultGroupTimeseriesResponse,
|
|
32
40
|
VaultTimeseriesPoint,
|
|
33
41
|
VaultTimeseriesResponse,
|
|
34
42
|
} from './client';
|
package/src/client.ts
CHANGED
|
@@ -20,6 +20,9 @@ export enum AttributionMode {
|
|
|
20
20
|
|
|
21
21
|
export type ChainId = string | number;
|
|
22
22
|
|
|
23
|
+
/** The static vault manifest bundled with this SDK release; the GauntletClient default. */
|
|
24
|
+
export const bundledVaultManifest = bundledManifest as VaultManifest;
|
|
25
|
+
|
|
23
26
|
export interface GauntletClientConfig {
|
|
24
27
|
/** Gaia API key, sent as `x-api-key` on `client.api` requests. Anonymous access is rate-limited. */
|
|
25
28
|
apiKey?: string;
|
|
@@ -68,7 +71,7 @@ export class GauntletClient {
|
|
|
68
71
|
/** Typed client for the Gaia REST API (vaults, positions, activity, tvl, prices). */
|
|
69
72
|
readonly api: GauntletApi;
|
|
70
73
|
|
|
71
|
-
private _manifest: VaultManifest =
|
|
74
|
+
private _manifest: VaultManifest = bundledVaultManifest;
|
|
72
75
|
|
|
73
76
|
constructor(config: GauntletClientConfig) {
|
|
74
77
|
this.apiKey = config.apiKey;
|
package/src/constants.ts
CHANGED
|
@@ -17,6 +17,7 @@ export const CHAIN_NAMES: Record<number, string> = {
|
|
|
17
17
|
8453: 'base',
|
|
18
18
|
42161: 'arbitrum',
|
|
19
19
|
10: 'optimism',
|
|
20
|
+
5042: 'arc',
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
// Approximate 3-day block lookback per chain based on avg block time.
|
|
@@ -25,6 +26,7 @@ export const BLOCKS_3_DAYS: Record<number, bigint> = {
|
|
|
25
26
|
8453: 129_600n,
|
|
26
27
|
42161: 1_036_800n,
|
|
27
28
|
10: 129_600n,
|
|
29
|
+
5042: 518_400n,
|
|
28
30
|
};
|
|
29
31
|
export const DEFAULT_BLOCKS_3_DAYS = 129_600n;
|
|
30
32
|
|
package/src/errors.ts
CHANGED
|
@@ -202,3 +202,10 @@ export class InvalidSlippageBPSError extends GauntletSDKError {
|
|
|
202
202
|
this.slippage = slippage;
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
|
+
|
|
206
|
+
export class InvalidSyncDepositBoundError extends GauntletSDKError {
|
|
207
|
+
constructor() {
|
|
208
|
+
super('Sync deposit minUnitsOut requires explicit sync mode and must be greater than zero');
|
|
209
|
+
this.name = 'InvalidSyncDepositBoundError';
|
|
210
|
+
}
|
|
211
|
+
}
|
package/src/evm/adapters/aera.ts
CHANGED
|
@@ -225,6 +225,7 @@ export const aeraAdapter: EvmProtocolAdapter = {
|
|
|
225
225
|
solverTip = DEFAULT_SOLVER_TIP,
|
|
226
226
|
maxPriceAge = DEFAULT_MAX_PRICE_AGE,
|
|
227
227
|
aeraRuntime,
|
|
228
|
+
minUnitsOut: requestedMinUnitsOut,
|
|
228
229
|
} = params;
|
|
229
230
|
|
|
230
231
|
const runtime = requireAeraRuntime(aeraRuntime);
|
|
@@ -238,17 +239,19 @@ export const aeraAdapter: EvmProtocolAdapter = {
|
|
|
238
239
|
throw new UnsupportedFeatureError('Aera: sync operations on V1');
|
|
239
240
|
}
|
|
240
241
|
|
|
241
|
-
const
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
242
|
+
const minUnitsOut =
|
|
243
|
+
requestedMinUnitsOut ??
|
|
244
|
+
applySlippageDown(
|
|
245
|
+
await getDepositUnitsOut({
|
|
246
|
+
publicClient,
|
|
247
|
+
runtime,
|
|
248
|
+
vault: vault.vaultAddress,
|
|
249
|
+
token: asset.address,
|
|
250
|
+
tokensIn: isAsync ? subtractSolverTip(amount, solverTip) : amount,
|
|
251
|
+
isAsync,
|
|
252
|
+
}),
|
|
253
|
+
slippageBps
|
|
254
|
+
);
|
|
252
255
|
|
|
253
256
|
if (isAsync) {
|
|
254
257
|
const deadline = getRequestDeadline(vault.expirationDays);
|
|
@@ -38,6 +38,8 @@ export interface AdapterDepositParams {
|
|
|
38
38
|
/** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */
|
|
39
39
|
maxPriceAge?: bigint;
|
|
40
40
|
aeraRuntime?: AeraRuntimeContracts;
|
|
41
|
+
/** Caller-reviewed minimum output for an explicit synchronous deposit. */
|
|
42
|
+
minUnitsOut?: bigint;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export type AdapterWithdrawParams = {
|
|
@@ -4,11 +4,14 @@ import {
|
|
|
4
4
|
type GetContractReturnType,
|
|
5
5
|
type PublicClient,
|
|
6
6
|
getContract,
|
|
7
|
+
zeroAddress,
|
|
7
8
|
} from 'viem';
|
|
9
|
+
import { erc20Abi } from '../abis/erc20';
|
|
8
10
|
import { priceAndFeeCalculatorV2Abi } from '../abis/priceAndFeeCalculatorV2';
|
|
9
11
|
import { provisionerV2Abi } from '../abis/provisionerV2';
|
|
10
12
|
import {
|
|
11
13
|
Rounding,
|
|
14
|
+
convertTokenToNumeraire,
|
|
12
15
|
convertTokenToUnitsIfActive,
|
|
13
16
|
convertUnitsToTokenIfActive,
|
|
14
17
|
} from './priceAndFeeCalculator';
|
|
@@ -74,7 +77,31 @@ async function getTokenDetails(
|
|
|
74
77
|
});
|
|
75
78
|
}
|
|
76
79
|
|
|
77
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Returns the vault's currently known sync-redeem liquidity in tokens.
|
|
82
|
+
*
|
|
83
|
+
* When a pull-funds pointer is configured, the provisioner may source more tokens during the
|
|
84
|
+
* redemption, so the vault's current token balance is not a reliable liquidity limit.
|
|
85
|
+
*/
|
|
86
|
+
export async function getKnownSyncRedeemLiquidityTokens(
|
|
87
|
+
client: PublicClient,
|
|
88
|
+
vault: Address,
|
|
89
|
+
token: Address,
|
|
90
|
+
hasPullFundsSubmitData: boolean,
|
|
91
|
+
options: SyncRedeemReadOptions = {}
|
|
92
|
+
): Promise<bigint | undefined> {
|
|
93
|
+
if (hasPullFundsSubmitData) return undefined;
|
|
94
|
+
|
|
95
|
+
return client.readContract({
|
|
96
|
+
address: token,
|
|
97
|
+
abi: erc20Abi,
|
|
98
|
+
functionName: 'balanceOf',
|
|
99
|
+
args: [vault],
|
|
100
|
+
...readAtBlock(options),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async function getDepositQuote({
|
|
78
105
|
client,
|
|
79
106
|
provisioner,
|
|
80
107
|
feeCalculator,
|
|
@@ -94,12 +121,12 @@ async function getDepositUnitsOut({
|
|
|
94
121
|
tokensIn: bigint;
|
|
95
122
|
multiplierIndex: 4 | 6;
|
|
96
123
|
options?: SyncRedeemReadOptions;
|
|
97
|
-
}): Promise<bigint> {
|
|
124
|
+
}): Promise<{ unitsOut: bigint; multiplierBps: bigint }> {
|
|
98
125
|
const tokenDetails = await getTokenDetails(client, provisioner, token, options);
|
|
99
|
-
const
|
|
100
|
-
const adjustedTokensIn = (tokensIn *
|
|
126
|
+
const multiplierBps = BigInt(tokenDetails[multiplierIndex]);
|
|
127
|
+
const adjustedTokensIn = (tokensIn * multiplierBps) / MAX_BPS;
|
|
101
128
|
|
|
102
|
-
|
|
129
|
+
const unitsOut = await convertTokenToUnitsIfActive(
|
|
103
130
|
client,
|
|
104
131
|
feeCalculator,
|
|
105
132
|
feeCalculatorVersion,
|
|
@@ -109,6 +136,8 @@ async function getDepositUnitsOut({
|
|
|
109
136
|
Rounding.Floor,
|
|
110
137
|
options
|
|
111
138
|
);
|
|
139
|
+
|
|
140
|
+
return { unitsOut, multiplierBps };
|
|
112
141
|
}
|
|
113
142
|
|
|
114
143
|
async function getRedeemTokenOut({
|
|
@@ -198,20 +227,22 @@ export interface SyncRedeemRate {
|
|
|
198
227
|
}
|
|
199
228
|
|
|
200
229
|
/**
|
|
201
|
-
* Reads the live sync redeem rate
|
|
202
|
-
*
|
|
230
|
+
* Reads the live sync redeem rate and whether pull-funds calldata is configured.
|
|
231
|
+
*
|
|
232
|
+
* Both values come from the same token-details read, avoiding another RPC request when a quote
|
|
233
|
+
* needs to determine whether the vault balance is a reliable liquidity limit.
|
|
203
234
|
*
|
|
204
235
|
* @throws {StalePriceError} If the oracle price is older than the configured max age,
|
|
205
236
|
* in which case the on-chain sync redeem would revert.
|
|
206
237
|
*/
|
|
207
|
-
export async function
|
|
238
|
+
export async function getSyncRedeemRateContext(
|
|
208
239
|
client: PublicClient,
|
|
209
240
|
provisioner: Address,
|
|
210
241
|
vault: Address,
|
|
211
242
|
token: Address,
|
|
212
243
|
feeCalculator: Address,
|
|
213
244
|
options: SyncRedeemReadOptions = {}
|
|
214
|
-
): Promise<SyncRedeemRate> {
|
|
245
|
+
): Promise<{ rate: SyncRedeemRate; hasPullFundsSubmitData: boolean }> {
|
|
215
246
|
const readContext = await resolveReadContext(client, options);
|
|
216
247
|
const [tokenDetails, syncRedeemDetails, anchorTimestamp] = await client.multicall({
|
|
217
248
|
contracts: [
|
|
@@ -256,12 +287,28 @@ export async function getSyncRedeemRate(
|
|
|
256
287
|
: ((blockTimestamp - priceTimestamp) * maxDynamicPremiumBps + maxPriceAge - 1n) / maxPriceAge;
|
|
257
288
|
|
|
258
289
|
return {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
290
|
+
rate: {
|
|
291
|
+
baseMultiplierBps,
|
|
292
|
+
dynamicPremiumBps,
|
|
293
|
+
effectiveMultiplierBps: baseMultiplierBps - dynamicPremiumBps,
|
|
294
|
+
},
|
|
295
|
+
hasPullFundsSubmitData: tokenDetails[9] !== zeroAddress,
|
|
262
296
|
};
|
|
263
297
|
}
|
|
264
298
|
|
|
299
|
+
/** Preserves the existing rate-only API for callers that do not need pull-funds state. */
|
|
300
|
+
export async function getSyncRedeemRate(
|
|
301
|
+
client: PublicClient,
|
|
302
|
+
provisioner: Address,
|
|
303
|
+
vault: Address,
|
|
304
|
+
token: Address,
|
|
305
|
+
feeCalculator: Address,
|
|
306
|
+
options: SyncRedeemReadOptions = {}
|
|
307
|
+
): Promise<SyncRedeemRate> {
|
|
308
|
+
return (await getSyncRedeemRateContext(client, provisioner, vault, token, feeCalculator, options))
|
|
309
|
+
.rate;
|
|
310
|
+
}
|
|
311
|
+
|
|
265
312
|
async function getSyncRedeemMultiplier(
|
|
266
313
|
client: PublicClient,
|
|
267
314
|
provisioner: Address,
|
|
@@ -315,7 +362,7 @@ export async function getAsyncDepositUnitsOut(
|
|
|
315
362
|
token: Address,
|
|
316
363
|
tokensIn: bigint
|
|
317
364
|
): Promise<bigint> {
|
|
318
|
-
|
|
365
|
+
const quote = await getDepositQuote({
|
|
319
366
|
client,
|
|
320
367
|
provisioner,
|
|
321
368
|
feeCalculator,
|
|
@@ -325,9 +372,10 @@ export async function getAsyncDepositUnitsOut(
|
|
|
325
372
|
tokensIn,
|
|
326
373
|
multiplierIndex: 4,
|
|
327
374
|
});
|
|
375
|
+
return quote.unitsOut;
|
|
328
376
|
}
|
|
329
377
|
|
|
330
|
-
|
|
378
|
+
const getSyncDepositQuote = (
|
|
331
379
|
client: PublicClient,
|
|
332
380
|
provisioner: Address,
|
|
333
381
|
feeCalculator: Address,
|
|
@@ -335,8 +383,8 @@ export async function getSyncDepositUnitsOut(
|
|
|
335
383
|
vault: Address,
|
|
336
384
|
token: Address,
|
|
337
385
|
tokensIn: bigint
|
|
338
|
-
)
|
|
339
|
-
|
|
386
|
+
) =>
|
|
387
|
+
getDepositQuote({
|
|
340
388
|
client,
|
|
341
389
|
provisioner,
|
|
342
390
|
feeCalculator,
|
|
@@ -346,6 +394,66 @@ export async function getSyncDepositUnitsOut(
|
|
|
346
394
|
tokensIn,
|
|
347
395
|
multiplierIndex: 6,
|
|
348
396
|
});
|
|
397
|
+
|
|
398
|
+
export async function getSyncDepositUnitsOut(
|
|
399
|
+
client: PublicClient,
|
|
400
|
+
provisioner: Address,
|
|
401
|
+
feeCalculator: Address,
|
|
402
|
+
feeCalculatorVersion: ContractVersion,
|
|
403
|
+
vault: Address,
|
|
404
|
+
token: Address,
|
|
405
|
+
tokensIn: bigint
|
|
406
|
+
): Promise<bigint> {
|
|
407
|
+
const quote = await getSyncDepositQuote(
|
|
408
|
+
client,
|
|
409
|
+
provisioner,
|
|
410
|
+
feeCalculator,
|
|
411
|
+
feeCalculatorVersion,
|
|
412
|
+
vault,
|
|
413
|
+
token,
|
|
414
|
+
tokensIn
|
|
415
|
+
);
|
|
416
|
+
return quote.unitsOut;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export async function getSyncDepositQuoteValues(
|
|
420
|
+
client: PublicClient,
|
|
421
|
+
provisioner: Address,
|
|
422
|
+
feeCalculator: Address,
|
|
423
|
+
feeCalculatorVersion: ContractVersion,
|
|
424
|
+
vault: Address,
|
|
425
|
+
token: Address,
|
|
426
|
+
tokensIn: bigint
|
|
427
|
+
): Promise<{ unitsOut: bigint; feeBps: bigint; numeraireOut: bigint }> {
|
|
428
|
+
const { unitsOut, multiplierBps } = await getSyncDepositQuote(
|
|
429
|
+
client,
|
|
430
|
+
provisioner,
|
|
431
|
+
feeCalculator,
|
|
432
|
+
feeCalculatorVersion,
|
|
433
|
+
vault,
|
|
434
|
+
token,
|
|
435
|
+
tokensIn
|
|
436
|
+
);
|
|
437
|
+
const numeraireOut = await convertTokenToNumeraire(
|
|
438
|
+
client,
|
|
439
|
+
feeCalculator,
|
|
440
|
+
feeCalculatorVersion,
|
|
441
|
+
vault,
|
|
442
|
+
token,
|
|
443
|
+
(tokensIn * multiplierBps) / MAX_BPS
|
|
444
|
+
);
|
|
445
|
+
return { unitsOut, feeBps: MAX_BPS - multiplierBps, numeraireOut };
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/** Reads the live Instant Supply fee for a vault token, independent of the deposit amount. */
|
|
449
|
+
export async function getSyncDepositFeeBps(
|
|
450
|
+
client: PublicClient,
|
|
451
|
+
provisioner: Address,
|
|
452
|
+
token: Address,
|
|
453
|
+
options: SyncRedeemReadOptions = {}
|
|
454
|
+
): Promise<bigint> {
|
|
455
|
+
const tokenDetails = await getTokenDetails(client, provisioner, token, options);
|
|
456
|
+
return MAX_BPS - BigInt(tokenDetails[6]);
|
|
349
457
|
}
|
|
350
458
|
|
|
351
459
|
export async function getAsyncRedeemTokenOut(
|
package/src/evm/deposit.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
VaultNotFoundError,
|
|
9
9
|
UnsupportedAssetError,
|
|
10
10
|
InvalidSlippageBPSError,
|
|
11
|
+
InvalidSyncDepositBoundError,
|
|
11
12
|
} from '../errors';
|
|
12
13
|
import {
|
|
13
14
|
resolveAeraRuntimeContracts,
|
|
@@ -40,6 +41,8 @@ export interface EvmDepositParams {
|
|
|
40
41
|
solverTip?: bigint;
|
|
41
42
|
/** Maximum price age passed to async Aera provisioner requests. Defaults to 10 days. */
|
|
42
43
|
maxPriceAge?: bigint;
|
|
44
|
+
/** Caller-reviewed minimum output for an explicit Aera synchronous deposit. */
|
|
45
|
+
minUnitsOut?: bigint;
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
/**
|
|
@@ -74,13 +77,15 @@ export async function getDepositTx(
|
|
|
74
77
|
client: GauntletClient,
|
|
75
78
|
params: EvmDepositParams
|
|
76
79
|
): Promise<PreparedTx[]> {
|
|
80
|
+
const slippageBps = params.slippageBps ?? DEFAULT_BPS;
|
|
81
|
+
if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {
|
|
82
|
+
throw new InvalidSlippageBPSError(slippageBps);
|
|
83
|
+
}
|
|
77
84
|
if (
|
|
78
|
-
params.
|
|
79
|
-
(
|
|
80
|
-
params.slippageBps < 0 ||
|
|
81
|
-
params.slippageBps > Number(MAX_BPS))
|
|
85
|
+
params.minUnitsOut !== undefined &&
|
|
86
|
+
(typeof params.minUnitsOut !== 'bigint' || params.minUnitsOut <= 0n)
|
|
82
87
|
) {
|
|
83
|
-
throw new
|
|
88
|
+
throw new InvalidSyncDepositBoundError();
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
const resolved = await resolveVault(client, params.vaultId, params.chainId);
|
|
@@ -105,6 +110,12 @@ export async function getDepositTx(
|
|
|
105
110
|
}
|
|
106
111
|
|
|
107
112
|
const requestedDepositMode = parseOperationMode(params.vaultId, params.depositMode);
|
|
113
|
+
if (
|
|
114
|
+
params.minUnitsOut !== undefined &&
|
|
115
|
+
(protocol !== 'aera' || requestedDepositMode !== 'sync')
|
|
116
|
+
) {
|
|
117
|
+
throw new InvalidSyncDepositBoundError();
|
|
118
|
+
}
|
|
108
119
|
let modifiedDepositMode: OperationMode;
|
|
109
120
|
let aeraRuntime: AeraRuntimeContracts | undefined;
|
|
110
121
|
|
|
@@ -159,12 +170,13 @@ export async function getDepositTx(
|
|
|
159
170
|
async: modifiedDepositMode === 'async',
|
|
160
171
|
asset: token,
|
|
161
172
|
publicClient,
|
|
162
|
-
slippageBps
|
|
173
|
+
slippageBps,
|
|
163
174
|
solverTip: params.solverTip,
|
|
164
175
|
maxPriceAge: params.maxPriceAge,
|
|
165
176
|
aeraRuntime,
|
|
177
|
+
minUnitsOut: params.minUnitsOut,
|
|
166
178
|
});
|
|
167
179
|
steps.push(...depositSteps);
|
|
168
180
|
|
|
169
|
-
return
|
|
181
|
+
return Promise.all(steps.map((step) => encodeTransactionWithAttribution(client, step)));
|
|
170
182
|
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { GauntletClient } from '../client';
|
|
2
|
+
import { DEFAULT_BPS, MAX_BPS } from '../constants';
|
|
3
|
+
import {
|
|
4
|
+
InvalidSlippageBPSError,
|
|
5
|
+
InvalidSyncDepositBoundError,
|
|
6
|
+
UnsupportedAssetError,
|
|
7
|
+
UnsupportedFeatureError,
|
|
8
|
+
VaultNotFoundError,
|
|
9
|
+
} from '../errors';
|
|
10
|
+
import {
|
|
11
|
+
applySlippageDown,
|
|
12
|
+
resolveAeraRuntimeContracts,
|
|
13
|
+
resolveAeraTokenModeSupport,
|
|
14
|
+
} from './aeraContracts';
|
|
15
|
+
import { getSyncDepositFeeBps, getSyncDepositQuoteValues } from './aeraContracts/v2';
|
|
16
|
+
import { resolveOperationMode } from './operationMode';
|
|
17
|
+
import { ContractVersion } from './types';
|
|
18
|
+
import { resolveVault } from './vaults';
|
|
19
|
+
|
|
20
|
+
export type SyncDepositQuote = Readonly<{
|
|
21
|
+
unitsOut: bigint;
|
|
22
|
+
minUnitsOut: bigint;
|
|
23
|
+
/** Deposit amount converted to the vault's numeraire, after the Instant Supply fee. */
|
|
24
|
+
numeraireOut: bigint;
|
|
25
|
+
/** Instant Supply fee applied to the deposited token amount, in basis points. */
|
|
26
|
+
feeBps: bigint;
|
|
27
|
+
/** Slippage tolerance used to derive `minUnitsOut`, in basis points. */
|
|
28
|
+
slippageBps: number;
|
|
29
|
+
}>;
|
|
30
|
+
|
|
31
|
+
export type SyncDepositQuoteParams = {
|
|
32
|
+
vaultId: string;
|
|
33
|
+
chainId?: number;
|
|
34
|
+
assetSymbol?: string;
|
|
35
|
+
amount: bigint;
|
|
36
|
+
slippageBps?: number;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type SyncDepositRateParams = {
|
|
40
|
+
vaultId: string;
|
|
41
|
+
chainId?: number;
|
|
42
|
+
assetSymbol?: string;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type SyncDepositRate = Readonly<{
|
|
46
|
+
/** Instant Supply fee, in basis points. Independent of the deposit amount. */
|
|
47
|
+
feeBps: bigint;
|
|
48
|
+
}>;
|
|
49
|
+
|
|
50
|
+
async function resolveSyncDepositContext(
|
|
51
|
+
client: GauntletClient,
|
|
52
|
+
params: SyncDepositRateParams,
|
|
53
|
+
readKind: 'quote' | 'rate'
|
|
54
|
+
) {
|
|
55
|
+
const resolved = await resolveVault(client, params.vaultId, params.chainId);
|
|
56
|
+
if (!resolved) throw new VaultNotFoundError(params.vaultId, params.chainId);
|
|
57
|
+
if (resolved.protocol !== 'aera') {
|
|
58
|
+
throw new UnsupportedFeatureError(
|
|
59
|
+
readKind === 'quote'
|
|
60
|
+
? 'Sync deposit quote is only available for Aera vaults'
|
|
61
|
+
: 'Sync deposit rate is only available for Aera vaults'
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const { vault } = resolved;
|
|
66
|
+
const token =
|
|
67
|
+
vault.supplyToken.length > 1
|
|
68
|
+
? vault.supplyToken.find(({ symbol }) => symbol === params.assetSymbol)
|
|
69
|
+
: vault.supplyToken[0];
|
|
70
|
+
if (!token) throw new UnsupportedAssetError(params.assetSymbol ?? 'unknown', params.vaultId);
|
|
71
|
+
|
|
72
|
+
const publicClient = client.getPublicClient(params.chainId ?? vault.chainId);
|
|
73
|
+
const runtime = await resolveAeraRuntimeContracts(publicClient, vault);
|
|
74
|
+
if (runtime.provisioner.version !== ContractVersion.V2) {
|
|
75
|
+
throw new UnsupportedFeatureError(
|
|
76
|
+
readKind === 'quote'
|
|
77
|
+
? 'Sync deposit quote requires an Aera V2 provisioner'
|
|
78
|
+
: 'Sync deposit rate requires an Aera V2 provisioner'
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const tokenModeSupport = await resolveAeraTokenModeSupport(publicClient, runtime, token.address, {
|
|
83
|
+
includeSyncModes: true,
|
|
84
|
+
});
|
|
85
|
+
resolveOperationMode(params.vaultId, 'sync', {
|
|
86
|
+
async: tokenModeSupport.asyncDeposit,
|
|
87
|
+
sync: tokenModeSupport.syncDeposit,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
return { publicClient, vault, token, runtime };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Quotes an Aera synchronous deposit and its execution bounds. */
|
|
94
|
+
export async function getSyncDepositQuote(
|
|
95
|
+
client: GauntletClient,
|
|
96
|
+
params: SyncDepositQuoteParams
|
|
97
|
+
): Promise<SyncDepositQuote> {
|
|
98
|
+
const slippageBps = params.slippageBps ?? DEFAULT_BPS;
|
|
99
|
+
if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > Number(MAX_BPS)) {
|
|
100
|
+
throw new InvalidSlippageBPSError(slippageBps);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const { publicClient, vault, token, runtime } = await resolveSyncDepositContext(
|
|
104
|
+
client,
|
|
105
|
+
params,
|
|
106
|
+
'quote'
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
const { unitsOut, feeBps, numeraireOut } = await getSyncDepositQuoteValues(
|
|
110
|
+
publicClient,
|
|
111
|
+
runtime.provisioner.address,
|
|
112
|
+
runtime.feeCalculator.address,
|
|
113
|
+
runtime.feeCalculator.version,
|
|
114
|
+
vault.vaultAddress,
|
|
115
|
+
token.address,
|
|
116
|
+
params.amount
|
|
117
|
+
);
|
|
118
|
+
const minUnitsOut = applySlippageDown(unitsOut, slippageBps);
|
|
119
|
+
if (minUnitsOut <= 0n) throw new InvalidSyncDepositBoundError();
|
|
120
|
+
|
|
121
|
+
return { unitsOut, minUnitsOut, numeraireOut, feeBps, slippageBps };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Reads the live Instant Supply fee for a vault token, without requiring a deposit amount. */
|
|
125
|
+
export async function getSyncDepositRate(
|
|
126
|
+
client: GauntletClient,
|
|
127
|
+
params: SyncDepositRateParams
|
|
128
|
+
): Promise<SyncDepositRate> {
|
|
129
|
+
const { publicClient, runtime, token } = await resolveSyncDepositContext(client, params, 'rate');
|
|
130
|
+
|
|
131
|
+
const feeBps = await getSyncDepositFeeBps(
|
|
132
|
+
publicClient,
|
|
133
|
+
runtime.provisioner.address,
|
|
134
|
+
token.address
|
|
135
|
+
);
|
|
136
|
+
return { feeBps };
|
|
137
|
+
}
|
package/src/evm/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { getDepositTx } from './deposit';
|
|
2
2
|
export { getDepositReceiverApprovalTx } from './depositReceiverApproval';
|
|
3
|
+
export { getSyncDepositQuote, getSyncDepositRate } from './depositQuote';
|
|
3
4
|
export { getWithdrawTx } from './withdraw';
|
|
4
|
-
export { getSyncWithdrawQuote } from './withdrawQuote';
|
|
5
|
+
export { getSyncWithdrawQuote, getSyncWithdrawRate } from './withdrawQuote';
|
|
5
6
|
export { getAeraTokenModeSupport } from './tokenModes';
|
|
6
7
|
export { getUserCurrentBalance } from './userCurrentBalance';
|
|
7
8
|
export { getVaults, VaultId } from './vaults';
|
|
@@ -14,6 +15,7 @@ export {
|
|
|
14
15
|
ChainMismatchError,
|
|
15
16
|
InvalidSlippageBPSError,
|
|
16
17
|
InvalidSolverTipError,
|
|
18
|
+
InvalidSyncDepositBoundError,
|
|
17
19
|
InvalidSyncWithdrawBoundError,
|
|
18
20
|
InvalidWithdrawParamsError,
|
|
19
21
|
RpcNotConfiguredError,
|
|
@@ -38,6 +40,12 @@ export {
|
|
|
38
40
|
|
|
39
41
|
export type { EvmDepositParams } from './deposit';
|
|
40
42
|
export type { EvmDepositReceiverApprovalParams } from './depositReceiverApproval';
|
|
43
|
+
export type {
|
|
44
|
+
SyncDepositQuote,
|
|
45
|
+
SyncDepositQuoteParams,
|
|
46
|
+
SyncDepositRate,
|
|
47
|
+
SyncDepositRateParams,
|
|
48
|
+
} from './depositQuote';
|
|
41
49
|
export type { EvmWithdrawParams } from './withdraw';
|
|
42
50
|
export type {
|
|
43
51
|
SyncWithdrawQuote,
|
|
@@ -46,6 +54,7 @@ export type {
|
|
|
46
54
|
SyncWithdrawQuoteContext,
|
|
47
55
|
SyncWithdrawQuoteRequest,
|
|
48
56
|
SyncWithdrawQuoteBounds,
|
|
57
|
+
SyncWithdrawRateParams,
|
|
49
58
|
} from './withdrawQuote';
|
|
50
59
|
export type { AeraTokenModeSupportParams } from './tokenModes';
|
|
51
60
|
export type { SyncRedeemRate } from './aeraContracts/v2';
|
|
@@ -4,6 +4,7 @@ import type { EvmVaultDeployment } from './types';
|
|
|
4
4
|
import { ChainMismatchError, UnsupportedProtocolError, VaultNotFoundError } from '../errors';
|
|
5
5
|
import { getMultiDepositorVault, resolveAeraRuntimeContracts } from './aeraContracts';
|
|
6
6
|
import { convertUnitsToToken } from './aeraContracts/priceAndFeeCalculator';
|
|
7
|
+
import { getUserUnitsRefundableUntil } from './aeraContracts/v2';
|
|
7
8
|
import { provisionerV2Abi } from './abis/provisionerV2';
|
|
8
9
|
import { ContractVersion } from './types';
|
|
9
10
|
import { BLOCKS_3_DAYS, CHAIN_NAMES, DEFAULT_BLOCKS_3_DAYS, LOG_PAGE_SIZE } from '../constants';
|
|
@@ -59,6 +60,8 @@ export interface UserCurrentBalanceParams {
|
|
|
59
60
|
export interface UserCurrentBalance {
|
|
60
61
|
/** Chain identifier, e.g. "base" */
|
|
61
62
|
chain: string;
|
|
63
|
+
/** EVM chain id of the deployment, e.g. 8453 */
|
|
64
|
+
chainId: number;
|
|
62
65
|
token: Address;
|
|
63
66
|
decimals: number;
|
|
64
67
|
/** Assets queued via async deposit, not yet earning */
|
|
@@ -67,6 +70,8 @@ export interface UserCurrentBalance {
|
|
|
67
70
|
balance: bigint;
|
|
68
71
|
/** Assets queued via async withdraw, not yet claimable */
|
|
69
72
|
pendingWithdraw: bigint;
|
|
73
|
+
/** Timestamp until which this account cannot redeem vault units. */
|
|
74
|
+
unitsLockedUntil?: bigint;
|
|
70
75
|
}
|
|
71
76
|
|
|
72
77
|
// V2 legacy wrapper calls can emit both receiver-aware and legacy events for one request.
|
|
@@ -101,6 +106,9 @@ async function queryDeploymentBalance(
|
|
|
101
106
|
]);
|
|
102
107
|
const provisionerAddress = runtime.provisioner.address;
|
|
103
108
|
const isV2 = runtime.provisioner.version === ContractVersion.V2;
|
|
109
|
+
const unitsLockedUntilPromise = isV2
|
|
110
|
+
? getUserUnitsRefundableUntil(publicClient, provisionerAddress, address)
|
|
111
|
+
: Promise.resolve(undefined);
|
|
104
112
|
|
|
105
113
|
const balance = await convertUnitsToToken(
|
|
106
114
|
publicClient,
|
|
@@ -218,14 +226,17 @@ async function queryDeploymentBalance(
|
|
|
218
226
|
pendingWithdrawUnits
|
|
219
227
|
)
|
|
220
228
|
: 0n;
|
|
229
|
+
const unitsLockedUntil = await unitsLockedUntilPromise;
|
|
221
230
|
|
|
222
231
|
return {
|
|
223
232
|
chain: CHAIN_NAMES[deployment.chainId] ?? `chain-${deployment.chainId}`,
|
|
233
|
+
chainId: deployment.chainId,
|
|
224
234
|
token: token.address,
|
|
225
235
|
decimals: token.decimals,
|
|
226
236
|
pendingDeposit,
|
|
227
237
|
balance,
|
|
228
238
|
pendingWithdraw,
|
|
239
|
+
...(unitsLockedUntil !== undefined ? { unitsLockedUntil } : {}),
|
|
229
240
|
};
|
|
230
241
|
}
|
|
231
242
|
|
|
@@ -256,7 +267,7 @@ async function queryDeploymentBalance(
|
|
|
256
267
|
* vaultId: 'baseUsdcPrime',
|
|
257
268
|
* address: '0xYourWalletAddress',
|
|
258
269
|
* });
|
|
259
|
-
* // [{ chain: 'base', token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]
|
|
270
|
+
* // [{ chain: 'base', chainId: 8453, token: '0x...', decimals: 6, balance: 100_000_000n, pendingDeposit: 0n, pendingWithdraw: 0n }]
|
|
260
271
|
* ```
|
|
261
272
|
*/
|
|
262
273
|
export async function getUserCurrentBalance(
|
package/src/evm/vaults.ts
CHANGED
|
@@ -8,16 +8,9 @@ export enum VaultId {
|
|
|
8
8
|
EthUsdcPrime = 'ethUsdcPrime',
|
|
9
9
|
AeraUsdAlpha = 'gtusda',
|
|
10
10
|
EthUsdcPrimeV2 = 'ethUsdcPrimeV2',
|
|
11
|
-
AeraUsdAlphaStaging = 'stgusda',
|
|
12
|
-
AeraUsdAlphaDev = 'devusda',
|
|
13
|
-
AeraUsdAlphaDevDeux = 'devusda2',
|
|
14
11
|
AeraLeveredFalconX = 'gpaafalconx',
|
|
15
|
-
AeraLeveredFalconXStaging = 'pytstg',
|
|
16
12
|
AeraSyrupUsdc = 'gpsyrupusdc',
|
|
17
|
-
AeraSyrupUsdcStaging = 'syruppytstg',
|
|
18
13
|
AeraBtcYield = 'gtbtc',
|
|
19
|
-
AeraBtcYieldStaging = 'gtbtcstaging',
|
|
20
|
-
AeraLeveredUsccStaging = 'gtusccstg',
|
|
21
14
|
AeraLeveredUscc = 'gtuscc',
|
|
22
15
|
AeraLend = 'gtlend',
|
|
23
16
|
AeraKastEth = 'kasteth',
|