Safe splits a multisig transaction into two acts that are not the same act. Signing happens off-chain, free. Executing costs gas, can be done by anyone, and is nobody's job. gavel is the party whose job it is.
Off-chain, in the Safe Transaction Service. Free. The owners already did it — that is why the transaction is in the queue at all.
● Already happenedOn-chain execTransaction. Costs gas. Permissionless — anyone may call it. Assigned to no one, so it does not happen.
92.6% already dead
Every square is one queued Base transaction that passes the naive “threshold met, not executed” test.
Squares partition the 366; the funnel below nests them. 21 + 4 + 2 = the 27 live, and 4 + 2 = the 6 at their Safe's current nonce.
A detector built on the obvious definition is ~93% false positives. Anyone can concatenate signatures; knowing which 7.4% are real is the product. Method and per-Safe detail are in the repository README.
isOwner →
0x5E2e5Fd3aD7fDC9B94482930db8b5F45E439bab7
Returns false. The executor owns nothing on the Safe it drained.
nonce
Advanced past the transaction we executed — it is genuinely consumed, not merely proposed
src/assemble.mjs is the entire decision surface
npm test · 80 tests, 100% line and branch coverage on the decision surface, one of which runs against a committed real Safe Transaction Service response
From is an
address you will not recognise. But eth_getCode on our executor returns
0xef0100… — an EIP-7702 delegation designator. The delegate runs in the EOA's own
context, so msg.sender at the Safe is still the executor. Verify by transaction hash,
not by address history.
No mainnet execution yet. Everything above is
Ethereum Sepolia. EVIDENCE.md is absent by design, not empty by accident —
scripts/audit.mjs refuses to write a row from a chain marked
receiptsEligible: false.
The workflow is not deployed.
code/run-code and HTTP Request require a paid KeeperHub plan.
scripts/drain.mjs reaches the same on-chain outcome through the Direct Execution API,
which is not gated — but it decides here and asks KeeperHub to execute, rather than deciding
inside KeeperHub. That is a weaker answer and we are not going to blur it.
No demo video, no Hub publication, no Marketplace listing as of this page's last update.