Tenzro Testnet is live. Get testnet TNZO

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.

Precompiles: ecRecover, SHA-256, RIPEMD-160, Identity, ModExp, EC_ADD, EC_MUL, EC_PAIRING, BLAKE2F, G1ADD, G1MSM, G2ADD, G2MSM, PAIRING_CHECK, MAP_FP_TO_G1, MAP_FP2_TO_G2
Tenzro precompiles: TEE_VERIFY, ZK_VERIFY, TNZO_BRIDGE (0x1001), TOKEN_FACTORY (0x1002), CROSS_VM_BRIDGE (0x1003), STAKING (0x1004), GOVERNANCE (0x1005)

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:

ParameterValue
Target gas per block15,000,000
Max gas limit30,000,000
Min base fee0.1 Gwei
Max base fee1,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:

VMConversion Ratio
EVM1:1 (baseline)
SVM200:1 (1 SVM compute unit = 200 EVM gas)
DAML50:1 (1 DAML unit = 50 EVM gas)