Bytecode verified via sibling
This contract shares identical runtime bytecode with Bank (0x2e714572...) which has been verified through compiler archaeology.
A 534-byte deposit ledger: deposit() records the caller's ether, a timestamp and an id, and only the owner can read a balance back. No withdrawal function exists.
Historical Significance
Another member of the 2015 deposit-ledger family, differing from its siblings only in which increment form the author used and whether lastDepositId is present at all. Four such variants survive in the archive with the same five-function interface, which makes them a small natural experiment in how one developer edited the same contract over successive deployments.
Context
Deployed 2015-09-05 by 0xee291517c6290faf94dee71647c27b9737b2a2d2. Two byte-identical copies of this runtime exist. It is one of several near-identical variants of the same ledger in the archive. Source recovered by exact runtime bytecode match, verified on Sourcify and Etherscan.
Key Facts
Description
Storage is an owner address in slot 0, three public uints (lastDepositId, numDeposits, lastTs) in slots 1 to 3, and a mapping from address to balance in slot 4. deposit() at 0xd0e30db0 assigns lastDepositId from a post-increment of numDeposits, so the first deposit is recorded as id 0, then stamps lastTs with the block timestamp and credits msg.value to the caller's entry. getBalance(address) at 0xf8b2cb4f returns early unless the caller is the owner, so everyone else receives zero rather than a revert. Nothing in the contract can move ether out again.
Source Verified
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)
// Submitted by EthereumHistory (ethereumhistory.com)
contract Bank {
address owner;
uint public lastDepositId;
uint public numDeposits;
uint public lastTs;
mapping (address => uint) balances;
function Bank() {
owner = msg.sender;
}
function getBalance(address a) constant returns (uint) {
if (msg.sender != owner) {
return;
}
return balances[a];
}
function deposit() {
lastDepositId = numDeposits++;
lastTs = now;
balances[msg.sender] += msg.value;
}
}External Links
Related contracts
Bounce
Same deployerA 132-byte contract with one function, sendBack(), which immediately returns any ether sent with the call.
0x5954f5...ff93b8September 2, 2015Contract 0x578713...7d7060
Same deployerThe Solidity tutorial subcurrency, compiled without the optimiser
0x578713...7d7060September 3, 2015Coin
Same deployerThe Solidity tutorial subcurrency, with the balance reader restricted to the minter
0x4d0cd1...4e6577September 3, 2015Coin
Same deployerThe subcurrency example from the Solidity documentation with a payable deposit bolted on.
0x8d9bba...d771b5September 4, 2015Bank
Same deployerA 534-byte deposit ledger: deposit() records the caller's ether, a timestamp and an id, and only the owner can read a balance back. No withdrawal function exists.
0x2e7145...3f0bf6September 4, 2015Bank
Same deployerA 541-byte deposit ledger: deposit() records the caller's ether and a timestamp, and only the owner can read a balance back. No withdrawal function exists.
0x8c953f...984534September 5, 2015