# Shanghai "Prototype" Devnets On the [EOF breakout](https://notes.ethereum.org/@timbeiko/eof-breakout), we discussed how to best implement devnets with EIPs that _could_ be included in Shanghai but yet haven't been confirmed. There are two ways EL clients can do this: either by bundling [Shanghai Included EIPs](https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md#included-eips) with potential additions in a single fork, or by separating them and having a "Shanghai Core" fork first activate, followed by another fork activating the EIPs pending inclusion. A few things we would like to optimize for: * Having the lowest possible friction for client teams to implement & test EIPs formally included in Shanghai * Maintaining the ability to easily add/remove candidate EIPs to Shanghai depending on what is decided * Interop with CL clients Taking what's been included in Shanghai so far, and EOF & EIP-4844 as examples, this is what it would look like with each option. Any future EIP that officially get included would be added to the "Shanghai Core" bucket. ## Activate candidate EIPs after 'Shanghai Core' ### EIPs part of devnets * **Shanghai Core**: * EIP-3651: Warm COINBASE * EIP-3855: PUSH0 instruction * EIP-3860: Limit and meter initcode * EIP-4895: Beacon chain push withdrawals as operations * **Shandong v2**: * EIP-3540: EVM Object Format (EOF) v1 * EIP-3670: EOF - Code Validation * EIP-4200: Static relative jumps * EIP-4750: EOF - Functions * **ProtoDanksharding devnet**: * EIP-4844: Shard Blob Transactions ### Fork activation schedule **Shanghai Core** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: Shanghai Core **Shangdong v2** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: Shanghai Core - Fork N+2: Shangdong v2 > Note: this "breaks" the current Shangdong spec, which bundles Shanghai Core (except 4895) with EIP-3540 and 3670. **ProtoDanksharding devnet** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: Shanghai Core - Fork N+2: ProtoDanksharding ## Bundle everything together ### EIPs part of devnets * **Shanghai Core**: * EIP-3651: Warm COINBASE * EIP-3855: PUSH0 instruction * EIP-3860: Limit and meter initcode * EIP-4895: Beacon chain push withdrawals as operations * **Shangdong v2**: * [*unclear whether to include EIP-4895*] * EIP-3651: Warm COINBASE [*in Shandong v1*] * EIP-3855: PUSH0 instruction [*in Shandong v1*] * EIP-3860: Limit and meter initcode [*in Shandong v1*] * EIP-3540: EVM Object Format (EOF) v1 [*in Shandong v1*] * EIP-3670: EOF - Code Validation [*in Shandong v1*] * EIP-4200: Static relative jumps * EIP-4750: EOF - Functions * **ProtoDanksharding devnet** * [*unclear whether to include EIP-4895*] * EIP-3651: Warm COINBASE * EIP-3855: PUSH0 instruction * EIP-3860: Limit and meter initcode * EIP-4844: Shard Blob Transactions ### Fork activation schedule **Shanghai Core** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: Shanghai Core **Shangdong v2** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: Shangdong v2 > Note: this "breaks" the current Shangdong spec, which bundles Shanghai Core (except 4895) with EIP-3540 and 3670. **EIP-4844 devnet** - Fork 0: Mainnet Genesis - ... - Fork N: Paris - Fork N+1: ProtoDanksharding