
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
- Tweets589
- Following287
- Followers1.9K
- Likes495
Built upon EthereumJS. 💪
And we are live.
This will change the way you can reliably reason with your agent about future #Ethereum protocol changes.
So what can you ask?
EthereumJS retweeted
Onwards to complete our #Glamsterdam explorations set before we translate everything for the robots 🤖 along MCP launch (see below on a date 📅):
New #FYP exploration around EIP-8037 to "feel" why 21,000 gas is not necessarily 21,000 gas "as it used to be"anymore, once the hardfork kicks in on #Ethereum.
Are you a wallet/infra provider/dev and affected by this? We would love to hear how! 🙏 Drop ↓
We have a launch date.
5–9 October 2026
hosted MCP at mcp.feelyourprotocol.org
Feel Your Protocol is the EVM oracle for the upcoming Glamsterdam hardfork — exact simulations of execution-layer rules not yet on mainnet.
Today: the website.
October: your agent.
roadmap.feelyourprotocol.org…
That wraps the Amsterdam deep-dive series 🎉
1 ⛽ two-dimensional gas
2 📋 BAL
3 📜 transfer logs
4 📦 code size + CREATE2 factory
5 🏗️ builder requests
Full bundle: Hardfork.Amsterdam in @ethereumjs/[email protected]
github.com/ethereumjs/ethere…
Copy eip8282BuilderRequests.ts →
npx tsx eip8282BuilderRequests.ts
BuilderDeposit (type 3): 0 bytes
BuilderExit (type 4): 0 bytes
requestsHash: 0xe3b0…b855
github.com/ethereumjs/ethere…
Run it (Node 20+):
mkdir amsterdam-8282 && cd amsterdam-8282
npm init -y
npm i @ethereumjs/[email protected] @ethereumjs/[email protected] @ethereumjs/[email protected] @ethereumjs/[email protected] @ethereumjs/[email protected] tsx
Gotcha #2 — EthereumJS is execution-layer:
We accumulate EL requests + hash them.
ePBS / builder consensus rules live on the CL side.
Amsterdam preview — not production.
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.
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.
The contracts (Glamsterdam-devnet v7 mined):
Deposit: 0x0000bFF4…8282
Exit: 0x000064D6…8282
Builders register + top up via deposit calldata (184 bytes).
Exit is authorized by execution_address — not the BLS bid key.
Amsterdam (EIP-8282):
Two new EIP-7685 request types on the EL:
• type 0x03 — BuilderDeposit
• type 0x04 — BuilderExit
Dedicated predeploys. Same end-of-block system-call pattern as EIP-7002.
eips.ethereum.org/EIPS/eip-8…
Status quo (EIP-7732 / Glamsterdam CL):
Builders stake and exit through validator-style flows.
Withdrawal credentials, voluntary exits, BLS hot keys.
Works — but it blurs two different actors on one bus.
🏗️ Thread 5 — builder lifecycle on the request bus.
Thread 4: bigger bytecode + Nick's factory.
Finale: Amsterdam adds builder deposit/exit requests for ePBS.
EIP-8282. 🧵
More gotchas:
7954 — bigger contracts = more deploy gas + state bloat; still capped at 64 KiB.
7997 — factory must exist in your genesis/test pre-state; mainnet already has it.
Experimental — not production.
Next: builder requests (EIP-8282). 🚀
[ END OF THREAD ]
Run EIP-7997 (add @ethereumjs/vm, block, tx):
Copy eip7997Create2Factory.ts →
npx tsx eip7997Create2Factory.ts
Expected CREATE2 address + deployed runtime code printed.
github.com/ethereumjs/ethere…
Copy eip7954MaxCodeSize.ts →
npx tsx eip7954MaxCodeSize.ts
Prague: "code size to deposit exceeds maximum code size"
Amsterdam: created with 24577 bytes
github.com/ethereumjs/ethere…
Run EIP-7954 (Node 20+):
mkdir amsterdam-7954 && cd amsterdam-7954
npm init -y
npm i @ethereumjs/[email protected] @ethereumjs/[email protected] @ethereumjs/[email protected] tsx
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.
EIP-7997 catalogues the factory:
calldata = salt (32 bytes) || initcode
forwards call value → CREATE2
returns 20-byte address on success
eips.ethereum.org/EIPS/eip-7…










