This is a Reth-based execution layer (EL) implementation customized for the Arc Network.
It serves as the execution client that processes transactions, executes smart contracts, and maintains the blockchain state. Communication with the consensus layer (CL) is handled via the Engine API.
Minimal example with IPC (recommended for colocated execution and consensus):
arc-node-execution node \
--chain=assets/localdev/genesis.json \
--http --http.port=8545 \
--ipcpath=/tmp/reth.ipc \
--fullFull example with detailed configuration:
arc-node-execution node \
--chain=assets/localdev/genesis.json \
--datadir=/var/lib/arc-execution \
--http --http.addr=0.0.0.0 --http.port=8545 \
--http.api=eth,net,web3,txpool,trace,debug \
--http.corsdomain="*" \
--ws --ws.addr=0.0.0.0 --ws.port=8546 \
--authrpc.addr=0.0.0.0 --authrpc.port=8551 --authrpc.jwtsecret=jwtsecret \
--ipcpath=/tmp/reth.ipc \
--metrics=0.0.0.0:9001 \
--enable-arc-rpc \
--fullNote: to generate a JWT (JSON web token), use the following command:
openssl rand -hex 32 | tr -d "\n" > "jwtsecret"Use RPC nodes to interact with the Arc network via API. While they don't participate in consensus, they stay fully synced with the latest state.
In this mode, consensus data is not verified. It is essential to only follow and synchronize with a trusted node.
# Download snapshot (this will help you sync much faster)
arc-node-execution download
arc-node-execution node \
--unsafe-follow \
--http --http.port=8545 \
--http.api eth,net,web3,txpool,trace \
--enable-arc-rpc \
--minimalNote: When running a node in RPC mode (as shown above), you do not need to run or download the consensus binary. The execution node will follow the network without participating in consensus.
For an RPC node with full consensus verification, run both the execution and consensus
layers together. The --follow and --follow.endpoint flags are configured on
arc-node-consensus, not this binary. See the Consensus Layer README
for details on setting up a verified full node.
For a complete list of available flags, see the Reth CLI reference or run:
arc-node-execution node --helpIn addition to standard Reth flags, arc-node-execution provides the following custom flags:
| Flag | Default | Environment Variable | Description |
|---|---|---|---|
--enable-arc-rpc |
false |
- | Enable custom ARC RPC namespace (certificates, etc.) |
--arc-rpc-upstream-url <URL> |
- | ARC_RPC_UPSTREAM_URL |
Upstream malachite-app base URL for ARC RPC (e.g., http://127.0.0.1:31000). Only read if --enable-arc-rpc is set |
--unsafe-follow [URL] |
- | ARC_UNSAFE_FOLLOW_URL |
Run an RPC node (unsafe - no verification). Use without value for auto-config or specify WebSocket URL (e.g., ws://trusted-node:8546) |
--invalid-tx-list-enable |
false |
- | Enable the invalid transaction list feature |
--invalid-tx-list-cap <CAPACITY> |
100000 |
- | Maximum capacity of the invalid tx list LRU cache. Only read if --invalid-tx-list-enable is set |
--full |
- | - | Full-node pruning preset. Fully prunes sender recovery; keeps the last 237,600 blocks for all other segments. Also sets --prune.block-interval=5000. Mutually exclusive with --minimal. |
--minimal |
- | - | Minimal-storage pruning preset. Fully prunes sender recovery; keeps transaction lookup for 64 blocks, receipts for 64 blocks, account/storage history for 10,064 blocks, and block bodies for 237,600 blocks. Also sets --prune.block-interval=5000. Mutually exclusive with --full. |
--arc.hide-pending-txs |
false |
- | Hide pending-tx RPCs. When set, a filter blocks pending-tx subscriptions, filters, and pending block queries (see Pending Txs Filter). |
Examples:
Enable ARC RPC namespace:
arc-node-execution node \
--enable-arc-rpc \
--arc-rpc-upstream-url http://localhost:31000 \
--chain genesis.jsonEnable invalid transaction list with custom capacity:
arc-node-execution node \
--invalid-tx-list-enable \
--invalid-tx-list-cap 50000 \
--chain genesis.jsonInitialize the database from a genesis file:
arc-node-execution init --chain=assets/localdev/genesis.jsonThis creates the genesis block and initializes the state database.
The db command provides database maintenance and debugging utilities.
For available database operations, run:
arc-node-execution db --helpThe node includes an optional in-memory invalid transaction list (LRU) used to proactively reject known-bad transaction hashes and to add all currently pending transactions to the list in the event the payload builder panics.
Configuration:
Use the --invalid-tx-list-enable and --invalid-tx-list-cap flags (see Custom flags section above).
Behavior when enabled:
- On payload builder panic, all pending transactions are added to the invalid tx list and removed from the mempool
- O(1) hash membership check during transaction validation
- Metrics exposed:
arc_invalid_tx_list_size,arc_invalid_tx_list_hits_total,arc_invalid_tx_list_inserts_total,arc_invalid_tx_list_batch_inserts_total
Behavior when disabled (default):
- No invalid tx list is created
- No metrics are exposed
- On payload builder panic, no action is taken
Example:
arc-node-execution node \
--chain genesis.json \
--invalid-tx-list-enable \
--invalid-tx-list-cap 10000Operational Notes:
- Enable only on validator nodes
- Setting
--invalid-tx-list-cap 0keeps the invalid tx list logically enabled (metrics + panic handling) but stores no hashes
By default, the node allows all pending-tx RPCs. Pass --arc.hide-pending-txs to enable the filter that blocks them (for externally-exposed nodes).
When the filter is enabled (--arc.hide-pending-txs):
| Method or call | Behavior |
|---|---|
eth_subscribe("newPendingTransactions") |
Error -32001 |
eth_newPendingTransactionFilter |
Error -32001 |
eth_getBlockByNumber("pending") |
Returns null (success) |
The execution layer is built on top of Reth, extending it with Arc-specific functionality:
- Custom Precompiles - Native implementations for Arc-specific operations (native coin control, post-quantum signatures, system accounting)
- Custom EVM Configuration - Specialized gas calculations and execution logic
- Transaction Pool Enhancements - Custom validation
- Block Executor - Optimized block execution with Arc-specific features
For architectural details, see the Architecture Guide.
The execution layer exposes Prometheus metrics on the configured metrics endpoint (e.g., http://localhost:9001/metrics).
Key metric prefixes:
reth_*- Core Reth metrics (block processing, sync, etc.)arc_*- Arc-specific metrics (precompiles, invalid tx list, etc.)
For execution-layer-only development and testing:
./scripts/localdev.mjs startThis runs the execution layer with a mock consensus layer for rapid iteration.
- Main README - Getting started and development workflow
- Architecture Guide - System design and component interactions
- Consensus Layer README - Consensus layer documentation
- Reth Book - Upstream Reth documentation