Deploy

Verify & Inspect

Verify your program deployment and inspect state on Ethereum explorers.

Verify & Inspect

After deploying your program, verify it on Ethereum block explorers and inspect its state through multiple tools.

Explorer Verification

Etherscan

Find your Mirror contract on Etherscan — Mainnet or Hoodi Testnet. Search by the Mirror address returned during program creation.

Without ABI:
Base Mirror methods visible — sendMessage, sendReply, executableBalanceTopUp, claimValue

With ABI:
Under "Write as Proxy" and "Read as Proxy", your program's custom methods appear with decoded parameters

Key Events

On your Mirror contract's "Events" tab:

EventMeaning
MessageQueueingRequestedMessage was queued for your program
ExecutableBalanceTopUpRequestedwVARA was deposited for execution
StateChangedProgram state was updated (batch committed)
MessageProgram sent an outgoing message
ReplyProgram replied to a message
ValueClaimedValue was claimed from the program

Read Program State

Vara.eth IDEA

Open your program on idea-eth.vara.network — attach an IDL and use the READ tab to call read-only methods visually. The activity feed shows all incoming and outgoing messages in real time. → IDEA Guide

CLI

ethexe tx query "$PROGRAM_ID" \
  --ethereum-rpc "$RPC" \
  --ethereum-router "$ROUTER" \
  --sender "$SENDER"

TypeScript SDK (sails-js)

import { MyProgram } from './generated';

const program = new MyProgram(provider, PROGRAM_ADDRESS);

// Read-only queries — free, no gas
const counter = await program.counter.get();
const balance = await program.token.balanceOf(userAddress);

Etherscan (with ABI)

If deployed with ABI, navigate to the Mirror address on Etherscan and use the "Read as Proxy" tab to call read-only methods directly in the browser.

State Hash

Every program's Mirror contract stores a stateHash — a cryptographic commitment to the program's full state.

const mirror = new ethers.Contract(mirrorAddress, mirrorAbi, provider);
const stateHash = await mirror.stateHash();

State Guarantee

The stateHash guarantees that the state stored by executors matches what's committed on L1. Any dispute about program state can be resolved by comparing hashes.

Checking Program Health

A healthy, active program should show:

Valid codeCodeGotValidated(codeId, true) event exists on the Router
Initialized — At least one StateChanged event after the init message
Funded — At least one successful ExecutableBalanceTopUpRequested event and continued StateChanged activity
Processing — Recent StateChanged events when messages are sent

Troubleshooting

If something looks wrong, consult Errors & Troubleshooting.

On this page