Verify on-chain
Check the live pooled trove, confirm every address, and read the pilot metrics yourself.
Every claim in these docs is meant to be checkable without trusting Maren. This page is the
commands. All of it runs against Mezo matsnet (chain 31611), where Maren is deployed.
Confirm the chain
cast chain-id --rpc-url https://rpc.test.mezo.org
# -> 31611
Read the live pooled trove
The pooled trove is live inside Mezo's own TroveManager. It currently holds 0.069 BTC against
2,088.86 MUSD of debt — an ICR of 262.8% at a BTC price of $79,466 — with borrowing enabled, read
on 2026-09-07. Both figures move: collateral as users deposit, debt as the 1% interest accrues.
Read them yourself:
# arg 1: Mezo TroveManager (matsnet). arg 2: MarenVault, which owns the trove.
cast call 0xE47c80e8c23f6B4A1aE41c34837a0599D5D16bb0 \
"getTroveColl(address)(uint256)" \
0x46252B00AB59384518d9dB6D1f210ffF1221645b \
--rpc-url https://rpc.test.mezo.org
Confirm the Maren addresses have code
An address with no code is not a deployed contract. Each of these returns a long bytecode string;
an undeployed mainnet address would return 0x.
cast code 0x46252B00AB59384518d9dB6D1f210ffF1221645b \
--rpc-url https://rpc.test.mezo.org | head -c 12
Maren's mainnet addresses are all zeroes on purpose, because Maren is not on mainnet. Running the same reads against a mainnet RPC and the zero address returns nothing, which is the honest result, not a broken command. See Contracts.
Confirm the trusted forwarder wiring
MarenRelayHub is the single trusted forwarder. MarenPay.trustedForwarder() should return the
RelayHub address, confirming the wiring on-chain:
cast call 0xe475Ff919D54E055809f516E3bed8a5c7a101836 \
"trustedForwarder()(address)" \
--rpc-url https://rpc.test.mezo.org
# -> 0x22cC1Adfb0C91D9359746dE3F7E8cB7F2B8eA98C
Confirm the MUSD protocol constants
The numbers Maren shows are read from the deployed MUSD contracts, not from docs. Two spot checks:
cast call 0xCdF7028ceAB81fA0C6971208e83fa7872994beE5 \
"minNetDebt()(uint256)" \
--rpc-url https://rpc.test.mezo.org
# -> 1800000000000000000000 (1,800 MUSD)
Read the pilot metrics
@maren/metrics reads adoption live from the four deployed Maren contracts and their logs, walked
from the deployment-block floor to the head in 10,000-block windows. Every figure is a live
contract read or a decoded log. An unread value is reported as unavailable, never as zero.
# matsnet (31611) is the default. Prints a dated summary and writes a JSON snapshot.
pnpm --filter @maren/metrics start
# also print the JSON to stdout
pnpm --filter @maren/metrics start -- --json
It computes funded positions, MUSD borrowed through Maren, payments, money-link claims by brand-new addresses, handles registered, Earn TVL, and the spend ratio: of the addresses that borrowed, the fraction that then spent.
Read live against matsnet on 2026-09-07, the tool returned: 3 funded positions, 2,110.72 MUSD borrowed, 0 payments, 1 payment request created and 0 settled, 0 money links, 2 handles registered, 25.00 MUSD of Earn TVL with 1 depositor, and a spend ratio of 0.0% (0 of 2 borrowers have spent). That last number is the whole point of the pilot, and today it says what it should: people have borrowed, and the spending has not started yet. The tool will show it move, or show that it does not.
There is no separate VERIFY.sh in the repository today; the commands above and the
@maren/metrics tool are the verification path. If a wrapper script is added later it will live
under tools/.
Where the addresses come from
Every address on this page is transcribed from packages/sdk/src/addresses.ts, where each was
verified three independent ways before being committed: the mezo-org/musd deployment artifacts,
the OpenZeppelin proxy manifest, and live eth_getCode plus functional calls. Do not hand-edit an
address anywhere.
