328-byte deposit wallet that notifies a manager on receipt, with an unguarded transferMoney().
Historical Significance
Documents a two-tier deposit architecture from late 2016: cheap per-customer wallets that do no bookkeeping themselves, paired with a single minimal logger contract that turns each receipt into an indexed event stream. Notably the wallet contains no access control whatsoever - the bytecode has no CALLER opcode, so transferMoney() was callable by anyone, not just the operator. Any balance sitting in one of these wallets between sweeps was withdrawable by any caller. The selector gotPayment(address,uint256) had no preimage in any public signature database and was recovered by brute-force search.
Key Facts
Description
A 328-byte payment-receiving wallet. Its fallback forwards nothing but a notification: it calls gotPayment(address,uint256) on a manager contract held in storage slot 0, passing its own address and the received msg.value, so the operator can attribute incoming funds off-chain. The manager itself is a 176-byte contract whose only function logs that call as an event. The wallet's single public function, transferMoney(address,uint256) (selector 0xfee666ad), sends ETH out. Runtime bytecode reproduced byte-for-byte with solc 0.3.6, optimizer disabled. Verified on Sourcify and Etherscan.
Source Verified
DAO Fork Era
The controversial fork to recover funds from The DAO hack.
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 Manager {
function gotPayment(address from, uint256 amount);
}
contract Wallet {
Manager manager;
function() {
manager.gotPayment(this, msg.value);
}
function transferMoney(address to, uint256 amount) {
to.send(amount);
}
}