Skip to content

Commit a07c19c

Browse files
committed
feat: add ev-dev local chain and txpool transaction support in --dev mode
Add ev-dev binary providing a one-command local development chain with pre-funded Hardhat accounts, similar to Anvil or Hardhat Node. Includes genesis configuration and Makefile targets for convenience. Fix payload builder to pull pending transactions from the txpool when Engine API attributes are empty, enabling cast send and other RPC-submitted transactions to be included in blocks during --dev mode. Add DebugNode implementation for EvolveNode supporting local payload attributes builder.
1 parent c34841b commit a07c19c

File tree

9 files changed

+459
-7
lines changed

9 files changed

+459
-7
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
- `ev-dev` binary (`bin/ev-dev`): one-command local development chain with pre-funded Hardhat accounts, similar to Anvil or Hardhat Node
1213
- Transaction sponsor service (`bin/sponsor-service`) for signing EvNode transactions on behalf of users via JSON-RPC proxy ([#141](https://github.com/evstack/ev-reth/pull/141))
1314

1415
### Fixed
1516

17+
- Payload builder now pulls pending transactions from the txpool in `--dev` mode, fixing `cast send` and other RPC-submitted transactions not being included in blocks
1618
- Txpool now uses sponsor balance for pending/queued ordering in sponsored EvNode transactions, and validates executor balance separately for call value transfers ([#141](https://github.com/evstack/ev-reth/pull/141))
1719

1820
## [0.3.0] - 2026-02-23

Cargo.lock

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[workspace]
22
resolver = "2"
33
members = [
4+
"bin/ev-dev",
45
"bin/ev-reth",
56
"crates/common",
67
"crates/ev-primitives",

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ run: build-dev
5555
run-dev: build-dev
5656
RUST_LOG=debug ./$(TARGET_DIR)/debug/$(BINARY_NAME) node
5757

58+
## build-ev-dev: Build the ev-dev binary in release mode
59+
build-ev-dev:
60+
$(CARGO) build --release --bin ev-dev
61+
62+
## dev-chain: Build and run the local dev chain
63+
dev-chain: build-ev-dev
64+
./$(TARGET_DIR)/release/ev-dev
65+
5866
## fmt: Format code using rustfmt (nightly)
5967
fmt:
6068
$(CARGO) +nightly fmt --all

bin/ev-dev/Cargo.toml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
[package]
2+
name = "ev-dev"
3+
version.workspace = true
4+
edition.workspace = true
5+
rust-version.workspace = true
6+
license.workspace = true
7+
homepage.workspace = true
8+
repository.workspace = true
9+
description = "One-command local dev chain for ev-reth"
10+
11+
[[bin]]
12+
name = "ev-dev"
13+
path = "src/main.rs"
14+
15+
[dependencies]
16+
# Core evolve crates
17+
ev-node = { path = "../../crates/node" }
18+
evolve-ev-reth = { path = "../../crates/evolve" }
19+
20+
# Reth CLI and core dependencies
21+
reth-cli-util.workspace = true
22+
reth-ethereum-cli.workspace = true
23+
24+
# Alloy dependencies
25+
alloy-signer-local.workspace = true
26+
alloy-primitives.workspace = true
27+
28+
# Core dependencies
29+
eyre.workspace = true
30+
tracing.workspace = true
31+
tokio = { workspace = true, features = ["full"] }
32+
clap = { workspace = true, features = ["derive", "env"] }
33+
tempfile.workspace = true
34+
serde_json.workspace = true
35+
36+
[lints]
37+
workspace = true
38+
39+
[features]
40+
default = ["jemalloc"]
41+
42+
jemalloc = ["reth-cli-util/jemalloc", "reth-ethereum-cli/jemalloc"]
43+
jemalloc-prof = ["reth-cli-util/jemalloc-prof"]
44+
tracy-allocator = ["reth-cli-util/tracy-allocator"]
45+
46+
asm-keccak = ["reth-ethereum-cli/asm-keccak"]
47+
48+
dev = ["reth-ethereum-cli/dev"]
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
{
2+
"config": {
3+
"chainId": 1234,
4+
"homesteadBlock": 0,
5+
"daoForkSupport": true,
6+
"eip150Block": 0,
7+
"eip155Block": 0,
8+
"eip158Block": 0,
9+
"byzantiumBlock": 0,
10+
"constantinopleBlock": 0,
11+
"petersburgBlock": 0,
12+
"istanbulBlock": 0,
13+
"muirGlacierBlock": 0,
14+
"berlinBlock": 0,
15+
"londonBlock": 0,
16+
"arrowGlacierBlock": 0,
17+
"grayGlacierBlock": 0,
18+
"shanghaiTime": 0,
19+
"cancunTime": 0,
20+
"terminalTotalDifficulty": "0x0",
21+
"terminalTotalDifficultyPassed": true,
22+
"evolve": {
23+
"baseFeeSink": "0x00000000000000000000000000000000000000fe",
24+
"baseFeeRedirectActivationHeight": 0,
25+
"baseFeeMaxChangeDenominator": 5000,
26+
"baseFeeElasticityMultiplier": 10,
27+
"initialBaseFeePerGas": 1000000000,
28+
"mintAdmin": "0x000000000000000000000000000000000000Ad00",
29+
"mintPrecompileActivationHeight": 0,
30+
"contractSizeLimit": 131072,
31+
"contractSizeLimitActivationHeight": 0
32+
}
33+
},
34+
"nonce": "0x0",
35+
"timestamp": "0x0",
36+
"extraData": "0x00",
37+
"gasLimit": "0x1c9c380",
38+
"difficulty": "0x0",
39+
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
40+
"coinbase": "0x0000000000000000000000000000000000000000",
41+
"baseFeePerGas": "0x3b9aca00",
42+
"alloc": {
43+
"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": {
44+
"balance": "0xd3c21bcecceda1000000"
45+
},
46+
"0x70997970c51812dc3a010c7d01b50e0d17dc79c8": {
47+
"balance": "0xd3c21bcecceda1000000"
48+
},
49+
"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc": {
50+
"balance": "0xd3c21bcecceda1000000"
51+
},
52+
"0x90f79bf6eb2c4f870365e785982e1f101e93b906": {
53+
"balance": "0xd3c21bcecceda1000000"
54+
},
55+
"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65": {
56+
"balance": "0xd3c21bcecceda1000000"
57+
},
58+
"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc": {
59+
"balance": "0xd3c21bcecceda1000000"
60+
},
61+
"0x976ea74026e726554db657fa54763abd0c3a0aa9": {
62+
"balance": "0xd3c21bcecceda1000000"
63+
},
64+
"0x14dc79964da2c08b23698b3d3cc7ca32193d9955": {
65+
"balance": "0xd3c21bcecceda1000000"
66+
},
67+
"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f": {
68+
"balance": "0xd3c21bcecceda1000000"
69+
},
70+
"0xa0ee7a142d267c1f36714e4a8f75612f20a79720": {
71+
"balance": "0xd3c21bcecceda1000000"
72+
},
73+
"0xbcd4042de499d14e55001ccbb24a551f3b954096": {
74+
"balance": "0xd3c21bcecceda1000000"
75+
},
76+
"0x71be63f3384f5fb98995898a86b02fb2426c5788": {
77+
"balance": "0xd3c21bcecceda1000000"
78+
},
79+
"0xfabb0ac9d68b0b445fb7357272ff202c5651694a": {
80+
"balance": "0xd3c21bcecceda1000000"
81+
},
82+
"0x1cbd3b2770909d4e10f157cabc84c7264073c9ec": {
83+
"balance": "0xd3c21bcecceda1000000"
84+
},
85+
"0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097": {
86+
"balance": "0xd3c21bcecceda1000000"
87+
},
88+
"0xcd3b766ccdd6ae721141f452c550ca635964ce71": {
89+
"balance": "0xd3c21bcecceda1000000"
90+
},
91+
"0x2546bcd3c84621e976d8185a91a922ae77ecec30": {
92+
"balance": "0xd3c21bcecceda1000000"
93+
},
94+
"0xbda5747bfd65f08deb54cb465eb87d40e51b197e": {
95+
"balance": "0xd3c21bcecceda1000000"
96+
},
97+
"0xdd2fd4581271e230360230f9337d5c0430bf44c0": {
98+
"balance": "0xd3c21bcecceda1000000"
99+
},
100+
"0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199": {
101+
"balance": "0xd3c21bcecceda1000000"
102+
},
103+
"0x000000000000000000000000000000000000Ad00": {
104+
"balance": "0x0",
105+
"code": "0x60806040526004361061007e575f3560e01c80638da5cb5b1161004d5780638da5cb5b1461012d578063e30c397814610157578063f2fde38b14610181578063fa4bb79d146101a957610085565b806318dfb3c7146100895780631cff79cd146100c557806379ba5097146101015780638b5298541461011757610085565b3661008557005b5f5ffd5b348015610094575f5ffd5b506100af60048036038101906100aa9190610cf8565b6101e5565b6040516100bc9190610ea1565b60405180910390f35b3480156100d0575f5ffd5b506100eb60048036038101906100e69190610f70565b6104d9565b6040516100f89190611015565b60405180910390f35b34801561010c575f5ffd5b5061011561066c565b005b348015610122575f5ffd5b5061012b6107ed565b005b348015610138575f5ffd5b506101416108b4565b60405161014e9190611044565b60405180910390f35b348015610162575f5ffd5b5061016b6108d8565b6040516101789190611044565b60405180910390f35b34801561018c575f5ffd5b506101a760048036038101906101a2919061105d565b6108fd565b005b3480156101b4575f5ffd5b506101cf60048036038101906101ca91906110bb565b610aa4565b6040516101dc9190611015565b60405180910390f35b60605f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461026c576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8282905085859050146102ab576040517fff633a3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8484905067ffffffffffffffff8111156102c8576102c761112c565b5b6040519080825280602002602001820160405280156102fb57816020015b60608152602001906001900390816102e65790505b5090505f5f90505b858590508110156104d0575f5f87878481811061032357610322611159565b5b9050602002016020810190610338919061105d565b73ffffffffffffffffffffffffffffffffffffffff1686868581811061036157610360611159565b5b90506020028101906103739190611192565b604051610381929190611230565b5f604051808303815f865af19150503d805f81146103ba576040519150601f19603f3d011682016040523d82523d5f602084013e6103bf565b606091505b50915091508161040657806040517fa5fa8d2b0000000000000000000000000000000000000000000000000000000081526004016103fd9190611015565b60405180910390fd5b87878481811061041957610418611159565b5b905060200201602081019061042e919061105d565b73ffffffffffffffffffffffffffffffffffffffff167fc96720f35dd524e76ea92971ce13d08e9a17816bf3b0008a7083e6032354ebb587878681811061047857610477611159565b5b905060200281019061048a9190611192565b8460405161049a93929190611274565b60405180910390a2808484815181106104b6576104b5611159565b5b602002602001018190525050508080600101915050610303565b50949350505050565b60605f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610560576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff168585604051610589929190611230565b5f604051808303815f865af19150503d805f81146105c2576040519150601f19603f3d011682016040523d82523d5f602084013e6105c7565b606091505b50915091508161060e57806040517fa5fa8d2b0000000000000000000000000000000000000000000000000000000081526004016106059190611015565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167fc96720f35dd524e76ea92971ce13d08e9a17816bf3b0008a7083e6032354ebb586868460405161065893929190611274565b60405180910390a280925050509392505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f1853971c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3335f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610872576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610982576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109e7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b2b576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f8673ffffffffffffffffffffffffffffffffffffffff16848787604051610b55929190611230565b5f6040518083038185875af1925050503d805f8114610b8f576040519150601f19603f3d011682016040523d82523d5f602084013e610b94565b606091505b509150915081610bdb57806040517fa5fa8d2b000000000000000000000000000000000000000000000000000000008152600401610bd29190611015565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff167fc96720f35dd524e76ea92971ce13d08e9a17816bf3b0008a7083e6032354ebb5878784604051610c2593929190611274565b60405180910390a28092505050949350505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112610c6357610c62610c42565b5b8235905067ffffffffffffffff811115610c8057610c7f610c46565b5b602083019150836020820283011115610c9c57610c9b610c4a565b5b9250929050565b5f5f83601f840112610cb857610cb7610c42565b5b8235905067ffffffffffffffff811115610cd557610cd4610c46565b5b602083019150836020820283011115610cf157610cf0610c4a565b5b9250929050565b5f5f5f5f60408587031215610d1057610d0f610c3a565b5b5f85013567ffffffffffffffff811115610d2d57610d2c610c3e565b5b610d3987828801610c4e565b9450945050602085013567ffffffffffffffff811115610d5c57610d5b610c3e565b5b610d6887828801610ca3565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610de182610d9f565b610deb8185610da9565b9350610dfb818560208601610db9565b610e0481610dc7565b840191505092915050565b5f610e1a8383610dd7565b905092915050565b5f602082019050919050565b5f610e3882610d76565b610e428185610d80565b935083602082028501610e5485610d90565b805f5b85811015610e8f5784840389528151610e708582610e0f565b9450610e7b83610e22565b925060208a01995050600181019050610e57565b50829750879550505050505092915050565b5f6020820190508181035f830152610eb98184610e2e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610eea82610ec1565b9050919050565b610efa81610ee0565b8114610f04575f5ffd5b50565b5f81359050610f1581610ef1565b92915050565b5f5f83601f840112610f3057610f2f610c42565b5b8235905067ffffffffffffffff811115610f4d57610f4c610c46565b5b602083019150836001820283011115610f6957610f68610c4a565b5b9250929050565b5f5f5f60408486031215610f8757610f86610c3a565b5b5f610f9486828701610f07565b935050602084013567ffffffffffffffff811115610fb557610fb4610c3e565b5b610fc186828701610f1b565b92509250509250925092565b5f82825260208201905092915050565b5f610fe782610d9f565b610ff18185610fcd565b9350611001818560208601610db9565b61100a81610dc7565b840191505092915050565b5f6020820190508181035f83015261102d8184610fdd565b905092915050565b61103e81610ee0565b82525050565b5f6020820190506110575f830184611035565b92915050565b5f6020828403121561107257611071610c3a565b5b5f61107f84828501610f07565b91505092915050565b5f819050919050565b61109a81611088565b81146110a4575f5ffd5b50565b5f813590506110b581611091565b92915050565b5f5f5f5f606085870312156110d3576110d2610c3a565b5b5f6110e087828801610f07565b945050602085013567ffffffffffffffff81111561110157611100610c3e565b5b61110d87828801610f1b565b93509350506040611120878288016110a7565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126111ae576111ad611186565b5b80840192508235915067ffffffffffffffff8211156111d0576111cf61118a565b5b6020830192506001820236038313156111ec576111eb61118e565b5b509250929050565b5f81905092915050565b828183375f83830152505050565b5f61121783856111f4565b93506112248385846111fe565b82840190509392505050565b5f61123c82848661120c565b91508190509392505050565b5f6112538385610fcd565b93506112608385846111fe565b61126983610dc7565b840190509392505050565b5f6040820190508181035f83015261128d818587611248565b905081810360208301526112a18184610fdd565b905094935050505056fea26469706673582212201029704c8e76cc8133cedd39a8adbebfe979b8809644c7f5e9cff417e23119d464736f6c634300081e0033",
106+
"storage": {
107+
"0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000f39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
108+
}
109+
},
110+
"0x0101010101010101010101010101010101010101": {
111+
"balance": "0x1"
112+
}
113+
},
114+
"number": "0x0"
115+
}

0 commit comments

Comments
 (0)