D8xHedgingManagerFactory.sol
1 pragma solidity >=0.6.0; 2 pragma experimental ABIEncoderV2; 3 4 import "../../deployment/Deployer.sol"; 5 import "../../deployment/ManagedContract.sol"; 6 import "./D8xHedgingManager.sol"; 7 8 contract D8xHedgingManagerFactory is ManagedContract { 9 10 address public orderBookAddr; 11 address public perpetualProxy; 12 13 address private deployerAddress; 14 15 event NewHedgingManager( 16 address indexed hedgingManager, 17 address indexed pool 18 ); 19 20 constructor(address _orderBookAddr, address _perpetualProxy) public { 21 orderBookAddr = _orderBookAddr; 22 perpetualProxy = _perpetualProxy; 23 } 24 25 function initialize(Deployer deployer) override internal { 26 deployerAddress = address(deployer); 27 } 28 29 function getRemoteContractAddresses() external view returns (address, address) { 30 bytes memory data = abi.encodeWithSelector(bytes4(keccak256("orderBookAddr()"))); 31 bytes memory data1 = abi.encodeWithSelector(bytes4(keccak256("perpetualProxy()"))); 32 33 (, bytes memory returnedData) = getImplementation().staticcall(data); 34 (, bytes memory returnedData1) = getImplementation().staticcall(data1); 35 36 address obAddr = abi.decode(returnedData, (address)); 37 address ppAddr = abi.decode(returnedData1, (address)); 38 39 require(obAddr != address(0), "bad order book"); 40 require(ppAddr != address(0), "bad perp proxy"); 41 42 return (obAddr, ppAddr); 43 } 44 45 function create(address _poolAddr) external returns (address) { 46 //cant use proxies unless all extenral addrs store here 47 require(deployerAddress != address(0), "bad deployer addr"); 48 address hdgMngr = address( 49 new D8xHedgingManager( 50 deployerAddress, 51 _poolAddr 52 ) 53 ); 54 /* 55 address proxyAddr = address( 56 new Proxy( 57 getOwner(), 58 hdgMngr 59 ) 60 ); 61 ManagedContract(proxyAddr).initializeAndLock(Deployer(deployerAddress));*/ 62 emit NewHedgingManager(hdgMngr, _poolAddr); 63 return hdgMngr; 64 } 65 }