diff --git a/contracts/avalanche/common/interfaces.sol b/contracts/avalanche/common/interfaces.sol index f9d704af..ea9c362d 100644 --- a/contracts/avalanche/common/interfaces.sol +++ b/contracts/avalanche/common/interfaces.sol @@ -15,11 +15,6 @@ interface MemoryInterface { function setUint(uint id, uint val) external; } -interface InstaMapping { - function qiTokenMapping(address) external view returns (address); - function gemJoinMapping(bytes32) external view returns (address); -} - interface AccountInterface { function enable(address) external; function disable(address) external; diff --git a/contracts/avalanche/common/stores.sol b/contracts/avalanche/common/stores.sol index d79c8041..aed57250 100644 --- a/contracts/avalanche/common/stores.sol +++ b/contracts/avalanche/common/stores.sol @@ -1,6 +1,6 @@ pragma solidity ^0.7.0; -import { MemoryInterface, InstaMapping } from "./interfaces.sol"; +import { MemoryInterface } from "./interfaces.sol"; abstract contract Stores { @@ -18,12 +18,7 @@ abstract contract Stores { /** * @dev Return memory variable address */ - MemoryInterface constant internal instaMemory = MemoryInterface(0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F); - - /** - * @dev Return InstaDApp Mapping Addresses - */ - InstaMapping constant internal instaMapping = InstaMapping(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); + MemoryInterface constant internal instaMemory = MemoryInterface(0x3254Ce8f5b1c82431B8f21Df01918342215825C2); /** * @dev Get Uint value from InstaMemory Contract. diff --git a/contracts/avalanche/connectors/benqi/main.sol b/contracts/avalanche/connectors/benqi/main.sol index 1a56540c..97d8daa3 100644 --- a/contracts/avalanche/connectors/benqi/main.sol +++ b/contracts/avalanche/connectors/benqi/main.sol @@ -436,6 +436,6 @@ abstract contract BenqiResolver is Events, Helpers { } } -contract ConnectV2Benqi is BenqiResolver { +contract ConnectV2BenqiAvalanche is BenqiResolver { string public name = "Benqi-v1"; } diff --git a/contracts/avalanche/mapping/benqi.sol b/contracts/avalanche/mapping/benqi.sol index 430ce7fe..0ce2579c 100644 --- a/contracts/avalanche/mapping/benqi.sol +++ b/contracts/avalanche/mapping/benqi.sol @@ -14,6 +14,10 @@ interface QiTokenInterface { function underlying() external view returns (address); } +interface MappingControllerInterface { + function hasRole(address,address) external view returns (bool); +} + abstract contract Helpers { struct TokenMap { @@ -24,10 +28,13 @@ abstract contract Helpers { event LogQiTokenAdded(string indexed name, address indexed token, address indexed qitoken); event LogQiTokenUpdated(string indexed name, address indexed token, address indexed qitoken); - ConnectorsInterface public immutable connectors; - + // InstaConnectorsV2 + ConnectorsInterface public constant connectors = ConnectorsInterface(0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14); // InstaIndex Address. - IndexInterface public constant instaIndex = IndexInterface(0x2971AdFa57b20E5a416aE5a708A8655A9c74f723); + IndexInterface public constant instaIndex = IndexInterface(0x6CE3e607C808b4f4C26B7F6aDAeB619e49CAbb25); + + // InstaMappingController Address. + MappingControllerInterface public constant mappingController = MappingControllerInterface(0xF2113d0c99f36D7D6F6c6FAf05E0863892255999); address public constant avaxAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; @@ -38,8 +45,14 @@ abstract contract Helpers { _; } - constructor(address _connectors) { - connectors = ConnectorsInterface(_connectors); + modifier hasRoleOrIsChief { + require( + msg.sender == instaIndex.master() || + connectors.chief(msg.sender) || + mappingController.hasRole(address(this), msg.sender), + "not-an-chief/controller" + ); + _; } function _addQitokenMapping( @@ -78,8 +91,7 @@ abstract contract Helpers { string[] calldata _names, address[] memory _tokens, address[] calldata _qitokens - ) external { - require(msg.sender == instaIndex.master(), "not-master"); + ) external isChief { require(_names.length == _tokens.length, "updateQitokenMapping: not same length"); require(_names.length == _qitokens.length, "updateQitokenMapping: not same length"); @@ -112,7 +124,7 @@ abstract contract Helpers { string[] memory _names, address[] memory _tokens, address[] memory _qitokens - ) external isChief { + ) external hasRoleOrIsChief { _addQitokenMapping(_names, _tokens, _qitokens); } @@ -123,15 +135,14 @@ abstract contract Helpers { } -contract InstaBenqiMapping is Helpers { +contract InstaBenqiMappingAvalanche is Helpers { string constant public name = "Benqi-Mapping-v1.0"; constructor( - address _connectors, string[] memory _qitokenNames, address[] memory _tokens, address[] memory _qitokens - ) Helpers(_connectors) { + ) { _addQitokenMapping(_qitokenNames, _tokens, _qitokens); } } \ No newline at end of file diff --git a/contracts/avalanche/static/basic.sol b/contracts/avalanche/static/basic.sol deleted file mode 100644 index 15294619..00000000 --- a/contracts/avalanche/static/basic.sol +++ /dev/null @@ -1,77 +0,0 @@ -pragma solidity ^0.7.0; - -/** - * @title StaticConnectBasic. - * @dev Static Connector to withdraw assets. - */ - -interface TokenInterface { - function balanceOf(address) external view returns (uint); - function transfer(address, uint) external returns (bool); -} - -interface AccountInterface { - function isAuth(address) external view returns (bool); -} - -interface EventInterface { - function emitEvent(uint _connectorType, uint _connectorID, bytes32 _eventCode, bytes calldata _eventData) external; -} - -contract Memory { - - /** - * @dev Return InstaEvent Address. - */ - function getEventAddr() internal pure returns (address) { - return 0x2af7ea6Cb911035f3eb1ED895Cb6692C39ecbA97; - } - - function connectorID() public pure returns(uint _type, uint _id) { - (_type, _id) = (2, 1); - } - -} - -contract BasicResolver is Memory { - - event LogWithdraw(address arc20, uint tokenAmt, address to); - - /** - * @dev AVAX Address. - */ - address constant internal avaxAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; - - /** - * @dev Withdraw Assets To Smart Account. - * @param arc20 Token Address. - * @param tokenAmt Token Amount. - */ - function withdraw( - address arc20, - uint tokenAmt - ) external payable { - uint amt; - if (arc20 == avaxAddr) { - amt = tokenAmt == uint(-1) ? address(this).balance : tokenAmt; - msg.sender.transfer(amt); - } else { - TokenInterface token = TokenInterface(arc20); - amt = tokenAmt == uint(-1) ? token.balanceOf(address(this)) : tokenAmt; - token.transfer(msg.sender, amt); - } - - emit LogWithdraw(arc20, amt, msg.sender); - - bytes32 _eventCode = keccak256("LogWithdraw(address,uint256,address)"); - bytes memory _eventParam = abi.encode(arc20, amt, msg.sender); - (uint _type, uint _id) = connectorID(); - EventInterface(getEventAddr()).emitEvent(_type, _id, _eventCode, _eventParam); - } - -} - - -contract StaticConnectBasic is BasicResolver { - string public constant name = "Static-Basic-v1"; -} \ No newline at end of file