Multi-VM Runtime
Tenzro Ledger supports three virtual machines in a single runtime: the Ethereum Virtual Machine (EVM), Solana Virtual Machine (SVM), and Canton/DAML. Transactions are routed by type to the appropriate executor, and all VMs share the same native TNZO balance via a cross-VM token pointer model.
Supported VMs
EVM (Ethereum Virtual Machine)
Full Ethereum compatibility via revm. Supports Solidity contracts, ERC-20/721/1155 tokens, and all 9 standard precompiles plus 7 BLS12-381 precompiles (EIP-2537). EIP-1559 fee market and ERC-4337 v0.8 account abstraction are built in.
SVM (Solana Virtual Machine)
BPF program execution via solana_rbpf. SPL Token Program instructions are mapped to native TnzoToken operations with 9-decimal truncation and associated token account (ATA) derivation.
DAML (Canton)
Canton/DAML 3.x contract execution for enterprise workflows. CIP-56 token holding with two-step transfer flow (create then accept/reject) and party-to-address mapping.
Transaction Routing
The MultiVmRuntime examines each transaction's VmType field and dispatches it to the correct executor:
use tenzro_vm::{MultiVmRuntime, VmType};
let runtime = MultiVmRuntime::new(storage.clone())?;
// EVM transaction (Solidity contract call)
let result = runtime.execute(tx, VmType::Evm).await?;
// SVM transaction (Solana program invocation)
let result = runtime.execute(tx, VmType::Svm).await?;
// DAML transaction (Canton command submission)
let result = runtime.execute(tx, VmType::Daml).await?;Block-STM Parallel Execution
Tenzro uses Block-STM (from Aptos) for optimistic parallel transaction execution within each block. Transactions are executed concurrently with MVCC (multi-version concurrency control) and automatic conflict detection. When conflicts are detected (above the 50% threshold), execution falls back to sequential mode.
use tenzro_vm::BlockStmExecutor;
let executor = BlockStmExecutor::new(runtime);
// Execute all transactions in a block in parallel
let results = executor.execute_block(transactions).await?;
// Metrics available after execution
println!("Reexecutions: {}", results.reexecution_count);
println!("Conflicts: {}", results.conflict_count);
// Max reexecutions per tx: 16 (then falls back to sequential)Cross-VM Token Pointer Model (Sei V2)
All three VMs share the same underlying native TNZO balance through pointer contracts, following the Sei V2 model. There is no bridge risk or liquidity fragmentation between VMs:
- EVM: wTNZO ERC-20 pointer contract at
0x7a4bcb13a6b2b384c284b5caa6e5ef3126527f93 - SVM: wTNZO SPL Token adapter with 9-decimal truncation
- Canton: TNZO CIP-56 holding contract with DAML Decimal formatting
All pointer contracts read/write the same native TnzoToken balance. A transfer on EVM is immediately reflected on SVM and Canton.
EIP-1559 Fee Market
The EVM executor implements EIP-1559 dynamic base fee adjustment:
| Parameter | Value |
|---|---|
| Target gas per block | 15,000,000 |
| Max gas limit | 30,000,000 |
| Min base fee | 0.1 Gwei |
| Max base fee | 1,000 Gwei |
| Adjustment rate | +/- 12.5% per block |
Account Abstraction (ERC-4337 v0.8)
The EVM runtime includes a full ERC-4337 v0.8 implementation with EntryPoint, UserOperations (split gas fields), PackedUserOperation, EIP-712 hashing, smart accounts with modules (SocialRecovery, SessionKey, SpendingLimit, Batching), and Paymaster support for gas sponsorship. Maximum bundle size is 100 operations.
Gas Normalization
Gas units are normalized across VMs to a common EVM-equivalent scale using the GasNormalizer:
| VM | Conversion Ratio |
|---|---|
| EVM | 1:1 (baseline) |
| SVM | 200:1 (1 SVM compute unit = 200 EVM gas) |
| DAML | 50:1 (1 DAML unit = 50 EVM gas) |