Withdrawal wallet that asks a controller for the current handler address and delegates the whole call to it.
Historical Significance
Declaring a signature and then ignoring the decoded arguments is a pattern worth recognising. It keeps the selector stable for callers and for block explorers while leaving the actual behaviour entirely in a contract that can be swapped later. Every deposit address deployed this way inherits new withdrawal logic the moment the controller points somewhere else.
Key Facts
Description
One storage slot holds a controller. withdraw takes a token, a recipient and an amount, but does nothing with them directly: it asks the controller for getSender and delegatecalls that address with the original calldata, returning whatever the delegate reports.
Because the call is a delegatecall, the handler executes against this contract's storage and balance, so it can move funds that belong to the wallet. The declared parameters exist only to fix the function selector; the handler re-reads them from calldata itself.
Source Verified
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.22;
contract Controller {
function getSender() public returns (address);
}
contract Wallet {
Controller controller;
function withdraw(address _token, address _to, uint256 _amount) public returns (bool) {
return controller.getSender().delegatecall(msg.data);
}
}