Notes / Audits and snapshots

Ethereum L1 -- deploy_testnet fork rehearsal, run 2 (2026-09-17 evening)

Audits and snapshots2026-09-17Chain: EthereumLinked: Uniswap V3 Factory (Arbitrum One), Uniswap V3 Factory, Aave V3 Ethereum Pool, MakerDAO / Sky governance (MCD_PAUSE), Ethena EthenaMinting (retired minter), USDtb (Ethena Labs), USDtb PSM (peg-stability module), Ethena LayerZero OFTAdapters (0x5d3a…ef34)

Source: chains/ethereum-l1/data/deploy_rehearsal_2026-09-17-run2.md in the repository, rendered here without changes. Source file

Why a second rehearsal today#

The morning's rehearsal (deploy_rehearsal_2026-09-17.md) proved the pipeline against a 4-target scorer (composite 85/78/81/52, crossExposureScore still a flat 100 placeholder). Between that run and this one, an interactive session pushed 17 commits (14:39-18:51) that changed chains/ethereum-l1/scorers.py materially:

None of that touched src/AuthorityRiskOracle.sol, script/Deploy.s.sol, or update_scores_ethereum_l1.py's encoding logic, but since the scorer output itself changed since the last fork run, this run re-verifies the full pipeline end to end against the CURRENT scorer state rather than assuming the morning's pass still applies.

Starting fact: deployer balance still 0 ETH on real Sepolia#

Re-checked live on 2 independent RPCs at the start of this run (see claims_attempt1.txt ids B01/B02):

RPCResult
https://ethereum-sepolia-rpc.publicnode.comcast balance -> 0 wei
https://sepolia.gateway.tenderly.cocast balance -> 0 wei

No faucet was used (agent policy), no funds were requested. Per the run brief, since the scorer changed materially since the last fork rehearsal, the pipeline was rehearsed again on a fresh anvil fork rather than merely re-stating the morning's result.

What this rehearsal proves#

Script: 0 (updated this run: its getScore() read-back loop was extended from the original 4 hardcoded targets to all 9 the scorer now tracks -- it had gone stale after this afternoon's promotions).

StepResult
Fork source chain id (ethereum-sepolia-rpc.publicnode.com)11155111
Local anvil fork chain id (port 8546)11155111
forge script script/Deploy.s.sol --broadcast against the forkONCHAIN EXECUTION COMPLETE & SUCCESSFUL
Deployed AuthorityRiskOracle address (fork only, ephemeral)0x60B97BB35c2bFB8D3A3c509EcC2352ca72421a1a
Deployed ExampleConsumer address (fork only, ephemeral)0x29809c3e19d45DBEACFe670a1524DD95240FDC31
Deployer / admin / updater (anvil's well-known default dev account #0, NOT the real throwaway key)0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
hasRole(UPDATER_ROLE, deployer) on the fresh oracletrue
update_scores_ethereum_l1.py dry-run target count9 (was 4 in the morning run)
updateScores() push tx0xa7b69ec27985ca7b45c5b026acea02df7101a239c348620a2c7286decebd0d4e, confirmed block 11725084, status success
Read RPC chain id check inside the script1 (Ethereum L1 mainnet, as required)
Oracle RPC chain id check inside the script11155111 (Sepolia, as required)

getScore() read back vs. the live dry-run scores (all 9 targets)#

TargetLabelDry-run compositeOn-chain composite (getScore)Match
0x1F98431c8aD98523631AE4a59f267346ea31F984Uniswap V3 Factory8585yes
0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9eAave V3 Ethereum Pool7878yes
0xbE286431454714F511008713973d3B053A2d38f3MakerDAO / Sky (MCD_PAUSE)8181yes
0x2CC440b721d2CaFd6D64908D6d8C4aCC57F8Afc3Ethena EthenaMinting5252yes
0xC139190F447e929f090Edeb554D95AbB8b18aC1cUSDtb22yes
0x73E35C5c35A274E34AdE6EB13cC7f62aEE323728USDtb PSM7373yes
0x5d3a1ff2B6BAB83b63cd9AD0787074081a52eF34USDe OFTAdapter5757yes
0x211Cc4DD073734dA055fbF44a2b4667d5e5fE5D2sUSDe OFTAdapter5757yes
0x58538E6A46E07434d7E7375BC268D3cB839C0133ENA OFTAdapter5757yes

crossExposureScore read back on-chain confirms the real computed value, not the old flat-100 placeholder: Uniswap, Aave, Maker and USDtb (the ERC20 token contract itself) read 100; Ethena EthenaMinting, USDtb PSM and the 3 OFTAdapters (5 of the 9 targets, the ones the scorer resolves as sharing the root Ethena Safe) all read 20, matching scorers.py's live cross-exposure computation exactly. Note USDtb PSM reads 20 while the USDtb token contract itself reads 100 -- the scorer treats the PSM and the token as different authority surfaces, not a documentation slip.

What this does and does not close#

deploy_testnet -> deploy_testnet (maintained, not advanced) -- the deployer balance is still 0 ETH on real Sepolia, so no real deploy happened. The pipeline itself is re-proven correct against the current scorer state.

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