mirror of
				https://github.com/Instadapp/InstaContract.git
				synced 2024-07-29 22:47:45 +00:00 
			
		
		
		
	Added flexibility to MoatAddress.
This commit is contained in:
		
							parent
							
								
									9b366f95e6
								
							
						
					
					
						commit
						93c0043a22
					
				|  | @ -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; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -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); | ||||
|         return (fees, feeBool); | ||||
|     } | ||||
| 
 | ||||
|     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 | ||||
|         ); | ||||
|     function enableFees() public onlyAdmin { | ||||
|         feeBool = true; | ||||
|     } | ||||
| 
 | ||||
|     function makerBorrow( | ||||
|         uint lockETH, | ||||
|         uint loanDAI | ||||
|     ) public payable | ||||
|     { | ||||
| 
 | ||||
|         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; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Sowmayjain
						Sowmayjain