Deposit address that pushes ether onward the moment it arrives and can be told separately to sweep any ERC-20 balance it has collected.
Historical Significance
The single shared event is the design decision worth pointing at. One log shape covers both ether and tokens, with zero standing in for ether, which means an exchange watching this fleet subscribes to one topic and gets every deposit of every kind. That convention, zero address meaning native ether, later became near universal in DeFi accounting.
Key Facts
Description
One immutable address is stored at construction. The payable fallback sends the whole incoming value on to it and logs the move; if the send fails the assert consumes the remaining gas, so a payment either completes in the same transaction or the sender loses the attempt outright.
Tokens cannot trigger a fallback, so they pile up in the contract instead. forwardTokens is the manual counterpart: it reads the contract's balance of the given token, transfers all of it to the destination, and logs the move. Anyone may call it, which is safe here because the destination is fixed and the only possible outcome is moving funds to where they were always going.
Both paths emit the same event, with the token address set to zero for ether. Three of its four fields are indexed, so an operator can filter by destination, by source contract, or by token without reading any contract storage.
Source Verified
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Byzantium Era
First Metropolis hard fork. Added zk-SNARK precompiles, REVERT opcode, and staticcall.
Bytecode Overview
Verified Source Available
This contract has verified source code.
View Verification ProofShow source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
pragma solidity ^0.4.15;
contract ERC20 {
function balanceOf(address _owner) constant returns (uint256);
function transfer(address _to, uint256 _value) returns (bool);
}
contract Forwarder {
address public destinationAddress;
event LogForward(address indexed from, address indexed to, address indexed token, uint256 value);
function Forwarder(address _destinationAddress) {
destinationAddress = _destinationAddress;
}
function () payable {
if (msg.value > 0) {
assert(destinationAddress.send(msg.value));
LogForward(this, destinationAddress, 0, msg.value);
}
}
function forwardTokens(address _token) {
uint256 balance = ERC20(_token).balanceOf(this);
assert(ERC20(_token).transfer(destinationAddress, balance));
LogForward(this, destinationAddress, _token, balance);
}
}External Links
Related contracts
Msg
Same eraMinimal contract that stores a single public string in state, exposed via the auto-generated m() getter. First of 281 identical siblings. Source verified by EthereumHistory.
0x2c8f58...37b173January 13, 2018Wallet
Same eraToken collection wallet that moves an entire token balance to a chosen address, without the ERC223 callback handler.
0x002204...531195January 19, 2018Wallet
Same eraOwner wallet that forwards ether to its owner, logs any call from a stranger with the full calldata, and lets the owner execute arbitrary calls.
0x001feb...9e7a4fJanuary 20, 2018Sweeper
Same eraMinimal ETH sweeper, first of 1,900 identical deployments in a 2-day burst in January 2018. All sweep to a single hardcoded destination. Source verified by EthereumHistory.
0xeb15f6...6cb3e1January 23, 2018Sweep
Same eraETH sweep-to-fixed-recipient — fallback forwards the contract's entire balance to `0xd293a88c…8d4` via `.send()` and reverts on failure. Massive cluster of 1899 identical deployments — likely deposit-address contracts for a single custodian.
0x00188b...b260a7January 23, 2018Forwarder
Same eraDeposit forwarder in the BitGo style, sending ether to a parent address and able to flush stranded tokens to the same place.
0x00d083...4d5405February 2, 2018