Background

Vara.ETH Testnet
on Ethereum Hoodi - Now Live

Build powerful applications with real-time compute, parallel execution, and near-zero fees

Illustration

Currently in MVP phase. Testnet showcases Vara.eth's core functionality. Stable testnet with wrapped VARA token integration coming soon. State reset expected during transition.

  • Phase 1: MVP Testnet (Current)

  • Phase 2: Stable Testnet (Coming Soon)

What is Vara.ETH

Vara.eth is an application platform on top of Ethereum that enables modern decentralized applications to run with 1000x more computing power, near-instant finality, and Web2-grade UX - all while maintaining Ethereum's security and liquidity without bridging. Key capabilities:

Independent Execution

Each program runs as an independent actor with its own isolated state, ensuring maximum stability and zero interference

_01 >

Document icon

True Parallelization

Experience real logical parallelism without coordination overhead — seamless scalability for modern dApps

_02 >

Document icon

Lightweight Performance

WASM-based virtual machine optimized to run efficiently even on consumer-grade hardware

_03 >

Document icon

Decentralized Consensus

Validator-based system ensures fair and transparent execution — no centralized sequencer

_04 >

Document icon

Zero-Cost UX

Reverse-gas model: applications cover execution costs, users pay nothing for transactions

_05 >

Document icon

Developer-First Environment

Build effortlessly using Rust, Gear IDEA, and familiar Ethereum development tools

_06 >

Document icon

Dual-Token Power

Native ETH powers applications, while VARA secures the network through decentralized validation

_07 >

Document icon
Background

Testnet Essentials

Vara.eth Version v0.1.0-testnet

Network

Illustration

Chain ID

Illustration

Developer Quickstart

Icon

_01 >

Get Test Tokens
Add the Ethereum Hoodi Testnet to MetaMask. Use the faucet to obtain test ETH for gas fees and WTVARA to top up the program's executable balance.
Icon

_02 >

Set up environment

Make sure you have:

  • Rust toolchain installed
  • wasm32v1-none target added
Icon

_03 >

Install Sails CLI
cargo install [email protected]
Icon

_04 >

Create and write your Vara.eth program

Write your program logic in Rust using Gear's framework.

Create a new Sails program:

# Your name
AUTHOR="Gear Technologies"
# Your GitHub username
USERNAME="gear-tech"

cargo sails new counter \
  --author "$AUTHOR" \
  --username "$USERNAME" \
  --eth
cd counter

Example counter program (app/src/lib.rs):

#![no_std]

use sails_rs::{cell::RefCell, prelude::*};

// Model of the service's data. Only service knows what is the data
// and how to manipulate it.
pub struct CounterData {
    counter: u32,
}

impl CounterData {
    // The only method exposed publicly for creating a new instance of the data.
    pub const fn new(counter: u32) -> Self {
        Self { counter }
    }
}

// Service event type definition.
#[event]
#[derive(Clone, Debug, PartialEq, Encode, TypeInfo, ReflectHash)]
#[codec(crate = sails_rs::scale_codec)]
#[scale_info(crate = sails_rs::scale_info)]
#[reflect_hash(crate = sails_rs)]
pub enum CounterEvents {
    /// Emitted when a new value is added to the counter
    Added(u32),
    /// Emitted when a value is subtracted from the counter
    Subtracted(u32),
}

pub struct CounterService<'a> {
    data: &'a RefCell<CounterData>,
}

impl<'a> CounterService<'a> {
    // Service constrctor demands a reference to the data to be passed
    // from the outside.
    pub fn new(data: &'a RefCell<CounterData>) -> Self {
        Self { data }
    }
}

// Declare the service can emit events of type CounterEvents.
#[service(events = CounterEvents)]
impl CounterService<'_> {
    /// Add a value to the counter
    #[export]
    pub fn add(&mut self, value: u32) -> u32 {
        let mut data_mut = self.data.borrow_mut();
        data_mut.counter += value;
        // Emit event right before the method returns via
        // the generated `emit_event` method.
        self.emit_event(CounterEvents::Added(value)).unwrap();
        data_mut.counter
    }

    /// Substract a value from the counter
    #[export]
    pub fn sub(&mut self, value: u32) -> u32 {
        let mut data_mut = self.data.borrow_mut();
        data_mut.counter -= value;
        // Emit event right before the method returns via
        // the generated `emit_event` method.
        self.emit_event(CounterEvents::Subtracted(value)).unwrap();
        data_mut.counter
    }

    /// Get the current value
    #[export]
    pub fn value(&self) -> u32 {
        self.data.borrow().counter
    }
}

pub struct Program {
    counter_data: RefCell<CounterData>,
}

#[program]
impl Program {
    // Program's constructor
    pub fn init(counter: u32) -> Self {
        Self {
            counter_data: RefCell::new(CounterData::new(counter)),
        }
    }

    // Exposed service
    pub fn counter(&self) -> CounterService<'_> {
        CounterService::new(&self.counter_data)
    }
}

Example counter program tests (tests/gtest.rs):

use counter_client::{CounterClient, CounterClientCtors, counter::*};
use sails_rs::{client::*, gtest::*};

const ACTOR_ID: u64 = 42;

#[tokio::test]
async fn do_something_works() {
    let system = System::new();
    system.init_logger_with_default_filter(
        "gwasm=debug,gtest=info,sails_rs=debug"
    );
    system.mint_to(ACTOR_ID, 100_000_000_000_000);
    // Submit program code into the system
    let program_code_id = system.submit_code(counter::WASM_BINARY);

    // Create Sails Env
    let env = GtestEnv::new(system, ACTOR_ID.into());

    let program = env
        .deploy::<counter_client::CounterClientProgram>(
            program_code_id, b"salt".to_vec()
        )
        .init(5) // Call program's constructor
        .await
        .unwrap();

    let mut counter_service_client = program.counter();

    assert_eq!(counter_service_client.value().await.unwrap(), 5);

    assert_eq!(counter_service_client.add(37).await.unwrap(), 42);
    assert_eq!(counter_service_client.value().await.unwrap(), 42);
}

Compile to WASM, get IDL and run tests:

cargo build --release
cargo test --release

# Output:
# ./target/wasm32-gear/release/*.opt.wasm
#
# ./target
# `-- wasm32-gear
#     `-- release
#         |-- counter.idl
#         |-- counter.opt.wasm
#         `-- counter.wasm
Icon

_05 >

Download CLI

Download ethexe for your system.
Grant execute permissions via chmod +x ./ethexe.

Icon

_06 >

Deploy via CLI
Insert your private key (dev wallet only):
# Your private key (development wallet only)
PRIVATE_KEY="0x7f539fd5987c4d422927c1d34a86c28be3dc708f11ed448b2d90f50c7c98e743"
# Your Ethereum address corresponding to private key
SENDER="0xF124d5D75Cfd6Ce6916A7ab9c3011B793406b72D"

./ethexe key keyring import --name sender --private-key "$PRIVATE_KEY"

Create file .ethexe.toml:

[ethereum]
rpc = "wss://hoodi-reth-rpc.gear-tech.io/ws"
beacon-rpc = "https://hoodi-lighthouse-rpc.gear-tech.io"
router = "0xE549b0AfEdA978271FF7E712232B9F7f39A0b060"

Upload WASM:

./ethexe tx --sender "$SENDER" upload --watch \
  ./target/wasm32-gear/release/counter.opt.wasm

CODE_ID will be printed in the output.

Icon

_07 >

Create program
Create a program instance (deploy Mirror contract):
CODE_ID="0x9ae72d1d1c95ebb5a3dd5f7bc2d2142a3be98a822ee45bbf6f6f70a02bff5c29"

./ethexe tx --sender "$SENDER" create "$CODE_ID"

Result: PROGRAM_ID — your Mirror contract address on Ethereum.

Icon

_08 >

Next steps
Continue in the full guide to learn how to:
  • Fund executable balance (reverse-gas model)
  • Interact with the program (Etherscan / SDK)
  • Read program state
  • Generate Solidity ABI and link Mirror as a proxy contract
or

Interactive Tutorial · 9 Lessons · Zero Setup

Prefer to learn hands-on?

Walk through the full on-chain flow — program creation, funding, message passing, get a reply. Runs entirely in the browser.

Use Cases You Can Run Today

CEX-like Decentralized Exchanges

What you can build: A central limit order book (CLOB) with CEX-grade performance and Ethereum-native security.

Why Vara.eth:

  • Sub-second responsiveness for order inserts/cancels/fills
  • Predictable, low costs - matching runs off-chain, only settlements touch Ethereum
  • True parallelization across trading pairs through isolated actor states
  • No bridges, no fractured liquidity
  • Decentralized validator execution, no sequencer bias

_01 >

Case 1

High-Frequency Trading (HFT)

What you can build: Real-time trading engines with millisecond execution and complex strategies.

Why Vara.eth:

  • Near-instant finality through pre-confirmations
  • Parallel execution of multiple trading programs
  • Bridgeless access to Ethereum liquidity and price feeds
  • High computational throughput for complex strategies

_02 >

Case 1

AI Agents & On-Chain Automation

What you can build: ML inference engines, fraud detection systems, autonomous portfolio managers.

Why Vara.eth:

  • Run ML models with significantly greater computational resources
  • Results are cryptographically signed and delivered to Ethereum
  • Reverse-gas model: apps pay execution, users interact gas-free
  • Support for complex AI workloads impossible on Ethereum L1

_03 >

Case 1

Parallel Simulations & Scientific Computing

What you can build: Monte Carlo simulations, risk models, backtesting engines, auction simulations.

Why Vara.eth:

  • Execute multiple simulation instances simultaneously within a block
  • Isolated actor states enable natural parallelization
  • General-purpose WASM VM handles massive numeric workloads
  • Efficient batching of results back to Ethereum

_04 >

Case 1

On-Chain Gaming

What you can build: Multiplayer games, strategy games, physics simulations, interactive worlds.

Why Vara.eth:

  • Real-time game state updates with sub-second confirmations
  • Complex game logic through actor model and parallel execution
  • Near-instant user feedback
  • Up to 2GB memory per program for rich game worlds

_05 >

Case 1

Supply Chain & IoT Data Processing

What you can build: Real-time monitoring systems, anomaly detection, logistics optimization.

Why Vara.eth:

  • Process large IoT datasets off-chain
  • Send only critical insights on-chain for cost efficiency
  • Maintain blockchain transparency and security
  • Temperature monitoring, GPS tracking, quality control

_06 >

Case 1

More Possibilities

  • Compute-heavy oracles: Micro-batching, smoothing, sophisticated price feeds
  • Web2 integration: Verified domains, certificate-based authentication
  • Multi-party computation: Secure collaborative computation
  • ZK tooling: Witness generation, computational markets for ZK proofs
  • Perps & AMMs: Risk engines, liquidation checks, funding rate calculations

_07 >

Case 1

Benchmarks: Proof of Performance

Mandelbrot Set Computation

  • 1,000,000 points × 1,000 iterations
  • Parallelized across 16 threads
  • Executed for ~$3 in internal gas (testnet)
  • Shows feasibility for scientific, quantitative, ZK workloads using general-purpose WASM VM

_01 >

Illustration

Arkanoid Game Simulation

  • 16 concurrent game simulations executed in a single block
  • ~$0.17 total cost
  • Demonstrates parallel throughput for auctions, backtests, and multi-agent workloads through isolated actor states

_02 >

Illustration

AI Image Recognition

  • Trained AI model running inside Vara.eth
  • Recognizes handwritten digits and cat images
  • Demonstrates on-chain AI inference capabilities
  • Real-world ML model execution with consumer-grade hardware

_03 >

Illustration

More Benchmarks Coming Soon

We're continuously adding new benchmarks demonstrating:

  • HFT order matching performance
  • Complex AI inference workloads
  • Oracle data processing throughput
  • Multi-party computation efficiency

Want to contribute a benchmark?

_04 >

Illustration
Submit via GitHub
Start Building on Vara.eth Testnet

The future of Ethereum applications is here. Deploy your first program and experience: