/ contracts / finance / hedging / D8xHedgingManagerFactory.sol
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  }