Bytecode verified via sibling
This contract shares identical runtime bytecode with a verified contract (0x70901361...) which has been verified through compiler archaeology.
A pricing and deposit management contract from August 11, 2015, featured by ether.camp founder Roman Mandeleil as a notable early Frontier contract.
Historical Significance
Featured by ether.camp founder Roman Mandeleil as one of the first notable contracts on Ethereum, alongside the Ethereum Foundation treasury. Its selection by Mandeleil as a showcase contract for the ether.camp VM trace feature places it among the earliest contracts considered interesting enough for community attention.
Context
Deployed during the first two weeks of Frontier. The ether.camp explorer (frontier.ether.camp), founded by Roman Mandeleil, was one of the earliest Ethereum block explorers and the first to offer VM trace functionality — allowing developers to step through contract execution. The Reddit announcement thread drew comments from notable early Ethereum figures including drcode (SciFi contract creator) and Martin Köppelmann (later Gnosis co-founder).
Key Facts
Description
This contract was deployed on August 11, 2015 (block 69,213), 12 days after Ethereum mainnet launch. It implements a pricing and deposit management system with functions including setPrice(uint256), setDeposit(uint256), setTimeBlock(uint256), costs(), and open(). The contract received 15 transactions from 3 unique addresses.
The contract was prominently featured by Roman Mandeleil (founder of ether.camp) in an August 12, 2015 Reddit post announcing the ether.camp block explorer's new VM trace feature. Mandeleil highlighted this contract alongside three others — including the SciFi voting contract (0xd94badbec) and the Ethereum Foundation treasury (0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae) — as examples of interesting contracts to explore with the new tracing tool.
The deployer address (0x8bae48F227d978d084B009b775222BAaF61ed9fe) made multiple configuration calls immediately after deployment, suggesting active testing of the pricing mechanism. No source code has been verified on Etherscan.
Source Verified
Sourcify partial match (chain 1, address 0x709013617BB52c49003a9c8F3035Ef9ec9912B17). Compiled with solc 0.1.3+commit.028f561d, optimizer on, contract Lock.
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
This contract has verified source code.
View Verification ProofShow source code (Solidity)
// Recovered by EthereumHistory (ethereumhistory.com) -sw
contract Lock {
address owner;
function setDeposit(uint _deposit) {
if (msg.sender != owner) return;
deposit = _deposit;
}
function open() {
if (msg.sender == owner || msg.sender == user) {
isOpen += 1;
Open();
return;
}
if (isOpen > 0 || msg.value < deposit) {
msg.sender.send(msg.value);
} else {
isOpen += 1;
Open();
openTime = now;
user = msg.sender;
}
}
uint deposit;
uint price;
address user;
uint isOpen;
uint openTime;
uint closeTime;
uint timeBlock;
event Open();
event Close();
function Lock(uint _deposit, uint _price, uint _timeBlock) {
owner = msg.sender;
isOpen = 0;
deposit = _deposit;
price = _price;
if (_timeBlock == 0) timeBlock = 1;
else timeBlock = _timeBlock;
openTime = now;
user = msg.sender;
}
function setTimeBlock(uint _timeBlock) {
if (msg.sender != owner) return;
timeBlock = _timeBlock;
}
function costs() returns (uint) {
return price * (now - openTime + timeBlock) / timeBlock;
}
function setPrice(uint _price) {
if (msg.sender != owner) return;
price = _price;
}
function close() {
if (isOpen == 0) return;
if (msg.sender == owner && owner == user) {
isOpen = 0;
Close();
return;
}
if (msg.sender == user) {
uint c = costs();
if (c > deposit) {
owner.send(deposit);
} else {
user.send(deposit - c);
owner.send(c);
}
isOpen = 0;
user = owner;
Close();
}
}
function closedByOwner() {
if (msg.sender != owner) return;
if (costs() > deposit) {
owner.send(deposit);
isOpen = 0;
user = owner;
}
}
}