erc_4626.classification
Documentation for eth_defi.erc_4626.classification Python module.
ERC-4626 vault type classification.
Used in vault discovery to figure out what kind of vaults we have autodetected
Use multicall based apporach to probe contracts
Module Attributes
JPMorgan OnChain Liquidity-Token Money Market Fund (JLTXX) ODA-FACT diamond. |
|
Ethereum mainnet chain id. |
|
J.P. |
|
JLTXX ODA-FACT deployment block. |
|
JLTXX deployment timestamp, stored as naive UTC. |
|
MONY Diamond deployment block. |
|
MONY Diamond deployment timestamp, stored as naive UTC. |
|
Hardcoded ODA-FACT lead data used because the single production contract does not emit ERC-4626 |
|
ODA-FACT hardcoded classification flags. |
|
Midas hardcoded classification flags. |
|
Asseto tokenised fund products require chain-aware address matching. |
|
Ondo issuer share tokens are chain-aware, non-ERC-4626 products whose NAV is published by separate issuer oracles. |
|
Circle USYC is a single permissioned ERC-20 fund token on Ethereum. |
|
Franklin Templeton Benji fund shares require chain-aware address matching. |
|
Centrifuge Tranche tokens are permissioned ERC-20 shares. |
|
WisdomTree compliance ERC-20 fund shares require chain-aware routing. |
|
Superstate tokenised fund products require chain-aware address matching. |
|
CMTAT is shared by unrelated security tokens, so only reviewed Libeara products are classified through this chain-aware allow-list. |
|
Spiko USTBL is a single reviewed permissioned fund token on Ethereum. |
|
Sygnum FILQ share tokens are reviewed permissioned SygToken proxies. |
|
FDIT and CASHx are reviewed Ethereum-only permissioned fund-share tokens. |
|
Theo iTokens are multi-asset fund tokens, not standard ERC-4626 vaults. |
|
wstGBP hardcoded classification flags. |
|
KiloEx Hybrid Vaults reuse a Gains-compatible contract surface. |
|
Aave V3 ATokenVault deployments, identified by the Aave-specific |
|
Frankencoin hardcoded classification flags. |
|
Vault Street hardcoded classification flags. |
|
Frax stablecoin staking vaults use shared linear-reward implementations, so the reviewed sFRAX and sfrxUSD deployments are routed by address. |
|
NaraUSD+ is Nara's only reviewed production staking vault. |
|
Royco chains that may host WrappedVault or tranche vault markets. |
|
Mellow Core chains with official Core deployments. |
|
Chain restrictions for protocols deployed on a known limited chain set. |
|
Handle problematic protocols. |
Functions
|
Create calls that call each vault address using multicall. |
|
Create a new vault instance class based on the detected features. |
|
Create any vault instance. |
|
Detect the ERC-4626 features of a vault smart contract. |
|
Based on multicall results, create the feature flags for the vault.. |
|
Perform multicalls against each vault address to extract the features of the vault smart contract. |
Classes
Results of a multicall probing to a vault address. |
- ODA_FACT_JLTXX_ADDRESS = '0x09864f52b035ae22ee739dfa5c748fa080d07bd8'
JPMorgan OnChain Liquidity-Token Money Market Fund (JLTXX) ODA-FACT diamond.
https://eth.blockscout.com/address/0x09864f52B035AE22eE739dFa5c748fA080D07bD8
- ODA_FACT_JLTXX_CHAIN_ID = 1
Ethereum mainnet chain id.
- ODA_FACT_MONY_ADDRESS = '0x6a7c6aa2b8b8a6a891de552bdeffa87c3f53bd46'
J.P. Morgan My OnChain Net Yield Fund (MONY) FACT diamond.
https://etherscan.io/address/0x6a7c6aa2b8b8a6a891de552bdeffa87c3f53bd46
- ODA_FACT_JLTXX_FIRST_SEEN_AT_BLOCK = 25042223
JLTXX ODA-FACT deployment block.
Source: Blockscout creation transaction
0xb15855289d18025769583dee24f16e5cdd33be9c0e20586cc9d2c20a103f4f43.
- ODA_FACT_JLTXX_FIRST_SEEN_AT = datetime.datetime(2026, 5, 7, 9, 20, 11)
JLTXX deployment timestamp, stored as naive UTC.
- ODA_FACT_MONY_FIRST_SEEN_AT_BLOCK = 23890166
MONY Diamond deployment block.
Determined from the first Ethereum block containing runtime bytecode for the exact Sourcify-verified deployment.
- ODA_FACT_MONY_FIRST_SEEN_AT = datetime.datetime(2025, 11, 27, 12, 52, 11)
MONY Diamond deployment timestamp, stored as naive UTC.
- ODA_FACT_HARDCODED_LEADS = ((1, '0x09864f52b035ae22ee739dfa5c748fa080d07bd8', 25042223, datetime.datetime(2026, 5, 7, 9, 20, 11)), (1, '0x6a7c6aa2b8b8a6a891de552bdeffa87c3f53bd46', 23890166, datetime.datetime(2025, 11, 27, 12, 52, 11)))
Hardcoded ODA-FACT lead data used because the single production contract does not emit ERC-4626
Deposit/Withdrawdiscovery events.
- ODA_FACT_HARDCODED_PROTOCOLS = {'0x09864f52b035ae22ee739dfa5c748fa080d07bd8': {ERC4626Feature.oda_fact_like}, '0x6a7c6aa2b8b8a6a891de552bdeffa87c3f53bd46': {ERC4626Feature.oda_fact_like}}
ODA-FACT hardcoded classification flags.
- MIDAS_HARDCODED_PROTOCOLS = {'0x007115416ab6c266329a03b09a8aa39ac2ef7d9d': {ERC4626Feature.midas_like}, '0x030b69280892c888670edcdcd8b69fd8026a0bf3': {ERC4626Feature.midas_like}, '0x057ced81348d57aad579a672d521d7b4396e8a61': {ERC4626Feature.midas_like}, '0x06a317991f2f479a6213278b32d17a126fcab501': {ERC4626Feature.midas_like}, '0x0a640e217a3c5579b920f740b556f44b6e9820c5': {ERC4626Feature.midas_like}, '0x0a72ed3c34352ab2dd912b30f2252638c873d6f0': {ERC4626Feature.midas_like}, '0x130f99c2396e02dbaaa4c1643b10e06ecfe7edab': {ERC4626Feature.midas_like}, '0x141f0e9ed8ba2295254c9df9476cce7bc29172b1': {ERC4626Feature.midas_like}, '0x17bc8ffd82b8a36e737ca1141c025089589b915e': {ERC4626Feature.midas_like}, '0x184cfda782ce61366010cab23294fb22fa6189f5': {ERC4626Feature.midas_like}, '0x1c2757c1fef1038428b5bef062495ce94bbe92b2': {ERC4626Feature.midas_like}, '0x1c8ee940b654bfced403f2a44c1603d5be0f50fa': {ERC4626Feature.midas_like}, '0x20226607b4fa64228abf3072ce561d6257683464': {ERC4626Feature.midas_like}, '0x238a700ed6165261cf8b2e544ba797bc11e466ba': {ERC4626Feature.midas_like}, '0x2448cf256192ee8e122e52026758ae28398afb4f': {ERC4626Feature.midas_like}, '0x2540bddc5e854419496192688e8257c5ded7ad78': {ERC4626Feature.midas_like}, '0x27329b57666413b84dcb872fe611edbfe9a1a9ad': {ERC4626Feature.midas_like}, '0x27bfb8d29af693865e3926e752b2f56c7a33a2a8': {ERC4626Feature.midas_like}, '0x2a8c22e3b10036f3aef5875d04f8441d4188b656': {ERC4626Feature.midas_like}, '0x2bf11d2e04bc40daa95c24b8b90ec4f5c57dd326': {ERC4626Feature.midas_like}, '0x2fe058ccf29f123f9dd2aec0418aa66a877d8e50': {ERC4626Feature.midas_like}, '0x34bdda6beb128130158811e5b881da67902325b2': {ERC4626Feature.midas_like}, '0x4089dc8b6637218f13465d28950a82a7e90cbe27': {ERC4626Feature.midas_like}, '0x441794d6a8f9a3739f5d4e98a728937b33489d29': {ERC4626Feature.midas_like}, '0x462be06b03641f0880f694ebc82295572837ba53': {ERC4626Feature.midas_like}, '0x48e284d0729eb1925066307072758d95dbbb49c4': {ERC4626Feature.midas_like}, '0x4e72025984424e52838cf8953e2863eff036b67a': {ERC4626Feature.midas_like}, '0x513bd45be7643fe6c30c41cd4b327e8e341aaf9a': {ERC4626Feature.midas_like}, '0x548857309befb6fb6f20a9c5a56c9023d892785b': {ERC4626Feature.midas_like}, '0x5a42864b14c0c8241ef5ab62dae975b163a2e0c1': {ERC4626Feature.midas_like}, '0x5c9e1c4d60dba50a68cbe3b0c1b5731a6fd08af6': {ERC4626Feature.midas_like}, '0x5e105266db42f78fa814322bce7f388b4c2e61eb': {ERC4626Feature.midas_like}, '0x605a84861ee603e385b01b9048bea6a86118db0a': {ERC4626Feature.midas_like}, '0x616185600989bf8339b58ac9e539d49536598343': {ERC4626Feature.midas_like}, '0x61896940f60a536f1d3dae9580524542d58d3683': {ERC4626Feature.midas_like}, '0x67e1f506b148d0fc95a4e3ffb49068ceb6855c05': {ERC4626Feature.midas_like}, '0x6b35f2e4c9d4c1da0edaf7fd7dc90d9bca4b0873': {ERC4626Feature.midas_like}, '0x6b6b870c7f449266a9f40f94eca5a6ff9b0857e4': {ERC4626Feature.midas_like}, '0x6eb6724d8d3d4ff9e24d872e8c38403169dc05f8': {ERC4626Feature.midas_like}, '0x762fd99ee22742deecb8eecb12165752d9a18164': {ERC4626Feature.midas_like}, '0x766255b53ae70fa39a18aa296f41fab17db6a810': {ERC4626Feature.midas_like}, '0x76cc16608aa7cd32631bb151801bb095313f7bbd': {ERC4626Feature.midas_like}, '0x7cf9dec92ca9fd46f8d86e7798b72624bc116c05': {ERC4626Feature.midas_like}, '0x80cae1bb1b90980148c5bc9c5701b69fafe7d6b2': {ERC4626Feature.midas_like}, '0x81e064d0eb539de7c3170edf38c1a42cbd752a76': {ERC4626Feature.midas_like}, '0x827ce7e8e35861d9ac7fe002755767b695a5594a': {ERC4626Feature.midas_like}, '0x841eeb3e2489b2282b0e14202dc8bd8f7624e29a': {ERC4626Feature.midas_like}, '0x87c9053c819bb28e0d73d33059e1b3da80afb0cf': {ERC4626Feature.midas_like}, '0x8858a307a85982c2b3cb2ace1720237f2f09c39b': {ERC4626Feature.midas_like}, '0x8e2c2c9def45efb9bd3c448945830ddb254154be': {ERC4626Feature.midas_like}, '0x9004b9890d6b901a17f734efe028b1be5bd6cd22': {ERC4626Feature.midas_like}, '0x9114650a2b8f8598a6b6aa1cb2837e145f59f9fd': {ERC4626Feature.midas_like}, '0x926a8a63fa1e1fdbbeb811a0319933b1a0f1edbb': {ERC4626Feature.midas_like}, '0x949a7250bb55eb79bc6bcc97fcd1c473db3e6f29': {ERC4626Feature.midas_like}, '0x94bf32bd7de56e80778530919292beff503ec9e6': {ERC4626Feature.midas_like}, '0x9b5528528656dbc094765e2abb79f293c21191b9': {ERC4626Feature.midas_like}, '0x9fb442d6b612a6dcd2acc67bb53771ef1d9f661a': {ERC4626Feature.midas_like}, '0xa01227a26a7710bc75071286539e47adb6dea417': {ERC4626Feature.midas_like}, '0xa1150cd4a014e06f5e0a6ec9453fe0208da5adab': {ERC4626Feature.midas_like}, '0xa19f6e0df08a7917f2f8a33db66d0af31ff5eca6': {ERC4626Feature.midas_like}, '0xa48cfd53263ade6abdb0ac75287cc0d5a2eee17f': {ERC4626Feature.midas_like}, '0xad4748098c2a771cc034d7dfc10fad9f9ed605fd': {ERC4626Feature.midas_like}, '0xaf801b65239b4de90f73e26f9bd1260943a5e248': {ERC4626Feature.midas_like}, '0xb31bea5c2a43f942a3800558b1aa25978da75f8a': {ERC4626Feature.midas_like}, '0xb39c200d3094c05e048a8f13b69a221db56d012a': {ERC4626Feature.midas_like}, '0xb64c014307622eb15046c66ff71d04258f5963dc': {ERC4626Feature.midas_like}, '0xbb51e2a15a9158ebe2b0ceb8678511e063ab7a55': {ERC4626Feature.midas_like}, '0xc344db27feba7f0a881a50f0f702a525a44f2368': {ERC4626Feature.midas_like}, '0xc462f87f78abdd27b1e41c9ede862275d2c7f36b': {ERC4626Feature.midas_like}, '0xc470e9fc12a60f72c543516dc23de1f55c29e3d5': {ERC4626Feature.midas_like}, '0xc6135d59f8d10c9c035963ce9037b3635170d716': {ERC4626Feature.midas_like}, '0xc8495eaff71d3a563b906295fcf2f685b1783085': {ERC4626Feature.midas_like}, '0xc8739fbbd54c587a2ad43b50cbcc30ae34fe9e34': {ERC4626Feature.midas_like}, '0xca5921df65e2e1b0b98ae91c0187ba80d4124898': {ERC4626Feature.midas_like}, '0xcc476b1a49bcdf5192561e87b6fb8ea78aa28c13': {ERC4626Feature.midas_like}, '0xcc5c22c7a6bcc25e66726aef011dde74289ed203': {ERC4626Feature.midas_like}, '0xccbad2823328bccaea6476df3aa529316ab7474a': {ERC4626Feature.midas_like}, '0xd385ba55a22ac732cf435c5b5c3a1dfe5939ba4d': {ERC4626Feature.midas_like}, '0xd66d69c288d9a6fd735d7be8b2e389970fc4fd42': {ERC4626Feature.midas_like}, '0xd90f6bfed23ffde40106fc4498dd2e9edb95e4e7': {ERC4626Feature.midas_like}, '0xdd629e5241cbc5919847783e6c96b2de4754e438': {ERC4626Feature.midas_like}, '0xe68f4e819ad09f2e0e668297cc1a905994808d38': {ERC4626Feature.midas_like}, '0xe70b5eb021dc3af653d61fd792d8f0b60f36c493': {ERC4626Feature.midas_like}, '0xe7ba07519dfa06e60059563f484d6090dedf21b3': {ERC4626Feature.midas_like}, '0xecacb5434f05a548faf92a31874e0c014beeee91': {ERC4626Feature.midas_like}, '0xf7cf282ec810fded974f99c0163e792f432892bc': {ERC4626Feature.midas_like}, '0xf91c31299e998c5127bc5f11e4a657fc0cf358cd': {ERC4626Feature.midas_like}, '0xffa36b4b011d87d89fef3098ab30fef7bcc3571e': {ERC4626Feature.midas_like}}
Midas hardcoded classification flags.
- ASSETO_HARDCODED_PROTOCOLS = {'0x80c080acd48ed66a35ae8a24bc1198672215a9bd': {ERC4626Feature.asseto_like}}
Asseto tokenised fund products require chain-aware address matching.
- ONDO_HARDCODED_PROTOCOLS = {'0x1b19c19393e2d034d8ff31ff34c81252fcbbee92': {ERC4626Feature.ondo_like}, '0x96f6ef951840721adbf46ac996b59e0235cb985c': {ERC4626Feature.ondo_like}}
Ondo issuer share tokens are chain-aware, non-ERC-4626 products whose NAV is published by separate issuer oracles.
- USYC_HARDCODED_PROTOCOLS = {'0x136471a34f6ef19fe571effc1ca711fdb8e49f2b': {ERC4626Feature.usyc_like}}
Circle USYC is a single permissioned ERC-20 fund token on Ethereum.
- FRANKLIN_HARDCODED_PROTOCOLS = {'0x3ddc84940ab509c11b20b76b466933f40b750dc9': {ERC4626Feature.franklin_like}, '0x90276e9d4a023b5229e0c2e9d4b2a83fe3a2b48c': {ERC4626Feature.franklin_like}}
Franklin Templeton Benji fund shares require chain-aware address matching.
- CENTRIFUGE_TRANCHE_HARDCODED_PROTOCOLS = {'0x8c213ee79581ff4984583c6a801e5263418c4b86': {ERC4626Feature.centrifuge_tranche_like}}
Centrifuge Tranche tokens are permissioned ERC-20 shares. They must be routed separately from Centrifuge’s ERC-7540 LiquidityPool vaults.
- WISDOMTREE_HARDCODED_PROTOCOLS = {'0x1fecf3d9d4fee7f2c02917a66028a48c6706c179': {ERC4626Feature.wisdomtree_like}}
WisdomTree compliance ERC-20 fund shares require chain-aware routing.
- SUPERSTATE_HARDCODED_PROTOCOLS = {'0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e': {ERC4626Feature.superstate_like}}
Superstate tokenised fund products require chain-aware address matching.
- LIBEARA_HARDCODED_PROTOCOLS = {'0x237c717df1b60501f8d029d3fe7385fd090df180': {ERC4626Feature.libeara_like}, '0x50293dd8889b931eb3441d2664dce8396640b419': {ERC4626Feature.libeara_like}, '0x85d38585c3ac08268f598282a84b7c0ddfc0d04f': {ERC4626Feature.libeara_like}, '0xc26af85ede9cc25d449bcebef866bb85afd5d346': {ERC4626Feature.libeara_like}}
CMTAT is shared by unrelated security tokens, so only reviewed Libeara products are classified through this chain-aware allow-list.
- SPIKO_HARDCODED_PROTOCOLS = {'0xe4880249745eac5f1ed9d8f7df844792d560e750': {ERC4626Feature.spiko_like}}
Spiko USTBL is a single reviewed permissioned fund token on Ethereum.
- SYGNUM_HARDCODED_PROTOCOLS = {'0x54a4fc78431f9201824643e99bec891bb7462a1d': {ERC4626Feature.sygnum_like}, '0xf0db6f529581e7f6ebac7a7f6882923c00fc3a66': {ERC4626Feature.sygnum_like}}
Sygnum FILQ share tokens are reviewed permissioned SygToken proxies.
- FDIT_HARDCODED_PROTOCOLS = {'0x48ab4e39ac59f4e88974804b04a991b3a402717f': {ERC4626Feature.fdit_like}}
FDIT and CASHx are reviewed Ethereum-only permissioned fund-share tokens.
- THEO_ITOKEN_HARDCODED_PROTOCOLS = {'0x5fa487bca6158c64046b2813623e20755091da0b': {ERC4626Feature.theo_itoken_like}}
Theo iTokens are multi-asset fund tokens, not standard ERC-4626 vaults.
- WSTGBP_HARDCODED_PROTOCOLS = {'0x57c3571f10767e49c9d7b60feb6c67804783b7ae': {ERC4626Feature.wstgbp_like}}
wstGBP hardcoded classification flags.
This is deliberately address-only for the initial rollout. wstGBP does not yet have a production track record or large vault deployments that warrant maintaining a chain-specific deployment registry. Revisit this allow-list when a material multi-chain deployment is added.
- KILOEX_HARDCODED_PROTOCOLS = {'0x1c3f35f7883fc4ea8c4bca1507144dc6087ad0fb': {ERC4626Feature.kiloex_like}, '0x43e3e6ffb2e363e64cd480cbb7cd0cf47bc6b477': {ERC4626Feature.kiloex_like}, '0x6e7a6eb5feec64bf6401a744757aba89c5c7e813': {ERC4626Feature.kiloex_like}, '0xa40e085d0584eed39daaa077fcc4cd153ae9a5b0': {ERC4626Feature.kiloex_like}}
KiloEx Hybrid Vaults reuse a Gains-compatible contract surface. Classify known deployments by address instead of the generic
maxDiscountP()probe.
- AAVE_ATOKEN_VAULTS_BY_CHAIN: dict[int, frozenset[eth_typing.evm.HexAddress]] = {1: frozenset({'0x010190578dffba6380f30b5c7c0b3b9aee7d9cc1', '0x04da4b99ffc82f0e44ded14c3539a6fdad08e2fe', '0x09a2a86a4570bda567a58c3fc2421678b0b49fc4', '0x16f1894adb7498da9df9b18b99a1777ed72c6419', '0x16fe34a39fd82eda94376b9ca55fe1ecf2802434', '0x2ee1dcb6806daaf883146761d135432d8c1223a4', '0x36b22e03bc9f8d08109ca4bb36241e3bfb7077fa', '0x3aa807b06a496d08a930c9e028248426a1238264', '0x415e5ac92aa395427cc287f0510f3a7beaac9caf', '0x4543bcaf294820ec9d5b973ce557a9a7ce022468', '0x4763d306c0b073dd50fb0907a19cc1f597f04115', '0x53485973afb5f11dfc304776fe762a5f944353c7', '0x6a1800a2ba6a542b015690d5a98959e049d55704', '0x7a69e552616ac38d212cea26467a8afb42d8facd', '0x7c15e25ad5a219030a2f748fbd68eeea36191e29', '0xa5ac3b049d91f46ad5b2eaf46154b6849ef8836b', '0xad0702c6b51689c67b7dd5142da041661c1cd4d1', '0xb1ea329f0b79d0b213957569594ca2a9de637215', '0xb5d3002e79adb74d4a7a5e7bc7923a03fde320db', '0xb829831fd41f3a9b89e16462756c2393651f1c6d', '0xbc370b5b13233e5c7241a750f6a88316a8469d2b', '0xc41a49cfadc574dce1c1255c4669bf00e2ae33f8', '0xdbeb19dfccd30b94df7a122512ffc20aa9101aa3', '0xe9d881f0d5312119b94cf60cb9cf361ee012c1d7', '0xfaccbbe7b83c340db7a416f6155ad8ba9674107a', '0xfbdc620f1410c13dcb1e53db20cdac367790e18b', '0xfdeb3cf6f7ead01d9c6468dce89082021ecb1238', '0xfe2870319b5db8443ed80b717f6a777991a3f625'}), 10: frozenset({'0x18f831d3d795ac8fc2138f79f9c476c64e0a440d', '0x23be1786d4ca421219acc64f1ca8f7114480f379', '0x50cff7e5c7d76a1e8a089625178614c0de63cbe8', '0x6dcecf33b429feeca46d3a1795094a0b81f7986a', '0xe478fadfc2b8f26fa1c4231069793d007a52d30e'}), 56: frozenset({'0x010190578dffba6380f30b5c7c0b3b9aee7d9cc1', '0x04d77868f6dbf9d5cc910d149f0622893cb706ba', '0x2c6984c29f0d04438f9c8c9e4b613098776d97b3', '0x2ee1dcb6806daaf883146761d135432d8c1223a4', '0x36b22e03bc9f8d08109ca4bb36241e3bfb7077fa', '0x42fd8d4e5274cac0dacf6fcca80dc5c253a35d0b', '0x43408ba0e12353344b5758c516183b19579589ad', '0x4543bcaf294820ec9d5b973ce557a9a7ce022468', '0x474d27825116fcf617c6ac4da476769fbcbfd62f', '0x4763d306c0b073dd50fb0907a19cc1f597f04115', '0x50cff7e5c7d76a1e8a089625178614c0de63cbe8', '0x5defdde3c35222a1ae3c2ed388a8c0664f461aee', '0x60eba6aba19389f79ee4d974b1a93c3c5c825ee7', '0x7c15e25ad5a219030a2f748fbd68eeea36191e29', '0x8e684882ce2085ba1d0905ea736c44f966ed3b78', '0xad0702c6b51689c67b7dd5142da041661c1cd4d1', '0xc41a49cfadc574dce1c1255c4669bf00e2ae33f8', '0xdfd5f62748eb4f8e16296100e2a80f58b1196e69', '0xebf2ad5e3bcf30228a4caa4485eeb41fa73d6d84', '0xfdeb3cf6f7ead01d9c6468dce89082021ecb1238', '0xfe2870319b5db8443ed80b717f6a777991a3f625'}), 100: frozenset({'0x9f40ca84a70685d2c48003b9dec27b3d98ace348'}), 137: frozenset({'0x04d77868f6dbf9d5cc910d149f0622893cb706ba', '0x1f810098716f47507f6c4fee7a032c5461004db8', '0x2ee1dcb6806daaf883146761d135432d8c1223a4', '0x36b22e03bc9f8d08109ca4bb36241e3bfb7077fa', '0x42fd8d4e5274cac0dacf6fcca80dc5c253a35d0b', '0x548db1b10d62c25cf39f47b980989a0cbee08d66', '0x88f6d430aed64062391d7343024e3fbf55604682', '0x8e684882ce2085ba1d0905ea736c44f966ed3b78', '0xad0702c6b51689c67b7dd5142da041661c1cd4d1', '0xda848e1fa5a5b6fc22cc6563fde4e761ea97e171', '0xdaf742cf0526d190598fea7adbd6c0fab6bf48e5', '0xebf2ad5e3bcf30228a4caa4485eeb41fa73d6d84'}), 8453: frozenset({'0x05c9bfebe153540fdf2749d20d0903b942887215', '0x09f2675ca6d422ee6bbbca0c156b0ead36dea364', '0x0fa3c7bbc28aae2391effc853b33a77e24db65d8', '0x18ed89d5adac015ec8faaa513f8f4f3abfdc4fb1', '0x21cfee84158fde9ddb89f3404e2ec2148d3f0b91', '0x2a9cff5e49612945813acc1e428e9dfd0a07040b', '0x373f209b719f1e738c7fe4e80997a94ba7a25344', '0x4cc1950a1861caca5af3e46deb541febc30da7a8', '0x5a38d0a4f33d2b352169fe1803898cf0b9c50c1f', '0x5c4a2e6cb536d271aee396409a870abfd42647c4', '0x606eee2c9f86c9f2172b3a8fa6bb249f02a0a396', '0x76924dff2160383d1ffeafe032f3c8a217413c11', '0x9520c52b9a4cf0863c0bf61d88fa6e7f6f8d0cb8', '0xac939fafcdc611cd813a08c47ed1a66fe7798a6e', '0xade93c638474f1197ea37818ee72251b7a7dad18', '0xb3dcf17ab965d3e3eb9976ed233af6461de2dfd6', '0xb75b9fedea62517600711317149d59ba43f4cdfe', '0xbe5e98d89a730520a9bdcaa7d33cf123742945b2', '0xc535f4afca6871610d8b78b83f5537ea9f795c60', '0xc797e22436e5d1e2d646bed8c427f5c76205986b', '0xc90be3abb83c2370a31724fe036deda1d26d1b21', '0xcccae05e8d9cfff2edc75ac4a49b29eb86567425', '0xd120faa78b69a363570aa8c14299fb703020b0a0', '0xd81745a0864733f4ff134be4c7dd94de0d6bf73a', '0xe5c88c0f64a30b2788825909bf659e9e18c72179', '0xf8e36333a43fabd6d6335354d2a88afa4953ad95'}), 42161: frozenset({'0x03ee88c9769f2c61a93f1cbaffe89549a9405df1', '0x05c9bfebe153540fdf2749d20d0903b942887215', '0x36b22e03bc9f8d08109ca4bb36241e3bfb7077fa', '0x3e7aaeec48fc9197ccf207f1852918c40925a0ff', '0x4543bcaf294820ec9d5b973ce557a9a7ce022468', '0x50cff7e5c7d76a1e8a089625178614c0de63cbe8', '0x68f30a3f6b95c0e7c526d7c480590d86952c7fd9', '0x750763ea6f9135d1035951c7c6f7b46364a2f5c1', '0x8e8ee3b6d44d546618a4f780e8ab4d1b6e09856b', '0xae30d1534a6056425927f22e2314eaf10dbb645f', '0xbf528c77200d82c7536cd7161ff9def6d2e33e09', '0xc64f11e3b6b8ced8fa6930c87b84640352d9a757', '0xcd9d2a2c74e49cfafb024006be614b04c82d5273', '0xfe2870319b5db8443ed80b717f6a777991a3f625', '0xffa8a407f067f44fb06de7fae075c8857346a94e'}), 43114: frozenset({'0x09a858562f28d5a443e3e13f8a8cf70d7a1d16ed', '0x0f9769fc8fedded4ce61457543bcb8ded621dcf3', '0x2e0d7d85d0a68ed1d7dd17d44419a17b76c5f166', '0x3c9a197cd40873cddede4e30fc1c88fd7817aa18', '0x637ad57ad1a2028f61b72277cdf5d851419f3df9', '0x7433478146a2055ae0c3d426cd2a89f2f0e1dce3', '0x74f6730babb9d2e43f091f0ee3c1d5a071bd7dff', '0x8be669c95cf6c814743b3b6b8941ab3a3b66d2c3', '0x91d83ca9b146cbf2f556d52393b5394c2f22ea34', '0xee9655aee14a8615989fc19016cf217eb536a76e', '0xf371fc948f7e6e2dd431b807d0a68185b696bf18'})}
Aave V3 ATokenVault deployments, identified by the Aave-specific
ATOKEN()accessor. Addresses are chain-aware because several addresses are deployed on more than one chain.Smart contract source: https://github.com/aave/aave-vault/blob/main/src/ATokenVault.sol
- FRANKENCOIN_HARDCODED_PROTOCOLS = {'0x6165946250dd04740ab1409217e95a4f38374fe9': {ERC4626Feature.frankencoin_like}, '0x637f00cab9665cb07d91bfb9c6f3fa8fabfef8bc': {ERC4626Feature.frankencoin_like}, '0xa09ebdf8a01b9ef04149319d64f83b9c01a5b585': {ERC4626Feature.frankencoin_like}, '0xe5f130253ff137f9917c0107659a4c5262abf6b0': {ERC4626Feature.frankencoin_like}}
Frankencoin hardcoded classification flags.
- VAULT_STREET_HARDCODED_PROTOCOLS = {'0x7ea76108975ec0998b9bc2db04b4eca986400dd7': {ERC4626Feature.vault_street_like}}
Vault Street hardcoded classification flags.
primeUSD is a non-ERC-4626 token whose NAV comes from a separate oracle.
- FRAX_STAKING_HARDCODED_PROTOCOLS = {'0x03cb4438d015b9646d666316b617a694410c216d': {ERC4626Feature.frax_staking_like}, '0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32': {ERC4626Feature.frax_staking_like}, '0xcf62f905562626cfcdd2261162a51fd02fc9c5b6': {ERC4626Feature.frax_staking_like}}
Frax stablecoin staking vaults use shared linear-reward implementations, so the reviewed sFRAX and sfrxUSD deployments are routed by address.
- NARA_HARDCODED_PROTOCOLS = {'0x1aa23cdfc941f6b54251c72012a9bfa4bf5394d6': {ERC4626Feature.nara_like}}
NaraUSD+ is Nara’s only reviewed production staking vault.
- ROYCO_CHAIN_IDS = {1, 146, 999, 8453, 42161, 43114, 80094, 98866, 11155111, 21000000}
Royco chains that may host WrappedVault or tranche vault markets.
Based on Royco
vault/exploreandmarket/exploreAPI rows, plus locally observed Royco vault rows that may temporarily disappear from the API response.
- MELLOW_CORE_CHAIN_IDS = {1, 143, 9745, 42161}
Mellow Core chains with official Core deployments.
Source: https://docs.mellow.finance/core-vaults/core-deployments
- CHAIN_RESTRICTED_PROBES: dict[str, set[int]] = {'DEPLOYER_ADDRESS': {1, 42161}, 'POOL': {999}, 'SAY_TRADER_ROLE': {42161}, 'SPOKE_REVISION': {1}, 'agent': {}, 'aggregateVault': {42161}, 'borrowed_token': {1, 10, 42161}, 'bridgedSupply': {42161}, 'claimableKeeper': {137, 42161}, 'depositController': {1, 56, 42161}, 'getAssetCount': {1, 143, 9745, 42161}, 'getGrossTVL': {42161}, 'getPerformanceFeeData': {1, 8453, 42161}, 'getRawNAV': {1, 146, 999, 8453, 42161, 43114, 80094, 98866, 11155111, 21000000}, 'marketManager': {143}, 'outputToLp0Route': {}, 'poolId': {1, 8453, 42161}, 'previewRateAfterDeposit': {1, 42161, 80094}, 'queue': {1, 143}, 'repoTokenHoldings': {1, 9745, 43114}, 'routerRegistry': {8453}, 'shareManager': {1, 143, 9745, 42161}, 'strategist': {5000}, 'strategy': {1, 143}, 'validateComponentRatios': {42161}, 'vaultManager': {5000}, 'wards': {1, 8453, 42161}}
Chain restrictions for protocols deployed on a known limited chain set.
Maps probe function names to the set of chain IDs where that protocol is deployed. Probes for these protocols will be skipped on chains not in their set.
Data source: https://top-defi-vaults.tradingstrategy.ai/top_vaults_by_chain.json Data checked: 2026-01-13
When changing vault classification probes, remember that already discovered vaults keep stored feature flags in
vault-metadata-db.pickleand reader progress in reader-state pickle files. Manually purge or repair the database and rescan affected vaults; seescripts/erc-4626/purge-royco-tranche-data.pyfor an example.
- class VaultFeatureProbe
Bases:
objectResults of a multicall probing to a vault address.
Method generated by attrs for class VaultFeatureProbe.
- __init__(address, features)
Method generated by attrs for class VaultFeatureProbe.
- Parameters
address (eth_typing.evm.HexAddress) –
features (set[eth_defi.erc_4626.core.ERC4626Feature]) –
- Return type
None
- create_probe_calls(addresses, share_probe_amount=1000000, chain_id=None)
Create calls that call each vault address using multicall.
Because ERC standards are such a shit show, and nobody is using good interface standard, we figure out the vault type by probing it with various calls
Skips protocol-specific probes for protocols only deployed on certain chains (see
CHAIN_RESTRICTED_PROBESfor the list)
- Parameters
addresses (collections.abc.Iterable[eth_typing.evm.HexAddress]) – Iterable of vault contract addresses to probe.
share_probe_amount – Amount used for convertToShares() probe call.
chain_id (Optional[int]) – If provided, filters out probe calls for protocols that are not deployed on this chain. This reduces unnecessary RPC calls when scanning chains where certain protocols don’t exist. Protocols with a known limited deployment set have their probes skipped on other chains. If None, all probes are generated (no filtering).
- Return type
collections.abc.Iterable[eth_defi.event_reader.multicall_batcher.EncodedCall]
- identify_vault_features(address, calls, debug_text, chain_id=None)
Based on multicall results, create the feature flags for the vault..
- Parameters
calls (dict[str, eth_defi.event_reader.multicall_batcher.EncodedCallResult]) – Call name -> result
address (eth_typing.evm.HexAddress) –
- Return type
- probe_vaults(chain_id, web3factory, addresses, block_identifier, max_workers=8, progress_bar_desc=None)
Perform multicalls against each vault address to extract the features of the vault smart contract.
- Returns
Iterator of what vault smart contract features we detected for each potential vault address
- Parameters
chain_id (int) –
web3factory (eth_defi.event_reader.web3factory.Web3Factory) –
addresses (list[eth_typing.evm.HexAddress]) –
block_identifier (Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, hexbytes.main.HexBytes, int]) –
- Return type
collections.abc.Iterable[eth_defi.erc_4626.classification.VaultFeatureProbe]
- detect_vault_features(web3, address, verbose=True)
Detect the ERC-4626 features of a vault smart contract.
Protocols: Harvest, Lagoon, etc.
Does support ERC-7540
Very slow, only use in scripts and tutorials.
Use to pass to
create_vault_instance()to get a correct Python proxy class for the vault institated.
Example:
features = detect_vault_features(web3, spec.vault_address, verbose=False) logger.info("Detected vault features: %s", features) vault = create_vault_instance( web3, spec.vault_address, features=features, )
- Parameters
verbose – Disable for command line scripts
web3 (web3.main.Web3) –
address (Union[eth_typing.evm.HexAddress, str]) –
- Return type
- create_vault_instance(web3, address, features=None, token_cache=None, auto_detect=False, default_block_identifier=None, require_denomination_token=False)
Create a new vault instance class based on the detected features.
Get a protocol-specific Python instance that can e.g. read the fees of the vault (not standardised).
See also -
detect_vault_features()to determine features for a vault address- Parameters
features (Optional[set[eth_defi.erc_4626.core.ERC4626Feature]]) –
Previously/manually extracted vault feature flags for the type.
Give empty set for generic ERC-4626 vault class.
auto_detect (bool) –
Auto-detect the vault protocol.
Very slow, do not use except in tutorials and scripts. Prefer to manually pass
feature.default_block_identifier (Optional[Union[Literal['latest', 'earliest', 'pending', 'safe', 'finalized'], eth_typing.evm.BlockNumber, eth_typing.evm.Hash32, eth_typing.encoding.HexStr, hexbytes.main.HexBytes, int]]) –
Override block identifier for on-chain metadata reads.
Set to
"latest"for freshly deployed vaults whose contracts do not exist at the safe-cached block number.require_denomination_token (bool) – If
True, accessingdenomination_tokenwill raiseRuntimeErrorwhen the on-chain lookup returnsNone.web3 (web3.main.Web3) –
address (Union[eth_typing.evm.HexAddress, str]) –
- Returns
None if the vault creation is not supported
- Return type
- create_vault_instance_autodetect(web3, vault_address, token_cache=None)
Create any vault instance.
Probes smart contract call first to identify what kind of vault we are dealing with
- Parameters
web3 (web3.main.Web3) –
vault_address (Union[eth_typing.evm.HexAddress, str]) –
- Return type
- HARDCODED_PROTOCOLS = {'0x0000000f2eb9f69274678c76222b35eec7588a65': {ERC4626Feature.yo_like}, '0x007115416ab6c266329a03b09a8aa39ac2ef7d9d': {ERC4626Feature.midas_like}, '0x00be76740759518db9c51bc59ec1993f2ffa4648': {ERC4626Feature.aera_like}, '0x015a70185a80d8c8c034e3d360e25a14c7fb8cf0': {ERC4626Feature.crystalclear_like}, '0x01ba69727e2860b37bc1a2bd56999c1afb4c15d8': {ERC4626Feature.yieldnest_like}, '0x030b69280892c888670edcdcd8b69fd8026a0bf3': {ERC4626Feature.midas_like}, '0x03cb4438d015b9646d666316b617a694410c216d': {ERC4626Feature.frax_staking_like}, '0x052e7d7fbb4cf3be81a4ffc182bcc0fd802417ae': {ERC4626Feature.basevol_like}, '0x056b269eb1f75477a8666ae8c7fe01b64dd55ecc': {ERC4626Feature.threejane_like}, '0x057ced81348d57aad579a672d521d7b4396e8a61': {ERC4626Feature.midas_like}, '0x06a317991f2f479a6213278b32d17a126fcab501': {ERC4626Feature.midas_like}, '0x06a491e3efee37eb191d0434f54be6e42509f9d3': {ERC4626Feature.spectra_usdn_wrapper_like}, '0x06d47f3fb376649c3a9dafe069b3d6e35572219e': {ERC4626Feature.avant_like}, '0x06fd9d03b3d0f18e4919919b72d30c582f0a97e5': {ERC4626Feature.hyperlend_like}, '0x08dcdbf7bade91ccd42cb2a4ea8e5d199d285957': {ERC4626Feature.forty_acres_like}, '0x09864f52b035ae22ee739dfa5c748fa080d07bd8': {ERC4626Feature.oda_fact_like}, '0x09cea16a2563c2d7d807c86f5b8da760389b5915': {ERC4626Feature.liquid_royalty_like}, '0x0a640e217a3c5579b920f740b556f44b6e9820c5': {ERC4626Feature.midas_like}, '0x0a72ed3c34352ab2dd912b30f2252638c873d6f0': {ERC4626Feature.midas_like}, '0x0b9342c15143e8f54a83f887c280a922f4c48771': {ERC4626Feature.ember_like}, '0x0ff79b6d6c0fb5faf54bd26db5ce97062a105f81': {ERC4626Feature.renalta_like}, '0x1202f5c7b4b9e47a1a484e8b270be34dbbc75055': {ERC4626Feature.resolv_like}, '0x124d00b1ce4453ffc5a5f65ce83af13a7709bac7': {ERC4626Feature.forty_acres_like}, '0x130f99c2396e02dbaaa4c1643b10e06ecfe7edab': {ERC4626Feature.midas_like}, '0x136471a34f6ef19fe571effc1ca711fdb8e49f2b': {ERC4626Feature.usyc_like}, '0x141f0e9ed8ba2295254c9df9476cce7bc29172b1': {ERC4626Feature.midas_like}, '0x17bc8ffd82b8a36e737ca1141c025089589b915e': {ERC4626Feature.midas_like}, '0x184cfda782ce61366010cab23294fb22fa6189f5': {ERC4626Feature.midas_like}, '0x19ebd191f7a24ece672ba13a302212b5ef7f35cb': {ERC4626Feature.yieldfi_like}, '0x1aa23cdfc941f6b54251c72012a9bfa4bf5394d6': {ERC4626Feature.nara_like}, '0x1b19c19393e2d034d8ff31ff34c81252fcbbee92': {ERC4626Feature.ondo_like}, '0x1b463561f264114f9d4db6ff9ee2771b33076b13': {ERC4626Feature.crystalclear_like}, '0x1c2757c1fef1038428b5bef062495ce94bbe92b2': {ERC4626Feature.midas_like}, '0x1c3f35f7883fc4ea8c4bca1507144dc6087ad0fb': {ERC4626Feature.kiloex_like}, '0x1c8ee940b654bfced403f2a44c1603d5be0f50fa': {ERC4626Feature.midas_like}, '0x1ce7d9942ff78c328a4181b9f3826fee6d845a97': {ERC4626Feature.yieldfi_like}, '0x1efae1f600947ca5dc0e87aa18657f36c559a40b': {ERC4626Feature.crystalclear_like}, '0x1fecf3d9d4fee7f2c02917a66028a48c6706c179': {ERC4626Feature.wisdomtree_like}, '0x20226607b4fa64228abf3072ce561d6257683464': {ERC4626Feature.midas_like}, '0x20d419a8e12c45f88fda7c5760bb6923cee27f98': {ERC4626Feature.ostium_like}, '0x231f66c336512e897855420a2788b83e164c6adf': {ERC4626Feature.crystalclear_like}, '0x237c717df1b60501f8d029d3fe7385fd090df180': {ERC4626Feature.libeara_like}, '0x238a700ed6165261cf8b2e544ba797bc11e466ba': {ERC4626Feature.midas_like}, '0x2448cf256192ee8e122e52026758ae28398afb4f': {ERC4626Feature.midas_like}, '0x2540bddc5e854419496192688e8257c5ded7ad78': {ERC4626Feature.midas_like}, '0x27329b57666413b84dcb872fe611edbfe9a1a9ad': {ERC4626Feature.midas_like}, '0x27bfb8d29af693865e3926e752b2f56c7a33a2a8': {ERC4626Feature.midas_like}, '0x28b3a8fb53b741a8fd78c0fb9a6b2393d896a43d': {ERC4626Feature.spark_like}, '0x28e60b466a075cecef930d29f7f1b0facf48f950': {ERC4626Feature.spectra_erc4626_wrapper_like}, '0x2a8c22e3b10036f3aef5875d04f8441d4188b656': {ERC4626Feature.midas_like}, '0x2b13311fd553e74b421d4ccc96e348f71e179dcf': {ERC4626Feature.ember_like}, '0x2bf11d2e04bc40daa95c24b8b90ec4f5c57dd326': {ERC4626Feature.midas_like}, '0x2d7acd39b634b50cd37883fe374e1f430e27ea50': {ERC4626Feature.crystalclear_like}, '0x2e3c5e514eef46727de1fe44618027a9b70d92fc': {ERC4626Feature.yieldfi_like}, '0x2fe058ccf29f123f9dd2aec0418aa66a877d8e50': {ERC4626Feature.midas_like}, '0x318ca1ee088effc96fa67c1bb50c7893c3c4feaa': {ERC4626Feature.crystalclear_like}, '0x34bdda6beb128130158811e5b881da67902325b2': {ERC4626Feature.midas_like}, '0x356b8d89c1e1239cbbb9de4815c39a1474d5ba7d': {ERC4626Feature.maple_like}, '0x373152feef81cc59502da2c8de877b3d5ae2e342': {ERC4626Feature.ember_like}, '0x3a0a97dca5e6cacc258490d5ece453412f8e1883': {ERC4626Feature.liquid_royalty_like}, '0x3ccff8c929b497c1ff96592b8ff592b45963e732': {ERC4626Feature.foxify_like}, '0x3ddc84940ab509c11b20b76b466933f40b750dc9': {ERC4626Feature.franklin_like}, '0x3ed6aa32c930253fc990de58ff882b9186cd0072': {ERC4626Feature.cap_like}, '0x4089dc8b6637218f13465d28950a82a7e90cbe27': {ERC4626Feature.midas_like}, '0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e': {ERC4626Feature.superstate_like}, '0x438982ea288763370946625fd76c2508ee1fb229': {ERC4626Feature.csigma_like}, '0x43e3e6ffb2e363e64cd480cbb7cd0cf47bc6b477': {ERC4626Feature.kiloex_like}, '0x441794d6a8f9a3739f5d4e98a728937b33489d29': {ERC4626Feature.midas_like}, '0x444868b6e8079ac2c55eea115250f92c2b2c4d14': {ERC4626Feature.dolomite_like}, '0x462be06b03641f0880f694ebc82295572837ba53': {ERC4626Feature.midas_like}, '0x4772d2e014f9fc3a820c444e3313968e9a5c8121': {ERC4626Feature.yieldfi_like}, '0x48e284d0729eb1925066307072758d95dbbb49c4': {ERC4626Feature.midas_like}, '0x4d0ff6a0dd9f7316b674fb37993a3ce28bea340e': {ERC4626Feature.hyperdrive_hl_like}, '0x4e72025984424e52838cf8953e2863eff036b67a': {ERC4626Feature.midas_like}, '0x50293dd8889b931eb3441d2664dce8396640b419': {ERC4626Feature.libeara_like}, '0x50bd66d59911f5e086ec87ae43c811e0d059dd11': {ERC4626Feature.sbold_like}, '0x50d59b785df23728d9948804f8ca3543237a1495': {ERC4626Feature.csigma_like}, '0x513bd45be7643fe6c30c41cd4b327e8e341aaf9a': {ERC4626Feature.midas_like}, '0x548857309befb6fb6f20a9c5a56c9023d892785b': {ERC4626Feature.midas_like}, '0x54a4fc78431f9201824643e99bec891bb7462a1d': {ERC4626Feature.sygnum_like}, '0x5743aec1f06e896544d1638e0febd15098855cb5': {ERC4626Feature.hyperdrive_hl_like}, '0x57c3571f10767e49c9d7b60feb6c67804783b7ae': {ERC4626Feature.wstgbp_like}, '0x5a42864b14c0c8241ef5ab62dae975b163a2e0c1': {ERC4626Feature.midas_like}, '0x5c9e1c4d60dba50a68cbe3b0c1b5731a6fd08af6': {ERC4626Feature.midas_like}, '0x5e105266db42f78fa814322bce7f388b4c2e61eb': {ERC4626Feature.midas_like}, '0x5fa487bca6158c64046b2813623e20755091da0b': {ERC4626Feature.theo_itoken_like}, '0x605a84861ee603e385b01b9048bea6a86118db0a': {ERC4626Feature.midas_like}, '0x616185600989bf8339b58ac9e539d49536598343': {ERC4626Feature.midas_like}, '0x6165946250dd04740ab1409217e95a4f38374fe9': {ERC4626Feature.frankencoin_like}, '0x61896940f60a536f1d3dae9580524542d58d3683': {ERC4626Feature.midas_like}, '0x637f00cab9665cb07d91bfb9c6f3fa8fabfef8bc': {ERC4626Feature.frankencoin_like}, '0x6593bb7272237f36444dee44df46ab3b0233a9a0': {ERC4626Feature.aera_like}, '0x67e1f506b148d0fc95a4e3ffb49068ceb6855c05': {ERC4626Feature.midas_like}, '0x6a7c6aa2b8b8a6a891de552bdeffa87c3f53bd46': {ERC4626Feature.oda_fact_like}, '0x6b35f2e4c9d4c1da0edaf7fd7dc90d9bca4b0873': {ERC4626Feature.midas_like}, '0x6b6b870c7f449266a9f40f94eca5a6ff9b0857e4': {ERC4626Feature.midas_like}, '0x6b88f2975b784531db1159d37cff9f1629e93fa8': {ERC4626Feature.crystalclear_like}, '0x6e7a6eb5feec64bf6401a744757aba89c5c7e813': {ERC4626Feature.kiloex_like}, '0x6eb6724d8d3d4ff9e24d872e8c38403169dc05f8': {ERC4626Feature.midas_like}, '0x6f6046e59501e484152d46045ba5eecf1cab8935': {ERC4626Feature.secured_finance_like}, '0x7077ef67fe49ffb1260b893f2cd8475eeb72bbbb': {ERC4626Feature.aera_like}, '0x72ee42bd660e4f676106c3718b00af06257c9d35': {ERC4626Feature.hyperdrive_hl_like}, '0x762fd99ee22742deecb8eecb12165752d9a18164': {ERC4626Feature.midas_like}, '0x766255b53ae70fa39a18aa296f41fab17db6a810': {ERC4626Feature.midas_like}, '0x76cc16608aa7cd32631bb151801bb095313f7bbd': {ERC4626Feature.midas_like}, '0x7788a3538c5fc7f9c7c8a74eac4c898fc8d87d92': {ERC4626Feature.usdx_money_like}, '0x7cf9dec92ca9fd46f8d86e7798b72624bc116c05': {ERC4626Feature.midas_like}, '0x7d7f72d393f242da6e22d3b970491c06742984ff': {ERC4626Feature.cap_like}, '0x7e1916fa3bb694d4e7a038771e8fe97222e775ca': {ERC4626Feature.ember_like}, '0x7ea76108975ec0998b9bc2db04b4eca986400dd7': {ERC4626Feature.vault_street_like}, '0x7f2b789ac6d93521fae86cbc838efcfc4f2b004b': {ERC4626Feature.hyperdrive_hl_like}, '0x80128dbb9f07b93dde62a6daeadb69ed14a7d354': {ERC4626Feature.spark_like}, '0x8041ba598f0e656ebe80c67289efb42c09e86ae3': {ERC4626Feature.aera_like}, '0x80ac24aa929eaf5013f6436cda2a7ba190f5cc0b': {ERC4626Feature.maple_like}, '0x80c080acd48ed66a35ae8a24bc1198672215a9bd': {ERC4626Feature.asseto_like}, '0x80cae1bb1b90980148c5bc9c5701b69fafe7d6b2': {ERC4626Feature.midas_like}, '0x81e064d0eb539de7c3170edf38c1a42cbd752a76': {ERC4626Feature.midas_like}, '0x821fc97196d47566b618d27515df2c5201cc4125': {ERC4626Feature.ember_like}, '0x827ce7e8e35861d9ac7fe002755767b695a5594a': {ERC4626Feature.midas_like}, '0x82b394c5d4eac1b9755eb33bf70ad6d08b2d59f4': {ERC4626Feature.basevol_like}, '0x83cd3d0e9f027b70cb4833b5c251f6fb62cfd9b0': {ERC4626Feature.aera_like}, '0x83f20f44975d03b1b09e64809b757c47f942beea': {ERC4626Feature.sky_like}, '0x841eeb3e2489b2282b0e14202dc8bd8f7624e29a': {ERC4626Feature.midas_like}, '0x85d38585c3ac08268f598282a84b7c0ddfc0d04f': {ERC4626Feature.libeara_like}, '0x87c9053c819bb28e0d73d33059e1b3da80afb0cf': {ERC4626Feature.midas_like}, '0x8858a307a85982c2b3cb2ace1720237f2f09c39b': {ERC4626Feature.midas_like}, '0x887d57a509070a0843c6418eb5cffc090dcbbe95': {<ERC4626Feature.zerolend_like: 'zerolend_like'>, <ERC4626Feature.royco_like: 'royco_like'>}, '0x890a5122aa1da30fec4286de7904ff808f0bd74a': {ERC4626Feature.mainstreet_like}, '0x89c08a6f468ca5af65e7d48bc091e5c4025b42c2': {ERC4626Feature.crystalclear_like}, '0x8ba9da757d1d66c58b1ae7e2ed6c04087348a82d': {ERC4626Feature.usdd_like}, '0x8c213ee79581ff4984583c6a801e5263418c4b86': {ERC4626Feature.centrifuge_tranche_like}, '0x8e2c2c9def45efb9bd3c448945830ddb254154be': {ERC4626Feature.midas_like}, '0x9004b9890d6b901a17f734efe028b1be5bd6cd22': {ERC4626Feature.midas_like}, '0x90276e9d4a023b5229e0c2e9d4b2a83fe3a2b48c': {ERC4626Feature.franklin_like}, '0x9114650a2b8f8598a6b6aa1cb2837e145f59f9fd': {ERC4626Feature.midas_like}, '0x926a8a63fa1e1fdbbeb811a0319933b1a0f1edbb': {ERC4626Feature.midas_like}, '0x9271a5c684330b2a6775e96b3c140fc1dc3c89be': {ERC4626Feature.hyperdrive_hl_like}, '0x943109dc7c950da4592d85ebd4cfed007af64670': {ERC4626Feature.forgeyields_like}, '0x949a7250bb55eb79bc6bcc97fcd1c473db3e6f29': {ERC4626Feature.midas_like}, '0x94bf32bd7de56e80778530919292beff503ec9e6': {ERC4626Feature.midas_like}, '0x953972ea0c1703c58f09fb6fd2477fdcf0fee074': {ERC4626Feature.ember_like}, '0x96f6ef951840721adbf46ac996b59e0235cb985c': {ERC4626Feature.ondo_like}, '0x98cd770b4e9905b1263f0c9ae6cde34e1923508e': {ERC4626Feature.forgeyields_like}, '0x99cd4ec3f88a45940936f469e4bb72a2a701eeb9': {ERC4626Feature.sky_like}, '0x9b5528528656dbc094765e2abb79f293c21191b9': {ERC4626Feature.midas_like}, '0x9be9294722f8aad37b11a9792be2c782182cafa2': {ERC4626Feature.ember_like}, '0x9d39a5de30e57443bff2a8307a4256c8797a3497': {ERC4626Feature.ethena_like}, '0x9fb442d6b612a6dcd2acc67bb53771ef1d9f661a': {ERC4626Feature.midas_like}, '0xa01227a26a7710bc75071286539e47adb6dea417': {ERC4626Feature.midas_like}, '0xa09ebdf8a01b9ef04149319d64f83b9c01a5b585': {ERC4626Feature.frankencoin_like}, '0xa1150cd4a014e06f5e0a6ec9453fe0208da5adab': {ERC4626Feature.midas_like}, '0xa194082aabb75dd1ca9dc1ba573a5528beb8c2fb': {ERC4626Feature.domination_finance_like}, '0xa19f6e0df08a7917f2f8a33db66d0af31ff5eca6': {ERC4626Feature.midas_like}, '0xa3931d71877c0e7a3148cb7eb4463524fec27fbd': {ERC4626Feature.sky_like}, '0xa40e085d0584eed39daaa077fcc4cd153ae9a5b0': {ERC4626Feature.kiloex_like}, '0xa48cfd53263ade6abdb0ac75287cc0d5a2eee17f': {ERC4626Feature.midas_like}, '0xa663b02cf0a4b149d2ad41910cb81e23e1c41c32': {ERC4626Feature.frax_staking_like}, '0xa7a31e6a81300120b7c4488ec3126bc1ad11f320': {ERC4626Feature.deltr_like}, '0xad4748098c2a771cc034d7dfc10fad9f9ed605fd': {ERC4626Feature.midas_like}, '0xaeaad6d9b096829e5f3804a747c9fdd6677d78f0': {ERC4626Feature.hyperdrive_hl_like}, '0xaf801b65239b4de90f73e26f9bd1260943a5e248': {ERC4626Feature.midas_like}, '0xb250c9e0f7be4cff13f94374c993ac445a1385fe': {ERC4626Feature.eth_strategy_like}, '0xb31bea5c2a43f942a3800558b1aa25978da75f8a': {ERC4626Feature.midas_like}, '0xb39c200d3094c05e048a8f13b69a221db56d012a': {ERC4626Feature.midas_like}, '0xb44169e66c898ff70029f9cf2fdb9685d7bc99c6': {ERC4626Feature.crystalclear_like}, '0xb45ad160634c528cc3d2926d9807104fa3157305': {ERC4626Feature.inverse_finance_like}, '0xb64c014307622eb15046c66ff71d04258f5963dc': {ERC4626Feature.midas_like}, '0xb920ed46dec7455d0caf52b357d9a9f55b4daeca': {ERC4626Feature.ember_like}, '0xb99b6df96d4d5448cc0a5b3e0ef7896df9507cf5': {ERC4626Feature.forty_acres_like}, '0xb9c1344105faa4681bc7ffd68c5c526da61f2ae8': {ERC4626Feature.aarna_like}, '0xbb51e2a15a9158ebe2b0ceb8678511e063ab7a55': {ERC4626Feature.midas_like}, '0xbc65ad17c5c0a2a4d159fa5a503f4992c7b545fe': {ERC4626Feature.spark_like}, '0xc0485c4bafb594ae1457820fb6e5b67e8a04bcfd': {ERC4626Feature.forty_acres_like}, '0xc26af85ede9cc25d449bcebef866bb85afd5d346': {ERC4626Feature.libeara_like}, '0xc344db27feba7f0a881a50f0f702a525a44f2368': {ERC4626Feature.midas_like}, '0xc38421e5577250eba177bc5bc832e747bea13ee0': {ERC4626Feature.liquid_royalty_like}, '0xc462f87f78abdd27b1e41c9ede862275d2c7f36b': {ERC4626Feature.midas_like}, '0xc470e9fc12a60f72c543516dc23de1f55c29e3d5': {ERC4626Feature.midas_like}, '0xc5d6a7b61d18afa11435a889557b068bb9f29930': {ERC4626Feature.usdd_like}, '0xc6135d59f8d10c9c035963ce9037b3635170d716': {ERC4626Feature.midas_like}, '0xc7990369da608c2f4903715e3bd22f2970536c29': {ERC4626Feature.mainstreet_like}, '0xc8495eaff71d3a563b906295fcf2f685b1783085': {ERC4626Feature.midas_like}, '0xc8739fbbd54c587a2ad43b50cbcc30ae34fe9e34': {ERC4626Feature.midas_like}, '0xc9f01b5c6048b064e6d925d1c2d7206d4feef8a3': {ERC4626Feature.yearn_tokenised_strategy}, '0xca5921df65e2e1b0b98ae91c0187ba80d4124898': {ERC4626Feature.midas_like}, '0xcc476b1a49bcdf5192561e87b6fb8ea78aa28c13': {ERC4626Feature.midas_like}, '0xcc56410e1a136af0eceb7241c6ae394f4d8b581c': {ERC4626Feature.atoma_like}, '0xcc5c22c7a6bcc25e66726aef011dde74289ed203': {ERC4626Feature.midas_like}, '0xccbad2823328bccaea6476df3aa529316ab7474a': {ERC4626Feature.midas_like}, '0xcf62f905562626cfcdd2261162a51fd02fc9c5b6': {ERC4626Feature.frax_staking_like}, '0xd0ee0cf300dfb598270cd7f4d0c6e0d8f6e13f29': {ERC4626Feature.altura_like}, '0xd385ba55a22ac732cf435c5b5c3a1dfe5939ba4d': {ERC4626Feature.midas_like}, '0xd5d097f278a735d0a3c609deee71234cac14b47e': {ERC4626Feature.csigma_like}, '0xd66d69c288d9a6fd735d7be8b2e389970fc4fd42': {ERC4626Feature.midas_like}, '0xd90f6bfed23ffde40106fc4498dd2e9edb95e4e7': {ERC4626Feature.midas_like}, '0xdbdc1ef57537e34680b898e1febd3d68c7389bcb': {ERC4626Feature.infinifi_like}, '0xdd629e5241cbc5919847783e6c96b2de4754e438': {ERC4626Feature.midas_like}, '0xde770c84fe66e063336b31737cfe9790f18c4087': {ERC4626Feature.spark_like}, '0xde88c15bbc9c4254a147a964f1fc937bae12712e': {ERC4626Feature.ember_like}, '0xe2e7a17dff93280dec073c995595155283e3c372': {ERC4626Feature.spark_like}, '0xe34e510b1ef2e97911a646f120bd0da2ca4ac0ff': {ERC4626Feature.basevol_like}, '0xe4880249745eac5f1ed9d8f7df844792d560e750': {ERC4626Feature.spiko_like}, '0xe5f130253ff137f9917c0107659a4c5262abf6b0': {ERC4626Feature.frankencoin_like}, '0xe68f4e819ad09f2e0e668297cc1a905994808d38': {ERC4626Feature.midas_like}, '0xe70b5eb021dc3af653d61fd792d8f0b60f36c493': {ERC4626Feature.midas_like}, '0xe7ba07519dfa06e60059563f484d6090dedf21b3': {ERC4626Feature.midas_like}, '0xe9d33286f0e37f517b1204aa6da085564414996d': {ERC4626Feature.maple_aqru_like}, '0xebfc8c2fe73c431ef2a371aea9132110aab50dca': {ERC4626Feature.yuzu_money_like}, '0xecacb5434f05a548faf92a31874e0c014beeee91': {ERC4626Feature.midas_like}, '0xedca8230366b9eaff06becdd1d261577836aa507': {ERC4626Feature.forgeyields_like}, '0xf0db6f529581e7f6ebac7a7f6882923c00fc3a66': {ERC4626Feature.sygnum_like}, '0xf1be2622fd0f34d520ab31019a4ad054a2c4b1e0': {ERC4626Feature.basevol_like}, '0xf2d2d55daf93b0660297eaa10969ebe90ead5ce8': {ERC4626Feature.dolomite_like}, '0xf3190a3ecc109f88e7947b849b281918c798a0c4': {ERC4626Feature.ember_like}, '0xf4f447e6afa04c9d11ef0e2fc0d7f19c24ee55de': {ERC4626Feature.yieldfi_like}, '0xf689555121e529ff0463e191f9bd9d1e496164a7': {ERC4626Feature.threejane_like}, '0xf7cf282ec810fded974f99c0163e792f432892bc': {ERC4626Feature.midas_like}, '0xf91c31299e998c5127bc5f11e4a657fc0cf358cd': {ERC4626Feature.midas_like}, '0xf94f97677914d298844ec8fa590fab09ccc324d0': {ERC4626Feature.usdd_like}, '0xffa36b4b011d87d89fef3098ab30fef7bcc3571e': {ERC4626Feature.midas_like}}
Handle problematic protocols.
Some protocols cannot be detected by their vault smart contract structure, because they are using copy-paste smart contracts. For these, we need to do by vault contract address whitelisting here.