Repository navigation
Warning
The Engine API JWT secret must now be exactly 32 bytes (64 hex characters, as the Engine API specifies). A shorter secret or an empty secret file now stops startup with an error that names its length; earlier releases accepted it. A secret that ethrex generates is now created readable only by its owner, and an existing file is never overwritten.
Note
What's new
- New RPC methods:
eth_simulateV1,eth_callBundle,eth_getStorageValues,eth_getHeaderByHashandeth_getHeaderByNumber,eth_getFilterLogs,eth_newPendingTransactionFilterandnewPendingTransactionssubscriptions, andweb3_sha3. - RPC behavior aligned with the other clients: state reads for a block the node does not know, or whose state it no longer holds, return an error instead of empty values; invalid params return
-32602; an omitted block parameter defaults tolatest; andeth_callandeth_getProoffollow the execution-apis rules. - Performance: faster EVM arithmetic opcodes and precompiles (MODEXP, BN254, the BLS12-381 pairing check, and keccak on x86-64 with AVX-512), cheaper calls to precompiles and other code-less targets, and block access list accounts warmed on a dedicated I/O pool.
- Hardening: RPC requests are bounded in the work they can ask for, node records are kept only when they are the sender's signed record, and the transaction pool drops transactions whose nonce is already used on chain.
- Fixes: a cancelled
engine_getPayloadno longer loses the payload; a node's live connection stays listed when a duplicate connection to it closes; a legacy transaction's chain id is derived from its wholev; genesis files accept JSON numbers and decimal strings for nonces, gas limit and timestamp; and node records advertise the snap versions the node serves. - Partial stateful node (experimental):
ethrex psnholds only the accounts and storage its users read and proves every value against light-client-verified headers. It is available in source builds with--features partial; release binaries and images do not include it. - L2: value-free L2→L1 intent messages, provable and consumable on L1 without moving funds. New chains get them from genesis; existing chains get them through the usual L2 contract upgrade.
No resync is needed.
Installation and running instructions can be found in our docs
✨ New Features
e7daed2- l1: add an optional partial stateful node mode (ethrex psn) (PR #7439 by @ilitteri)db0646d- l1: advertise served snap versions in the ENR (PR #7396 by @MysticRyuujin)18fdb83- l1: add eth_getHeaderByHash and eth_getHeaderByNumber (PR #7247 by @MysticRyuujin)58a85f3- l1: default omitted block to latest on eth state methods (PR #6780 by @MysticRyuujin)5046a00- l1,l2: add value-free L2->L1 intent messages with proof-and-consume (PR #7471 by @ManuelBilbao)6654996- l1: implement eth_getFilterLogs (PR #7475 by @adrianchifor)↘️ addresses issue #428 opened by @mpaulucci
c329260- l1: implement web3_sha3 (PR #7474 by @adrianchifor)d908aa9- l1: implement eth_newPendingTransactionFilter and newPendingTransactions subscriptions (PR #7476 by @adrianchifor)↘️ addresses issue #430 opened by @mpaulucci
430ef77- l1: implement eth_simulateV1 RPC method (PR #6951 by @ilitteri)801d500- l1: implement eth_callBundle (PR #7487 by @adrianchifor)
🐛 Bug Fixes
133ccdf- l1: derive a legacy transaction's chain id from its whole v (PR #7454 by @ilitteri)0477726- levm: record the coinbase in the BAL of zero-gas-price user transactions (PR #7453 by @ilitteri)fc44a9f- l1: keep a node's live connection listed when a duplicate connection to it closes (PR #7435 by @ilitteri)dc827ff- l1: accept JSON numbers and decimal strings for genesis nonces, gas limit and timestamp (PR #7434 by @ilitteri)cf602aa- l1: honor targetGasLimit in testing_buildBlockV1 (PR #7123 by @MysticRyuujin)e2292b2- l1: align eth_getProof with execution-apis (PR #7440 by @MysticRyuujin)329ba62- l1: apply the execution-apis call field rules (PR #7386 by @MysticRyuujin)2541326- l1: don't lose the payload when an engine_getPayload call is cancelled (PR #7459 by @barnabasbusa)e2e6384- l1: omit base64 padding from ENR strings (PR #7381 by @suna4)33c2215- l1: evict pool txs whose nonce is already used on chain (PR #7467 by @MegaRedHand)↘️ fixes issue #7463 opened by @barnabasbusa
8841b51- l1: return -32602 for invalid RPC params (PR #7468 by @MegaRedHand)37877d8- l1: hash seeded maps with foldhash's quality variant (PR #7478 by @adrianchifor)17e5fe0- l1: return errors for state reads of unknown blocks or unavailable state (PR #7473 by @adrianchifor)↘️ fixes issue #7028 opened by @ElFantasma↘️ fixes issue #7472 opened by @Stamp9
f7644d6- l1: keep a discv4 ENR response only if it is the sender's signed record (PR #7484 by @adrianchifor)f49f463- l1: create the generated JWT secret owner-only and reject secrets that are not 32 bytes (PR #7486 by @adrianchifor)9083295- l1: cap the storage keys of an eth_getProof request (PR #7485 by @adrianchifor)9487dda- l1: handle EELS WireX sync failures (PR #7480 by @ilitteri)0e3e9e2- l1: bound eth_callBundle by the block gas limit and zero BLOCKHASH past the state block (PR #7492 by @jrchatruc)
⚡ Performance Improvements
af03ef1- l1: faster BN254 precompiles (ECADD, ECMUL, ECPAIRING) (PR #7397 by @ilitteri)a477908- l1: faster keccak on x86-64 (one-shot hashing and an AVX-512VL permutation) (PR #7398 by @ilitteri)2c38fd0- levm: speed up DIV, SDIV, MOD, SMOD, ADDMOD, MULMOD, EXP and SIGNEXTEND (PR #7442 by @ilitteri)99614f3- levm: return the popped operand of binary opcodes by reference (PR #7443 by @ilitteri)9071ab8- levm: shift and extract bytes limb by limb with constant indexes (PR #7444 by @ilitteri)c2d63d0- l1: fixed-width Montgomery MODEXP for odd moduli of up to 128 bytes (PR #7445 by @ilitteri)2163fd5- l1: share the Miller loop across pairs in the BLS12-381 pairing check (PR #7446 by @ilitteri)329c8c0- levm: cheaper calls to precompiles and other code-less targets (PR #7447 by @ilitteri)41ae850- levm: move a precompile's output into the return-data buffer instead of cloning it (PR #7448 by @ilitteri)f1a17ae- levm: look an already-loaded account up once in load_account (PR #7449 by @ilitteri)398c21b- l1: skip rehashing the last touched address in the BAL recorder (PR #7450 by @ilitteri)a9b7695- l1: warm block access list accounts on a dedicated I/O pool (PR #7451 by @ilitteri)d53c950- l1: answer MODEXP inversions modulo well-known primes with safegcd (PR #7456 by @ilitteri)14892bb- l1: decode only the requested transaction when reading one by location (PR #7483 by @adrianchifor)6f17793- l1: read block bodies in eth_feeHistory only when rewards are requested (PR #7482 by @adrianchifor)b60f125- l1: recover only the requested transaction's sender in eth_getTransactionReceipt (PR #7481 by @adrianchifor)