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. |