/ contracts / finance / credit / UnderlyingCreditTokenFactory.sol
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  }