ShapeShift conditional ETH splitter (Jul 26, 2016). split(address,uint) routes ETH to a specified address — but only on the ETC chain (where forked() returns false). Returns false on ETH chain.
Historical Significance
The only contract in ShapeShifts July 2016 chain-split family with an explicit callable function rather than a pure fallback. The double forked() oracle call pattern may reflect caution during an operationally uncertain post-fork environment.
Context
All four ShapeShift chain-split contracts (0xa2d5c5, 0x3e7756, 0x89afcc, 0xfdc6a6) were deployed by the same wallet (0x9e6316f44baeeee5d41a1070516cc5fa47baf227) between July 24-26, 2016 -- during the six days between the DAO hard fork and when replay protection via EIP-155 was broadly adopted. ShapeShift, funded through a Genesis allocation of approximately 36,000 ETH traceable to Erik Voorhees, was among the first exchanges to deploy on-chain routing logic in response to the fork.
Key Facts
Description
Deployed July 26, 2016, the same day as the ShapeShiftReceiver twins. The split() function takes a target address and ETH amount, calls the forked() oracle twice to verify chain state, and routes funds only on the ETC chain. On the ETH chain (where forked() returns true), it returns false immediately without sending. The double forked() call pattern — first to short-circuit if on ETH, second to confirm before sending — appears intentional for safety. Deployed alongside the two ShapeShiftReceiver contracts within the same hour.
Source Verified
Exact runtime bytecode match (301 bytes). The two forked() calls are present in source — first call short-circuits if on ETH chain, second verifies before sending on ETC chain. Matches solc v0.2.1 through v0.3.5 with optimizer.
DAO Fork Era
The controversial fork to recover funds from The DAO hack.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow source code (Solidity)
contract Forked {
function forked() returns (bool);
}
contract ShapeShiftSplit {
address forkedContract;
function ShapeShiftSplit(address _forkedContract) {
forkedContract = _forkedContract;
}
function split(address _to, uint _value) returns (bool) {
if (Forked(forkedContract).forked()) return false;
if (!Forked(forkedContract).forked() && _to.send(_value)) return true;
throw;
}
}External Links
Related contracts
ShapeShift Chain-Split Forwarder
Same deployerEarliest ShapeShift on-chain contract (Jul 24, 2016). Simple ETH forwarder with an active flag — routes deposits to target when active and msg.value > 0.
0xa2d5c5...d549deJuly 24, 2016ShapeShift Chain-Split Receiver
Same deployerShapeShift ETH/ETC routing contract (Jul 26, 2016). Forwards ETH to target only when on-chain forked() oracle result matches stored boolean — routing deposits to the correct wallet on each chain post-DAO-fork.
0x3e7756...2e7a25July 26, 2016ShapeShift Chain-Split Receiver
Same deployerShapeShift ETH/ETC routing contract (Jul 26, 2016). Twin instance of the ShapeShiftReceiver — identical bytecode, configured for the opposite chain fork state.
0x89afcc...a51456July 26, 2016