A 77-byte contract deployed by the Ethereum Foundation wallet on September 20, 2015. Implements foo() returning a 21-byte constant value, requiring the PUSH21 o
Historical Significance
Part of the earliest known ABI compliance testing on Ethereum mainnet. The Ethereum Foundation's operational wallet deployed these contracts to test ABI dispatch and return encoding as the standard was being finalized.
Context
Deployed 52 days after Frontier launch. The EF1 wallet (0x5eD8Cee6b...) was used for Foundation operational transactions. Three ABI test contracts were deployed in a 6-hour window on Sep 20, 2015.
Key Facts
Description
EF1 ABI Test Suite
On September 20, 2015, the Ethereum Foundation wallet 0x5eD8Cee6b63b1c6AFce3AD7c92f4fD7E1B8fAd9F deployed three ABI test contracts in a 6-hour window:
| Time (UTC) | Address | Function | Returns |
|---|---|---|---|
| 06:28 | 0xe30608b5 | foo() | uint256(5) |
| 08:48 | 0xdf8eb001 | foo() | address |
| 09:35 | 0x441e72c6 | bar(uint256) | x + 2 |
foo() (selector 0xc2985578) returns a fixed 21-byte value 0x05CBAeB5B771Cf21b59f17Ea9c70915A27041E5409. The extra leading byte makes it 21 bytes, pushed via PUSH21 (0x74).
The bytecode uses the pre-ABI dispatcher pattern: PUSH29 with 2^224, then DIV against CALLDATALOAD(0) to extract the 4-byte selector. This hand-crafted low-level EVM style predates Solidity's standardized PUSH1 0xe0 / EXP sequence.
Cracked in 2026 using solc 0.5.17 Yul strict-assembly. The 21-byte constant is the key detail.
Source Verified
Exact bytecode match. 77 bytes. Critical detail: return value is 21 bytes (PUSH21), not a standard 20-byte address.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow source code (Yul)
object "Foo" {
code {
let size := datasize("runtime")
datacopy(0, dataoffset("runtime"), size)
return(0, size)
}
object "runtime" {
code {
let sel := div(calldataload(0), 0x100000000000000000000000000000000000000000000000000000000)
if eq(sel, 0xc2985578) {
mstore(0x40, 0x05CBAeB5B771Cf21b59f17Ea9c70915A27041E5409)
return(0x40, 0x20)
}
}
}
}