Comparison Table
A side-by-side comparison between Leo (Aleo) and Solidity (Ethereum/EVM).
| Feature | Leo | Solidity |
|---|---|---|
| Execution Model | Off-chain execution + on-chain proof verification and optional on-chain execution | Fully on-chain execution |
| State Model | Public key-value mapping and private record storage | Key-value contract storage, temporary transient storage, temporary memory and read-only calldata |
| Privacy | Built-in privacy with private inputs (messages), private outputs (state changes) and private user | No privacy – all state and calldata are public |
| Execution Cost | Storage cost + finalize cost (on-chain compute based on instruction) | Gas based on opcode |
| Supported Types | bool, u8…u128, i8…i128, plus field, group, scalar; no bytes, dynamic arrays and string | bool, (u)int8…256, bytes, dynamic arrays, string, etc. |
| Tooling | leo CLI, Leo debugger, snarkVM CLI, IDE plugins, DokoJS, Amareleo | Hardhat, Foundry, Remix, Truffle etc. |
| Randomness | ChaCha random function | Relies on 3rd party off-chain oracle (e.g. Chainlink VRF) |
| Error Handling | assert, assert_eq, assert_neq (no custom msg) | assert, require, revert with optional revert strings |
| Dispatch Type | Static dispatch (with dynamic dispatch in roadmap) | Dynamic dispatch |
| Built-in Functions | block.height, self.signer, self.caller, self.address, network.id, signature::verify, group::GEN, BHP hashes and commits, Keccak hashes, Pedersen hashes and commits, Poseidon hashes, SHA3 hashes etc. | keccak256, sha256, ripemd160, ecrecover, address.(member functions), abi.encode, abi.decode, block.(metadata) etc. |
| Token Standard | ARC-21 | ERC20 |
| NFT Standard | ARC-721 | ERC721 |
| Upgradability | Native upgradeability coming soon with ARC-6 | Via proxy patterns (Transparent, UUPS, Beacon) |
| Block Explorers | Provable Explorer (Beta), VXB.ai (Formerly Aleo123.io), Aleoscan etc. | Etherscan, Blockscout etc. |