UnderlyingCreditTokenFactory.sol
1 pragma solidity >=0.6.0; 2 pragma experimental ABIEncoderV2; 3 4 import "../../deployment/Deployer.sol"; 5 import "../../deployment/ManagedContract.sol"; 6 import "./UnderlyingCreditToken.sol"; 7 import "../../interfaces/IERC20Details.sol"; 8 import "../../interfaces/UnderlyingFeed.sol"; 9 10 contract UnderlyingCreditTokenFactory is ManagedContract { 11 12 address private deployerAddress; 13 14 event NewUnderlyingCreditToken( 15 address indexed udlcdtk, 16 address indexed udlAsset 17 ); 18 19 function initialize(Deployer deployer) override internal { 20 deployerAddress = address(deployer); 21 } 22 23 function create(address _udlFeedAddr) external returns (address) { 24 //cant use proxies unless all extenral addrs store here 25 require(deployerAddress != address(0), "bad deployer addr"); 26 address _udlAsset = UnderlyingFeed(_udlFeedAddr).getUnderlyingAddr(); 27 address udlcdtk = address( 28 new UnderlyingCreditToken( 29 deployerAddress, 30 _udlAsset, 31 IERC20Details(_udlAsset).name(), 32 IERC20Details(_udlAsset).symbol() 33 ) 34 ); 35 emit NewUnderlyingCreditToken(udlcdtk, _udlAsset); 36 return udlcdtk; 37 } 38 }