Single-owner wallet that forwards received ether straight to its owner and can execute arbitrary calls on the owner's behalf.
Historical Significance
The quiet return in destroyContract is the detail worth keeping. A stranger calling it gets a successful transaction that does nothing, rather than a revert, so the contract gives away nothing about who controls it through gas usage or error behaviour. The version field alongside the owner suggests these were deployed in waves by software that expected to tell generations apart later.
Key Facts
Description
Two storage values: a version number and an owner address, both readable. The payable fallback immediately transfers any received ether to the owner, so the contract never holds a balance between transactions.
execute lets the owner make an arbitrary call with an arbitrary value and payload, reverting if the call fails, and always returns zero. destroyContract self-destructs to the owner, but returns quietly instead of reverting when called by anyone else. Both are declared external rather than public, which keeps the calldata argument in calldata and makes the decoder noticeably shorter.
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.24;
contract Wallet {
uint256 public version;
address public owner;
function () public payable {
owner.transfer(msg.value);
}
function destroyContract() external {
if (msg.sender != owner) {
return;
}
selfdestruct(owner);
}
function execute(address _to, uint256 _value, bytes _data) external returns (uint256) {
require(msg.sender == owner);
require(_to.call.value(_value)(_data));
return 0;
}
}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