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