I’m sorry if this is the wrong place to post this, but I can’t find a better place to explain my situation.
I have been using Ethereum since 2016 and was doing MEV even before the word MEV exists. Today I was going to withdraw my ETH and Tokens from an old contract deployed by myself years ago. The withdrawing transaction simulation always failed so I did some tracing to find out the reason, which made me really really surprised.
Here is what happened. For gas optimization, that contract uses CREATE and EXTCODECOPY to read and write persistent data, instead of SSTORE and SLOAD. During the withdraw process, the contract needs to change its state so it tries to CREATE a new contract with bytecode starts with the byte 0xEF. EIP-3541 made this impossible. I have read through my old contract code (written in Yul) and I’m sure that there’s no way to work around this issue. For privacy reasons, I don’t want to share my contract address and the source code.
These ETH and Tokens are not small money for me and I really need them now.
I’m really surprised that this EIP doesn’t care about backward compatibility at all. It only cares about executable contracts while just leaving these non-executable contracts ignored. I’m not the only one to store raw data in contract bytecodes, like in this article published in 2019 On Efficient Ethereum Storage. As you make headway in the quest to… | by 0age | Coinmonks | Medium
I’m so depressed and don’t know what to do next. Should I propose a new EIP just for my case? Is this acceptable? Will this kind of issue happen again to somebody else? Do the Ethereum core devs really care about this kind of edge cases? What should Ethereum users like me do to prevent this from happening again? What sort of contract code is guaranteed to work in the future and what sort of contract code is not? How do I trust Ethereum to protect my money?
I believe in decentralization and really love the Ethereum ecosystem. However, I can’t trust it anymore. If I can’t get my ETH back, I only hope this will never happen to others again.