First of 7,123 identical ETH+ERC-20 deposit forwarders deployed March-May 2017. Source recovered by EthereumHistory, byte-for-byte verified.
Key Facts
Description
This contract is the first of 7,123 identical deposit forwarders deployed on Ethereum between March 22 and May 31, 2017 across three deployers. Each accepts ETH via a payable fallback that emits a Deposit event, and exposes owner-only functions to sweep ETH (collect), sweep a specific ERC-20 balance (collectToken), or selfdestruct (kill).
The source was reconstructed from the on-chain bytecode by EthereumHistory. Both the 400-byte runtime and the 455-byte creation bytecode match byte-for-byte when compiled with solc-0.4.4+commit.4633f3de, optimizer ON.
Distinguishing feature vs earlier depositwallet variants already cracked: the added collectToken(address, address, uint256) that low-level-calls Token.transfer. The exact source shape was pinned by the alias detail: 'var t = Token(token); t.transfer(to, amount)' produces the 400-byte target; 'Token(token).transfer(to, amount)' produces a 5-byte-smaller body. Proof folder: cartoonitunes/awesome-ethereum-proofs/proofs/depositwallet-collecttoken-0x55166ecb.
Source Verified
Runtime and creation both byte-for-byte match under solc 0.4.4 optimizer ON. Cluster: 7,123 identical-runtime members between blocks 3,398,048 and 3,795,077 across 3 deployers.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Spurious Dragon Era
Continued DoS protection. State trie clearing.
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 Token {
function transfer(address to, uint256 value);
}
contract DepositWallet {
address owner;
function DepositWallet() { owner = msg.sender; }
event Deposit(address indexed from, uint256 value, uint256 indexed data);
function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value, 88); }
function collectToken(address token, address to, uint256 amount) {
if (msg.sender == owner) {
var t = Token(token);
t.transfer(to, amount);
}
}
function kill() { if (msg.sender == owner) suicide(owner); }
function collect() { if (msg.sender == owner) owner.send(this.balance); }
}External Links
Related contracts
PiggyBank
Same deployerA simple ETH piggy bank contract with deposit events, owner-only collect, and self-destruct. Uses a hardcoded instance ID (88) in deposit events to distinguish
0xd01d0b...2f09fdFebruary 19, 2016Pass Dao
Same eraShare ledger and proposal system for a funded working group, priced on a decaying curve.
0x09bc33...9a4acdNovember 24, 2016DoriToken
Same eraA fixed-supply token with transfers and allowance spending, deployed November 2016.
0xdbd90d...c4cb16November 25, 2016"ITT Demo 0.3.6 - Live Chain"
Same eraA fixed-supply token with transfers and third-party allowances, deployed November 2016.
0xb9a357...c293e3November 28, 2016HumanStandartTokenTC
Same eraA fixed-supply token with transfers and third-party allowances, deployed November 2016.
0x7dd73b...715250November 28, 2016INRF Test Tokens
Same eraOwner can mint and freeze, and the version label was renamed from the tutorial default.
0x74f074...abb8beNovember 30, 2016