An early EF multi-party signaling contract (Serpent, Aug 2015). Three developer keys co-sign to emit on-chain events. No ETH, no external calls.
Key Facts
Description
A 3-of-3 on-chain voting contract deployed by the Ethereum Foundation EF 1 wallet on August 12, 2015, just 13 days after Frontier launched. Three signer addresses are hardcoded in the constructor. Any two of three signers can call signMotion to vote on a proposal. Once majority is reached, if the target address is zero, the contract emits a log event with the data payload. Despite being labeled "EFSubMultisig" on Etherscan, this is not a multisig in the standard sense. It holds no funds, cannot transfer ETH, and cannot call other contracts. It is a coordinated signaling mechanism: three EF developer keys agreeing on a message to emit on-chain.
Source Verified
First 738 bytes of Serpent-compiled output match the 738-byte on-chain runtime exactly. The compiled output produces 742 bytes total; the final 4 bytes (5b 60 00 f3 = JUMPDEST PUSH1 0x00 RETURN) are a trailing return stub emitted by newer Serpent but absent in the deployer version. Identical bytecode also deployed at 0x2194b1734ee0f67440884da49952a45b34ba832d (block 72,119, 23 minutes earlier). Function selectors: 0x403147b6 = createMotion(addr,data:bytes32), 0xa42c4de7 = signMotion(slot,proposal_id). Storage layout: slots 0-2 = signers, 0x0100 = num_signers (3), 0x0101 = next_proposal_id, sha3([2,id,0-3]) = proposal fields.
Historian Categories
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 (Serpent)
data _p0
data _p1
data proposals[][4]
def createMotion(addr, data:bytes32):
idx = self.storage[0x0101]
self.proposals[idx][0] = addr
self.proposals[idx][3] = data
self.storage[0x0101] = idx + 1
def signMotion(slot, proposal_id):
if msg.sender == self.storage[slot]:
voted = self.proposals[proposal_id][1] & 2**slot
if not voted:
self.proposals[proposal_id][1] = self.proposals[proposal_id][1] | 2**slot
self.proposals[proposal_id][2] = self.proposals[proposal_id][2] + 1
if self.proposals[proposal_id][2] > self.storage[0x0100] / 2:
value = self.proposals[proposal_id][0]
if value == 0:
log(self.proposals[proposal_id][3])
self.proposals[proposal_id][0] = 0
self.proposals[proposal_id][1] = 0
self.proposals[proposal_id][2] = 0
self.proposals[proposal_id][3] = 0