🎸 feat: integrated MappingController for cream and reflexer

This commit is contained in:
Daksh Miglani 2021-05-11 02:04:31 +05:30
parent 92bb147509
commit 9035da5a36
2 changed files with 34 additions and 15 deletions

View File

@ -14,6 +14,10 @@ interface CTokenInterface {
function underlying() external view returns (address); function underlying() external view returns (address);
} }
interface MappingControllerInterface {
function hasRole(address,address) public view returns (bool);
}
abstract contract Helpers { abstract contract Helpers {
struct TokenMap { struct TokenMap {
@ -24,24 +28,29 @@ abstract contract Helpers {
event LogCTokenAdded(string indexed name, address indexed token, address indexed ctoken); event LogCTokenAdded(string indexed name, address indexed token, address indexed ctoken);
event LogCTokenUpdated(string indexed name, address indexed token, address indexed ctoken); event LogCTokenUpdated(string indexed name, address indexed token, address indexed ctoken);
ConnectorsInterface public immutable connectors; // TODO: thrilok, verify this address
ConnectorsInterface public constant connectors = ConnectorsInterface(0xFE2390DAD597594439f218190fC2De40f9Cf1179);
// InstaIndex Address. // InstaIndex Address.
IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723); IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723);
// TODO: add address for MappingController
MappingControllerInterface public constant mappingController = MappingControllerInterface(address(0));
address public constant ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
mapping (string => TokenMap) public cTokenMapping; mapping (string => TokenMap) public cTokenMapping;
modifier isChief { modifier hasRoleOrIsChief {
require(msg.sender == instaIndex.master() || connectors.chief(msg.sender), "not-an-chief"); require(
msg.sender == instaIndex.master() ||
connectors.chief(msg.sender) ||
mappingController.hasRole(address(this), msg.sender),
"not-an-chief"
);
_; _;
} }
constructor(address _connectors) {
connectors = ConnectorsInterface(_connectors);
}
function _addCtokenMapping( function _addCtokenMapping(
string[] memory _names, string[] memory _names,
address[] memory _tokens, address[] memory _tokens,
@ -112,7 +121,7 @@ abstract contract Helpers {
string[] memory _names, string[] memory _names,
address[] memory _tokens, address[] memory _tokens,
address[] memory _ctokens address[] memory _ctokens
) external isChief { ) external hasRoleOrIsChief {
_addCtokenMapping(_names, _tokens, _ctokens); _addCtokenMapping(_names, _tokens, _ctokens);
} }

View File

@ -13,22 +13,32 @@ interface IndexInterface {
function master() external view returns (address); function master() external view returns (address);
} }
interface MappingControllerInterface {
function hasRole(address,address) public view returns (bool);
}
contract Helpers { contract Helpers {
ConnectorsInterface public constant connectors = ConnectorsInterface(0x7D53E606308A2E0A1D396F30dc305cc7f8483436); // TODO: thrilok, verify this address
ConnectorsInterface public constant connectors = ConnectorsInterface(0xFE2390DAD597594439f218190fC2De40f9Cf1179);
IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723); IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723);
// TODO: add address for MappingController
MappingControllerInterface public constant mappingController = MappingControllerInterface(address(0));
uint public version = 1; uint public version = 1;
mapping (bytes32 => address) public collateralJoinMapping; mapping (bytes32 => address) public collateralJoinMapping;
event LogAddCollateralJoinMapping(address[] collateralJoin); event LogAddCollateralJoinMapping(address[] collateralJoin);
modifier isChief { modifier hasRoleOrIsChief {
require(connectors.chief(msg.sender) || instaIndex.master() == msg.sender, "not-a-chief"); require(
msg.sender == instaIndex.master() ||
connectors.chief(msg.sender) ||
mappingController.hasRole(address(this), msg.sender),
"not-an-chief"
);
_; _;
} }
function addCollateralJoinMapping(address[] memory collateralJoins) public isChief { function addCollateralJoinMapping(address[] memory collateralJoins) public hasRoleOrIsChief {
_addCollateralJoinMapping(collateralJoins); _addCollateralJoinMapping(collateralJoins);
} }