A failed Greeter deployment, the third of three attempts where the gas limit was too low to store the runtime code on-chain.
Historical Significance
A window into the Frontier developer experience. Gas estimation did not exist in August 2015, and failed code storage did not revert the transaction, making it difficult to know your contract deployment had silently failed. This developer needed three attempts before getting the gas right.
Context
In Frontier-era Ethereum, contract creation transactions that ran out of gas during the code storage phase did not revert. The transaction succeeded, an address was assigned, but no code was deployed. This behavior was later changed: post-Homestead, insufficient gas for code storage causes the entire transaction to fail.
Key Facts
Description
The third of three failed Greeter deployment attempts by a 2000 ETH genesis wallet (0xA1E4380A) at block 49186 on August 7, 2015. The creation transaction carried 723 bytes of valid init code for a 3-function Greeter (kill, greet, mortal), but the gas limit was set to only 90,000. The constructor executed successfully using 71,283 gas, but storing the 549-byte runtime code required an additional 109,800 gas (200 gas per byte). With only 18,717 gas remaining, the code storage silently failed. In Frontier-era Ethereum, this did not revert the transaction. Instead, a contract address was assigned with zero bytes of code, creating what appears to be a successful deployment but is actually an empty account. The deployer made three identical attempts before deploying the final Greeter at rank 10 (0xcde4de4d) with sufficient gas.
Source Verified
near_exact_match: identical source to verified 0xcde4 greeter. All 3 selectors match (kill, greet, mortal). First 482/550 bytes identical (87.6%). 4-byte diff in string return codegen from intermediate soljson build. All three drafts (ranks 7/8/9) share identical 550b runtime.
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 (near-exact bytecode match).
View Verification ProofShow source code (Solidity)
contract mortal {
address owner;
function kill() { if (owner == msg.sender) suicide(owner); }
}
contract greeter is mortal {
string greeting;
function greeter(string _greeting) {
greeting = _greeting;
}
function mortal() { owner = msg.sender; }
function kill() { if (msg.sender == owner) suicide(owner); }
function greet() constant returns (string) {
return greeting;
}
}