| Language |
Smart contracts are written in Solidity. |
zkApp smart contracts are written using o1js (a TypeScript library). |
| Execution Environment |
Smart contracts run on every Ethereum node. |
zkApps run client side in a user’s web browser, and publish only a small validity proof which is verified by the Mina nodes. |
| Transaction Cost |
Execution costs are variable, and determined using a gas model. |
Execution costs are small, and constant because the Mina nodes are verifying the same size proof regardless of the amount of client-side computation. |
| Application Storage |
Ethereum is designed around the idea that storage, and computation are inherently coupled; all state must live on every Ethereum node. |
Mina’s design allows state, and computation to be decoupled so that application state can live anywhere; developers can choose a solution that fits their cost/security requirements best. |
| Developer Tooling |
New developer tools with unusual patterns like Hardhat, and Truffle are needed in order to manage the deployment of Ethereum smart contracts. |
The zkApp CLI manages scaffolding, linting, testing, and deployment using common JavaScript/TypeScript tools you are already familiar with. |
| Scaling |
Ethereum nodes must execute every transaction directly making horizontal scaling hard. |
Mina’s recursive zero knowledge proofs allow snark-workers to compress the blockchain, and developers to compress transactions using native rollups for exponential scaling. |
| Consensus |
Ethereum nodes must download the entire block history (~700GB) in order to verify the current finalized chain state. |
Mina clients can verify the current finalized state using a single 22KB recursive zero knowledge proof. |