mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
Added InstaMappings
This commit is contained in:
parent
d6af759404
commit
0d60d29f80
58
contracts/mapping/InstaMappings.sol
Normal file
58
contracts/mapping/InstaMappings.sol
Normal file
|
@ -0,0 +1,58 @@
|
|||
pragma solidity ^0.7.0;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol";
|
||||
interface IndexInterface {
|
||||
function master() external view returns (address);
|
||||
}
|
||||
|
||||
contract InstaMappings is AccessControl {
|
||||
IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723);
|
||||
|
||||
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
|
||||
|
||||
function setMaster() public {
|
||||
require(msg.sender == address(this), "msg.sender is not this contract");
|
||||
uint256 adminCount = getRoleMemberCount(DEFAULT_ADMIN_ROLE);
|
||||
require(adminCount == 1, "setMaster::Wrong-admin-count");
|
||||
address currentMaster = getRoleMember(DEFAULT_ADMIN_ROLE, 0);
|
||||
address master = instaIndex.master();
|
||||
|
||||
if (currentMaster != master) {
|
||||
grantRole(DEFAULT_ADMIN_ROLE, master);
|
||||
revokeRole(DEFAULT_ADMIN_ROLE, currentMaster);
|
||||
}
|
||||
|
||||
adminCount = getRoleMemberCount(DEFAULT_ADMIN_ROLE);
|
||||
require(adminCount == 1, "setMaster::Wrong-admin-count");
|
||||
require(hasRole(DEFAULT_ADMIN_ROLE, master), "setMaster::InstaIndex-master-not-set");
|
||||
}
|
||||
|
||||
constructor() {
|
||||
_setupRole(DEFAULT_ADMIN_ROLE, instaIndex.master());
|
||||
_setRoleAdmin(DEFAULT_ADMIN_ROLE, ADMIN_ROLE);
|
||||
_setupRole(ADMIN_ROLE, address(this));
|
||||
}
|
||||
|
||||
function getMappingContractRole(address mappingContract) public pure returns (bytes32 role){
|
||||
assembly {
|
||||
role := mload(add(mappingContract, 32))
|
||||
}
|
||||
}
|
||||
|
||||
function hasRole(address mappingAddr, address account) public view returns (bool) {
|
||||
return super.hasRole(getMappingContractRole(mappingAddr), account);
|
||||
}
|
||||
|
||||
function grantRole(address mappingAddr, address account) public {
|
||||
super.grantRole(getMappingContractRole(mappingAddr), account);
|
||||
}
|
||||
|
||||
function revokeRole(address mappingAddr, address account) public {
|
||||
super.revokeRole(getMappingContractRole(mappingAddr), account);
|
||||
}
|
||||
|
||||
function renounceRole(address mappingAddr, address account) public {
|
||||
super.renounceRole(getMappingContractRole(mappingAddr), account);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user