README.md
July 4, 2026 ยท View on GitHub
Spamoor the Transaction Spammer
A powerful Ethereum transaction generator for testnets ๐
Spamoor is a robust transaction spamming tool designed for stress testing, network validation, and continuous transaction testing on Ethereum testnets. With 25+ different transaction scenarios and a powerful web-based daemon mode, it's the ultimate tool for Ethereum network testing.
๐ Quick Start
CLI Output Example

# ๐ณ Using Docker
docker run ethpandaops/spamoor
# ๐ง Building from source
git clone https://github.com/ethpandaops/spamoor.git
cd spamoor
make
./bin/spamoor
๐ Usage
Basic Command Structure
# Run a single scenario
spamoor <scenario> [flags]
# Run multiple scenarios from YAML configuration
spamoor run <yaml-file> [flags]
๐ Required Parameters
| Parameter | Description |
|---|---|
--privkey | Private key for the root wallet (funds child wallets) |
--rpchost | RPC endpoint(s) to send transactions to |
๐ง Advanced Configuration
# Basic usage
spamoor eoatx --privkey="0x..." --rpchost="http://localhost:8545"
# Multiple RPC endpoints
spamoor eoatx --privkey="0x..." \
--rpchost="http://node1:8545" \
--rpchost="http://node2:8545"
# With authentication
spamoor eoatx --privkey="0x..." \
--rpchost="headers(Authorization:Bearer token)http://node:8545"
๐ก See the App User Guide for advanced RPC configuration options
๐ฏ Transaction Scenarios
Spamoor provides a comprehensive suite of transaction scenarios for different testing needs.
Simple Scenarios
Ready-to-run scenarios that work out of the box with sensible defaults.
| Scenario | Description |
|---|---|
eoatx | EOA Transactions - Send standard ETH transfers with configurable amounts |
erc20tx | ERC20 Transactions - Deploy an ERC20 token and perform transfers |
erc721tx | ERC721 Transactions - Deploy an ERC721 NFT and perform transfers |
erc1155tx | ERC1155 Transactions - Deploy an ERC1155 NFT and perform transfers |
erc4337 | Account Abstraction (ERC-4337) - Send v0.7 UserOperations via EntryPoint.handleOps |
uniswap-swaps | Uniswap Swaps - Deploy and test Uniswap V2/V3 token swaps |
curve-swaps | Curve Swaps - Curve StableSwap exchanges across self-deployed 3-coin stable pools |
safe-multisig | Safe Multisig - Create Safe multisigs with varying owner counts and drive EOA & contract-call execTransactions |
xentoken | XEN Sybil Attack - Simulate XEN token sybil attacks |
setcodetx | Set Code Transactions - EIP-7702 set-code transactions |
gasburnertx | Gas Burner - Burn a configurable amount of gas per transaction |
deploy-destruct | Self-Destruct Deployments - Deploy and self-destruct contracts |
storagerefundtx | Storage Refund - Write and clear storage slots to exercise gas refunds |
evm-fuzz | EVM Fuzzer - Deploy randomly generated bytecode to surface consensus bugs |
blobs | Blob Transactions - Send blob transactions with random data |
blob-average | Blob Average - Maintain a network-wide average blob count per block |
blob-replacements | Blob Replacements - Send blob transactions with replacements |
blob-conflicting | Conflicting Blobs - Send conflicting blob/normal transactions |
blob-combined | Combined Blobs - Randomized blob scenario combinations |
Advanced Scenarios
Scenarios that require additional configuration, target specialized workloads (e.g. state bloating), or provide utilities.
| Scenario | Description |
|---|---|
calltx | Contract Calls - Deploy a contract and repeatedly call a function on it |
deploytx | Contract Deployments - Deploy contracts with custom bytecode |
factorydeploytx | CREATE2 Deployments - Deploy contracts via a CREATE2 factory |
geastx | Geas Transactions - Execute custom geas bytecode |
storagespam | Storage Spam - Stress-test EVM storage growth |
erc20_bloater | ERC20 State Bloat - Bloat ERC20 contract storage to a target GB size |
replay-eest | EEST Replay - Replay EEST test fixtures from intermediate representation |
taskrunner | Task Runner - Execute configurable task sequences with init and recurring execution phases |
wallets | Wallets - Utility scenario that shows child wallet balances |
๐ Run Command - Execute Multiple Scenarios
The spamoor run command allows you to execute multiple scenarios concurrently from a YAML configuration file, without needing the full daemon infrastructure.
Usage
spamoor run <yaml-file> [flags]
Flags
| Flag | Short | Description |
|---|---|---|
--spammers | -s | Indexes of spammers to run (e.g., -s 0,2). If not specified, runs all |
--privkey | -p | Private key for the root wallet |
--rpchost | -h | RPC endpoints (multiple allowed) |
--rpchost-file | - | File containing RPC endpoints |
--verbose | -v | Enable verbose logging |
--trace | - | Enable trace logging |
Example Configuration
# example-run-config.yaml
- scenario: eoatx
name: "High Volume ETH Transfers"
description: "Basic ETH transfers with 400 tx/slot throughput"
config:
seed: eoatx-demo
refill_amount: 1000000000000000000 # 1 ETH in wei
refill_balance: 500000000000000000 # 0.5 ETH in wei
refill_interval: 600 # 10 minutes
throughput: 400
max_pending: 800
max_wallets: 200
base_fee: 20 # gwei
tip_fee: 2 # gwei
amount: 100 # 100 wei per transfer
random_amount: true
random_target: true
- scenario: erctx
name: "ERC20 Token Spammer"
description: "Deploy and transfer ERC20 tokens"
config:
seed: erctx-demo
refill_amount: 2000000000000000000 # 2 ETH
refill_balance: 1000000000000000000 # 1 ETH
throughput: 100
max_pending: 200
max_wallets: 100
amount: 50
random_amount: true
# Include other configuration files
- include: ./high-load-configs.yaml
Examples
# Run all spammers from configuration
spamoor run config.yaml -h http://localhost:8545 -p 0x...
# Run only specific spammers (0-based indexes)
spamoor run config.yaml -h http://localhost:8545 -p 0x... -s 0,2
# With multiple RPC endpoints
spamoor run config.yaml -p 0x... \
-h http://node1:8545 \
-h http://node2:8545
๐ฅ๏ธ Daemon Mode
Run Spamoor as a daemon with a powerful web interface for managing multiple concurrent spammers.

๐ Starting the Daemon
spamoor-daemon [flags]
โ๏ธ Configuration Flags
| Flag | Short | Description | Default |
|---|---|---|---|
--db | -d | Database file location | spamoor.db |
--rpchost | -h | RPC endpoints (multiple allowed) | - |
--rpchost-file | - | File containing RPC endpoints | - |
--privkey | -p | Root wallet private key | - |
--port | -P | Web UI port | 8080 |
--startup-spammer | - | YAML file or URL with startup spammers | - |
--startup-defaults | - | Keys of built-in default spammers/groups to auto-start on first launch (e.g. "regular-chain-load,fuzzing") | - |
--startup-delay | - | Delay in seconds before starting spammers on startup | 30 |
--fulu-activation | - | Unix timestamp of Fulu activation | 0 |
--without-batcher | - | Disable transaction batching | false |
--disable-tx-metrics | - | Disable transaction metrics collection | false |
--verbose | -v | Enable verbose logging | false |
--debug | - | Enable debug mode | false |
--trace | - | Enable trace logging | false |
๐ Web Interface Features
Access the web UI at http://localhost:8080 for:
๐ Dashboard - Real-time Spammer Management

- View all spammers at a glance with their status, scenario type, and actions
- Mass actions for bulk operations on multiple spammers
- Quick access to start, stop, edit, and delete spammers
- Expandable live logs for each spammer
๐ฐ Wallets Overview

- Monitor wallet balances and transaction counts
- Track child wallets spawned from the root wallet
- Real-time balance updates
๐ง Client Management

- View and manage RPC client connections
- Group clients for load balancing
- Enable/disable clients dynamically
- Monitor client status and block height
๐ Performance Graphs

- Visual monitoring of transaction throughput
- Success/failure rates per spammer
- Network performance metrics
๐ REST API
The daemon exposes a comprehensive REST API for automation:
Key Endpoints
-
๐ก Client Management
GET /api/clients- List all RPC clientsPUT /api/client/{index}/groups- Update client groupsPUT /api/client/{index}/name- Set custom display name
-
๐ค Spammer Control
GET /api/spammers- List all spammersPOST /api/spammer- Create new spammerPUT /api/spammer/{id}/start- Start spammerPUT /api/spammer/{id}/pause- Pause spammer
-
๐พ Import/Export
GET /api/export- Export configurationsPOST /api/import- Import configurations
๐ Full API documentation available at /docs when daemon is running
๐ฆ Import/Export System
๐ฏ Create New Spammer Dialog

- Select from 13+ pre-configured scenarios
- Customize configuration with YAML editor
- Real-time YAML validation
- Access to pre-built configuration library
Export Configurations
# Export all spammers to YAML
curl http://localhost:8080/api/export > my-spammers.yaml
Import Configurations
Import dialog showing YAML validation and configuration options
Pre-built configuration library for common test scenarios
# Import on startup
spamoor-daemon --startup-spammer="spammer-configs.yaml"
# Import via API
curl -X POST http://localhost:8080/api/import \
-H "Content-Type: application/yaml" \
--data-binary @spammer-configs.yaml
YAML Configuration Format
# Direct spammer definition
- scenario: "eoatx"
name: "Basic ETH Transfers"
config:
wallet_count: 10
transaction_count: 1000
# Include other files
- include: "common-spammers.yaml"
- include: "https://example.com/stress-tests.yaml"
๐ Prometheus Metrics
Access metrics at /metrics for monitoring with Prometheus/Grafana:
- ๐ข Transaction Metrics: Success rates, gas usage, confirmation times
- ๐ Performance Metrics: TPS, latency, queue sizes
- ๐ฏ Scenario Metrics: Custom metrics per scenario type
๐ Documentation
Comprehensive documentation is available for different user types:
๐ App User Guide
Complete guide for CLI usage, daemon mode, configuration, and troubleshooting. Covers:
- Installation and setup options
- Detailed CLI usage with examples
- Web interface walkthrough
- Configuration management
- Troubleshooting common issues
๐ API Consumer Guide
REST API documentation with bash/curl examples for all endpoints. Includes:
- Complete API reference with examples
- Spammer management endpoints
- Client configuration and monitoring
- Real-time data streaming
- Import/export functionality
๐ ๏ธ Scenario Developer Guide
Comprehensive guide for implementing custom transaction scenarios. Covers:
- Scenario architecture and lifecycle
- Critical development rules and best practices
- Wallet management and transaction building
- Contract interaction patterns
- Testing and debugging scenarios
๐ Plugin System Guide
Guide for developing, distributing, and managing plugins. Covers:
- Plugin development and scenario implementation
- Building and distributing plugin archives
- CLI and daemon mode usage
- REST API for runtime plugin management
- Architecture and Yaegi interpreter limitations
- See example plugin
โจ Key Features
- ๐ฏ 14+ Transaction Scenarios: From basic EOA transfers to complex DeFi interactions
- ๐ฅ๏ธ Web-Based Daemon Mode: Manage multiple spammers through an intuitive UI
- ๐ REST API: Full programmatic control for automation
- ๐ Prometheus Metrics: Built-in monitoring and observability
- ๐ณ Docker Support: Easy deployment with official images
- ๐ง Highly Configurable: YAML configs, CLI flags, and runtime adjustments
- ๐ High Performance: Optimized for maximum transaction throughput
- ๐ก๏ธ Production Ready: Battle-tested on Ethereum testnets
๐๏ธ Development
Prerequisites
- Go 1.25+
- CGO enabled (required for SQLite and cryptographic operations)
- Build tags:
with_blob_v1,ckzgfor blob transaction support
Quick Development Setup
# Clone the repository
git clone https://github.com/ethpandaops/spamoor.git
cd spamoor
# Run tests
make test
# Build binaries
make build
# Run development environment with local testnet
make devnet-run
Project Structure
spamoor/
โโโ .cursor/rules/ # Development standards and guidelines
โโโ cmd/ # CLI applications (spamoor & spamoor-daemon)
โโโ daemon/ # Daemon implementation
โโโ docs/ # User documentation
โโโ scenario/ # Core scenario framework
โโโ scenarios/ # Transaction scenario implementations
โโโ scripts/ # Build and utility scripts
โโโ spammer-configs/ # Pre-built spammer configuration library
โโโ spamoor/ # Core spamoor logic
โโโ txbuilder/ # Transaction building utilities
โโโ utils/ # Shared utilities
โโโ webui/ # Web interface frontend
๐ค Contributing
We welcome contributions! Here's how you can help:
- ๐ Report Issues: Found a bug? Open an issue
- ๐ก Suggest Features: Have an idea? Share it in the discussions
- ๐ Improve Documentation: Help us make the docs better
- ๐งโ๐ป Submit Code: Check our development guidelines
Development Process
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Code Standards
- Follow the code standards
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
Built with โค๏ธ by the Ethpandaops team.
Special thanks to all contributors who have helped make Spamoor better!