Skip to main content

Seher - Ethereum Transaction Simulation and Analysis Tool

Project description

Seher Logo - Ethereum Transaction Simultion

License: MIT Python 3.8+

Advanced transaction simulation and analysis tool for Ethereum with comprehensive call trace visualization and state change tracking.

Features

Transaction Interception

  • Intercept transactions from wallets (MetaMask, Rabby, etc.)
  • Block and log all transaction submission methods
  • Decode and display transaction details in JSON format
  • Save raw transactions for later submission

Transaction Simulation

  • Trace existing transactions or simulate raw transactions
  • Visual tree structure of all internal calls
  • Method signature resolution via 4byte directory
  • State change tracking (balances, storage, nonces)
  • Gas usage analysis and efficiency metrics
  • Support for all transaction types (transfers, tokens, DeFi, failed txs)
  • Export traces to ODF spreadsheet format

Installation

Quick Install

pip install eth-seher

From Source

git clone https://github.com/yourusername/eth-seher.git
cd eth-seher
pip install -e .

Configuration

  1. Copy the example configuration:
cp config/rpc.json.example rpc.json
  1. Edit rpc.json with your RPC endpoints:
{
  "1": "YOUR_MAINNET_RPC_URL",
  "11155111": "YOUR_SEPOLIA_RPC_URL"
}

Note: Your RPC endpoint must have debug_traceCall/debug_traceTransaction enabled

For detailed installation instructions, see docs/INSTALLATION.md

Quick Start

Run the complete interception and simulation pipeline:

eth-seher start

Or using the script directly:

./scripts/start.sh

This will:

  1. Start the RPC interceptor on port 8545
  2. Monitor for intercepted transactions
  3. Automatically simulate each transaction
  4. Prompt you to submit or discard each transaction

Configure your wallet:

  1. Go to Settings → Networks
  2. Add Custom RPC
  3. Set RPC URL to: http://localhost:8545
  4. Set Chain ID to: 1 (Mainnet)

Advanced Usage

Individual Components

Start Interceptor Only

python3 interceptor.py

Submit Latest Intercepted Transaction

python3 submit_tx.py --latest

Submit Specific Raw Transaction

python3 submit_tx.py intercepted_txs/tx_20231124_123456.raw

Trace existing transaction

python3 trace.py 0x457091a405e99a6579cbef5c04d515f2498d90df7b809627a1cb08094d1f9529

Trace with state changes

python3 trace.py 0x457091a405e99a6579cbef5c04d515f2498d90df7b809627a1cb08094d1f9529 --state

Simulate raw transaction

python3 trace.py sim --raw "0x02f88e..." --block 23141310

Load transaction from JSON

# Note: 'sim' is required to indicate simulation mode
python3 trace.py sim --raw-tx-json sample_tx.json

Options

  • --chain: Chain ID (default: 1 for mainnet)
  • --rpc: Override RPC URL
  • --block: Block number for simulation (default: latest)
  • --tracer: Tracer type (default: callTracer)
  • --state: Show state changes (balance, nonce, storage)
  • --odf: Export trace to ODF spreadsheet file

Show State Changes

# View balance and nonce changes
python3 trace.py sim --raw-tx-json sample_tx.json --state

# View storage changes for token transfers
python3 trace.py sim --raw-tx-json sample_token_tx.json --state

Export to ODF

python3 trace.py sim --raw-tx-json sample_tx.json --odf output.ods

Sample Transactions

The repository includes two sample transactions:

  1. sample_tx.json - Simple ETH transfer (0.1 ETH)
  2. sample_token_tx.json - USDC token transfer (1 USDC)

Sample Output

Running a simple ETH transfer with python3 trace.py sim --raw-tx-json sample_tx.json:

════════════════════════════════════════════════════════════════════════════════
  ETHEREUM TRANSACTION TRACE
════════════════════════════════════════════════════════════════════════════════

  ◆ Network: Mainnet
  ◆ Tracer: callTracer

────────────────────────────────────────────────────────────────────────────────

📞 CALL
  From: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 → 0xbe0eb53f46cd790cd13851d5eff43d12404d33e8
  💰 Value: 100000000.00 Gwei
  ⛽ Gas: 21,000


⛽ GAS METRICS
  • Gas Used: 21,000
  • Gas Limit: 21,000
  • Efficiency: 100.0%
  • [████████████████████████████████████████]

────────────────────────────────────────────────────────────────────────────────

TRANSACTION SUMMARY

  ✅ SUCCESS
  • Total Internal Calls: 0
  • Total Gas Used: 21,000

════════════════════════════════════════════════════════════════════════════════

Running a USDC token transfer with python3 trace.py sim --raw-tx-json sample_token_tx.json:

════════════════════════════════════════════════════════════════════════════════
  ETHEREUM TRANSACTION TRACE
════════════════════════════════════════════════════════════════════════════════

  ◆ Network: Mainnet
  ◆ Tracer: callTracer

────────────────────────────────────────────────────────────────────────────────

📞 CALL
  From: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 → 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
  Method: transfer(address,uint256)
    └ To: 0xbe0eb53f46cd790cd13851d5eff43d12404d33e8
    └ Amount: 1,000,000
  ⛽ Gas: 45,148
  Output: 0x0000000000000000000000000000000000000000000000000000000000000001

└─🔀 DELEGATECALL
  From: 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 → 0x43506849d7c04f9138d1a2050bbf3a0c054402dd
  Method: transfer(address,uint256)
    └ To: 0xbe0eb53f46cd790cd13851d5eff43d12404d33e8
    └ Amount: 1,000,000
  ⛽ Gas: 16,263
  Output: 0x0000000000000000000000000000000000000000000000000000000000000001


⛽ GAS METRICS
  • Gas Used: 45,148
  • Gas Limit: 90,000
  • Efficiency: 50.2%
  • [████████████████████░░░░░░░░░░░░░░░░░░░]

────────────────────────────────────────────────────────────────────────────────

TRANSACTION SUMMARY

  ✅ SUCCESS
  • Total Internal Calls: 1
  • Total Gas Used: 45,148

════════════════════════════════════════════════════════════════════════════════

With State Changes

Running with --state flag shows balance, nonce, and storage changes:

python3 trace.py sim --raw-tx-json sample_token_tx.json --state

Output includes state changes section:

💾 STATE CHANGES

  ◆ Account: 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
    💾 Storage:
      Slot 0x57ac49bd70712791ffcf0d97a6f825e3ed867a6f97d95a3364d8a7accb6a1ac3:
        0x00000000000000000000000000000000000000000000000000000000002dc6c0
        → 0x00000000000000000000000000000000000000000000000000000000003d0900
      Slot 0xbf4954ae1137d99a74d9587692d0c99fcc87859496c91311c267c25a44a35f95:
        0x00000000000000000000000000000000000000000000000000000004f53ee064
        → 0x00000000000000000000000000000000000000000000000000000004f52f9e24

  ◆ Account: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
    💰 Balance: 4.7887 ETH → 4.7878 ETH
    • Nonce: 1573 → 1574

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eth_seher-1.1.0.tar.gz (30.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eth_seher-1.1.0-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file eth_seher-1.1.0.tar.gz.

File metadata

  • Download URL: eth_seher-1.1.0.tar.gz
  • Upload date:
  • Size: 30.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for eth_seher-1.1.0.tar.gz
Algorithm Hash digest
SHA256 c562d0391c13a448cb03cfa73870bf860a9db85dc786f0953eeace497ba3be28
MD5 85ae701688e35329d850b40d188e99b5
BLAKE2b-256 bbf932536fcf02a0c8e4203ad608bf82a9396952406b6b51dad713b555e19682

See more details on using hashes here.

File details

Details for the file eth_seher-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: eth_seher-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for eth_seher-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a4489c1d6e0ba0ee4d2d6ed6935db9b6dec3acd967aeb7741d8a333b0e8a239
MD5 caaeb04afcb5dba71c7c72f471d03dd9
BLAKE2b-256 ddd5706b3fe5de6f67b8e6d729ed7a9931998fe371539ed19bad011f6da32ce8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page