METHODOLOGY · PRINTED FROM THE LIVE CONFIG
HOW THE INSTRUMENT MEASURES.
Every number below is read from the same configuration object the verdict engine uses, so this page can never drift from the code. ReltStock does not use a model, a curve fit, or a cached price feed.
1 · WHAT IS READ, AND FROM WHERE
Identity comes from the official stock-token registry (tokenized equities) or the ERC-20 contract itself. Pools are discovered by asking each registered factory getPair / getPool for the asset against every quote token (USDG, WETH) and fee tier (0.05%, 0.3%, 1%). A pool is only trusted when its own factory() answers with a registered factory address.
2 · ONE CALL, ONE BLOCK
Reads are batched through Multicall3.tryBlockAndAggregate in a single eth_call, sent in the same HTTP batch as eth_getBlockByNumber(latest) to the same node, so every value in a batch describes one chain state and the block number printed is the block it was read at. When a reading needs more than one batch and they land on different blocks, the report keeps the lowest block so the stamp is never optimistic.
3 · PRICE
Uniswap V2: price = reserveQuote × 10^decAsset ÷ (reserveAsset × 10^decQuote), exact bigint division. Uniswap V3: price = sqrtPriceX96² ÷ 2¹⁹² decimals-adjusted. USD is the USD-pegged quote token (USDG); WETH-quoted pools are converted through the deepest verified WETH/USD pool read in the same request, and that conversion is printed as evidence. Any other quote token yields no USD figure rather than a guess.
4 · LIQUIDITY
Quote-side liquidity is the quote token the pool physically holds: getReserves() for V2, balanceOf(pool) for V3. Total liquidity values both sides at the pool price. No external TVL feed is used.
5 · QUOTES AND PRICE IMPACT
V2 quotes use UniswapV2Library.getAmountOut with the pair fee (0.3%). V3 quotes are simulated the way UniswapV3Pool.swap executes: the pool’s real tick bitmap and liquidityNet values are prefetched in two block-stamped multicalls, then SwapMath.computeSwapStep walks tick by tick. Price impact is |average − spot| ÷ spot with the LP fee excluded, so it measures depth rather than the fee tier; the fee is printed separately. A walk that runs out of fetched ticks reports PARTIAL and prints its result as a lower bound (≥), never an extrapolation.
6 · DEPTH LADDER
For each level (0.5%, 1%, 2%, 5%, 10%) the ladder reports the largest trade whose fee-excluded impact stays at or under the level. V2 has a closed form: netInput = reserveIn × impact, grossed up by the fee. V3 uses a binary search over input size against the prefetched tick data, all at one block. Buy depth is quote in; sell depth is asset in, valued at the pool price.
7 · THE VERDICT ENGINE
Hard rules first. Any one of them stamps NO RELIABLE QUOTE and withholds the price:
- R1 · no readable source
- R2 · pool factory is not registered
- R3 · a reserve side is empty / no price
- R4 · quote-side liquidity cannot be valued in USD
- R5 · quote-side liquidity below $1,000
Otherwise a 0–100 score is computed. Each component is log-scaled from a floor (scores 0) to a ceiling (scores 100), then weighted. Components that cannot be measured are dropped and the remaining weights renormalized; the gap is printed as a flag.
| COMPONENT | FLOOR → CEILING | WEIGHT |
|---|---|---|
| quote-side liquidity | $1,000 → $10,000,000 | 35 |
| 1% depth (buy) | $100 → $1,000,000 | 25 |
| 5% depth (buy) | $500 → $5,000,000 | 15 |
| impact @ $10,000 | 0% → 100 · 10% → 0 (linear) | 20 |
| reserve balance | min ÷ max of both sides at pool price | 5 |
Cap: if the $10,000 reference trade moves the average price more than 5%, the verdict can never be better than THIN. The gauge needle is the score, so the needle and the stamp always agree.
8 · FRESHNESS AND ACTIVITY
Freshness is the age of the block the data was read at, not the HTTP response: FRESH under 30s, AGING under 120s, otherwise STALE (flagged, not scored — an old reading is a fact about the RPC, not the market). Activity counts Swap events in the last 50,000 blocks and is printed as a window figure; ReltStock has no verified 24-hour volume source and does not label it as one.
9 · ON-CHAIN QUOTER, RECEIPTS AND WATCHLISTS
When a QuoterV2 is deployed and its factory() matches the registered V3 factory, V3 quotes are answered by that contract on chain and the 1% rung of the depth ladder is re-quoted through it, with the deviation printed. When ReltRegistry is deployed, a receipt can be stamped: the wallet signs the reading’s numbers plus the keccak256 of its canonical JSON into the registry under the signer’s address, and watchlists can be written with setWatchlist. The registry stores exactly what was signed; it does not re-verify a reading. Both contracts are deployed from /deploy and listed on /contracts.
10 · WHAT IS NOT CLAIMED
ReltStock reads on-chain market liquidity. It does not verify legal ownership or redemption rights of tokenized assets, does not predict prices, and does not guarantee execution. A receipt is a snapshot at a block.