From 93c0043a22791354966b4214169538d02f8199a8 Mon Sep 17 00:00:00 2001 From: Sowmayjain Date: Sat, 27 Oct 2018 16:41:57 +0530 Subject: [PATCH] Added flexibility to MoatAddress. --- contracts/MoatAddress.sol | 68 +++++++--- contracts/MoatResolver.sol | 219 ++---------------------------- contracts/{ => bin}/MoatAsset.sol | 0 3 files changed, 62 insertions(+), 225 deletions(-) rename contracts/{ => bin}/MoatAsset.sol (100%) diff --git a/contracts/MoatAddress.sol b/contracts/MoatAddress.sol index a2189e9..9783bed 100644 --- a/contracts/MoatAddress.sol +++ b/contracts/MoatAddress.sol @@ -1,15 +1,44 @@ -// addresses name - address, asset, resolver, moatkyber, moatmaker +// addresses name - address, asset, resolver, moatkyber, moatmaker, admin pragma solidity ^0.4.24; contract AddressRegistry { - event AddressChanged(string name, address target); - mapping(bytes32 => address) internal addressRegistry; + event AddressChanged(string name, address addr); + event ResolverApproved(address user, address addr); + event ResolverDisapproved(address user, address addr); - // Resolver Contract Addresses >> Asset Owner Address >> Bool - mapping(address => mapping(address => bool)) allowedResolver; + // Addresses managing the protocol governance + mapping(address => bool) governors; + + // Address registry of connected smart contracts + mapping(bytes32 => address) registry; + + // Contract addresses having rights to perform tasks, approved by users + // Resolver Contract >> User >> Approved + mapping(address => mapping(address => bool)) resolvers; + +} + +contract Governance is AddressRegistry { + + // governance code goes here to update the admin in "registry" mapping + +} + + +contract ManageRegistry is Governance { + + function setAddr(string name, address newAddr) public onlyAdmin { + registry[keccak256(name)] = newAddr; + emit AddressChanged(name, newAddr); + } + + function getAddr(string name) public view returns(address addr) { + addr = registry[keccak256(name)]; + require(addr != address(0), "Not a valid address."); + } modifier onlyAdmin() { require( @@ -19,30 +48,31 @@ contract AddressRegistry { _; } - constructor() public { - addressRegistry[keccak256("admin")] = msg.sender; - } +} - function setAddr(string name, address newAddress) public onlyAdmin { - addressRegistry[keccak256(name)] = newAddress; - emit AddressChanged(name, newAddress); - } - function getAddr(string name) public view returns(address addr) { - addr = addressRegistry[keccak256(name)]; - require(addr != address(0), "Not a valid address."); - } +contract ManageResolvers is ManageRegistry { function approveResolver() public { - allowedResolver[getAddr("resolver")][msg.sender] = true; + resolvers[getAddr("resolver")][msg.sender] = true; + emit ResolverApproved(msg.sender, getAddr("resolver")); } function disapproveResolver() public { - allowedResolver[getAddr("resolver")][msg.sender] = false; + resolvers[getAddr("resolver")][msg.sender] = false; + emit ResolverDisapproved(msg.sender, getAddr("resolver")); } function isApprovedResolver(address user) public view returns(bool) { - return allowedResolver[getAddr("resolver")][user]; + return resolvers[getAddr("resolver")][user]; + } + +} + +contract InitRegistry is ManageResolvers { + + constructor() public { + registry[keccak256("admin")] = msg.sender; } } \ No newline at end of file diff --git a/contracts/MoatResolver.sol b/contracts/MoatResolver.sol index 0604c0f..ceddd54 100644 --- a/contracts/MoatResolver.sol +++ b/contracts/MoatResolver.sol @@ -1,51 +1,11 @@ -// Global Freeze Variable -// withdraw store the 0.5% on the contract itself and can be withdrawn by admin addresses -// after sometime of inactivity, admin have power to change the ownership of the wealth. What say? -// still didn't factor 18 decimal thing on Kyber - pragma solidity ^0.4.24; -interface AddressRegistry { - function getAddr(string addrName) external returns(address); -} - interface token { - function transfer(address receiver, uint amount) external returns(bool); + function transfer(address receiver, uint amount) external returns (bool); } -interface MoatAsset { - function getBalance(address assetHolder, address tokenAddr) external view returns (uint256 balance); - function transferAssets( - address tokenAddress, - uint amount, - address sendTo, - address target - ) external; - function updateBalance( - address tokenAddress, - uint amount, - bool credit, - address user - ) external; -} - -interface MoatKyber { - function executeTrade( - uint weiAmt, - address src, - address dest, - uint srcAmt, - uint slipRate, - address walletId - ) external returns (uint); -} - -interface MoatMaker { - function getLoan( - address borrower, - uint lockETH, - uint loanDAI - ) external returns (uint, address); +interface AddressRegistry { + function getAddr(string name) external returns(address); } @@ -69,172 +29,27 @@ contract Registry { } -contract Protocols is Registry { +contract FeeDetail is Registry { - event KyberExecute( - address trader, - address src, - address dest, - uint srcAmt, - uint destAmt, - uint slipRate, - uint fees - ); - - event MakerLoan( - address borrower, - uint lockETH, - uint loanDAI, - uint feeDeduct - ); - - address eth = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; uint public fees; - bool public feesBool; + bool public feeBool; function getFees() public view returns(uint, bool) { - return (fees, feesBool); - } - - function kyberTrade( - address src, - address dest, - uint srcAmt, - uint slipRate - ) public payable - { - MoatAsset initMA = MoatAsset(getAddress("asset")); - - uint ethVal; - if (src == eth) { - ethVal = srcAmt; - } - - if (msg.value > 0 && msg.value == srcAmt) { - getAddress("moatkyber").transfer(srcAmt); - } else { - initMA.transferAssets( - src, - srcAmt, - getAddress("moatkyber"), - msg.sender - ); - } - - // initiate kyber trade - MoatKyber kybermoat = MoatKyber(getAddress("moatkyber")); - uint destAmt = kybermoat.executeTrade( - ethVal, - src, - dest, - srcAmt, - slipRate, - getAddress("admin") - ); - - uint feeCut; - uint modifiedDestAmt = destAmt; - if (feesBool) { - feeCut = destAmt/fees; - modifiedDestAmt = destAmt - feeCut; - } - - if (dest == eth) { - getAddress("asset").transfer(modifiedDestAmt); - } else { - token tokenFunctions = token(dest); - tokenFunctions.transfer(getAddress("asset"), destAmt); - } - - initMA.updateBalance( - src, - srcAmt, - false, - msg.sender - ); - - initMA.updateBalance( - dest, - modifiedDestAmt, - true, - msg.sender - ); - - emit KyberExecute( - msg.sender, - src, - dest, - srcAmt, - destAmt, - slipRate, - feeCut - ); + return (fees, feeBool); } - function makerBorrow( - uint lockETH, - uint loanDAI - ) public payable - { + function enableFees() public onlyAdmin { + feeBool = true; + } - MoatAsset initMA = MoatAsset(getAddress("asset")); - - if (msg.value > 0) { - require(lockETH == msg.value, "Possibility of glitch in the Tx"); - getAddress("moatmaker").transfer(msg.value); - } else { - initMA.transferAssets( - eth, - lockETH, - getAddress("moatmaker"), - msg.sender - ); - initMA.updateBalance( - eth, - lockETH, - false, - msg.sender - ); - } - - MoatMaker makermoat = MoatMaker(getAddress("moatmaker")); - uint daiMinted; - address daiAddr; - (daiMinted, daiAddr) = makermoat.getLoan( - msg.sender, - lockETH, - loanDAI - ); - - uint modifiedLoanDAI; - uint feeDeduct; - if (loanDAI > 0) { - if (feesBool) { - feeDeduct = loanDAI/fees; - modifiedLoanDAI = loanDAI - feeDeduct; - } - token tokenFunctions = token(daiAddr); - tokenFunctions.transfer(getAddress("asset"), modifiedLoanDAI); - initMA.updateBalance( - daiAddr, - modifiedLoanDAI, - true, - msg.sender - ); - } - - emit MakerLoan( - msg.sender, - lockETH, - loanDAI, - feeDeduct - ); + function disableFees() public onlyAdmin { + feeBool = false; } } -contract MoatResolver is Protocols { +contract MoatResolver is FeeDetail { function () public payable {} @@ -244,7 +59,7 @@ contract MoatResolver is Protocols { } function collectFees(address tokenAddress, uint amount) public onlyAdmin { - if (tokenAddress == eth) { + if (tokenAddress == 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) { msg.sender.transfer(amount); } else { token tokenFunctions = token(tokenAddress); @@ -252,12 +67,4 @@ contract MoatResolver is Protocols { } } - function enableFees() public onlyAdmin { - feesBool = true; - } - - function disableFees() public onlyAdmin { - feesBool = false; - } - } \ No newline at end of file diff --git a/contracts/MoatAsset.sol b/contracts/bin/MoatAsset.sol similarity index 100% rename from contracts/MoatAsset.sol rename to contracts/bin/MoatAsset.sol