freecoding.school100% FREE · NO SIGNUP
The EVM CoreISSUE #24 of 48

alt-vms · movevm · svm · cairovm

SoliaVSThe Reentrancy Reaper
Solia saysMove (linear types), SVM (parallel accounts), and CairoVM (proving-friendly registers) are the major alt-VMs — each redesigned around what the EVM does badly.

The EVM is mature but constrained by its design. MoveVM (Aptos, Sui) introduces resource types: values that can never be copied or dropped silently — preventing whole classes of double-spend bugs at the type-system level. SVM (Solana) uses a register-based model with an explicit accounts model that enables parallel execution when transactions touch disjoint state. CairoVM (Starknet) is designed from day one for STARK proving: simple opcodes, immutable memory tape, friendly to algebraic IR.

Each makes a different trade. Move sacrifices EVM compatibility for safety; SVM sacrifices generality for throughput; Cairo sacrifices ease-of-writing for proof efficiency. The demo lays them out side by side.

Power-ups you unlock

The Reentrancy Reaper attacks — common mistakes

Boss battleCompare a Solidity struct to a Move resource type and explain what double-spend bug class Move prevents.

Example code

<!doctype html><html><head><meta charset="utf-8"></head>
<body style="background:#06040d;color:#e6e0ff;font-family:monospace;padding:20px"><pre id="o"></pre>
<script>
const vms = [
  { name:'EVM',     model:'stack-based',    state:'mappings',        strength:'maturity & ecosystem' },
  { name:'MoveVM',  model:'register-based', state:'resource types',  strength:'linear types prevent silent copies' },
  { name:'SVM',     model:'register-based', state:'accounts',        strength:'parallel execution (Solana)' },
  { name:'CairoVM', model:'register-based', state:'immutable memory',strength:'designed for STARK proving' }
];
const sol  = 'struct Token { uint256 value; }                  // can be copied silently';
const move = 'resource Token has store { value: u64 }          // CANNOT be copied or dropped';
document.getElementById('o').textContent = [
  vms.map(v => v.name.padEnd(8) + v.model.padEnd(16) + v.state.padEnd(18) + v.strength).join('\n'),
  '',
  'EVM-style (Solidity):',
  '  ' + sol,
  'Move resource:',
  '  ' + move,
  '',
  'Move prevents double-spend bugs at the TYPE level — you cannot create a copy of a Token by accident'
].join('\n');
</script></body></html>
▶ Open the interactive comic issue
‹ Eof · Evm Object FormatYul · Inline Assembly Fundamentals ›