Vara.ETH Testnet
— Mission Complete
The Vara.eth testnet ran on Ethereum Hoodi and proved the full stack end to end. Everything is open source — follow the guide and reproduce the whole flow on your own node

What is Vara.ETH
Vara.eth is an application platform on top of Ethereum. Its testnet on Ethereum Hoodi proved the stack live ahead of the mainnet launch — and with your own node you can build, test, and iterate in the same environment today. Key capabilities:
Key Features of Vara.eth Testnet
Independent Execution
_01>
True Parallelization
_02>
Lightweight Performance
_03>
Decentralized Consensus
_04>
Zero-Cost UX
_05>
Developer-First Environment
_06>
Dual-Token Power
_07>
Testnet Essentials on Ethereum Hoodi
Vara.eth Version v0.1.0-testnet — deployments remain visible on-chain
Developer Quickstart on Vara.eth Testnet
_01>
_02>
_03>
cargo install sails-cli@2.0.0_04>
Write your program logic in Rust using Gear's framework.
Create a new Sails program:
# Your name
AUTHOR="Gear Technologies"
# Your GitHub username
GITHUB_USERNAME="gear-tech"
cargo sails new counter \
--author "$AUTHOR" \
--username "$GITHUB_USERNAME" \
--eth
cd counterExample 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),
}
// `CounterService` is generic over its state handle `S: StateMut`. The impl
// stays agnostic of how the data is stored — any type that implements
// `StateMut<Item = CounterData, Error = Infallible>` works:
// a `&RefCell<CounterData>` borrowed from program state (production default),
// an owned `RefCell<CounterData>`, an `Rc<RefCell<CounterData>>`, a
// `&mut RefCell<CounterData>` (via the `&mut S` blanket in `state.rs`), or a
// custom wrapper (pausing, metering, etc.).
pub struct CounterService<
S: StateMut<Item = CounterData, Error = Infallible> = RefCell<CounterData>,
> {
data: S,
}
impl<S: StateMut<Item = CounterData, Error = Infallible>> CounterService<S> {
// Service constructor demands the state handle to be passed from outside.
pub fn new(data: S) -> Self {
Self { data }
}
}
// Declare the service can emit events of type CounterEvents.
#[service(events = CounterEvents)]
impl<S: StateMut<Item = CounterData, Error = Infallible>> CounterService<S> {
/// Add a value to the counter
#[export]
pub fn add(&mut self, value: u32) -> u32 {
let counter = {
// Access mutable state
let mut data_mut = self.data.get_mut();
data_mut.counter += value;
data_mut.counter
};
// Emit event right before the method returns via
// the generated `emit_event` method.
self.emit_event(CounterEvents::Added(value)).unwrap();
counter
}
/// Subtract a value from the counter
#[export]
pub fn sub(&mut self, value: u32) -> u32 {
let counter = {
// Access mutable state
let mut data_mut = self.data.get_mut();
data_mut.counter -= value;
data_mut.counter
};
// Emit event right before the method returns via
// the generated `emit_event` method.
self.emit_event(CounterEvents::Subtracted(value)).unwrap();
counter
}
/// Get the current value
#[export]
pub fn value(&self) -> u32 {
self.data.get().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<&RefCell<CounterData>> {
CounterService::new(&self.counter_data)
}
}Example counter program tests (tests/gtest.rs):
use counter_client::{CounterClient, CounterClientCtors, counter::*};
use sails_rs::{client::*, gtest::ethexe::*};
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_05>
Download ethexe for your system ("Nightly" version).
Grant execute permissions via chmod +x ./ethexe.
_06>
# 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.wasmCODE_ID will be printed in the output.
_07>
CODE_ID="0x9ae72d1d1c95ebb5a3dd5f7bc2d2142a3be98a822ee45bbf6f6f70a02bff5c29"
./ethexe tx --sender "$SENDER" create "$CODE_ID"Result: PROGRAM_ID — your Mirror contract address on Ethereum.
_08>
- 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
Use Cases You Can Run Today on Testnet
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>

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>

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>

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>

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>

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>

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>

Benchmarks on Vara.eth Testnet: Proof of Performance
Mandelbrot Set Computation on Vara.eth Testnet
- 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>

Arkanoid Game Simulation (Multiple Concurrent Games)
- 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>

AI Image Recognition On-Chain
- 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>

More Benchmarks Coming Soon (HFT, AI, Oracles, MPC)
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>

Proven in production and fully open source. Spin up your own Vara.eth node, deploy your first program, and experience:



