Detect and read EVM proxy contract implementations.
- Detect proxy patterns from EVM bytecode
- Resolve implementation addresses for upgradeable contracts
- Support for all major proxy standards
| Standard | Description |
|---|---|
| EIP-1167 | Minimal Proxy Contract (clone factory) |
| EIP-1967 | Standard Proxy Storage Slots |
| EIP-1822 | Universal Upgradeable Proxy (UUPS) |
| EIP-2535 | Diamond Standard (multi-facet) |
| EIP-3448 | MetaProxy Standard |
| EIP-7511 | Minimal Proxy with PUSH0 |
| EIP-897 | DelegateProxy interface |
Add to your Cargo.toml:
[dependencies]
evm-proxy-tools = "0.1"use evm_proxy_tools::{get_proxy_type, ProxyType, Dispatch};
let bytecode = hex::decode("363d3d373d3d3d363d73...").unwrap();
if let Some((proxy_type, dispatch)) = get_proxy_type(&bytecode) {
println!("Proxy type: {:?}", proxy_type);
println!("Dispatch: {:?}", dispatch);
}use evm_proxy_tools::{get_proxy_implementation, Dispatch};
use alloy::providers::ProviderBuilder;
let provider = ProviderBuilder::new()
.connect_http("https://eth.llamarpc.com".parse().unwrap());
let dispatch = Dispatch::Storage(slot);
let implementation = get_proxy_implementation(
provider,
&proxy_address,
&dispatch,
None, // latest block
).await?;Analyze a proxy contract on-chain:
cargo run --bin proxy_tools -- 0x1234... -r https://eth.llamarpc.com# Debug build
cargo build
# Release build
cargo build --release
# Maximum performance build
RUSTFLAGS='-C target-cpu=native' cargo build --profile maxperfMIT