Read

Edit

History

Notify

Share

EIP-3855

EIP-3855 is an that proposes to add a new instruction called PUSH0 (0x5f) in the Virtual Machine (EVM), as part of the Shanghai  of the Shapella Upgrade. This instruction aims to help reduce gas costs and storage costs for contracts that need to push constant 0 onto the stack. [1]

Overview

On February 19th, 2021, EIP-3855 was created to introduce PUSH0, aiming to reduce contract code size, lower the risk of contract misuse of other instructions, and reduce the need to use DUP instructions for duplicating zeroes. Currently, developers can use other instructions like PC, MSIZE, CALLDATASIZE, RETURNDATASIZE, CODESIZE, CALLVALUE, and SELFBALANCE to achieve this effect, but these instructions have different costs and can vary depending on the context. Also the waste produced by the current PUSH1 00 instruction across existing accounts is: 340,557,331 bytes which translates to 68,111,466,200 gas spent to deploy them. This proposal intends to reduce this redundancy along with the other main goals. [1][2]

Details

The PUSH0 instruction has no immediate data, does not pop items from the stack, and places a single item with the value 0 onto the stack. Its gas cost is 2, which is the same as other instructions that place constant values onto the stack, like ADDRESS and ORIGIN. The opcode for PUSH0 is 0x5f, which means it is in a "contiguous" space with other PUSH implementations and could potentially share the implementation. [2][3]

An analysis on Mainnet shows that around 11.5% of all PUSH* instructions executed push a value of zero, and the wasted gas and storage costs for pushing constant 0 with PUSH1 are significant. [2]

One potential issue with the introduction of PUSH0 is that already deployed contracts using this opcode could change their behavior after this EIP. However, the authors are not aware of any impact on security, and jumpdest-analysis is unaffected as PUSH0 has no immediate data bytes. [1]

Authors

  • Alex Beregszaszi
  • Hugo De la cruz
  • Paweł Bylica

[3]

See something wrong? Report to us.

EIP-3855

Commit Info

Edited By

Edited On

March 31, 2023

Feedback

Average Rating

No ratings yet, be the first to rate!

How was your experience?

Give this wiki a quick rating to let us know!

Media

REFERENCES

Join the IQ Brainlist

Sign up for the IQ Brainlist to get early access to editing on the IQ.wiki site!

Join Now

Subscribe to our newsletter

The IQ Ecosystem Report will keep you updated on everything IQ.

Subscribe

IQ.wiki

IQ.wiki's vision is to bring blockchain knowledge to the world and knowledge onto the blockchain. A part of Brainfund group

https://twitter.com/IQWIKIhttps://www.reddit.com/r/Everipedia/https://t.me/everipediahttps://www.instagram.com/iqwiki_/https://github.com/EveripediaNetworkhttps://discord.gg/x9EWvTcPXthttps://web.facebook.com/everipedia?_rdc=1&_rdr

IQ

What's IQ?StakingBonds

Company

About usCareersBrandingIQ GPTIQ Dashboard

© 2024 IQ.wiki Powered By BrainDAO & IQ