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

GMX_UNSUPPORTED_FLOW_REASON

Explanation returned for unsupported generic GMX flow operations.

GMX_HISTORICAL_READER_REASON

Explanation returned for unsupported isolated GMX NAV reads.

GMX_REQUEST_SETTLEMENT_ESTIMATE

Non-binding operational estimate for a GMX keeper-executed liquidity request.

Classes

GMXHistoricalReader

Read cached GMX value-and-supply observations.

GMXLiquidityVault

One GMX V2 GLV multi-market liquidity-provider vault.

GMXMarketVault

One GMX V2 GM market-token liquidity-provider vault.

GMXVaultBase

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.VaultHistoricalReader

Read 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.

Return type

collections.abc.Iterable[eth_defi.event_reader.multicall_batcher.EncodedCall]

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
Return type

eth_defi.vault.base.VaultHistoricalRead

fetch_contextual_historical_reads(start_block, end_block, step)

Yield GMX observations downsampled to common block buckets.

Parameters
  • start_block (int) – Inclusive archive range boundary.

  • end_block (int) – Exclusive archive range boundary.

  • step (int) – Common scan’s positive block bucket width.

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) –

property share_price_change_threshold: float

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.

property uses_share_price_equivalence: bool

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

True when the vault carries the share_price_equivalence feature.

class GMXVaultBase

Bases: eth_defi.vault.base.VaultBase

Common 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 None when information is missing.

Return type

Optional[set[eth_defi.vault.strategy_tag.StrategyTag]]

feature: eth_defi.erc_4626.core.ERC4626Feature

Protocol feature selecting the concrete GM or GLV adapter.

product_type: str

Lowercase GMX product kind used in exported metadata.

__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 chain_id: int

Return the EVM deployment chain.

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 name: str

Return the onchain share-token name.

property symbol: str

Return the onchain share-token symbol.

property short_description: None

One-liner vault summary.

  • Shorter version of description() suitable for listings and tables

  • Returns None if not available

  • Override in subclasses that support offchain metadata

fetch_share_token()

Fetch GM or GLV ERC-20 metadata.

Return type

eth_defi.token.TokenDetails

fetch_share_token_address(block_identifier='latest')

Return the GM or GLV ERC-20 token address.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

eth_typing.evm.HexAddress

fetch_denomination_token_address()

Return native USDC as the catalogue display denomination.

Return type

eth_typing.evm.HexAddress

fetch_denomination_token()

Fetch native USDC metadata for the catalogue display denomination.

Return type

eth_defi.token.TokenDetails

fetch_total_supply(block_identifier='latest')

Read decimal-scaled GM or GLV outstanding shares.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_nav(block_identifier='latest')

Reject an isolated live NAV read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_total_assets(block_identifier='latest')

Reject an isolated live TVL read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_share_price(block_identifier='latest')

Reject an isolated live share-price read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_info()

Return scanner-compatible GMX product metadata.

Return type

eth_defi.vault.base.VaultInfo

fetch_scan_record_extra_data()

Export USDC display denomination and GMX product metadata.

Return type

dict[str, object]

fetch_portfolio(universe, block_identifier=None)

Return no generic spot portfolio for protocol-managed liquidity.

Parameters
Return type

eth_defi.vault.base.VaultPortfolio

has_block_range_event_support()

Return whether generic vault flow events are supported.

Return type

bool

has_deposit_distribution_to_all_positions()

Return whether generic automatic position distribution applies.

Return type

bool

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

set[eth_defi.vault.flag.VaultFlag]

get_flow_manager()

Reject unsupported generic flow accounting.

Return type

eth_defi.vault.base.VaultFlowManager

get_deposit_manager()

Reject unsupported asynchronous transaction construction.

Return type

eth_defi.vault.deposit_redeem.VaultDepositManager

get_historical_reader(stateful)

Return the sparse GMX event reader.

Parameters

stateful (bool) –

Return type

eth_defi.vault.base.VaultHistoricalReader

get_management_fee(block_identifier)

Return the zero depositor-facing management fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_performance_fee(block_identifier)

Return the zero depositor-facing performance fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_estimated_lock_up()

Return no fixed lock-up period.

Return type

Optional[datetime.timedelta]

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

eth_defi.vault.base.WithdrawalPeriod

See also

GMX architecture.

fetch_deposit_open()

Return unknown for enabled markets whose dynamic caps can still reject a deposit.

The catalogue synchroniser exports False when 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 unconditional True.

Returns

None until a per-market executable deposit quote is available.

Return type

Optional[bool]

Return the direct GMX pool-details page for this share token.

Both GM and GLV products use GMX’s market URL 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

str

is_whitelisted_deposit()

Return whether GMX LP access is allowlisted.

Return type

bool

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

None results 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

Optional[decimal.Decimal]

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

Optional[str]

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

Optional[datetime.datetime]

fetch_minimum_deposit(block_identifier='latest')

Fetch a source-proven minimum deposit in decimal token units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

fetch_minimum_redemption(block_identifier='latest')

Fetch a source-proven redemption minimum in decimal share units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

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)

Returns

Human-readable string explaining why redemptions are closed, or None if redemptions are open.

Example reasons:

  • ”Epoch funding phase in progress (opens in 2d 5h)”

  • ”Vault paused by admin”

  • ”Vault utilisation too high - insufficient liquidity”

Return type

Optional[str]

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

Optional[datetime.datetime]

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

Optional[float]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

Optional[float]

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. None is therefore the safe default for unknown and protocol-specific vaults.

Returns

Adapter-specific capability object, or None when 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

eth_defi.vault.fee.FeeData

get_fee_mode()

Get how this vault accounts its fees.

Return type

Optional[eth_defi.vault.fee.VaultFeeMode]

get_notes()

Get a human readable message if we know somethign special is going on with this vault.

Return type

Optional[str]

get_protocol_name()

Return the name of the vault protocol.

Return type

str

get_risk()

Get risk profile of this vault.

Return type

Optional[eth_defi.vault.risk.VaultTechnicalRisk]

get_share_price_source()

Return the source used for share-price observations.

Vault integrations override this method when they expose a share price. Returning None distinguishes unsupported or unknown pricing from a known source classification.

Returns

Share-price source, or None when the adapter does not provide one.

Return type

Optional[eth_defi.vault.price_source.PriceSource]

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.

Returns

Export note, or None when the classification needs no caveat.

Return type

Optional[str]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

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 True merely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. Return True only when some vault fee cannot be reflected in those standard fields as a fee-like value.

Returns

True if the vault has fees outside the shared fee model.

Return type

bool

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

True when the account has the required pre-approval.

Raises

NotImplementedError – If the adapter cannot safely query account membership.

Return type

bool

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

property share_token: eth_defi.token.TokenDetails

ERC-20 that presents vault shares.

  • User gets shares on deposit and burns them on redemption

first_seen_at_block: int | None

Block number hint when this vault was deployed.

Must be set externally, as because of shitty Ethereum RPC we cannot query this. Allows us to avoid unnecessary work when scanning historical price data.

class GMXMarketVault

Bases: eth_defi.gmx.vault.GMXVaultBase

One 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.

product_type: str = 'gm'

Protocol-native product kind.

__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 chain_id: int

Return the EVM deployment chain.

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

None results 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

Optional[decimal.Decimal]

fetch_denomination_token()

Fetch native USDC metadata for the catalogue display denomination.

Return type

eth_defi.token.TokenDetails

fetch_denomination_token_address()

Return native USDC as the catalogue display denomination.

Return type

eth_typing.evm.HexAddress

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

Optional[str]

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

Optional[datetime.datetime]

fetch_deposit_open()

Return unknown for enabled markets whose dynamic caps can still reject a deposit.

The catalogue synchroniser exports False when 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 unconditional True.

Returns

None until a per-market executable deposit quote is available.

Return type

Optional[bool]

fetch_info()

Return scanner-compatible GMX product metadata.

Return type

eth_defi.vault.base.VaultInfo

fetch_minimum_deposit(block_identifier='latest')

Fetch a source-proven minimum deposit in decimal token units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

fetch_minimum_redemption(block_identifier='latest')

Fetch a source-proven redemption minimum in decimal share units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

fetch_nav(block_identifier='latest')

Reject an isolated live NAV read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_portfolio(universe, block_identifier=None)

Return no generic spot portfolio for protocol-managed liquidity.

Parameters
Return type

eth_defi.vault.base.VaultPortfolio

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)

Returns

Human-readable string explaining why redemptions are closed, or None if redemptions are open.

Example reasons:

  • ”Epoch funding phase in progress (opens in 2d 5h)”

  • ”Vault paused by admin”

  • ”Vault utilisation too high - insufficient liquidity”

Return type

Optional[str]

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

Optional[datetime.datetime]

fetch_scan_record_extra_data()

Export USDC display denomination and GMX product metadata.

Return type

dict[str, object]

fetch_share_price(block_identifier='latest')

Reject an isolated live share-price read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_share_token()

Fetch GM or GLV ERC-20 metadata.

Return type

eth_defi.token.TokenDetails

fetch_share_token_address(block_identifier='latest')

Return the GM or GLV ERC-20 token address.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

eth_typing.evm.HexAddress

fetch_total_assets(block_identifier='latest')

Reject an isolated live TVL read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_total_supply(block_identifier='latest')

Read decimal-scaled GM or GLV outstanding shares.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

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

Optional[float]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

Optional[float]

get_deposit_manager()

Reject unsupported asynchronous transaction construction.

Return type

eth_defi.vault.deposit_redeem.VaultDepositManager

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. None is therefore the safe default for unknown and protocol-specific vaults.

Returns

Adapter-specific capability object, or None when unsupported.

Return type

Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]

get_estimated_lock_up()

Return no fixed lock-up period.

Return type

Optional[datetime.timedelta]

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

eth_defi.vault.fee.FeeData

get_fee_mode()

Get how this vault accounts its fees.

Return type

Optional[eth_defi.vault.fee.VaultFeeMode]

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

set[eth_defi.vault.flag.VaultFlag]

get_flow_manager()

Reject unsupported generic flow accounting.

Return type

eth_defi.vault.base.VaultFlowManager

get_historical_reader(stateful)

Return the sparse GMX event reader.

Parameters

stateful (bool) –

Return type

eth_defi.vault.base.VaultHistoricalReader

Return the direct GMX pool-details page for this share token.

Both GM and GLV products use GMX’s market URL 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

str

get_management_fee(block_identifier)

Return the zero depositor-facing management fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_notes()

Get a human readable message if we know somethign special is going on with this vault.

Return type

Optional[str]

get_performance_fee(block_identifier)

Return the zero depositor-facing performance fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_protocol_name()

Return the name of the vault protocol.

Return type

str

get_risk()

Get risk profile of this vault.

Return type

Optional[eth_defi.vault.risk.VaultTechnicalRisk]

get_share_price_source()

Return the source used for share-price observations.

Vault integrations override this method when they expose a share price. Returning None distinguishes unsupported or unknown pricing from a known source classification.

Returns

Share-price source, or None when the adapter does not provide one.

Return type

Optional[eth_defi.vault.price_source.PriceSource]

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 None when information is missing.

Return type

Optional[set[eth_defi.vault.strategy_tag.StrategyTag]]

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.

Returns

Export note, or None when the classification needs no caveat.

Return type

Optional[str]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

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

eth_defi.vault.base.WithdrawalPeriod

See also

GMX architecture.

has_block_range_event_support()

Return whether generic vault flow events are supported.

Return type

bool

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 True merely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. Return True only when some vault fee cannot be reflected in those standard fields as a fee-like value.

Returns

True if the vault has fees outside the shared fee model.

Return type

bool

has_deposit_distribution_to_all_positions()

Return whether generic automatic position distribution applies.

Return type

bool

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

True when the account has the required pre-approval.

Raises

NotImplementedError – If the adapter cannot safely query account membership.

Return type

bool

is_whitelisted_deposit()

Return whether GMX LP access is allowlisted.

Return type

bool

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

property name: str

Return the onchain share-token name.

property share_token: eth_defi.token.TokenDetails

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 tables

  • Returns None if not available

  • Override in subclasses that support offchain metadata

property symbol: str

Return the onchain share-token symbol.

property vault_address: eth_typing.evm.HexAddress

Return the scanner-compatible share-token address.

class GMXLiquidityVault

Bases: eth_defi.gmx.vault.GMXVaultBase

One 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.

product_type: str = 'glv'

Protocol-native product kind.

__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 chain_id: int

Return the EVM deployment chain.

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

None results 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

Optional[decimal.Decimal]

fetch_denomination_token()

Fetch native USDC metadata for the catalogue display denomination.

Return type

eth_defi.token.TokenDetails

fetch_denomination_token_address()

Return native USDC as the catalogue display denomination.

Return type

eth_typing.evm.HexAddress

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

Optional[str]

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

Optional[datetime.datetime]

fetch_deposit_open()

Return unknown for enabled markets whose dynamic caps can still reject a deposit.

The catalogue synchroniser exports False when 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 unconditional True.

Returns

None until a per-market executable deposit quote is available.

Return type

Optional[bool]

fetch_info()

Return scanner-compatible GMX product metadata.

Return type

eth_defi.vault.base.VaultInfo

fetch_minimum_deposit(block_identifier='latest')

Fetch a source-proven minimum deposit in decimal token units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

fetch_minimum_redemption(block_identifier='latest')

Fetch a source-proven redemption minimum in decimal share units.

A None result 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 None when unknown.

Return type

Optional[decimal.Decimal]

fetch_nav(block_identifier='latest')

Reject an isolated live NAV read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_portfolio(universe, block_identifier=None)

Return no generic spot portfolio for protocol-managed liquidity.

Parameters
Return type

eth_defi.vault.base.VaultPortfolio

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)

Returns

Human-readable string explaining why redemptions are closed, or None if redemptions are open.

Example reasons:

  • ”Epoch funding phase in progress (opens in 2d 5h)”

  • ”Vault paused by admin”

  • ”Vault utilisation too high - insufficient liquidity”

Return type

Optional[str]

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

Optional[datetime.datetime]

fetch_scan_record_extra_data()

Export USDC display denomination and GMX product metadata.

Return type

dict[str, object]

fetch_share_price(block_identifier='latest')

Reject an isolated live share-price read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_share_token()

Fetch GM or GLV ERC-20 metadata.

Return type

eth_defi.token.TokenDetails

fetch_share_token_address(block_identifier='latest')

Return the GM or GLV ERC-20 token address.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

eth_typing.evm.HexAddress

fetch_total_assets(block_identifier='latest')

Reject an isolated live TVL read outside the historical pipeline.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

fetch_total_supply(block_identifier='latest')

Read decimal-scaled GM or GLV outstanding shares.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

decimal.Decimal

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

Optional[float]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

Optional[float]

get_deposit_manager()

Reject unsupported asynchronous transaction construction.

Return type

eth_defi.vault.deposit_redeem.VaultDepositManager

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. None is therefore the safe default for unknown and protocol-specific vaults.

Returns

Adapter-specific capability object, or None when unsupported.

Return type

Optional[eth_defi.vault.deposit_redeem.VaultDepositManagerCapability]

get_estimated_lock_up()

Return no fixed lock-up period.

Return type

Optional[datetime.timedelta]

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

eth_defi.vault.fee.FeeData

get_fee_mode()

Get how this vault accounts its fees.

Return type

Optional[eth_defi.vault.fee.VaultFeeMode]

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

set[eth_defi.vault.flag.VaultFlag]

get_flow_manager()

Reject unsupported generic flow accounting.

Return type

eth_defi.vault.base.VaultFlowManager

get_historical_reader(stateful)

Return the sparse GMX event reader.

Parameters

stateful (bool) –

Return type

eth_defi.vault.base.VaultHistoricalReader

Return the direct GMX pool-details page for this share token.

Both GM and GLV products use GMX’s market URL 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

str

get_management_fee(block_identifier)

Return the zero depositor-facing management fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_notes()

Get a human readable message if we know somethign special is going on with this vault.

Return type

Optional[str]

get_performance_fee(block_identifier)

Return the zero depositor-facing performance fee.

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

get_protocol_name()

Return the name of the vault protocol.

Return type

str

get_risk()

Get risk profile of this vault.

Return type

Optional[eth_defi.vault.risk.VaultTechnicalRisk]

get_share_price_source()

Return the source used for share-price observations.

Vault integrations override this method when they expose a share price. Returning None distinguishes unsupported or unknown pricing from a known source classification.

Returns

Share-price source, or None when the adapter does not provide one.

Return type

Optional[eth_defi.vault.price_source.PriceSource]

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 None when information is missing.

Return type

Optional[set[eth_defi.vault.strategy_tag.StrategyTag]]

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.

Returns

Export note, or None when the classification needs no caveat.

Return type

Optional[str]

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().

Parameters

block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, int]) –

Return type

float

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

eth_defi.vault.base.WithdrawalPeriod

See also

GMX architecture.

has_block_range_event_support()

Return whether generic vault flow events are supported.

Return type

bool

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 True merely because a vault implements custom accessors for ordinary management, performance, deposit, or withdraw fees. Return True only when some vault fee cannot be reflected in those standard fields as a fee-like value.

Returns

True if the vault has fees outside the shared fee model.

Return type

bool

has_deposit_distribution_to_all_positions()

Return whether generic automatic position distribution applies.

Return type

bool

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

True when the account has the required pre-approval.

Raises

NotImplementedError – If the adapter cannot safely query account membership.

Return type

bool

is_whitelisted_deposit()

Return whether GMX LP access is allowlisted.

Return type

bool

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

property name: str

Return the onchain share-token name.

property share_token: eth_defi.token.TokenDetails

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 tables

  • Returns None if not available

  • Override in subclasses that support offchain metadata

property symbol: str

Return the onchain share-token symbol.

property vault_address: eth_typing.evm.HexAddress

Return the scanner-compatible share-token address.