Ethereum developer barryWhiteHat wrote that with the commercialization of zero-knowledge proof virtual machine (zkEVM), an interesting opportunity has emerged: it can provide private smart contract infrastructure while maintaining compatibility with the Ethereum Virtual Machine (EVM). Developers can write Solidity code and compile it through a specific version of the Solidity compiler or some post-processing tools to create private smart contracts.
There are some important trade-offs around private global state and privacy, the core reason being: to prove something, you must know what you are proving. Therefore, a private smart contract cannot exist that has a global public state that you are not aware of. Consequently, private smart contracts with global private state cannot exist either. For example, applications like Uniswap cannot be implemented in a private form because the prover needs to know the balances of two liquidity pools to prove that a swap transaction is executed correctly.
Therefore, some well-known and favored applications cannot currently be implemented in a private form unless we have input-output (IO) capabilities - this is exactly why IO is crucial. It allows us to build a completely private Ethereum, with its trust assumptions identical to native Ethereum.
However, this article aims to explore how to compile pstore and pload operations into the zero-knowledge proof virtual machine (zkEVM) by adding them to reth, in order to achieve a private smart contract - these contracts have private user states but do not have private global states.