Skip to content

sei-protocol/sei-load

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sei-load

Tests

A load testing tool for Sei Chain that generates transactions and measures performance.

Quick Start

1. Build

make build

2. Create Config

cp profiles/local.json my-config.json

Edit my-config.json:

{
  "endpoints": ["http://localhost:8545"],
  "chainId": 1329,
  "scenarios": [
    {"name": "EVMTransfer", "weight": 100}
  ],
  "accounts": {
    "count": 100,
    "newAccountRate": 0.1
  },
  "settings": {
    "workers": 5,
    "tps": 100,
    "statsInterval": "10s",
    "bufferSize": 1000,
    "trackUserLatency": true
  }
}

3. Run

./seiload --config my-config.json

Command Line Options

Flag Default Description
--config, -c Config file path (required)
--workers, -w 1 Workers per endpoint
--tps, -t 0 Transactions per second (0 = unlimited)
--stats-interval, -s 10s Stats logging interval
--buffer-size, -b 1000 Buffer size per worker
--dry-run false Simulate without sending
--debug false Log each transaction
--track-receipts false Track transaction receipts
--track-blocks false Track block statistics
--track-user-latency false Track user latency metrics
--prewarm false Prewarm accounts before test

Examples

Basic Load Test

./seiload --config my-config.json --workers 5 --tps 100

High Throughput Test

./seiload --config my-config.json --workers 20 --buffer-size 2000

Debug Mode

./seiload --config my-config.json --debug --dry-run

With Receipt Tracking

./seiload --config my-config.json --track-receipts --track-blocks

User Latency Monitoring

./seiload --config my-config.json --track-user-latency --stats-interval 5s

Configuration

Basic Structure

{
  "endpoints": ["http://localhost:8545"],
  "chainId": 1329,
  "scenarios": [...],
  "accounts": {...},
  "settings": {...}
}

Scenarios

"scenarios": [
  {"name": "EVMTransfer", "weight": 50},
  {"name": "ERC20", "weight": 30},
  {"name": "ERC721", "weight": 20}
]

Account Management

"accounts": {
  "count": 100,
  "newAccountRate": 0.1
}

Settings

"settings": {
  "workers": 5,
  "tps": 100,
  "statsInterval": "10s",
  "bufferSize": 1000,
  "trackUserLatency": true
}

Settings Precedence: CLI flags > Config file settings > Default values

Available settings:

  • workers: Number of workers per endpoint
  • tps: Transactions per second (0 = unlimited)
  • statsInterval: Stats logging interval (e.g., "10s", "5m")
  • bufferSize: Buffer size per worker
  • dryRun: Simulate without sending transactions
  • debug: Enable debug logging
  • trackReceipts: Track transaction receipts
  • trackBlocks: Track block statistics
  • trackUserLatency: Track user latency metrics
  • prewarm: Prewarm accounts before test

Available Scenarios

  • EVMTransfer: Simple ETH transfers
  • ERC20: ERC20 token operations
  • ERC20Noop: ERC20 no-op transactions
  • ERC20Conflict: ERC20 conflicting transactions
  • ERC721: NFT operations

Output

Standard Metrics

throughput tps=133.00, txs=1330, latency(avg=8ms p50=5ms p99=27ms max=494ms)

User Latency (with --track-user-latency)

user latency height=5191 txs=32 min=1s p50=2s max=5s

Block Stats (with --track-blocks)

blocks height=5191 time(p50=2s p99=5s max=8s) gas(p50=21000 p99=50000 max=100000)

Development

Build

make build

Test

make test

Lint

make lint

Clean

make clean

Troubleshooting

Connection Issues

  • Check endpoint URLs in config
  • Verify network connectivity
  • Try --dry-run to test config

Low Performance

  • Increase --workers
  • Increase --buffer-size

Memory Issues

  • Reduce --buffer-size
  • Reduce worker count
  • Disable receipt tracking

About

CLI for loadtesting the sending of JSON-RPC transaction scenarios

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •