Forwarding wallet contract (Sep 2017). 13,600 identical siblings. Owner can collect ETH, sweep ERC20 tokens, or destroy. Near-exact source match.
Key Facts
Description
A simple forwarding wallet contract deployed en masse (13,600+ identical siblings) starting September 2017. The contract stores an owner address and provides functions to collect ETH, sweep ERC20 token balances to the owner, and selfdestruct. All mutating functions are owner-only via a modifier pattern. The contract accepts ETH via a payable fallback function.
Functions: collectToken(address) sweeps a token's full balance to owner, collect() sends all ETH to owner, destroy() selfdestructs to owner, owner() returns the owner address.
Near-exact source reconstruction: the compiled bytecode from soljson v0.4.12 with optimizer ON matches 669 of 670 runtime bytes. The 1-byte difference is in the code section, likely from a minor source detail (variable naming or whitespace) that affects the Solidity metadata hash.
Source Verified
Near-exact match: 669/670 runtime bytes identical. Compiler: soljson v0.4.12+commit.194ff033 optimizer ON. Source reconstructed from bytecode: 4 functions (collectToken, destroy, owner, collect) + payable fallback. All 61 v0.4.11-v0.4.12 nightlies tested. 1-byte gap from unknown source detail.
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 (near-exact bytecode match).
View Verification ProofShow source code (Solidity)
pragma solidity ^0.4.11;
contract ERC20 {
function balanceOf(address _owner) constant returns (uint256);
function transfer(address _to, uint256 _value) returns (bool);
}
contract Wallet {
address public owner;
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function Wallet() {
owner = msg.sender;
}
function() payable {}
function collectToken(address _token) onlyOwner {
uint256 bal = ERC20(_token).balanceOf(this);
ERC20(_token).transfer(owner, bal);
}
function destroy() onlyOwner {
selfdestruct(owner);
}
function collect() onlyOwner {
owner.transfer(this.balance);
}
}