GHO: verify
Every figure here was read from Ethereum at block 26100308. The sheet below is produced by the same generator as the analyst's hand-verification sheet: repeat any call it lists on your own node at that block and you should get the same number.
# Stress spot-check — GHO @ 26100308
- bundle `2187b1c9` · tree `e2c792ad` · stress `4b5b8b21`
- cells 47 · checks 26/26 · headline **M1-s50-d0-lp0** (memo §6.2.6)
## 1. The headline cell, by hand
| quantity | value | where it comes from |
|---|---|---|
| m1.pre.ratio | 1.270960 | Σ collateral × (1+shock)(1−d) × price ÷ Σ net debt; collateral and debt per position in `out/raw/<block>.json`, price per (instance, reserve) from that instance's own AaveOracle (DET-81) |
| m1.post.ratio | 1.797896 | the same over the book left after absorption |
| m1.gap | 0.526936 | post − pre, the mechanism's measured contribution (DET-39) |
| m2.bad_debt | 7,269,853.53 GHO | Σ (debt − value) over unabsorbed positions with hf < 1, attributed to GHO pro-rata by `gho_debt_base / total_debt_base`; base units `7269853525622670000000000` |
| m2.pct_supply | 0.0104003627 | ÷ `supply.supply_ruled` = 699,000,000.00 |
| m3.forced_sell_volume | 7,269,853.53 | = bad_debt, DET-25's Member-1 identity |
| m3.exit_depth | 22,952,874.14 | LP-0, so equal to DET-31 depth(0.02) = 22,952,874.14 |
| m3.ratio | 0.3167295512578438322988377506 | forced_sell ÷ exit_depth |
## 2. DET-46 routing, and DET-47's binding side
`check_pass = automated_freezer_present ∧ freeze_lower_bound >= 0.88`. Both inputs are the bundle's own GSM rows; the automation probe is a successful `checkUpkeep(bytes)` call, not a returned flag.
| GSM | freezer | freeze band | automated | routing |
|---|---|---|---|---|
| `0x3a3868898305f04bec7fea77becff04c13444112` | `0x6e51936e0ed4256f9da4794b536b619c88ff0047` | [0.99, 1.01] | yes | **freezer_effective** |
| `0x882285e62656b9623af136ce3078c6bdcc33f5e3` | `0x733ab16005c39d07fd3d9d1a350aa6768d10125b` | [0.99, 1.01] | yes | **freezer_effective** |
- `gho_sourceable` 286345491603118721679634522
- `collateral_sellable` 40151656842929400000000000
- `gsm_mint_headroom` 285469153779813690239268493
- **`binding_side` collateral_sellable**
## 2b. `m1.pre` as a hand sum — per reserve
GHO's book is 2,160 positions across three instances; the sum is taken per reserve from §2c's prices and decimals, with the cell's factor -0.50 on every volatile and tail reserve and 1 on the stables (DET-39, R-B5.1). The per-reserve collateral totals are in `out/raw/<block>.json`, which is gitignored and regenerable at `run_block` (P-3.05).
`m1.pre.ratio` = **1.270959883828790662140944908**; `m1.post.ratio` = **1.797895773679737434888113951**.
## 2c. The 38 (instance, reserve) pairs — expected values
`getReserveConfigurationData(asset)` on the instance's data provider returns ten words; words 2, 3 and 4 are **LTV**, **liquidation threshold** and **liquidation bonus**, all in bps. The price is that instance's own `AaveOracle.getAssetPrice(asset)` at 8 dp (DET-81). Word 1 is `decimals`.
| instance | reserve | dec | LTV | liq. threshold | bonus | price (8dp) |
|---|---|---|---|---|---|---|
| `0x4e033931` | `0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0` | 18 | 8200 | **8300** | 10600 | 335179506328 |
| `0x4e033931` | `0x9d39a5de30e57443bff2a8307a4256c8797a3497` | 18 | 0 | **10** | 10750 | 125047171 |
| `0x4e033931` | `0xbf5495efe5db9ce00f80364c8b423567e58d2110` | 18 | 0 | **10** | 10750 | 292545471219 |
| `0x4e033931` | `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2` | 18 | 8400 | **8500** | 10500 | 269150106284 |
| `0x87870bca` | `0x18084fba666a33d37592fa2633fd49a74dd93a88` | 18 | 7300 | **7800** | 10750 | 8453868902061 |
| `0x87870bca` | `0x1abaea1f7c830bd89acc67ec4af516284b1bc33c` | 6 | 0 | **7800** | 10500 | 112208278 |
| `0x87870bca` | `0x2260fac5e5542a773aa44fbcfedf7c193bc2c599` | 8 | 7300 | **7800** | 10500 | 8449446429622 |
| `0x87870bca` | `0x356b8d89c1e1239cbbb9de4815c39a1474d5ba7d` | 6 | 5 | **10** | 10600 | 114542645 |
| `0x87870bca` | `0x4c9edd5852cd905f086c759e8383e09bff1e68b3` | 18 | 0 | **7500** | 10850 | 99964000 |
| `0x87870bca` | `0x514910771af9ca656af840dff83e8264ecf986ca` | 18 | 0 | **7100** | 10700 | 1422314582 |
| `0x87870bca` | `0x5f98805a4e8be255a32880fdec7f6728c6568ba0` | 18 | 0 | **7700** | 10450 | 100616233 |
| `0x87870bca` | `0x657e8c867d8b37dcc18fa4caead9c45eb088c642` | 8 | 6700 | **7200** | 11000 | 8488225002585 |
| `0x87870bca` | `0x68749665ff8d2d112fa859aa293f07a622782f38` | 6 | 0 | **7500** | 10600 | 416956500000 |
| `0x87870bca` | `0x6b175474e89094c44da98b954eedeac495271d0f` | 18 | 0 | **7700** | 10500 | 99989264 |
| `0x87870bca` | `0x6c3ea9036406852006290770bedfcaba0e23a0e8` | 6 | 0 | **7800** | 10750 | 100029058 |
| `0x87870bca` | `0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0` | 18 | 7850 | **8100** | 10600 | 335179506328 |
| `0x87870bca` | `0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9` | 18 | 6900 | **7600** | 10750 | 17003181727 |
| `0x87870bca` | `0x8236a87084f8b84306f72007f36f2618a5634494` | 8 | 7000 | **7500** | 10850 | 8493744143684 |
| `0x87870bca` | `0x83f20f44975d03b1b09e64809b757c47f942beea` | 18 | 0 | **7800** | 10450 | 118108518 |
| `0x87870bca` | `0x90d2af7d622ca3141efa4d8f1f24d86e5974cc8f` | 18 | 0 | **10** | 10750 | 99964000 |
| `0x87870bca` | `0x9d39a5de30e57443bff2a8307a4256c8797a3497` | 18 | 0 | **7500** | 10850 | 125047171 |
| `0x87870bca` | `0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48` | 6 | 7500 | **7800** | 10450 | 99999000 |
| `0x87870bca` | `0xa1290d69c65a6fe4df752f95823fae25cb99e5a7` | 18 | 0 | **7500** | 10750 | 291009816429 |
| `0x87870bca` | `0xa35b1b31ce002fbf2058d22f30f95d405200a15b` | 18 | 0 | **7700** | 10750 | 295623765504 |
| `0x87870bca` | `0xae78736cd615f374d3085123a210448e74fc6393` | 18 | 7500 | **7900** | 10750 | 315683348099 |
| `0x87870bca` | `0xb0f70c0bd6fd87dbeb7c10dc692a2a6106817072` | 8 | 7300 | **7800** | 10750 | 8453868902061 |
| `0x87870bca` | `0xbe9895146f7af43049ca1c1ae358b0541ea49704` | 18 | 7500 | **7900** | 10750 | 307023199960 |
| `0x87870bca` | `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2` | 18 | 8050 | **8300** | 10500 | 269150106284 |
| `0x87870bca` | `0xc96de26018a54d51c097160568752c4e3bd6c364` | 8 | 0 | **7800** | 10750 | 8453868902061 |
| `0x87870bca` | `0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf` | 8 | 7300 | **7800** | 10750 | 8453868902061 |
| `0x87870bca` | `0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee` | 18 | 7750 | **8000** | 10700 | 297372483938 |
| `0x87870bca` | `0xd11c452fc99cf405034ee446803b6f6c1f6d5ed8` | 18 | 0 | **10** | 10750 | 337698239970 |
| `0x87870bca` | `0xdac17f958d2ee523a2206206994597c13d831ec7` | 6 | 7500 | **7800** | 10450 | 99964000 |
| `0x87870bca` | `0xdc035d45d973e3ec169d2276ddab16f1e407384f` | 18 | 0 | **7800** | 10750 | 100000310 |
| `0x87870bca` | `0xf1c9acdc66974dfb6decb12aa385b9cd01190e38` | 18 | 0 | **7500** | 10750 | 290725055745 |
| `0xae05cd22` | `0x14d60e7fdc0d71d8611742720e4c50e7a974020c` | 6 | 8500 | **8800** | 10500 | 1177472100 |
| `0xae05cd22` | `0x43415eb6ff9db7e26a15b704e7a3edce97d31c4e` | 6 | 8800 | **9000** | 10300 | 1122990800 |
| `0xae05cd22` | `0x5a0f93d040de44e78f251b03c43be9cf317dcf64` | 6 | 8100 | **8600** | 10500 | 105027200 |
The 8 live eMode categories. Where a position claims one, ITS liquidation threshold replaces the per-reserve value above:
| instance | category | liq. threshold (bps) |
|---|---|---|
| `0x4e033931` | 2 | **7800** |
| `0x4e033931` | 4 | **9200** |
| `0x87870bca` | 33 | **9200** |
| `0x87870bca` | 41 | **7800** |
| `0x87870bca` | 43 | **7500** |
| `0xae05cd22` | 10 | **9000** |
| `0xae05cd22` | 2 | **9200** |
| `0xae05cd22` | 4 | **9000** |
## 3. The Member-2 headline cell — M2-t0.93-lp0
| quantity | value | where it comes from |
|---|---|---|
| m3.forced_sell_volume | 24,353,332.57 | boxed holdings + the attributed slice; base units `24353332566962450000000000` |
| m3.exit_depth | 481,779.59 | the cell's own venue set, DET-35 |
| m3.ratio | 50.54870108734380594126622515 | forced_sell ÷ exit_depth |
**Counterfactual `H2_freezer`** — primary 481,779.59, counterfactual 22,952,874.14. The difference is what the routing decision is worth on this cell.
## 4. The pinned reads to reproduce
**Every call below is a pinned read at `run_block` 26100308** — the same block the bundle was assembled at (R-13). Pin the block inside the JSON-RPC body; a `tag` query parameter is silently ignored by some proxies (P-3.39).
**Decoding note.** Pools compiled with old Vyper (0.2.8 and earlier) return a padded buffer rather than a single word — LUSD's `0xed279fdd` answers `get_dy` with ~4 KB. **Decode the first 32-byte word**; the rest is padding. Verified by the analyst on 2026-09-13, whose first word matched this sheet to the wei.
The depth m3 divides by is the sum over K-subset(0.90) = 1 pools. On each, call `get_dy` with the recorded `dx` — **`i` and `j` are the recorded argument values, not placeholders** — and check the implied marginal price sits at 1 − s = 0.98 ± ε:
- `0x635ef0056a597d13863b73825cca297236578595` → `get_dy(i=0, j=1, dx=481779591623570838007654)` = 480363923974939504088102; implied 0.980025340444674159 (within ε: True)
And the three reads the mechanism section rests on, as `eth_call` targets:
- GSM `0x3a3868898305f04bec7fea77becff04c13444112` `getAvailableLiquidity()` — expect `29227`
```powershell
(Invoke-RestMethod https://gateway.tenderly.co/public/mainnet -Method Post -ContentType application/json -Body '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x3a3868898305f04bec7fea77becff04c13444112","data":"0x9b745aec"},"0x18e4254"]}').result
```
- GSM `0x882285e62656b9623af136ce3078c6bdcc33f5e3` `getAvailableLiquidity()` — expect `19086261834272`
```powershell
(Invoke-RestMethod https://gateway.tenderly.co/public/mainnet -Method Post -ContentType application/json -Body '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x882285e62656b9623af136ce3078c6bdcc33f5e3","data":"0x9b745aec"},"0x18e4254"]}').result
```
- freezer `0x6e51936e0ed4256f9da4794b536b619c88ff0047` `checkUpkeep(bytes)` — DET-46's automation probe: the call **answering at all** is the signal (an address that is not an automation-compatible keeper reverts)
```powershell
(Invoke-RestMethod https://gateway.tenderly.co/public/mainnet -Method Post -ContentType application/json -Body '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x6e51936e0ed4256f9da4794b536b619c88ff0047","data":"0x6e04ff0d00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"},"0x18e4254"]}').result
```
- data provider `0xb85b2bfebec4f5f401dbf92ac147a3076391fcd5` `getReserveConfigurationData(0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0)` — one of the 37 (instance, reserve) pairs; word 3 is the liquidation threshold in bps, which is what the health factor weights by
```powershell
(Invoke-RestMethod https://gateway.tenderly.co/public/mainnet -Method Post -ContentType application/json -Body '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xb85b2bfebec4f5f401dbf92ac147a3076391fcd5","data":"0x3e1501410000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0"},"0x18e4254"]}').result
```
## 5. Assumptions carried on this artifact
- **freezer** — freezer_effective: the automated freezer holds SWAP_FREEZER_ROLE and its lower band is at or above 0.88, so in a depeg cell the GSM freezes and its exit contribution leaves exit depth (memo 6.3 H2, same event). The boxed supply does NOT leave the forced-sell numerator - a holder whose backing is the shocked stable still exits; what it loses is the venue.
- **health_factor** — eligibility is the WHOLE position's Aave health factor over all collateral and all debt - a borrower is liquidated entire or not at all - and the resulting bad debt is attributed to GHO pro-rata by `gho_debt_base / total_debt_base` (memo 11.1).
- **lp_flight** — LP capital assumed sticky; haircut grid 0% / 30% / 60% - assumed scenario modifier, not data-derived; LP flight modeled as single-sided withdrawal of the paired asset.
- **oracle_assumption** — GHO carries no EMA_lag line: there is no LLAMMA and no per-market price EMA. Section 7's assumption for GHO is instant observation of the Aave oracle - Chainlink feeds and CAPO adapters read at `run_block` - and the per-feed staleness surface is the oracle table's (DET-55/DET-81), not a counterfactual line's (P-6.01 R13).
- **tail_reserves** — tail reserves (15, 1.549% of attributed weight, unlabeled by threshold) enter position health at Aave's oracle and are excluded from absorption; in Member 1 they are shocked as volatile, no LST axis - overstates bad debt where a tail reserve is a stable.