The core Ethereum protocol suite in TypeScript. EVM, Trie, Block & Tx execution for Node.js and browser. Longtime @ethereumfndn project, community-led.

Joined November 2020
Some additional security measures for EthereumJS...
2
174
Gotcha #1 — validate vs build: Validating: missing contracts → invalid block. Building (generate: true): missing/failing call → empty request. Local demos can seed STOP bytecode; devnets ship full contract code.
1
4
In @ethereumjs/vm: runBlock() on Hardfork.Amsterdam already calls accumulateRequests(). Builder requests append after deposit / withdrawal / consolidation. Read result.requests + result.requestsHash — same Prague+ pipeline, two new types.
1
5
Gotcha for 7997: Clients must NOT inject the factory at the fork boundary. In @ethereumjs/vm you seed it yourself — nonce 1 + runtime bytecode from the EIP — then call it like any contract.
1
6
On Hardfork.Amsterdam: maxCodeSize = 65536 maxInitCodeSize = 131072 Prague rejects 24,577 bytes. Amsterdam accepts it. Same initcode path — the EVM just stops reverting at the old limit.
1
10
Decode with @ethereumjs/evm: decodeEIP7708TransferLog(log) → { from, to, value } One value transfer → 1 log in our example. Burn logs use Burn(address,uint256) on balance-removal paths.
1
12
In @ethereumjs/vm: const result = await runTx(vm, { tx, block }) const logs = result.receipt.logs No new API beyond Hardfork.Amsterdam. If the tx reverts → empty logs (as today).
1
16
Then read: result.blockLevelAccessList One plain ETH transfer → 4 accounts in the BAL on our example. Header hash must match bal.hash(). Mismatch = invalid block.
1
10
Builder flow in @ethereumjs/vm: runBlock(vm, { block, generate: true, }) No extra flag beyond Amsterdam. The VM accumulates accesses automatically while executing.
1
12
You should print: regular: 21000 state: 183600 recommended gasLimit: 204600 That's the whole EIP in one transfer.
1
7
Same 1-wei transfer. Recipient never existed. regular: 21,000 state: 183,600 you must set gasLimit ≥ 204,600 183,600 = 120 bytes × 1,530 Use 21,000 → out of gas. Tx included, ETH doesn't move.
1
71
Three moments that make Amsterdam click: ⛽ A transfer is no longer always 21,000 gas 📋 Every block commits a Block-Level Access List 📜 Native ETH transfers emit logs
1
81
EthereumJS implements the Amsterdam (execution) half. v10.1.3 — all 14 EIPs, aligned with glamsterdam-devnet-8. npm i @ethereumjs/[email protected] Same APIs: createVM(), runTx(), runBlock(), buildBlock(). Osaka and earlier: unchanged until you opt in.
1
131
And at the very core of all this: EthereumJS. 😁
Feel Your Protocol started as a side project to close the protocol↔app gap — hands-on explorations, real EthereumJS in the browser. Now we're designing the next leg: a deterministic API & MCP layer for the future Ethereum protocol. Nothing shipped yet. The plan is. (Bankr community: your role in this is spelled out further down ↓)
173