Deposit address that asks a registry where to send funds, then forwards and logs.
Historical Significance
Resolving the destination at payment time rather than storing it is the opposite trade to a hardcoded forwarder: it costs an external call on every deposit and buys the ability to move the receiving wallet later. Two separate deployment runs produced identical executable code from source that differed only outside the code.
Key Facts
Description
A deposit address with no callable functions. Any ether sent to it triggers a lookup of getMultisigWallet() on the registry in its first storage slot, transfers the whole amount to whatever address comes back, and emits a Deposited event recording the sender, this contract, the receiving wallet and the amount. Because the destination is read fresh on every payment, the operator could redirect deposits without touching any of the addresses already issued. 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.22;
contract Registry {
function getMultisigWallet() external returns (address);
}
contract DepositWallet {
Registry registry;
event Deposited(address indexed sender, address indexed deposit, address indexed wallet, uint256 amount);
function () public payable {
address wallet = registry.getMultisigWallet();
wallet.transfer(msg.value);
Deposited(msg.sender, this, wallet, msg.value);
}
}