Can one person move the money in Ethena EthenaMinting (USDe live minter) on Ethereum? The authority score is 73 / 100 (decent): a multisig and a delay, with gaps.
In short. USDe’s only mint authority is administered by a real 24-hour timelock whose sole proposer and canceller is a 5-of-10 Gnosis Safe. Every call that would redirect funds or create unbacked USDe sits behind that delay; a few freeze and configuration calls do not.
Exposure, not intent. The score counts what the keys could do, not what their holders will do, and says nothing about the odds of a loss. Re-read it yourself with a public RPC and curl: how.
Try a fix: drag the sliders Open the live dashboard re-read from the chain every 6 hours; this page is the snapshot of the build
| admin key | 65 |
|---|---|
| multisig | 100 |
| timelock | 55 |
| price feed | 100 |
| shared control | 20 |
Composite = 40% admin key + 30% multisig + 30% timelock, rounded. Price feed and shared control are read and shown, not folded in.
To move the money: keys not read, 24 h to react.
USDe’s only mint authority is administered by a real 24-hour timelock whose sole proposer and canceller is a 5-of-10 Gnosis Safe. Every call that would redirect funds or create unbacked USDe sits behind that delay; a few freeze and configuration calls do not.
~4.84B USDe supply, composite 73 (pushed on-chain 2026-09-20)
Pushed on-chain 2026-09-20 as target index 14 (Sepolia block 11740952, tx 0x14b0466a…7a98), so Ethereum L1 now tracks 15 targets and this card reads the live minter directly. Same convention as the USDtb PSM: adminKey 65, multisig 100, timelock 55 (oracle 100, crossExposure 20, composite 73 as pushed; the 20 is the same-root-Safe overlap with four other tracked Ethena targets, the USDtb PSM and the three LayerZero OFTAdapters, 100 minus 20 for each). USDe.minter(), the minter’s owner and DEFAULT_ADMIN_ROLE and USDe’s own owner all resolve to one EthenaTimelockController (getMinDelay 86,400s); USDe.setMinter, the strongest control, and the six admin selectors that would redirect funds or mint unbacked USDe (grantRole, transferAdmin, addCustodianAddress, addSupportedAsset, setTokenType, setStablesDeltaLimit) are confirmed not whitelisted, so the full delay applies. Instant lanes: the Safe alone can revokeRole and add or remove whitelisted benefactors, which freeze or configure but cannot mint; four other whitelist entries (disableMintRedeem and three role removals) are dead because the timelock does not hold GATEKEEPER_ROLE. Disclosed, not scored: the Safe also holds COLLATERAL_MANAGER_ROLE directly, so it can sweep the minter’s roughly $93M (USDC, USDT and USDtb, about $31M each) to one of five registered custodian EOAs with no delay (adding a custodian is delayed), and four bare-EOA gatekeepers can halt minting and strip roles instantly, though the Safe can revoke them instantly too. The Safe also has an EthenaSafeGuard installed since 2026-07-06 (a positive control, not scored). A compromised MINTER key alone cannot create unbacked USDe: an order needs a whitelisted benefactor’s EIP-712 signature and real collateral routed to a registered custodian. Seven collateral assets are active (USDC, USDT, DAI, USDtb, PYUSD, USDm, USDG), all valued 1:1 by decimals and never priced, so issuer or depeg risk of those tokens, notably the thin USDm, is the remaining route to a bad mint that needs no delayed admin action. Open points: role-holder completeness rests on an indexer’s logs because free RPCs cannot replay history, the timelock’s source is only a partial verification match (behaviour confirmed by simulation), and the custodians’ real controllers are not attributable on-chain.
Exit window: a delay with a bounded bypass, the time a user has to leave after a harmful change is queued.
If a market used the example policy today (src/ExampleConsumer.sol: revert when stale, 0 under 60, 50% to 80% above): collateral factor 59.75% (score 73). Cheapest path to strong (80): admin key from 65 to 83, that is a stronger admin setup (admin power spread beyond one key, or checked by others), every other axis unchanged. This is the smallest step into the next band, not a fix for the weakness: the first requirement not met is A confirmed delay before changes apply, no bypass (changes can apply with no waiting time).
[](https://realspap.github.io/oracle/p/ethereum-l1-0xe3490297a08d6fc8da46edb7b6142e4f461b62d3.html)
A live badge: the score is read from the published watch files every time the page that shows it loads. Change nothing but your own repository.
Not assessed for this contract: how many keys it takes to move it; the money behind one key (no money figure, or no key count).
Money behind it: $4.7B (DefiLlama), of which $1.3B sits exposed to this setup (TVL × (100 − score) / 100, a weight, not a prediction).
Contract: 0xe3490297a08d6fc8da46edb7b6142e4f461b62d3 on the explorer ↗. Score pushed on-chain on 2026-10-13; stale on the oracle when older than 9 days (the watch re-reads it anyway). Read the score yourself: getScore(0xe3490297a08d6fc8da46edb7b6142e4f461b62d3) on the Ethereum oracle, listed in the repository.
Read at block 11922317, methodology 0x46a1a85b619e7db0…. The score reads the authority path (keys, multisigs, timelocks, roles, price feeds); it does not audit the code for bugs, and it measures exposure, not the chance of being hit (see the backtest in the repository). Dispute this score with evidence, or read this page as JSON.
Read live: admin: a timelock; delay: 24 h on the timelock.
Independent read of the admin: a timelock, 86400s delay 0xe8dc0fab…7c94 via owner(), consistent with the published admin-key score. Unchanged since 2026-10-10. This holder also governs 4 other tracked contracts (about $5.2B behind all of them, DefiLlama): 0x73e35c5c… on Ethereum, 0x5d3a1ff2… on Ethereum, 0x211cc4dd… on Ethereum, 0x58538e6a… on Ethereum. (scripts/second_opinion.py: a reader that shares nothing with the scorer, re-run every 6 hours)
Score unchanged since its publication on 2026-10-13; every later move will be a line of the hash-chained log. Methodology changed on 2026-10-13: points before that date come from another method and are not comparable.
# owner() on the contract: the holder
curl -s -X POST https://ethereum-rpc.publicnode.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xe3490297a08d6fc8da46edb7b6142e4f461b62d3","data":"0x8da5cb5b"},"latest"]}'
# getMinDelay() on the holder (OpenZeppelin TimelockController), in seconds
curl -s -X POST https://ethereum-rpc.publicnode.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xe8dc0fab349ea169283c48ccfd09d797e6db7c94","data":"0xf27a0c92"},"latest"]}'Each answer is a 32-byte word (an address sits in its last 20 bytes); the admin path is the one scripts/second_opinion.py reports for this contract. read between blocks 26199869 and 26199870 of the chain; this RPC cannot replay the block of the read (it ignores the block tag, or no longer serves old state): the answers are the current ones
Follow this contract: Atom feed of its score moves, alerts and queued operations (nothing else).
curl -s -X POST https://ethereum-sepolia-rpc.publicnode.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0xB6F8474ccC71AF477c31c2DF663B3942ddfbf906","data":"0xd47875d0000000000000000000000000e3490297a08d6fc8da46edb7b6142e4f461b62d3"},"0xb5eb8d"]}'The 6th 32-byte word of the answer is the composite score (73 = 0x49); the 7th is the push timestamp. Same call with "latest" instead of the block gives the current value.