GHO: verify

read 2026-10-01 21:58 UTC · block 26100308 · report d07a2702 · intake sheet 29682310

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.

The sheet's figures are raw base units and recorded call arguments (the reproduction recipe), shown verbatim and not reformatted. Older Vyper pools return a padded buffer: decode the first 32-byte word.

# 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.

The raw dump cited above is not committed to the repository; it can be regenerated from any Ethereum archive node by repeating the listed reads at block 26100308.