Back to Home

EF1 ABI Test

Unknown
0xe30608b59313...1cdb5052f474
FrontierExact Bytecode Match
Deployed September 20, 2015 (10 years ago)Block 261,486

A hand-assembled EVM test contract by an Ethereum Foundation developer, implementing a single function foo() that returns the integer 5.

Key Facts

Deployer
Ethereum Foundation(0x5eD8Ce...8fAd9F)
Deployment Block
261,486
Deployment Date
Sep 20, 2015, 06:28 AM
Code Size
72.0 B
Gas at Deploy
35,354
Transactions by Year
20151

Description

Deployed on September 20, 2015 - just 52 days after the Ethereum Frontier launch - from the first Ethereum Foundation cold wallet (EF1), this 57-byte contract is a minimalist but historically significant artifact of early Ethereum development.

The contract implements a single function, foo() (selector 0xc2985578), which returns the integer 5 when called. A second transaction from the same wallet called foo() to confirm it returned the expected value. The two-transaction pattern - deploy then call - is the signature of a deliberate integration test.

Unlike contracts compiled with Solidity v0.1.1 or LLL, this contract does not begin with the standard 6060604052 free memory pointer header. Its runtime bytecode (57 bytes) starts directly with a PUSH29 instruction encoding the 2^224 divisor used for ABI selector extraction - a more direct encoding than the PUSH1/EXP pattern used by contemporary compilers. The constructor uses a JUMP-based bootstrap rather than the simpler PUSH/RETURN pattern, and selector dispatch uses DUP2 before the EQ comparison - a convention seen in Solidity multi-function dispatch templates but written here by hand.

No known compiler from this era produces this exact bytecode. The evidence strongly suggests this was written directly as EVM assembly, by someone deeply familiar with the Ethereum ABI specification - likely to verify that function dispatch, calldata parsing, and uint256 return encoding worked correctly on the newly launched mainnet.

Source Verified

yulExact bytecode match(72 bytes)

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: Unknown

Frontier Era

The initial release of Ethereum. A bare-bones implementation for technical users.

Block span: 01,149,999
July 30, 2015March 14, 2016

Bytecode Overview

Opcodes72
Unique Opcodes28
Jump Instructions5
Storage Operations1

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Source Code
Show source code (Yul)
// SPDX-License-Identifier: UNLICENSED
// EF1 foo() contract - exact runtime bytecode reproduced
// Deployer: 0x5eD8Cee6b63b1c6AFce3AD7c92f4fD7E1B8fAd9F (Ethereum Foundation wallet)
// Deploy block: 261486 (2015-09-20)
// Deploy tx: 0x41d4adef128fd092dacee2a48f4c0cec22a8033d86cbf894993572c2d2c6f44e
// Target runtime: 7c01000000000000000000000000000000000000000000000000000000006000350463c2985578811415603757600560405260206040f35b50
//
// Compiles to exact 57-byte runtime using: solc 0.5.17, Yul strict-assembly
// Verification: node verify.js

object "Foo" {
  code {
    // Constructor: copy runtime to memory and deploy it
    let size := datasize("runtime")
    datacopy(0, dataoffset("runtime"), size)
    return(0, size)
  }
  object "runtime" {
    code {
      // Extract 4-byte function selector using DIV by 2^224
      // This produces PUSH29 opcode (0x7c), not PUSH1/EXP like Solidity compiler
      let sel := div(calldataload(0), 0x100000000000000000000000000000000000000000000000000000000)
      // Check if selector matches foo() = keccak256("foo()")[0:4] = 0xc2985578
      if eq(sel, 0xc2985578) {
        // Return uint256(5) ABI-encoded: store at 0x40, return 32 bytes
        mstore(0x40, 5)
        return(0x40, 0x20)
      }
      // Unknown function: implicit revert via JUMPDEST + POP (falls through)
    }
  }
}

External Links