Bittrex deposit wallet that forwards token sweeps to a shared sweeper via delegatecall.
Historical Significance
Exchange deposit-address systems were the single largest source of contract deployments in 2017-2018. Splitting the logic into a thin per-customer wallet plus one shared sweeper let an exchange deploy a cheap contract per user while keeping the token-handling logic upgradeable in one place.
Key Facts
Description
A per-customer deposit wallet from the Bittrex exchange deposit system. Its only entry point is sweep(address,uint256), which asks a sweeper registry for the sweeper responsible for a given token via sweeperOf(address) and then delegatecalls into it, forwarding the original calldata. There is no fallback function, so any unmatched selector hits an invalid opcode. This is the trimmed variant of the published Bittrex source, with the payable fallback and tokenFallback hook removed. The runtime code matches the deployed bytecode byte for byte; only the trailing swarm metadata hash differs, because the EthereumHistory attribution comment changes the source text. Sourcify records this as a partial match and Etherscan shows it as verified.
Source Verified
Byzantium Era
First Metropolis hard fork. Added zk-SNARK precompiles, REVERT opcode, and staticcall.
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)
pragma solidity ^0.4.10;
// Copyright 2017 Bittrex
contract UserWallet {
AbstractSweeperList sweeperList;
function UserWallet(address _sweeperlist) {
sweeperList = AbstractSweeperList(_sweeperlist);
}
function sweep(address _token, uint _amount)
returns (bool) {
(_amount);
return sweeperList.sweeperOf(_token).delegatecall(msg.data);
}
}
contract AbstractSweeperList {
function sweeperOf(address _token) returns (address);
}