pragma solidity ^0.4.18; contract Registry { mapping (bytes32 => address) public isDeployed; function deploy(bytes code, address[] owners) private returns (address) { bytes32 cfAddress = getCounterfactualAddress(code , owners); address newContract; assembly { newContract := create(0, add(code, 0x20), mload(code)) } isDeployed[cfAddress] = newContract; return newContract; } function getCounterfactualAddress(bytes code, address[] owners) public pure returns (bytes32) { return keccak256(code, owners); } function resolve(bytes32 cfAddress) public view returns (address) { return isDeployed[cfAddress]; } function proxyCall(address registry, bytes32 cfAddress, bytes data) public { address to = Registry(registry).resolve(cfAddress) ; require(to.call(data)); } function proxyDelegatecall(address registry, bytes32 cfAddress, bytes data) public { address to = Registry(registry).resolve(cfAddress); require(to.delegatecall(data)); } }
0.4.18