Back to Home

Wallet

other
0x24eb8813f35f...cb2c3ba068a7
ByzantiumSource VerifiedEdit this contract

Bytecode verified via sibling

This contract shares identical runtime bytecode with Wallet (0x5aa66081...) which has been verified through compiler archaeology.

Deployed January 4, 2018 (8 years ago)Block 4,850,028

Exchange deposit wallet contract with ETH/token sweep functions. The most deployed bytecode in Ethereum history with 709,039 siblings.

Key Facts

Deployment Block
4,850,028
Deployment Date
Jan 4, 2018, 12:35 AM
Code Size
670.0 B
Gas at Deploy
253,854

Description

UserWallet is a minimal 4-function exchange deposit wallet deployed at peak ICO mania in January 2018. The deployer — an exchange hot wallet with nonce 121,422 — spawned 709,039 identical contracts, one per user. Each contract's owner variable is set to msg.sender at deploy time (the exchange hot wallet), enabling the exchange to sweep both ETH and ERC20 token balances on demand.

The four functions: (1) fallback accepts incoming ETH deposits; (2) collect() sweeps the ETH balance to owner; (3) collectToken(address) queries an ERC20 token's balance for this contract, then transfers it to owner; (4) destroy() calls selfdestruct, sending remaining ETH to owner.

Source reconstruction required identifying: a Solidity modifier pattern (not inline require) for access control; old-style if/throw instead of require(); and Token t = Token(token) local variable caching in collectToken, which causes the compiler to maintain an extra storage slot on the EVM stack. These subtle source-level details produce the specific DUP2/SWAP1/POP opcode sequences that distinguish this bytecode from superficially similar reconstructions.

Source Verified

SolidityNear-exact bytecode match
Compiler: v0.4.12

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.

Detected Type: other

Byzantium Era

First Metropolis hard fork. Added zk-SNARK precompiles, REVERT opcode, and staticcall.

Block span: 4,370,0007,279,999
October 16, 2017February 28, 2019

Bytecode Overview

Opcodes670
Unique Opcodes114
Jump Instructions37
Storage Operations9

Verified Source Available

Source verified through compiler archaeology (near-exact bytecode match).

View Verification Proof
Show 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);
    }
}

External Links