erc_4626.discovery_base

Documentation for eth_defi.erc_4626.discovery_base Python module.

Events we use in the vault discovery.

  • Shared across RPC/Hypersync discovery

  • Supports standard ERC-4626 Deposit/Withdraw events

  • Supports BrinkVault DepositFunds/WithdrawFunds events

  • Supports EmberVault VaultDeposit/RequestRedeemed events

  • Supports TokenGateway Deposit(5-arg)/RedeemRequested/RedeemTokenGatewayDepreciated events

  • Supports Royco tranche Redeem event

Functions

get_brink_vault_contract(web3)

Get IBrinkVault interface for BrinkVault events.

get_brink_vault_discovery_events(web3)

Get list of BrinkVault events we use in vault discovery.

get_ember_vault_discovery_events(web3)

Get list of EmberVault events we use in vault discovery.

get_ember_vault_event_contract(web3)

Get IEmberVaultEvents interface for EmberVault events.

get_royco_tranche_discovery_events(web3)

Get Royco tranche events we use in vault discovery.

get_royco_tranche_event_contract(web3)

Get Royco tranche interface for custom redemption events.

get_standard_erc_4626_vault_discovery_events(web3)

Get list of standard ERC-4626 events we use in vault discovery.

get_token_gateway_discovery_events(web3)

Get list of TokenGateway events we use in vault discovery.

get_token_gateway_event_contract(web3)

Get ITokenGatewayEvents interface for TokenGateway events.

get_vault_discovery_events(web3)

Get all events used in vault discovery, including protocol-specific ones.

get_vault_event_topic_map(web3)

Build a mapping from topic0 signature to event kind.

is_deposit_event(event_kind)

Check if the event kind represents a deposit.

is_withdraw_event(event_kind)

Check if the event kind represents a withdrawal.

Classes

LeadScanReport

ERC-4626 vault detection data we extract in one duty cycle.

PotentialVaultMatch

Categorise contracts that emit ERC-4626 like events.

VaultDiscoveryBase

VaultEventKind

Classify vault discovery events by their type.

class LeadScanReport

Bases: object

ERC-4626 vault detection data we extract in one duty cycle.

__init__(leads=<factory>, detections=<factory>, rows=<factory>, old_leads=0, new_leads=0, deposits=0, withdrawals=0, backend=None, start_block=0, end_block=0)
Parameters
Return type

None

class PotentialVaultMatch

Bases: object

Categorise contracts that emit ERC-4626 like events.

__init__(chain, address, first_seen_at_block, first_seen_at, deposit_count=0, withdrawal_count=0)
Parameters
Return type

None

class VaultDiscoveryBase

Bases: abc.ABC

__init__(max_workers)
Parameters

max_workers (int) –

scan_vaults(start_block, end_block, display_progress=True)

Scan vaults.

  • Detect vault leads by events using scan_potential_vaults()

  • Then perform multicall probing for each vault smart contract to detect protocol

Parameters
  • start_block (int) –

  • end_block (int) –

Return type

eth_defi.erc_4626.discovery_base.LeadScanReport

seed_existing_leads(leads)

Seed existing leads to continue the scan where we were left last time.

Parameters

leads (dict[eth_typing.evm.HexAddress, eth_defi.erc_4626.discovery_base.PotentialVaultMatch]) –

class VaultEventKind

Bases: enum.Enum

Classify vault discovery events by their type.

get_brink_vault_contract(web3)

Get IBrinkVault interface for BrinkVault events.

get_brink_vault_discovery_events(web3)

Get list of BrinkVault events we use in vault discovery.

BrinkVault uses custom events instead of standard ERC-4626 Deposit/Withdraw:

  • Deposited(address caller, address recipient, uint256 assets, uint256 shares)

  • Withdrawal(address caller, address recipient, uint256 received, uint256 shares)

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_ember_vault_discovery_events(web3)

Get list of EmberVault events we use in vault discovery.

EmberVault uses custom events instead of standard ERC-4626 Deposit/Withdraw:

  • VaultDeposit(address indexed vault, address indexed depositor, address indexed receiver, uint256 amountDeposited, uint256 sharesMinted, uint256 totalShares, uint256 timestamp, uint256 sequenceNumber)

  • RequestRedeemed(address indexed vault, address indexed owner, address indexed receiver, uint256 shares, uint256 estimatedWithdrawAmount, uint256 timestamp, uint256 sequenceNumber)

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_ember_vault_event_contract(web3)

Get IEmberVaultEvents interface for EmberVault events.

get_royco_tranche_discovery_events(web3)

Get Royco tranche events we use in vault discovery.

Royco tranche vaults are almost ERC-4626:

  • Deposit(address,address,uint256,uint256) matches standard ERC-4626

  • Redeem(address,address,(uint256,uint256,uint256),uint256) replaces the standard Withdraw event

Only the custom redemption event is returned here because the deposit event is already covered by get_standard_erc_4626_vault_discovery_events().

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_royco_tranche_event_contract(web3)

Get Royco tranche interface for custom redemption events.

Royco senior/junior tranche vaults use the standard ERC-4626 Deposit event topic, but do not emit the standard ERC-4626 Withdraw event. Instead, redemptions use:

  • Redeem(address indexed sender, address indexed receiver, (uint256,uint256,uint256) claims, uint256 shares)

Etherscan example.

get_standard_erc_4626_vault_discovery_events(web3)

Get list of standard ERC-4626 events we use in vault discovery.

Note

This returns only standard ERC-4626 events. For all vault events including protocol-specific ones, use get_vault_discovery_events().

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_token_gateway_discovery_events(web3)

Get list of TokenGateway events we use in vault discovery.

TokenGateway uses non-standard ERC-4626 flow events:

  • Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares, uint256 referralCode) — deposit with referral code (distinct topic from standard ERC-4626 Deposit)

  • RedeemRequested(address indexed owner, address indexed receiver, uint256 shares, uint256 assets, uint256 id, uint256 epoch) — async redemption request

  • RedeemTokenGatewayDepreciated(address indexed caller, address indexed receiver, uint256 shares, uint256 assets) — deprecated direct redeem

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_token_gateway_event_contract(web3)

Get ITokenGatewayEvents interface for TokenGateway events.

TokenGateway (ForgeYieldsUSDC / fyUSDC) uses non-standard ERC-4626 flow events:

  • Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares, uint256 referralCode) — 5-arg deposit with referral code

  • RedeemRequested(address indexed owner, address indexed receiver, uint256 shares, uint256 assets, uint256 id, uint256 epoch) — async redemption request

  • RedeemTokenGatewayDepreciated(address indexed caller, address indexed receiver, uint256 shares, uint256 assets) — deprecated direct redeem

Etherscan link.

get_vault_discovery_events(web3)

Get all events used in vault discovery, including protocol-specific ones.

This includes: - Standard ERC-4626 Deposit/Withdraw events - BrinkVault DepositFunds/WithdrawFunds events - EmberVault VaultDeposit/RequestRedeemed events - TokenGateway Deposit(5-arg)/RedeemRequested/RedeemTokenGatewayDepreciated events - Royco tranche Redeem event

Returns

List of contract event types in order: [ERC4626.Deposit, ERC4626.Withdraw, BrinkVault.Deposited, BrinkVault.Withdrawal,

EmberVault.VaultDeposit, EmberVault.RequestRedeemed, TokenGateway.Deposit, TokenGateway.RedeemRequested, TokenGateway.RedeemTokenGatewayDepreciated, RoycoTranche.Redeem]

Return type

list[Type[web3.contract.contract.ContractEvent]]

get_vault_event_topic_map(web3)

Build a mapping from topic0 signature to event kind.

Used by discovery implementations to classify events.

Returns

Dict mapping topic0 hex string to VaultEventKind

Return type

dict[str, eth_defi.erc_4626.discovery_base.VaultEventKind]

is_deposit_event(event_kind)

Check if the event kind represents a deposit.

Parameters

event_kind (eth_defi.erc_4626.discovery_base.VaultEventKind) –

Return type

bool

is_withdraw_event(event_kind)

Check if the event kind represents a withdrawal.

Parameters

event_kind (eth_defi.erc_4626.discovery_base.VaultEventKind) –

Return type

bool