Back to Home

ShapeShift Chain-Split Forwarder

utility
0xa2d5c5eb9bff...1747b7d549de
DAO ForkExact Bytecode Match
Deployed July 24, 2016 (9 years ago)Block 1,951,734

Earliest ShapeShift on-chain contract (Jul 24, 2016). Simple ETH forwarder with an active flag — routes deposits to target when active and msg.value > 0.

Key Facts

Deployment Block
1,951,734
Deployment Date
Jul 24, 2016, 12:00 AM
Code Size
94.0 B
Transactions by Year
201616

Description

The earliest of four ShapeShift chain-split contracts deployed in the week following the DAO hard fork (July 20, 2016). Deployed July 24, 2016 by the ShapeShift ETH hot wallet (0x9e6316). The contract has no function selectors — only a fallback function that checks whether the contract is active and msg.value is non-zero, then forwards ETH to the stored target address via send(). Two days later, ShapeShift deployed the more sophisticated ShapeShiftReceiver and ShapeShiftSplit contracts using an external forked() oracle for chain detection.

Source Verified

SolidityExact bytecode match(94 bytes)
Compiler: solc v0

Exact runtime bytecode match (94 bytes). Key finding: active == false condition (not !active) generates the DUP1 + ISZERO + ISZERO + EQ opcode pattern. Matches solc v0.2.1 through v0.3.5 with optimizer enabled.

Heuristic Analysis

The following characteristics were detected through bytecode analysis and may not be accurate.

Detected Type: utility

DAO Fork Era

The controversial fork to recover funds from The DAO hack.

Block span: 1,920,0002,462,999
July 20, 2016October 18, 2016

Bytecode Overview

Opcodes94
Unique Opcodes30
Jump Instructions8
Storage Operations3

Verified Source Available

Source verified through compiler archaeology and exact bytecode matching.

View Verification Proof
Show source code (Solidity)
contract Forked {
    function forked() returns (bool);
}

contract ShapeShiftFallback {
    bool active;
    address checker;
    address target;

    function ShapeShiftFallback(address _checker, address _target) {
        active = true;
        checker = _checker;
        target = _target;
    }

    function() {
        if (active == false || msg.value == 0 || !target.send(msg.value)) throw;
    }
}

External Links