Ethereum Foundation ABI test contract. foo() returns a hardcoded 21-byte address value. Part of the Sep 20, 2015 EF1 wallet test suite.
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
77 bytes. Yul strict-assembly, solc 0.5.17. Return value is 21-byte constant forcing PUSH21.
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)
}
}
}
}