Minimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
Historical Significance
In late 2017 the standard way to hold value at an address other than your own key was to deploy one of these, and the standard way to write it was to start from the published multi signature wallet and delete. What survives here is the wallet as an interface rather than as a policy: a single execute, a single owner, no limits, no daily allowance, no confirmations. Account abstraction arguments that came years later are arguments about what to put back.
The operator that deployed this fleet kept ownership of every wallet and used the earliest of them to receive an EOS token distribution and forward it onward. Most of the rest were deployed and never used, which is its own piece of evidence about the period: addresses were cheap, and holding a supply of them in advance was a normal thing to do.
Token Information
Key Facts
Description
Two functions and one storage slot. owner is set to whoever deployed the contract and never changes, since there is no transfer of ownership here. execute takes a destination, an ether amount and a calldata blob, checks that the caller is the owner, forwards the call with the value attached, and reverts if it fails.
The return value is the detail that gives away its lineage. execute returns keccak256 of msg.data and block.number, which is the transaction identifier the multi signature wallet in ethereum/dapp-bin hands back when a proposed operation still needs confirmations. Here there is nobody to confirm anything: a single owner means the call always executes immediately, and the hash is returned for nothing. This is that wallet with the multi signature logic cut away and the shape of its interface left behind.
The payable fallback means the wallet holds ether, and execute is how it leaves. Because the calldata blob is arbitrary, the same function that sends ether also moves ERC20 tokens, by passing a transfer call as data with a value of zero.
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.11;
contract Owned {
address public owner;
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function Owned() {
owner = msg.sender;
}
}
contract OwnedWallet is Owned {
function execute(address _to, uint256 _value, bytes _data) onlyOwner returns (bytes32 _r) {
require(_to.call.value(_value)(_data));
_r = sha3(msg.data, block.number);
}
function () payable {
}
}External Links
Related contracts
OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0x650f78...5cc036October 31, 2017OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0x777d41...d4ada9October 31, 2017OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0x18de5d...d620f6October 31, 2017OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0x6db09d...5413f6October 31, 2017OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0x048fc1...4d3c5cOctober 31, 2017OwnedWallet
Same deployerMinimal single owner execution wallet from late 2017: one owner, one execute call that can send ether and arbitrary calldata anywhere.
0xd2d7b0...f50c57October 31, 2017