An 86 byte delegatecall proxy that forwards every call to one hardcoded implementation and passes the return data straight back.
Historical Significance
A gas study in miniature. Using msize instead of reading the free memory pointer, forwarding gas as a fraction rather than a subtraction, and reusing the switch statement's own copy of the result all shave bytes off a pattern that later became the standard minimal proxy. Three sibling families share this exact code and differ only in the twenty bytes of the implementation address.
Key Facts
Description
The whole contract is a single payable fallback written in inline assembly. It allocates scratch space with msize, copies the calldata there, delegatecalls a hardcoded implementation address with 63/64ths of the remaining gas, copies the return data out, and then either returns it or reverts with it depending on the result.
The deployed runtime carries no metadata trailer, which is unusual for its era and means the deployer stripped the compiler footer before deployment. That is why the on chain code is 86 bytes rather than 129. The Solidity that produces those 86 bytes exactly is published here; solc 0.4.14 with the optimizer on and runs set to 1 reproduces them byte for byte. The registry record uses a Yul verbatim equivalent, because the stripped trailer makes the Solidity form a length mismatch for automated verifiers.
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.12;
contract Proxy {
function () payable {
assembly {
let ptr := msize()
mstore(0x40, add(ptr, calldatasize))
calldatacopy(ptr, 0, calldatasize)
let result := delegatecall(div(mul(gas, 0x3f), 0x40), 0x0F32732e4885F0dD61b64eeF144329eb809a96e1, ptr, calldatasize, 0, 0)
let rptr := msize()
mstore(0x40, add(rptr, returndatasize))
returndatacopy(rptr, 0, returndatasize)
switch result
case 0 { revert(rptr, returndatasize) }
default { return(rptr, returndatasize) }
}
}
}