Files
evm/cmd/simulator
zeekayandHanzo Dev 9e4aa8c436 chain routes: /v1/bc -> /v1/chain
luxd serves chain routes under /v1/chain, and the node, cli and sdk releases
already ship it. The deployed gateways still answer the old prefix, so remote
reads break until they are redeployed; the estate moves together rather than
sitting half converted.

Lines that record an observation - a probe, a status code, a past release -
keep the prefix they were written against, as do URLs on hosts that are not
ours. Avalanche endpoints move to /ext/bc, which is the path that host serves.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-01 08:16:57 -07:00
..
2026-09-01 08:16:57 -07:00
2026-08-30 17:12:20 -07:00

Load Simulator

When building developing your own blockchain using evm, you may want to analyze how your fee parameterization behaves and/or how many resources your VM uses under different load patterns. For this reason, we developed cmd/simulator. cmd/simulator lets you drive arbitrary load across any number of [endpoints] with a user-specified keys directory (insecure) timeout, workers, max-fee-cap, and max-tip-cap.

Building the Load Simulator

To build the load simulator, navigate to the base of the simulator directory:

cd $GOPATH/src/github.com/luxfi/evm/cmd/simulator

Build the simulator:

go build -o ./simulator main/*.go

To confirm that you built successfully, run the simulator and print the version:

./simulator --version

This should give the following output:

v0.1.0

To run the load simulator, you must first start an EVM based network. The load simulator works on both the C-Chain and EVM, so we will start a single node network and run the load simulator on the C-Chain.

To start a single node network, follow the instructions from the Luxd README to build from source.

Once you've built Luxd, open the Luxd directory in a separate terminal window and run a single node non-staking network with the following command:

./build/luxd --sybil-protection-enabled=false --network-id=local

WARNING:

The --sybil-protection-enabled=false flag is only suitable for local testing. Disabling staking serves two functions explicitly for testing purposes:

  1. Ignore stake weight on the P-Chain and count each connected peer as having a stake weight of 1
  2. Automatically opts in to validate every Subnet

Once you have Luxd running locally, it will be running an HTTP Server on the default port 9650. This means that the RPC Endpoint for the C-Chain will be http://127.0.0.1:9650/v1/chain/C/rpc and ws://127.0.0.1:9650/v1/chain/C/ws for WebSocket connections.

Now, we can run the simulator command to simulate some load on the local C-Chain for 30s:

./simulator --timeout=1m --workers=1 --max-fee-cap=300 --max-tip-cap=10 --txs-per-worker=50

Command Line Flags

To see all of the command line flag options, run

./simulator --help