The first decentralized messaging contract on Ethereum, whose only use was the deployer sending 'hello2!' to themselves on Frontier Day 1.
Key Facts
Description
Deployed by 0x8674c218F0 at block 54969 on August 8, 2015. This contract implements an on-chain messaging system with sender/recipient inboxes, per-message timestamps, and a global nonce counter. The deployer tested it immediately by calling sendMessage() to send 'hello2!' to their own address (block 54971), then never used the contract again. The contract has 8 functions including sendMessage(address,string), getMessageContents(bytes32), and message deletion. The deployer was funded by genesis holder 0x32be343b, who funded multiple serious developers on Frontier Day 1.
Source Verified
Verified via deployment transaction: creation bytecode input contains a 19-byte deployment stub followed by 1574 bytes of runtime. The runtime extracted from the creation tx matches the on-chain deployed code byte-for-byte. Compiler inferred as solc v0.1.1 from bytecode patterns. Original Solidity source not fully recovered - 3 of 8 function selectors remain unidentified after exhaustive brute-force search.
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 (Solidity)
// Reconstruction - 3 of 8 function selectors remain unidentified
// Verified via deployment transaction (creation tx runtime == on-chain code)
contract MessageStore {
struct Message {
uint64 timestamp;
string content;
}
uint nonce;
mapping(address => mapping(bytes32 => Message)) messages;
mapping(address => bytes32[]) inbox;
function sendMessage(address recipient, string message) {
nonce++;
bytes32 key = bytes32(block.timestamp);
messages[recipient][key].timestamp = uint64(block.timestamp);
messages[recipient][key].content = message;
inbox[recipient].push(key);
}
function getMessageContents(bytes32 key) constant returns (string) {
return messages[msg.sender][key].content;
}
// selector 0xfe1e3eca
function deleteMessage(bytes32 key) {
messages[msg.sender][key].timestamp = 0;
delete messages[msg.sender][key].content;
for (uint i = 0; i < inbox[msg.sender].length; i++) {
if (inbox[msg.sender][i] == key) {
delete inbox[msg.sender][i];
}
}
}
}