gmx.vault
Documentation for eth_defi.gmx.vault Python module.
Read-only GMX V2 GM and GLV vault adapters.
GM and GLV ERC-20 tokens are liquidity-provider shares, not ERC-4626 vaults. Their historical USD share-price equivalent comes from GMX value-and-supply events whose ratio normalises changes in liquidity and share count. Asynchronous deposit and withdrawal transactions are outside this dataset integration.
See GMX liquidity documentation.
Module Attributes
Explanation returned for unsupported generic GMX flow operations. |
|
Explanation returned for unsupported isolated GMX NAV reads. |
|
Non-binding operational estimate for a GMX keeper-executed liquidity request. |
Classes
Read cached GMX value-and-supply observations. |
|
One GMX V2 GLV multi-market liquidity-provider vault. |
|
One GMX V2 GM market-token liquidity-provider vault. |
|
Common read-only adapter surface for GM and GLV ERC-20 shares. |
- GMX_UNSUPPORTED_FLOW_REASON: str = 'GMX liquidity deposits and withdrawals are asynchronous ExchangeRouter requests and are not supported by the generic vault transaction adapter'
Explanation returned for unsupported generic GMX flow operations.
- GMX_HISTORICAL_READER_REASON: str = 'Use the GMX historical event reader through the common vault price scanner'
Explanation returned for unsupported isolated GMX NAV reads.
- GMX_REQUEST_SETTLEMENT_ESTIMATE = datetime.timedelta(seconds=60)
Non-binding operational estimate for a GMX keeper-executed liquidity request.
GMX documents the two-phase request lifecycle as taking typically a few seconds, but gives no contractual completion bound. One minute leaves a conservative UI buffer for request inclusion, oracle handling and keeper execution; it is not a claim that a redemption will complete in one minute. See https://docs.gmx.io/docs/api/contracts/architecture/
- class GMXHistoricalReader
Bases:
eth_defi.vault.base.VaultHistoricalReaderRead cached GMX value-and-supply observations.
- property uses_contextual_history: bool
Select the protocol-sourced history branch in the common scanner.
- construct_multicalls()
Return no static calls because GMX history is event sourced.
- process_result(block_number, timestamp, call_results)
Reject the static multicall path for GMX.
- Raises
RuntimeError – Always;
fetch_contextual_historical_reads()owns GMX reads.- Parameters
block_number (int) –
timestamp (datetime.datetime) –
call_results (list[eth_defi.event_reader.multicall_batcher.EncodedCallResult]) –
- Return type
- fetch_contextual_historical_reads(start_block, end_block, step)
Yield GMX observations downsampled to common block buckets.
- Parameters
- Returns
Supply-normalised GM or GLV historical rows.
- Return type
collections.abc.Iterable[eth_defi.vault.base.VaultHistoricalRead]
- __init__(vault)
- Parameters
vault (eth_defi.vault.base.VaultBase) –
Return this reader’s sparse share-price comparison threshold.
Event-only readers may require every exact price change; ordinary readers retain the existing ten-basis-point suppression threshold.
- Returns
Non-negative relative suppression threshold.
Return whether cash flows must be ignored by the sparse filter.
Vault-like products without a standard share-price method can still expose a supply-normalised price equivalent. Their TVL and supply changes must not create false performance observations.
- Returns
Truewhen the vault carries theshare_price_equivalencefeature.
- class GMXVaultBase
Bases:
eth_defi.vault.base.VaultBaseCommon read-only adapter surface for GM and GLV ERC-20 shares.
Create a GMX share-token adapter.
- Parameters
web3 – Arbitrum One or Avalanche connection.
spec – Chain and GM/GLV token address.
token_cache – Optional shared token metadata cache.
features – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier – Retained shared-adapter compatibility option.
require_denomination_token – Retained shared-adapter compatibility option.
- get_strategy_tags()
Return the maintained classifications for this reviewed deployment.
Only source-backed address entries are classified; an unreviewed deployment retains the explicit missing-information result.
- Returns
A fresh set of strategy tags, or
Nonewhen information is missing.- Return type
- feature: eth_defi.erc_4626.core.ERC4626Feature
Protocol feature selecting the concrete GM or GLV adapter.
- __init__(web3, spec, token_cache=None, features=None, default_block_identifier=None, require_denomination_token=False)
Create a GMX share-token adapter.
- Parameters
web3 (web3.main.Web3) – Arbitrum One or Avalanche connection.
spec (eth_defi.vault.base.VaultSpec) – Chain and GM/GLV token address.
token_cache (Optional[dict]) – Optional shared token metadata cache.
features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Retained shared-adapter compatibility option.
require_denomination_token (bool) – Retained shared-adapter compatibility option.
- Return type
None
- property address: eth_typing.evm.HexAddress
Return the checksum GM or GLV share-token address.
- property vault_address: eth_typing.evm.HexAddress
Return the scanner-compatible share-token address.
- property short_description: None
One-liner vault summary.
Shorter version of
description()suitable for listings and tablesReturns None if not available
Override in subclasses that support offchain metadata
Fetch GM or GLV ERC-20 metadata.
- Return type
Return the GM or GLV ERC-20 token address.
- fetch_denomination_token_address()
Return native USDC as the catalogue display denomination.
- Return type
- fetch_denomination_token()
Fetch native USDC metadata for the catalogue display denomination.
- Return type
- fetch_total_supply(block_identifier='latest')
Read decimal-scaled GM or GLV outstanding shares.
Reject an isolated live NAV read outside the historical pipeline.
- fetch_total_assets(block_identifier='latest')
Reject an isolated live TVL read outside the historical pipeline.
Reject an isolated live share-price read outside the historical pipeline.
- fetch_info()
Return scanner-compatible GMX product metadata.
- Return type
- fetch_scan_record_extra_data()
Export USDC display denomination and GMX product metadata.
- fetch_portfolio(universe, block_identifier=None)
Return no generic spot portfolio for protocol-managed liquidity.
- Parameters
universe (eth_defi.vault.base.TradingUniverse) –
block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) –
- Return type
- has_block_range_event_support()
Return whether generic vault flow events are supported.
- Return type
- has_deposit_distribution_to_all_positions()
Return whether generic automatic position distribution applies.
- Return type
- get_flags()
Return GMX market-making and liquidity-provision flags.
GM and GLV holders provide the inventory against which GMX trading is settled. Their pool claim receives part of protocol fees and trader losses, and bears trader profits.
- Returns
Manual flags plus the two strategy classifications.
- Return type
- get_flow_manager()
Reject unsupported generic flow accounting.
- Return type
- get_deposit_manager()
Reject unsupported asynchronous transaction construction.
- get_historical_reader(stateful)
Return the sparse GMX event reader.
- Parameters
stateful (bool) –
- Return type
- get_management_fee(block_identifier)
Return the zero depositor-facing management fee.
- get_performance_fee(block_identifier)
Return the zero depositor-facing performance fee.
- get_estimated_lock_up()
Return no fixed lock-up period.
- Return type
- get_withdrawal_period()
Describe GMX’s asynchronous, keeper-executed redemption lifecycle.
GMX liquidity withdrawals are submitted as requests and execute after a keeper supplies the required oracle prices. The official architecture documentation describes this as typically taking a few seconds, but the protocol does not provide a binding completion deadline: liquidity, oracle availability, gas prices and keeper execution can extend the wait. We therefore expose a one-minute non-binding estimate for the website while leaving the contractual minimum and maximum unset.
- Returns
Asynchronous withdrawal type with a one-minute settlement estimate.
- Return type
See also
- fetch_deposit_open()
Return unknown for enabled markets whose dynamic caps can still reject a deposit.
The catalogue synchroniser exports
Falsewhen GMX disables a product. For enabled markets, a successful deposit can still depend on dynamic pool caps and the deposit PnL-factor limit, so the adapter must not report an unconditionalTrue.
- get_link(referral=None)
Return the direct GMX pool-details page for this share token.
Both GM and GLV products use GMX’s
marketURL query parameter. The link includes the deployment chain so the GMX interface selects the correct network before resolving the product address.- Parameters
referral (Optional[str]) – Ignored because GMX’s pool-details route does not accept the common vault referral parameter.
- Returns
Direct GMX pool-details URL with the deposit view selected.
- Return type
See also
- property denomination_token: Optional[eth_defi.token.TokenDetails]
Get the token which denominates the vault valuation
Used in deposits and redemptions
Used in NAV calculation
Used in profit benchmarks
Usually USDC
- Returns
Token wrapper instance.
Maybe None for broken vaults like https://arbiscan.io/address/0x9d0fbc852deccb7dcdd6cb224fa7561efda74411#code
Note
Noneresults are not cached — the next access will retry the on-chain call. This avoids permanently caching a transient RPC failure.
- property deposit_manager: eth_defi.vault.deposit_redeem.VaultDepositManager
Deposit manager assocaited with this vault
- property description: Optional[str]
Human-readable vault strategy description.
Fetched from protocol-specific offchain sources (e.g. Euler GitHub labels, Lagoon web app API)
Returns None if the protocol does not provide descriptions or the vault is not in the metadata source
Override in subclasses that support offchain metadata
- fetch_available_liquidity(block_identifier='latest')
Get the amount of denomination token available for immediate withdrawal.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
Note: maxRedeem(address(0)) does NOT work as a proxy for available liquidity because it requires a specific address that has already deposited shares. For address(0), balanceOf is always 0, so maxRedeem returns 0 regardless of actual liquidity.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Amount in denomination token units (human-readable Decimal).
- Return type
- fetch_deposit_closed_reason()
Get human-readable reason why deposits are closed.
Override in protocol-specific subclasses
Default behaviour: no closure reason is known (return None)
- Returns
Human-readable string explaining why deposits are closed, or None if deposits are open or the adapter cannot determine a closure reason. Use
fetch_deposit_open()for explicit tri-state availability metadata.Example reasons:
”Epoch redemption window closed (opens in 14h)”
”Vault paused by admin”
”Max deposit cap reached”
”Vault utilisation too high”
- Return type
- fetch_deposit_next_open()
Get when deposits will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when deposits will next be available, or None if:
Deposits are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_minimum_deposit(block_identifier='latest')
Fetch a source-proven minimum deposit in decimal token units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small deposits. A zero result means the adapter positively established that the vault has no minimum deposit.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal denomination-token minimum, or
Nonewhen unknown.- Return type
- fetch_minimum_redemption(block_identifier='latest')
Fetch a source-proven redemption minimum in decimal share units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small redemptions. A zero result means the adapter positively established that the vault has no minimum redemption.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal vault-share minimum, or
Nonewhen unknown.- Return type
- fetch_redemption_closed_reason()
Get human-readable reason why redemptions are closed.
Override in protocol-specific subclasses
Default behaviour: assume redemptions are always open (return None)
- fetch_redemption_next_open()
Get when withdrawals/redemptions will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when withdrawals will next be available, or None if:
Withdrawals are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_utilisation_percent(block_identifier='latest')
Get the percentage of assets currently lent out.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Utilisation as float between 0.0 and 1.0 (0% to 100%).
- Return type
- property flow_manager: eth_defi.vault.base.VaultFlowManager
Flow manager associated with this vault
- get_deposit_fee(block_identifier)
Deposit fee is set to zero by default as vaults usually do not have deposit fees.
Internal: Use
get_fee_data().
- get_deposit_manager_capability()
Return static public transaction-adapter support, if any.
This method deliberately does not attempt to construct a manager or query live pause, cap, epoch, balance, allow-list, or liquidity state. Adapters opt in only after their complete deposit and redemption lifecycles have focused coverage.
Noneis therefore the safe default for unknown and protocol-specific vaults.- Returns
Adapter-specific capability object, or
Nonewhen unsupported.- Return type
Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]
- get_fee_data()
Get fee data structure for this vault.
- Raises
ValueError – In the case of broken or unimplemented fee reading methods in the smart contract
- Return type
- get_fee_mode()
Get how this vault accounts its fees.
- Return type
- get_notes()
Get a human readable message if we know somethign special is going on with this vault.
- get_risk()
Get risk profile of this vault.
- Return type
Return the source used for share-price observations.
Vault integrations override this method when they expose a share price. Returning
Nonedistinguishes unsupported or unknown pricing from a known source classification.- Returns
Share-price source, or
Nonewhen the adapter does not provide one.- Return type
- get_whitelist_notes()
Return an export caveat for the vault-wide whitelist status.
Adapters may attach a concise, stable explanation when a classification is an explicitly requested operating assumption or excludes an integration-specific permission mechanism. The note describes the policy classification only; it must not be used to report temporary deposit availability.
- get_withdraw_fee(block_identifier)
Withdraw fee is set to zero by default as vaults usually do not have withdraw fees.
Internal: Use
get_fee_data().
- has_custom_fees()
Does this vault have fees outside the shared fee model.
Custom fees cause risk in vault comparison because the shared management/performance/deposit/withdraw fee fields cannot describe the full fee structure.
Do not return
Truemerely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. ReturnTrueonly when some vault fee cannot be reflected in those standard fields as a fee-like value.- Returns
Trueif the vault has fees outside the shared fee model.- Return type
- property info: eth_defi.vault.base.VaultInfo
Get info dictionary related to this vault deployment.
Get cached data on the various vault parameters
- Returns
Vault protocol specific information dictionary
- is_account_whitelisted(address)
Determine whether an account has completed the vault’s KYC policy.
The result concerns KYC, manual identity approval, or recipient allowlist membership only. A protocol may still require scheduling, a token balance, an allowance, available capacity, or an open epoch before a deposit can be submitted. Callers must use the relevant deposit manager pre-flight before broadcasting a transaction.
- Parameters
address (eth_typing.evm.HexAddress) – Account whose deposit-policy membership is queried.
- Returns
Truewhen the account has the required pre-approval.- Raises
NotImplementedError – If the adapter cannot safely query account membership.
- Return type
- property manager_name: Optional[str]
Protocol-supplied vault manager or curator display name.
Used when the vault name itself does not contain the curator brand
Returns None if the protocol does not expose separate manager metadata
Override in subclasses that support manager or operator metadata
ERC-20 that presents vault shares.
User gets shares on deposit and burns them on redemption
- class GMXMarketVault
Bases:
eth_defi.gmx.vault.GMXVaultBaseOne GMX V2 GM market-token liquidity-provider vault.
Create a GMX share-token adapter.
- Parameters
web3 – Arbitrum One or Avalanche connection.
spec – Chain and GM/GLV token address.
token_cache – Optional shared token metadata cache.
features – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier – Retained shared-adapter compatibility option.
require_denomination_token – Retained shared-adapter compatibility option.
- feature: ERC4626Feature = 'gmx_gm'
Select GM market-token handling.
- __init__(web3, spec, token_cache=None, features=None, default_block_identifier=None, require_denomination_token=False)
Create a GMX share-token adapter.
- Parameters
web3 (web3.main.Web3) – Arbitrum One or Avalanche connection.
spec (eth_defi.vault.base.VaultSpec) – Chain and GM/GLV token address.
token_cache (Optional[dict]) – Optional shared token metadata cache.
features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Retained shared-adapter compatibility option.
require_denomination_token (bool) – Retained shared-adapter compatibility option.
- Return type
None
- property address: eth_typing.evm.HexAddress
Return the checksum GM or GLV share-token address.
- property denomination_token: Optional[eth_defi.token.TokenDetails]
Get the token which denominates the vault valuation
Used in deposits and redemptions
Used in NAV calculation
Used in profit benchmarks
Usually USDC
- Returns
Token wrapper instance.
Maybe None for broken vaults like https://arbiscan.io/address/0x9d0fbc852deccb7dcdd6cb224fa7561efda74411#code
Note
Noneresults are not cached — the next access will retry the on-chain call. This avoids permanently caching a transient RPC failure.
- property deposit_manager: eth_defi.vault.deposit_redeem.VaultDepositManager
Deposit manager assocaited with this vault
- property description: Optional[str]
Human-readable vault strategy description.
Fetched from protocol-specific offchain sources (e.g. Euler GitHub labels, Lagoon web app API)
Returns None if the protocol does not provide descriptions or the vault is not in the metadata source
Override in subclasses that support offchain metadata
- fetch_available_liquidity(block_identifier='latest')
Get the amount of denomination token available for immediate withdrawal.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
Note: maxRedeem(address(0)) does NOT work as a proxy for available liquidity because it requires a specific address that has already deposited shares. For address(0), balanceOf is always 0, so maxRedeem returns 0 regardless of actual liquidity.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Amount in denomination token units (human-readable Decimal).
- Return type
- fetch_denomination_token()
Fetch native USDC metadata for the catalogue display denomination.
- Return type
- fetch_denomination_token_address()
Return native USDC as the catalogue display denomination.
- Return type
- fetch_deposit_closed_reason()
Get human-readable reason why deposits are closed.
Override in protocol-specific subclasses
Default behaviour: no closure reason is known (return None)
- Returns
Human-readable string explaining why deposits are closed, or None if deposits are open or the adapter cannot determine a closure reason. Use
fetch_deposit_open()for explicit tri-state availability metadata.Example reasons:
”Epoch redemption window closed (opens in 14h)”
”Vault paused by admin”
”Max deposit cap reached”
”Vault utilisation too high”
- Return type
- fetch_deposit_next_open()
Get when deposits will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when deposits will next be available, or None if:
Deposits are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_deposit_open()
Return unknown for enabled markets whose dynamic caps can still reject a deposit.
The catalogue synchroniser exports
Falsewhen GMX disables a product. For enabled markets, a successful deposit can still depend on dynamic pool caps and the deposit PnL-factor limit, so the adapter must not report an unconditionalTrue.
- fetch_info()
Return scanner-compatible GMX product metadata.
- Return type
- fetch_minimum_deposit(block_identifier='latest')
Fetch a source-proven minimum deposit in decimal token units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small deposits. A zero result means the adapter positively established that the vault has no minimum deposit.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal denomination-token minimum, or
Nonewhen unknown.- Return type
- fetch_minimum_redemption(block_identifier='latest')
Fetch a source-proven redemption minimum in decimal share units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small redemptions. A zero result means the adapter positively established that the vault has no minimum redemption.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal vault-share minimum, or
Nonewhen unknown.- Return type
Reject an isolated live NAV read outside the historical pipeline.
- fetch_portfolio(universe, block_identifier=None)
Return no generic spot portfolio for protocol-managed liquidity.
- Parameters
universe (eth_defi.vault.base.TradingUniverse) –
block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) –
- Return type
- fetch_redemption_closed_reason()
Get human-readable reason why redemptions are closed.
Override in protocol-specific subclasses
Default behaviour: assume redemptions are always open (return None)
- fetch_redemption_next_open()
Get when withdrawals/redemptions will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when withdrawals will next be available, or None if:
Withdrawals are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_scan_record_extra_data()
Export USDC display denomination and GMX product metadata.
Reject an isolated live share-price read outside the historical pipeline.
Fetch GM or GLV ERC-20 metadata.
- Return type
Return the GM or GLV ERC-20 token address.
- fetch_total_assets(block_identifier='latest')
Reject an isolated live TVL read outside the historical pipeline.
- fetch_total_supply(block_identifier='latest')
Read decimal-scaled GM or GLV outstanding shares.
- fetch_utilisation_percent(block_identifier='latest')
Get the percentage of assets currently lent out.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Utilisation as float between 0.0 and 1.0 (0% to 100%).
- Return type
- property flow_manager: eth_defi.vault.base.VaultFlowManager
Flow manager associated with this vault
- get_deposit_fee(block_identifier)
Deposit fee is set to zero by default as vaults usually do not have deposit fees.
Internal: Use
get_fee_data().
- get_deposit_manager()
Reject unsupported asynchronous transaction construction.
- get_deposit_manager_capability()
Return static public transaction-adapter support, if any.
This method deliberately does not attempt to construct a manager or query live pause, cap, epoch, balance, allow-list, or liquidity state. Adapters opt in only after their complete deposit and redemption lifecycles have focused coverage.
Noneis therefore the safe default for unknown and protocol-specific vaults.- Returns
Adapter-specific capability object, or
Nonewhen unsupported.- Return type
Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]
- get_estimated_lock_up()
Return no fixed lock-up period.
- Return type
- get_fee_data()
Get fee data structure for this vault.
- Raises
ValueError – In the case of broken or unimplemented fee reading methods in the smart contract
- Return type
- get_fee_mode()
Get how this vault accounts its fees.
- Return type
- get_flags()
Return GMX market-making and liquidity-provision flags.
GM and GLV holders provide the inventory against which GMX trading is settled. Their pool claim receives part of protocol fees and trader losses, and bears trader profits.
- Returns
Manual flags plus the two strategy classifications.
- Return type
- get_flow_manager()
Reject unsupported generic flow accounting.
- Return type
- get_historical_reader(stateful)
Return the sparse GMX event reader.
- Parameters
stateful (bool) –
- Return type
- get_link(referral=None)
Return the direct GMX pool-details page for this share token.
Both GM and GLV products use GMX’s
marketURL query parameter. The link includes the deployment chain so the GMX interface selects the correct network before resolving the product address.- Parameters
referral (Optional[str]) – Ignored because GMX’s pool-details route does not accept the common vault referral parameter.
- Returns
Direct GMX pool-details URL with the deposit view selected.
- Return type
See also
- get_management_fee(block_identifier)
Return the zero depositor-facing management fee.
- get_notes()
Get a human readable message if we know somethign special is going on with this vault.
- get_performance_fee(block_identifier)
Return the zero depositor-facing performance fee.
- get_risk()
Get risk profile of this vault.
- Return type
Return the source used for share-price observations.
Vault integrations override this method when they expose a share price. Returning
Nonedistinguishes unsupported or unknown pricing from a known source classification.- Returns
Share-price source, or
Nonewhen the adapter does not provide one.- Return type
- get_strategy_tags()
Return the maintained classifications for this reviewed deployment.
Only source-backed address entries are classified; an unreviewed deployment retains the explicit missing-information result.
- Returns
A fresh set of strategy tags, or
Nonewhen information is missing.- Return type
- get_whitelist_notes()
Return an export caveat for the vault-wide whitelist status.
Adapters may attach a concise, stable explanation when a classification is an explicitly requested operating assumption or excludes an integration-specific permission mechanism. The note describes the policy classification only; it must not be used to report temporary deposit availability.
- get_withdraw_fee(block_identifier)
Withdraw fee is set to zero by default as vaults usually do not have withdraw fees.
Internal: Use
get_fee_data().
- get_withdrawal_period()
Describe GMX’s asynchronous, keeper-executed redemption lifecycle.
GMX liquidity withdrawals are submitted as requests and execute after a keeper supplies the required oracle prices. The official architecture documentation describes this as typically taking a few seconds, but the protocol does not provide a binding completion deadline: liquidity, oracle availability, gas prices and keeper execution can extend the wait. We therefore expose a one-minute non-binding estimate for the website while leaving the contractual minimum and maximum unset.
- Returns
Asynchronous withdrawal type with a one-minute settlement estimate.
- Return type
See also
- has_block_range_event_support()
Return whether generic vault flow events are supported.
- Return type
- has_custom_fees()
Does this vault have fees outside the shared fee model.
Custom fees cause risk in vault comparison because the shared management/performance/deposit/withdraw fee fields cannot describe the full fee structure.
Do not return
Truemerely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. ReturnTrueonly when some vault fee cannot be reflected in those standard fields as a fee-like value.- Returns
Trueif the vault has fees outside the shared fee model.- Return type
- has_deposit_distribution_to_all_positions()
Return whether generic automatic position distribution applies.
- Return type
- property info: eth_defi.vault.base.VaultInfo
Get info dictionary related to this vault deployment.
Get cached data on the various vault parameters
- Returns
Vault protocol specific information dictionary
- is_account_whitelisted(address)
Determine whether an account has completed the vault’s KYC policy.
The result concerns KYC, manual identity approval, or recipient allowlist membership only. A protocol may still require scheduling, a token balance, an allowance, available capacity, or an open epoch before a deposit can be submitted. Callers must use the relevant deposit manager pre-flight before broadcasting a transaction.
- Parameters
address (eth_typing.evm.HexAddress) – Account whose deposit-policy membership is queried.
- Returns
Truewhen the account has the required pre-approval.- Raises
NotImplementedError – If the adapter cannot safely query account membership.
- Return type
- property manager_name: Optional[str]
Protocol-supplied vault manager or curator display name.
Used when the vault name itself does not contain the curator brand
Returns None if the protocol does not expose separate manager metadata
Override in subclasses that support manager or operator metadata
ERC-20 that presents vault shares.
User gets shares on deposit and burns them on redemption
- property short_description: None
One-liner vault summary.
Shorter version of
description()suitable for listings and tablesReturns None if not available
Override in subclasses that support offchain metadata
- property vault_address: eth_typing.evm.HexAddress
Return the scanner-compatible share-token address.
- class GMXLiquidityVault
Bases:
eth_defi.gmx.vault.GMXVaultBaseOne GMX V2 GLV multi-market liquidity-provider vault.
Create a GMX share-token adapter.
- Parameters
web3 – Arbitrum One or Avalanche connection.
spec – Chain and GM/GLV token address.
token_cache – Optional shared token metadata cache.
features – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier – Retained shared-adapter compatibility option.
require_denomination_token – Retained shared-adapter compatibility option.
- feature: ERC4626Feature = 'gmx_glv'
Select GLV multi-market handling.
- __init__(web3, spec, token_cache=None, features=None, default_block_identifier=None, require_denomination_token=False)
Create a GMX share-token adapter.
- Parameters
web3 (web3.main.Web3) – Arbitrum One or Avalanche connection.
spec (eth_defi.vault.base.VaultSpec) – Chain and GM/GLV token address.
token_cache (Optional[dict]) – Optional shared token metadata cache.
features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) – Persisted GMX product features. The adapter also adds its common AMM-pool and share-price-equivalence features.
default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) – Retained shared-adapter compatibility option.
require_denomination_token (bool) – Retained shared-adapter compatibility option.
- Return type
None
- property address: eth_typing.evm.HexAddress
Return the checksum GM or GLV share-token address.
- property denomination_token: Optional[eth_defi.token.TokenDetails]
Get the token which denominates the vault valuation
Used in deposits and redemptions
Used in NAV calculation
Used in profit benchmarks
Usually USDC
- Returns
Token wrapper instance.
Maybe None for broken vaults like https://arbiscan.io/address/0x9d0fbc852deccb7dcdd6cb224fa7561efda74411#code
Note
Noneresults are not cached — the next access will retry the on-chain call. This avoids permanently caching a transient RPC failure.
- property deposit_manager: eth_defi.vault.deposit_redeem.VaultDepositManager
Deposit manager assocaited with this vault
- property description: Optional[str]
Human-readable vault strategy description.
Fetched from protocol-specific offchain sources (e.g. Euler GitHub labels, Lagoon web app API)
Returns None if the protocol does not provide descriptions or the vault is not in the metadata source
Override in subclasses that support offchain metadata
- fetch_available_liquidity(block_identifier='latest')
Get the amount of denomination token available for immediate withdrawal.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
Note: maxRedeem(address(0)) does NOT work as a proxy for available liquidity because it requires a specific address that has already deposited shares. For address(0), balanceOf is always 0, so maxRedeem returns 0 regardless of actual liquidity.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Amount in denomination token units (human-readable Decimal).
- Return type
- fetch_denomination_token()
Fetch native USDC metadata for the catalogue display denomination.
- Return type
- fetch_denomination_token_address()
Return native USDC as the catalogue display denomination.
- Return type
- fetch_deposit_closed_reason()
Get human-readable reason why deposits are closed.
Override in protocol-specific subclasses
Default behaviour: no closure reason is known (return None)
- Returns
Human-readable string explaining why deposits are closed, or None if deposits are open or the adapter cannot determine a closure reason. Use
fetch_deposit_open()for explicit tri-state availability metadata.Example reasons:
”Epoch redemption window closed (opens in 14h)”
”Vault paused by admin”
”Max deposit cap reached”
”Vault utilisation too high”
- Return type
- fetch_deposit_next_open()
Get when deposits will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when deposits will next be available, or None if:
Deposits are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_deposit_open()
Return unknown for enabled markets whose dynamic caps can still reject a deposit.
The catalogue synchroniser exports
Falsewhen GMX disables a product. For enabled markets, a successful deposit can still depend on dynamic pool caps and the deposit PnL-factor limit, so the adapter must not report an unconditionalTrue.
- fetch_info()
Return scanner-compatible GMX product metadata.
- Return type
- fetch_minimum_deposit(block_identifier='latest')
Fetch a source-proven minimum deposit in decimal token units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small deposits. A zero result means the adapter positively established that the vault has no minimum deposit.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal denomination-token minimum, or
Nonewhen unknown.- Return type
- fetch_minimum_redemption(block_identifier='latest')
Fetch a source-proven redemption minimum in decimal share units.
A
Noneresult means this adapter does not expose a known minimum; it does not prove the protocol accepts arbitrarily small redemptions. A zero result means the adapter positively established that the vault has no minimum redemption.- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block at which to read the protocol configuration.
- Returns
Decimal vault-share minimum, or
Nonewhen unknown.- Return type
Reject an isolated live NAV read outside the historical pipeline.
- fetch_portfolio(universe, block_identifier=None)
Return no generic spot portfolio for protocol-managed liquidity.
- Parameters
universe (eth_defi.vault.base.TradingUniverse) –
block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]]) –
- Return type
- fetch_redemption_closed_reason()
Get human-readable reason why redemptions are closed.
Override in protocol-specific subclasses
Default behaviour: assume redemptions are always open (return None)
- fetch_redemption_next_open()
Get when withdrawals/redemptions will next be open.
For epoch-based vaults (Ostium, D2), return calculated window open time
For non-epoch vaults (Plutus, IPOR, Morpho), return None
Override in protocol-specific subclasses
- Returns
Naive UTC datetime when withdrawals will next be available, or None if:
Withdrawals are currently open
Timing is unpredictable (manually controlled)
Protocol does not support timing information
- Return type
- fetch_scan_record_extra_data()
Export USDC display denomination and GMX product metadata.
Reject an isolated live share-price read outside the historical pipeline.
Fetch GM or GLV ERC-20 metadata.
- Return type
Return the GM or GLV ERC-20 token address.
- fetch_total_assets(block_identifier='latest')
Reject an isolated live TVL read outside the historical pipeline.
- fetch_total_supply(block_identifier='latest')
Read decimal-scaled GM or GLV outstanding shares.
- fetch_utilisation_percent(block_identifier='latest')
Get the percentage of assets currently lent out.
Only applicable to lending protocol vaults (IPOR, Euler, Morpho, Gearbox, etc.). Non-lending protocols should leave this method unimplemented.
- Parameters
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) – Block to query. Defaults to “latest”.
- Raises
NotImplementedError – For non-lending protocol vaults.
- Returns
Utilisation as float between 0.0 and 1.0 (0% to 100%).
- Return type
- property flow_manager: eth_defi.vault.base.VaultFlowManager
Flow manager associated with this vault
- get_deposit_fee(block_identifier)
Deposit fee is set to zero by default as vaults usually do not have deposit fees.
Internal: Use
get_fee_data().
- get_deposit_manager()
Reject unsupported asynchronous transaction construction.
- get_deposit_manager_capability()
Return static public transaction-adapter support, if any.
This method deliberately does not attempt to construct a manager or query live pause, cap, epoch, balance, allow-list, or liquidity state. Adapters opt in only after their complete deposit and redemption lifecycles have focused coverage.
Noneis therefore the safe default for unknown and protocol-specific vaults.- Returns
Adapter-specific capability object, or
Nonewhen unsupported.- Return type
Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]
- get_estimated_lock_up()
Return no fixed lock-up period.
- Return type
- get_fee_data()
Get fee data structure for this vault.
- Raises
ValueError – In the case of broken or unimplemented fee reading methods in the smart contract
- Return type
- get_fee_mode()
Get how this vault accounts its fees.
- Return type
- get_flags()
Return GMX market-making and liquidity-provision flags.
GM and GLV holders provide the inventory against which GMX trading is settled. Their pool claim receives part of protocol fees and trader losses, and bears trader profits.
- Returns
Manual flags plus the two strategy classifications.
- Return type
- get_flow_manager()
Reject unsupported generic flow accounting.
- Return type
- get_historical_reader(stateful)
Return the sparse GMX event reader.
- Parameters
stateful (bool) –
- Return type
- get_link(referral=None)
Return the direct GMX pool-details page for this share token.
Both GM and GLV products use GMX’s
marketURL query parameter. The link includes the deployment chain so the GMX interface selects the correct network before resolving the product address.- Parameters
referral (Optional[str]) – Ignored because GMX’s pool-details route does not accept the common vault referral parameter.
- Returns
Direct GMX pool-details URL with the deposit view selected.
- Return type
See also
- get_management_fee(block_identifier)
Return the zero depositor-facing management fee.
- get_notes()
Get a human readable message if we know somethign special is going on with this vault.
- get_performance_fee(block_identifier)
Return the zero depositor-facing performance fee.
- get_risk()
Get risk profile of this vault.
- Return type
Return the source used for share-price observations.
Vault integrations override this method when they expose a share price. Returning
Nonedistinguishes unsupported or unknown pricing from a known source classification.- Returns
Share-price source, or
Nonewhen the adapter does not provide one.- Return type
- get_strategy_tags()
Return the maintained classifications for this reviewed deployment.
Only source-backed address entries are classified; an unreviewed deployment retains the explicit missing-information result.
- Returns
A fresh set of strategy tags, or
Nonewhen information is missing.- Return type
- get_whitelist_notes()
Return an export caveat for the vault-wide whitelist status.
Adapters may attach a concise, stable explanation when a classification is an explicitly requested operating assumption or excludes an integration-specific permission mechanism. The note describes the policy classification only; it must not be used to report temporary deposit availability.
- get_withdraw_fee(block_identifier)
Withdraw fee is set to zero by default as vaults usually do not have withdraw fees.
Internal: Use
get_fee_data().
- get_withdrawal_period()
Describe GMX’s asynchronous, keeper-executed redemption lifecycle.
GMX liquidity withdrawals are submitted as requests and execute after a keeper supplies the required oracle prices. The official architecture documentation describes this as typically taking a few seconds, but the protocol does not provide a binding completion deadline: liquidity, oracle availability, gas prices and keeper execution can extend the wait. We therefore expose a one-minute non-binding estimate for the website while leaving the contractual minimum and maximum unset.
- Returns
Asynchronous withdrawal type with a one-minute settlement estimate.
- Return type
See also
- has_block_range_event_support()
Return whether generic vault flow events are supported.
- Return type
- has_custom_fees()
Does this vault have fees outside the shared fee model.
Custom fees cause risk in vault comparison because the shared management/performance/deposit/withdraw fee fields cannot describe the full fee structure.
Do not return
Truemerely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. ReturnTrueonly when some vault fee cannot be reflected in those standard fields as a fee-like value.- Returns
Trueif the vault has fees outside the shared fee model.- Return type
- has_deposit_distribution_to_all_positions()
Return whether generic automatic position distribution applies.
- Return type
- property info: eth_defi.vault.base.VaultInfo
Get info dictionary related to this vault deployment.
Get cached data on the various vault parameters
- Returns
Vault protocol specific information dictionary
- is_account_whitelisted(address)
Determine whether an account has completed the vault’s KYC policy.
The result concerns KYC, manual identity approval, or recipient allowlist membership only. A protocol may still require scheduling, a token balance, an allowance, available capacity, or an open epoch before a deposit can be submitted. Callers must use the relevant deposit manager pre-flight before broadcasting a transaction.
- Parameters
address (eth_typing.evm.HexAddress) – Account whose deposit-policy membership is queried.
- Returns
Truewhen the account has the required pre-approval.- Raises
NotImplementedError – If the adapter cannot safely query account membership.
- Return type
- property manager_name: Optional[str]
Protocol-supplied vault manager or curator display name.
Used when the vault name itself does not contain the curator brand
Returns None if the protocol does not expose separate manager metadata
Override in subclasses that support manager or operator metadata
ERC-20 that presents vault shares.
User gets shares on deposit and burns them on redemption
- property short_description: None
One-liner vault summary.
Shorter version of
description()suitable for listings and tablesReturns None if not available
Override in subclasses that support offchain metadata
- property vault_address: eth_typing.evm.HexAddress
Return the scanner-compatible share-token address.