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:
| Event | Meaning |
|---|---|
MessageQueueingRequested | Message was queued for your program |
ExecutableBalanceTopUpRequested | wVARA was deposited for execution |
StateChanged | Program state was updated (batch committed) |
Message | Program sent an outgoing message |
Reply | Program replied to a message |
ValueClaimed | Value 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 code — CodeGotValidated(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.