Krysos.
Participar
Testnet

Testnet. MockXAU is not gold and test USDMD has no value.

What that means

Verify USDMDEN

Check the reserves without trusting us.

Five steps, each against the chain or a file whose hash the chain holds. Step 5 applies from mainnet, when there is real gold to count.

The latest epoch, to check against

Epoch
Published

2026-09-30 09:50 UTC · block 611,211

On-chain

79,471.707226

Off-chain

0.000000

CR

1.3282

docsRoot

0xecf298c3adbbeeb9bef22120c0d1a10e6040b15c17da0faaff8da4629e844c3b

Statement
01

Read the latest epoch

Open the ProofOfReserves contract on the explorer, go to Read contract, call epochCount() and then epoch(n) with that number. Note supply, onchainValue, docsRoot and the off-chain lines.

ProofOfReserves · View on the explorer

02

Recompute supply and the on-chain reserve

Call totalSupply() on the USDMD token and holdings(asset) on the ReserveManager for each registry asset. Value each holding at the price from OracleAdapter.read(keccak256("XAU/USD")), less its haircut from CollateralRegistry.asset(asset). The total should match onchainValue for the block the epoch was published in; the contract refuses an epoch where they differ, and this step checks that it did.

ReserveManager · View on the explorer

03

Hash the statement

Download the epoch's statement from the documents page and compute its SHA-256. It must equal docsRoot. On testnet each epoch has one document, so docsRoot is that document's hash; with several documents it becomes the root of a Merkle tree of their hashes.

Documents

04

Check the hedge on the venue

The statement names the venue account that holds the hedge. Look that account up on the venue's public account endpoint; its position must match the hedge line. On testnet the hedge keeper has not yet opened a position, and the statement says so.

Hedge

05

Count the gold (from mainnet)

From mainnet, check the custodian's bar list against its signed statement and against the independent auditor's attestation, each of which is published here with its hash on chain. On testnet there is no custodian and no bar list, because there is no gold.

Commands for step 2

With Foundry's cast installed. Each returns a raw integer: USDMD has 6 decimals, the gold tokens 18, and the price 18.

RPC=https://rpc.testnet.onmidas.xyz
# the latest epoch
cast call 0x056Ede5c54dDf3e753fb033d269Dab059f2D6B89 "epochCount()(uint256)" --rpc-url $RPC
cast call 0x056Ede5c54dDf3e753fb033d269Dab059f2D6B89 \
  "epoch(uint256)((uint64,uint64,uint256,uint256,uint256,int256,uint256,uint256,bytes32,string,bytes32,string))" <n> \
  --rpc-url $RPC
# supply (6 decimals)
cast call 0xc63b4Bd2120faC3ea8f1Ff8658B8285E29918D14 "totalSupply()(uint256)" --rpc-url $RPC
# on-chain holdings per asset (18 decimals)
cast call 0xa0A2896c1ae3139752e67DeC9172964b3D37133a "holdings(address)(uint256)" 0xd47F0EcD6f53bA48524c6C2E454aE716bC6174D5 --rpc-url $RPC
cast call 0xa0A2896c1ae3139752e67DeC9172964b3D37133a "holdings(address)(uint256)" 0x0Da5029c9567dAa3926d5754146F59606007026a --rpc-url $RPC
# XAU/USD (18 decimals): median, updatedAt, fresh sources, usable
cast call 0x8d5c3Ee7Ee4363a66aC40819C38DbD182bEC4F26 "read(bytes32)(uint256,uint256,uint256,bool)" $(cast keccak "XAU/USD") --rpc-url $RPC
# an asset's haircut: (decimals, status, testnetOnly, haircutBps, maxShareBps, oracleId, hedge)
cast call 0x7ab4C04DcAB052376998959670A3Bf3F021De803 "asset(address)((uint8,uint8,bool,uint16,uint16,bytes32,bytes32))" 0xd47F0EcD6f53bA48524c6C2E454aE716bC6174D5 --rpc-url $RPC

Nothing on these pages is an offer, a solicitation or a recommendation to buy, sell or hold any asset, in any jurisdiction. Test USDMD is not sold and has no value.