Overview
Sudont supports two virtual machines: the Ethereum Virtual Machine (EVM) and the Solana Virtual Machine (SVM). Both are first-class citizens.A single
CanonicalIntent carries a vm_type field that routes it to the correct Cage
implementation. The architecture is unified at the type level — the Judge and the rest of the
pipeline are completely VM-agnostic.The SimulationEngine Trait
Defined insudont-types, SimulationEngine is the contract both Cage implementations fulfill:
SimulationEngine — VM-Agnostic Interface
CanonicalIntent input carries the vm_type discriminant:
VmType Enum
vm_type and dispatches to the correct SimulationEngine implementation
at runtime — no conditional logic needed in the Judge or policy layers.
VM Implementations
- EVM — revm
- SVM — LiteSVM
Rust crate: State source: Local Base reth node with Flashblocks support. The simulation reflects the
pending world, not a stale cache.Supported protocols: Uniswap V3 (
sudont-cage
Dependency: revm = "14.0"The EVM Cage uses revm — a pure-Rust, production-grade
Ethereum Virtual Machine implementation.Exact Semantics
Byte-for-byte compatible with geth/reth execution
Full State Access
Storage slots, emitted logs, and state diffs
Gas Accounting
Precise gas computation and revert reason extraction
EIP Support
EIP-3607 and active EIPs via feature flags
exactInputSingle, exactInput), Aerodrome router swap flows.SimOutcome
RPC Routing by vmType
The TypeScript SDK exposesvmType as a constructor parameter:
vmType from the incoming request and selects the
appropriate SimulationEngine implementation. The Judge, Constitution, and diagnostic machinery
are shared — only the simulation backend differs.
Extending to New VMs
Implement SimulationEngine
Create a new Cage crate implementing the
SimulationEngine trait for your VM.
