I’m looking for testnet validators to help validate the monad-version-agent flow ahead of the next Monad client release.
The goal is to get a clean and sequential test of the contract flow:
attestFirst— before the releaseattestUpdate— after the release
The agent is a Rust one-shot binary that reads the local monad-rpc version, validates validator identity through staking, and writes to the on-chain VersionRegistry only if required. The code is fully open source and available for inspection.
What this agent does
validator-version-agent compares the local monad-rpc --version output with the on-chain VersionRegistry state and performs exactly one reconciliation pass per launch. If no record exists yet for the validator tuple, it submits attestFirst. If a record exists and the version changed, it submits attestUpdate. If the registry is already up to date, it exits without writing.
The on-chain registry is keyed by the validator identity tuple:
validatorIdsecpPubKey
For each write, the contract verifies the staking mapping, signature validity, nonce, deadline, and for attestUpdate, a strictly increasing timestamp.
Quick Start
- Install
- Copy configuration files
- Add private key in
agent.env - Add contract address
0xfb14Eb3cEB82C176AFd8718B0C27c0d17a1BDDb6inagent.env - Change the
chain_gateway_modeinbootstrap-state.jsontorpc - Run once
FULL Validator testing flow
1. Prepare a fresh EVM address
Prepare a private key for a new EVM address and fund it with at least 1 $MON on testnet.
You can do this either:
- from any faucet
- by claiming your testnet validator rewards using
staking-sdk-cli
This address will be used as the gas-paying tx sender.
2. Install dependencies and build the agent
2.1. Install required packages
sudo apt update
sudo apt install -y git curl build-essential pkg-config libssl-dev ca-certificates
2.2. Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
2.3. Clone the repository
git clone https://github.com/GO2Pro-xyz/monad-version-agent.git
cd monad-version-agent
2.4. Build the binary
cargo build --release
The project runbook documents this host preparation and build flow.
3. Install runtime files and configure the agent
Create the runtime directory and copy the runtime files:
mkdir -p /home/monad/.monad-version-agent
chmod 700 /home/monad/.monad-version-agent
cp .env.example /home/monad/.monad-version-agent/agent.env
cp bootstrap/agent-bootstrap-state.json /home/monad/.monad-version-agent/bootstrap-state.json
cp contracts/version-registry.abi.json /home/monad/.monad-version-agent/version-registry.abi.json
chmod 600 /home/monad/.monad-version-agent/agent.env
3.1. Then update agent.env:
- add the private key for the funded testnet EVM address:
TX_SENDER_PRIVATE_KEY=...
- add the registry contract address:
REGISTRY_CONTRACT_ADDRESS=0xfb14Eb3cEB82C176AFd8718B0C27c0d17a1BDDb6
3.2. Change the mode for rpc in bootstrap-state.json.
nano /home/monad/.monad-version-agent/bootstrap-state.json
4. First run before the release
4.1. Install the built binary:
sudo install -m 0755 target/release/validator-version-agent /usr/local/bin/validator-version-agent
4.2. Run agent
AGENT_RUN_ONCE=true /usr/local/bin/validator-version-agent
Expected result: attestFirst.
5. Next Monad client release
After the next Monad client release, update your validator and run again:
AGENT_RUN_ONCE=true /usr/local/bin/validator-version-agent
Expected result: attestUpdate.
The idea behind monad-version-agent is to support long-term operational transparency across the network and build a verifiable operational layer around client upgrades and validator behavior.
Proposed plan
- Test the binary and contract flow on testnet
- Collect feedback from participants
- Prepare a MIP