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 IBrinkVault interface for BrinkVault events. |
Get list of BrinkVault events we use in vault discovery. |
|
Get list of EmberVault events we use in vault discovery. |
|
Get IEmberVaultEvents interface for EmberVault events. |
|
Get Royco tranche events we use in vault discovery. |
|
Get Royco tranche interface for custom redemption events. |
|
Get list of standard ERC-4626 events we use in vault discovery. |
|
Get list of TokenGateway events we use in vault discovery. |
|
Get ITokenGatewayEvents interface for TokenGateway events. |
|
Get all events used in vault discovery, including protocol-specific ones. |
|
Build a mapping from topic0 signature to event kind. |
|
|
Check if the event kind represents a deposit. |
|
Check if the event kind represents a withdrawal. |
Classes
ERC-4626 vault detection data we extract in one duty cycle. |
|
Categorise contracts that emit ERC-4626 like events. |
|
Classify vault discovery events by their type. |
- class LeadScanReport
Bases:
objectERC-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
leads (dict[eth_typing.evm.HexAddress, eth_defi.erc_4626.discovery_base.PotentialVaultMatch]) –
detections (dict[eth_typing.evm.HexAddress, eth_defi.erc_4626.core.ERC4262VaultDetection]) –
rows (dict[eth_defi.vault.base.VaultSpec, dict]) –
old_leads (int) –
new_leads (int) –
deposits (int) –
withdrawals (int) –
backend (Optional[eth_defi.erc_4626.discovery_base.VaultDiscoveryBase]) –
start_block (int) –
end_block (int) –
- Return type
None
- class PotentialVaultMatch
Bases:
objectCategorise contracts that emit ERC-4626 like events.
- __init__(chain, address, first_seen_at_block, first_seen_at, deposit_count=0, withdrawal_count=0)
- Parameters
chain (int) –
address (eth_typing.evm.HexAddress) –
first_seen_at_block (int) –
first_seen_at (datetime.datetime) –
deposit_count (int) –
withdrawal_count (int) –
- Return type
None
- class VaultDiscoveryBase
Bases:
abc.ABC- 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
- Return type
- 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]) –
- 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)
- 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)
- 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-4626Redeem(address,address,(uint256,uint256,uint256),uint256)replaces the standardWithdrawevent
Only the custom redemption event is returned here because the deposit event is already covered by
get_standard_erc_4626_vault_discovery_events().
- get_royco_tranche_event_contract(web3)
Get Royco tranche interface for custom redemption events.
Royco senior/junior tranche vaults use the standard ERC-4626
Depositevent topic, but do not emit the standard ERC-4626Withdrawevent. Instead, redemptions use:Redeem(address indexed sender, address indexed receiver, (uint256,uint256,uint256) claims, uint256 shares)
- 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().
- 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 requestRedeemTokenGatewayDepreciated(address indexed caller, address indexed receiver, uint256 shares, uint256 assets)— deprecated direct redeem
- 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 codeRedeemRequested(address indexed owner, address indexed receiver, uint256 shares, uint256 assets, uint256 id, uint256 epoch)— async redemption requestRedeemTokenGatewayDepreciated(address indexed caller, address indexed receiver, uint256 shares, uint256 assets)— deprecated direct redeem
- 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
- 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
- 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
- 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