Notes / Findings

Finding (2026-09-19): the Aave guardian committee is on 5 chains, not 4, plus a list of repo inaccuracies an independent verification pass found

Findings2026-09-19Chain: Ethereum, Base, Arbitrum, Monad, Plasma

Source: data/finding_2026-09-19-aave-guardian-ethereum-l1-fifth-chain-and-verifier-corrections.md in the repository, rendered here without changes. Source file

How this surfaced#

19 oracle targets had no hand-written dashboard card (dashboard/index.html rendered them as "Untitled target"). Cards were drafted per chain from scorer docstrings, repo data files and live reads, and every draft was then handed to a SECOND agent whose only job was to refute each claim against source and a fresh on-chain read. Most cards changed. The corrections below are what that pass found wrong or missing in the repo's OWN text, not only in the drafts. Nothing here was taken on trust: the two headline items were re-read by hand.

1. The Aave guardian committee also sits on Ethereum L1 (5 chains, not 4)#

The 9-signer, 5-of-9 committee first found identical on Arbitrum and Base (2026-09-17), later on Plasma and Monad, was described everywhere as reaching "four chains". Ethereum L1, the root of the whole Aave Governance V3 design, was the one chain never compared.

Live, on two independent RPCs (publicnode and drpc), Ethereum mainnet:

Why it was missed: chains/ethereum-l1/scorers.py::score_aave_v3_pool read this address and only LOGGED it ("can cancel proposals outside the timelock"); its committee analysis and cross_ecosystem_overlap.py's L1 aave_guardian group cover a DIFFERENT emergency seat, ACLManager's PROTOCOL_GUARDIAN (4-of-7).

Changed in this pass: (a) ETHEREUM_L1_GROUPS["aave_payloads_guardian"] added, so scripts/check_cross_ecosystem_overlap.py now reports each of the 9 signers on 5 chains and 4 new containment rows; (b) score_aave_v3_pool now resolves that Safe and adds a note when its owner set matches (5 tests). No score moved.

Open design question, deliberately NOT decided here: this file's crossExposureScore is within-L1 only by its own stated convention (see the Morpho Blue note in the same file: "cross-ecosystem fact, not folded into this file's within-L1 crossExposureScore"), whereas Arbitrum, Base, Plasma and Monad DO fold cross-chain overlaps into 80. So the same committee is scored 80 on four chains and 100 on Ethereum L1, and Robinhood's Morpho Blue is likewise not folded while Base's is. That inconsistency is real; which convention is intended is a decision for the maintainer, and changing it means a real on-chain push.

UPDATE 2026-09-20: the open design question is decided. Cross-ecosystem overlaps are folded into crossExposureScore on every EVM ecosystem, as a flat 80, applied as min(within-ecosystem score, 80) on Ethereum L1, Robinhood Chain and Tempo, from a dated snapshot with no second-chain RPC. What this section reported as inconsistent is resolved in the scorers: Ethereum L1's Aave Pool now reads crossExposureScore 80 (both the 9-signer PayloadsController.guardian() committee and the 7-signer PROTOCOL_GUARDIAN committee match a snapshot, and the cap is applied once), Ethereum L1's Morpho Blue reads 80, and Robinhood Chain's Morpho Blue reads 80 like Base's. The "no score moved" statement above was true of 2026-09-19 and is left as written. These values were scorer output first and were pushed on-chain the same day, 2026-09-20 (Ethereum L1 tx 0x14b0466ab52a7bf6cab54253cda92c73d52ca1b88957632911d79136b99b7a98, block 11,740,952). Rule, before/after table, transaction table and verification: data/finding_2026-09-20-cross-exposure-convention-and-score-adjustments.md.

Stale wording elsewhere that still says "fourth chain" / "third chain" and should be read as "at least five": chains/monad/scorers.py (around lines 98-99, 856-857, 899-900), scripts/lib/cross_ecosystem_overlap.py (Monad group comment), and the Plasma card in dashboard/index.html.

2. Arcus Perps: the "shared EOA" is a Safe#

scripts/lib/scorers.py::score_arcus_perps_bridgevault's docstring, scripts/lib/signer_overlap.py (known_eoa) and data/rotation_audit_2026-09-19-robinhood-chain-index11.md all say the address 0x4f1d…ebe2 (on the BridgeVault timelock's proposer/executor/canceller roles, and one of the 3 owners of the Arcus pToken 2-of-3 Safe) is "exactly one EOA". Re-read by hand on both Robinhood mainnet RPCs: it has 171 bytes of code and is a 2-of-4 Gnosis Safe. The crossExposure of 80 still stands (the same ADDRESS sits on both sides), but the nested Safe's own four owners (0x19687776..., 0x32aD2818..., 0x41111c5E..., 0x95B70f0e...) appear in no repo group, so any further overlap through them was never checked.

3. Other inaccuracies found#

Status update, same day, follow-up commit: the text-only items below are now corrected at source with dated CORRECTED notes (UNCX docstring/runtime note/README/ index-10 audit; up v3 docstring; both Base docstrings/notes; the Arcus "EOA" wording in scorers.py, signer_overlap.py and the index-11 audit; the "fourth chain" wording in Monad's scorer and the overlap registry). Still OPEN because they change scoring or need a maintainer call: Euler's unscored instant pause on both Monad and Plasma (now visible in notes and the sweep, not in the score), Yuzu's placeholder adminKeyScore, and the crossExposureScore convention question in section 1. The Arcus nested Safe's four owners were checked and are bare EOAs appearing in no other tracked group, so no further overlap hides behind that address.

Original list, as found:

What was NOT changed#

No scorer output, no on-chain score and no oracle state changed in this pass. Every item in section 3 is a text or coverage fix for the maintainer; the crossExposureScore convention question in section 1 needs a decision first.

UPDATE 2026-09-20: the crossExposureScore convention question in section 1 has its decision (see the update there), so it no longer blocks anything; the Yuzu placeholder and the Euler instant-pause scoring question in section 3 are not covered by that decision.

Not an audit, not investment advice. All notes · Back to the dashboard.