#css-selectors #evm #bytecode #abi #ethereum

evm_hound

一个Rust库,用于从EVM字节码中提取所有潜在函数选择器,无需源代码。

3个版本

0.1.4 2023年11月22日
0.1.3 2023年11月15日
0.1.2 2023年11月14日
0.1.1 2023年11月14日
0.1.0 2023年11月14日

#2386 in 神奇豆子

每月下载量 35次

MIT/Apache

43KB
966 代码行

EVM Hound

一个Rust库,用于从EVM字节码中提取所有潜在函数选择器,无需源代码。

安装

$cargo add evm_hound

用法

// examples/basic.rs
use ethers::{
    providers::{Http, Middleware, Provider},
    types::Address,
};
use eyre::Result;

use evm_hound::{selectors_from_bytecode, string_selectors_from_bytecode};

// To Try:
// cargo run --example basic

#[tokio::main]
async fn main() -> Result<()> {
    let provider = Provider::<Http>::try_from("https://rpc.flashbots.net/fast")?;
    let token_addr: Address = "0xdac17f958d2ee523a2206206994597c13d831ec7".parse()?;

    let code = provider.get_code(token_addr, None).await?;

    let raw_selectors = selectors_from_bytecode(&code);
    let string_selectors = string_selectors_from_bytecode(&code);

    println!("found {} selectors", raw_selectors.len());
    println!("{raw_selectors:?}");
    println!("{string_selectors:?}");

    Ok(())
}

此外,EVM Hound还可以使用提取的选择器检测基本合约类型

pub enum ContractType {
    /// ERC20 - Typical token contract
    ERC20,
    /// ERC721 - Typical NFT contract
    ERC721,
    /// Any other contract
    ANY,
}

请参阅示例: examples/contract_type.rs.

致谢

Hackers.tools 交易模拟器 制作,用于搜索/暴力破解可能开始交易的方法。

无运行时依赖