Verify MDLREN
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
2026-10-21 11:44 UTC · block 1,521,819
635,183.847458
2,120.194633
1.0793
0x8d14ea05308e92df1261be1a2c87ccad90172e48716672a9efb82030afeb8a21
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.
Recompute supply and the on-chain reserve
Call totalSupply() on the MDLR 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.
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.
Check the hedge on the venue
The statement names the venue account that holds the hedge and the request that reads it. Send that request to the venue's public endpoint: the position must match the hedge line. In the statement, the account value must equal the margin plus the profit or loss, and the off-chain line may include the profit or loss but never the margin.
Count the gold (from mainnet)
From mainnet, check the gold. While the reserve holds PAXG or XAUT, its holdings are on chain (step 2), and their issuers publish their own attestations. Once it holds MGLD, check the MGLD bar list against the vault's signed statement and the independent auditor's attestation, each published here with its hash on chain. On testnet there is no gold to count.
Commands for step 2
With Foundry's cast installed. Each returns a raw integer: MDLR has 6 decimals, the gold tokens 18, and the price 18.
RPC=https://rpc.testnet.onmidas.xyz # the latest epoch cast call 0x4436f86f32aFa40d2260D0c1BBBa6fA228C67fFF "epochCount()(uint256)" --rpc-url $RPC cast call 0x4436f86f32aFa40d2260D0c1BBBa6fA228C67fFF \ "epoch(uint256)((uint64,uint64,uint256,uint256,uint256,int256,uint256,uint256,bytes32,string,bytes32,string))" <n> \ --rpc-url $RPC # supply (6 decimals) cast call 0x2b001a9401aEB7641318d48aEEB5938693Ab4B5f "totalSupply()(uint256)" --rpc-url $RPC # on-chain holdings per asset (18 decimals) cast call 0xC6010490A292Dcb7Fa7C9c47D73d983Be3646a41 "holdings(address)(uint256)" 0xd47F0EcD6f53bA48524c6C2E454aE716bC6174D5 --rpc-url $RPC cast call 0xC6010490A292Dcb7Fa7C9c47D73d983Be3646a41 "holdings(address)(uint256)" 0x0Da5029c9567dAa3926d5754146F59606007026a --rpc-url $RPC # XAU/USD (18 decimals): median, updatedAt, fresh sources, usable cast call 0x89Ea8c262a5612Cd5c44A37613D2553b4BfE4FF2 "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 0xa7B1c6Fc562531b65aa2C08A570D3bBDd59fe13a "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 MDLR is not sold and has no value.