Background

Vara.ETH Testnet
Development & Testing Environment

Build and test your applications on Ethereum Hoodi before deploying to mainnet

Illustration

What is Vara.ETH

Vara.eth is an application platform on top of Ethereum. This testnet environment on Ethereum Hoodi allows developers to build, test, and iterate before deploying to mainnet. 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]
#[sails_type]
#[derive(Clone, Debug, PartialEq)]
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 ("Nightly" version).
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: