# Testnet Validator Volunteers for \[monad-version-agent\]

**URL:** <https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411>\
**Category:** Protocol\
**Created:** [March 25, 2026, 1:06pm UTC](https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411 "2026-03-25T13:06:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![GO2Pro](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.monad.xyz/go2pro/32/303_2.png) [@GO2Pro](https://forum.monad.xyz/u/GO2Pro)\
**Post date:** [March 25, 2026, 1:06pm UTC](https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411/1 "2026-03-25T13:06:06Z")

</div>

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 release
- `attestUpdate` — 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](https://github.com/GO2Pro-xyz/monad-version-agent).

* * *

> **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:
> 
> - `validatorId`
> - `secpPubKey`
> 
> For each write, the contract verifies the staking mapping, signature validity, nonce, deadline, and for `attestUpdate`, a strictly increasing timestamp.

* * *

### Quick Start

1. Install
2. Copy configuration files
3. Add private key in `agent.env`
4. Add contract address `0xfb14Eb3cEB82C176AFd8718B0C27c0d17a1BDDb6` in `agent.env`
5. Change the `chain_gateway_mode` in `bootstrap-state.json` to `rpc`
6. 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](https://github.com/monad-developers/staking-sdk-cli) `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
> 
> ```bash
> sudo apt update
> sudo apt install -y git curl build-essential pkg-config libssl-dev ca-certificates
> 
> ```
> 
> 2.2. Install Rust
> 
> ```bash
> curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
> 
> ```
> 
> ```bash
> source "$HOME/.cargo/env"
> 
> ```
> 
> 2.3. Clone the repository
> 
> ```bash
> git clone https://github.com/GO2Pro-xyz/monad-version-agent.git
> cd monad-version-agent
> 
> ```
> 
> 2.4. Build the binary
> 
> ```bash
> 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:
> 
> ```bash
> 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`.
> 
> ```bash
> nano /home/monad/.monad-version-agent/bootstrap-state.json
> 
> ```
> 
> #### 4. First run before the release
> 
> 4.1. Install the built binary:
> 
> ```bash
> sudo install -m 0755 target/release/validator-version-agent /usr/local/bin/validator-version-agent
> 
> ```
> 
> 4.2. Run agent
> 
> ```bash
> 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:
> 
> ```bash
> 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

1. Test the binary and contract flow on testnet
2. Collect feedback from participants
3. Prepare a MIP

* * *

---

<div class="post-metadata">

**Author:** ![natsaixyz](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.monad.xyz/natsaixyz/32/176_2.png) [@natsaixyz](https://forum.monad.xyz/u/natsaixyz)\
**Post date:** [March 27, 2026, 1:24pm UTC](https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411/2 "2026-03-27T13:24:50Z")

</div>

First part done with no issues (attestFirst): [https://testnet.monadvision.com/tx/0xa1f645e24542facdad7101e8f74c208a36ad1f835df91b4716ce639aeaf8b56a](https://testnet.monadvision.com/tx/0xa1f645e24542facdad7101e8f74c208a36ad1f835df91b4716ce639aeaf8b56a)

Ran as mock and then as rpc np

---

<div class="post-metadata">

**Author:** ![bozdemir52](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.monad.xyz/bozdemir52/32/259_2.png) [@bozdemir52](https://forum.monad.xyz/u/bozdemir52)\
**Post date:** [March 27, 2026, 4:03pm UTC](https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411/3 "2026-03-27T16:03:12Z")

</div>

Phase 1 (attestFirst) completed successfully on my end too. Here is my tx: [0xacf27cf21305076682c580a2e7e6482fe549a4e09cb46f97a9a9b93903785902](https://testnet.monadvision.com/tx/0xacf27cf21305076682c580a2e7e6482fe549a4e09cb46f97a9a9b93903785902) . Waiting for the next client release for the attestUpdate phase! 🚀

---

<div class="post-metadata">

**Author:** ![GO2Pro](https://yyz1.discourse-cdn.com/flex035/user_avatar/forum.monad.xyz/go2pro/32/303_2.png) [@GO2Pro](https://forum.monad.xyz/u/GO2Pro)\
**Post date:** [April 9, 2026, 11:02am UTC](https://forum.monad.xyz/t/testnet-validator-volunteers-for-monad-version-agent/411/4 "2026-04-09T11:02:17Z")

</div>

Thank you everyone who participated.

The test can be considered successful, because its main goal was to prove that the overall approach is valid.

Since the test was conducted on version `1.0.0`, the application has been significantly improved. I completely redesigned how the application works, integrated the color code framework, and moved the whole logic to a FIFO queue model.

I also made the integration into the current release update process much simpler. Now it is only necessary to update the release metadata in the file and then run the version-agent itself.

As a result, the current version `1.4.0` is fully ready.
