EIP-7954 Raise maximum contract size to 64KiB (Increase Maximum Contract Size)
No call decision · EVM & execution · EIP status Last Call · created 2025-06-09
Raises the maximum size of contract code that can be deployed on Ethereum from 24KiB to 64KiB, and the maximum size of the initialization code (initcode) executed when creating a contract from 48KiB to 128KiB.
Why it is needed
On Ethereum, contract code larger than 24KiB (24,576 bytes) cannot be deployed. This limit was set in EIP-170. Initialization code (initcode), which runs only once when a contract is created, has a separate 48KiB limit set by EIP-3860. The source points out that the 24KiB limit can be too tight for complex contracts and applications. As features grow, code gets longer, and once it hits the cap no more features can be added. This proposal raises the code limit to 64KiB and the initcode limit to 128KiB so that more feature-rich contracts can be deployed, while keeping the growth in block and state size within a reasonable range. The proposal changes nothing other than the two limit values.
What changes
Today
- Contract code can be deployed only up to 24KiB (24,576 bytes)
- Initcode executed when creating a contract is limited to 48KiB (49,152 bytes)
- Complex contracts are constrained in the features they can include by this limit
After EIP-7954
- Contract code can be deployed up to 64KiB (65,536 bytes)
- The initcode limit increases to 128KiB (131,072 bytes)
- Already deployed contracts are not affected at all
Who is affected
- Contract developer: Contracts larger than 24KiB can also be deployed, up to 64KiB. The initcode limit also rises to 128KiB. Contracts that are already deployed need no changes.
- Client teams: This change modifies two limit values from EIP-170 and EIP-3860. There are no other protocol changes, and it is activated by a hard fork.
- Users: How transactions work and how wallets are used do not change. The only thing that changes is the code size developers can deploy.
- The whole network: The risk of denial-of-service (DoS) attacks using large contracts may increase slightly, but the source considers the new limit to be a conservative value as well.
In depth
Contract code size limit: from 0x6000 to 0x10000
Changes the contract code size limit set by EIP-170 from 24KiB (0x6000 bytes, 24,576 bytes) to 64KiB (0x10000 bytes, 65,536 bytes). This limit applies to the contract code stored on chain after deployment is complete. Only the limit value changes; how the limit is checked and other protocol rules are left untouched. The source lists this separately as a design rationale called Simplicity. After activation, contracts whose code is larger than 24KiB and at most 64KiB can be deployed.
initcode size limit: from 0xC000 to 0x20000
Changes the initcode size limit set by EIP-3860 from 48KiB (0xC000 bytes, 49,152 bytes) to 128KiB (0x20000 bytes, 131,072 bytes). Initcode is the initialization code run once when a contract is created, and its execution result determines the contract code that is actually stored. This proposal raises the code limit and the initcode limit together. Previously the initcode limit was twice the code limit (24KiB versus 48KiB). This ratio is preserved with the new values (64KiB versus 128KiB).
Rationale: flexibility, backwards compatibility, simplicity
The source gives three rationales. First, developer flexibility: more complex contracts and features can be implemented. Second, backwards compatibility: already deployed contracts are not affected at all. Third, simplicity: only the size limits change and no other protocol modifications are made. The Motivation section gives as the reason for choosing 64KiB that it allows contracts with richer functionality while keeping block and state growth within reasonable constraints.
Activation method and existing contracts
This change is not backwards compatible at the protocol level, so it must be activated by a network upgrade (hard fork). Until activation, contracts larger than 24KiB cannot be deployed, and after activation, contracts larger than 24KiB and up to 64KiB can be deployed. Contracts already on chain are not affected. From a client implementation standpoint, the work is changing two constants taken from EIP-170 and EIP-3860, and the source states there are no other protocol modifications.
Security considerations: denial-of-service (DoS) risk
The source acknowledges that raising the limit may marginally increase the risk of denial-of-service (DoS) attacks using large contracts. However, it judges the new 64KiB limit to still be a conservative value. The Motivation section also stresses keeping block and state growth within reasonable constraints. The source describes no separate mitigation or additional gas rules. The size limit itself is the defense, and where to set that value is the core judgment of this proposal.
Status: Last Call and core developer call
The source status is Last Call, and the last-call-deadline is 2026-11-01. The proposal was created on 2025-06-09 and written by Giulio Rebuffo and Ben Adams. It was discussed on the core developer call at 10.08 ACDE #247, but no decision was made. Which network upgrade will include it has not yet been decided. Activation requires a hard fork, so the actual rollout time must wait for the fork schedule decision.