mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma solidity ^0.6.0;
 | |
| pragma experimental ABIEncoderV2;
 | |
| 
 | |
| interface MemoryInterface {
 | |
|     function getUint(uint _id) external returns (uint _num);
 | |
|     function setUint(uint _id, uint _val) external;
 | |
| }
 | |
| 
 | |
| contract DSMath {
 | |
|     uint256 constant WAD = 10 ** 18;
 | |
| 
 | |
|     function add(uint x, uint y) internal pure returns (uint z) {
 | |
|         require((z = x + y) >= x, "math-not-safe");
 | |
|     }
 | |
| 
 | |
|     function mul(uint x, uint y) internal pure returns (uint z) {
 | |
|         require(y == 0 || (z = x * y) / y == x, "math-not-safe");
 | |
|     }
 | |
| 
 | |
|     function wmul(uint x, uint y) internal pure returns (uint z) {
 | |
|         z = add(mul(x, y), WAD / 2) / WAD;
 | |
|     }
 | |
| }
 | |
| 
 | |
| contract Setup is DSMath {
 | |
| 
 | |
|      /**
 | |
|      * @dev Return InstAaMemory Address.
 | |
|      */
 | |
|     function getMemoryAddr() internal pure returns (address) {
 | |
|         return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Get Uint value from InstaMemory Contract.
 | |
|     */
 | |
|     function getUint(uint getId, uint val) internal returns (uint returnVal) {
 | |
|         returnVal = getId == 0 ? val : MemoryInterface(getMemoryAddr()).getUint(getId);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Set Uint value in InstaMemory Contract.
 | |
|     */
 | |
|     function setUint(uint setId, uint val) internal {
 | |
|         if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);
 | |
|     }
 | |
| 
 | |
|      /**
 | |
|      * @dev Connector ID and Type. TODO: change.
 | |
|      */
 | |
|     function connectorID() public pure returns(uint _type, uint _id) {
 | |
|         (_type, _id) = (1, 37);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| contract FeeResolver is Setup {
 | |
| 
 | |
|     /**
 | |
|      * @dev Calculate fee
 | |
|      */
 | |
|     function calculateFee(uint amount, uint fee, uint getId, uint setId, uint setIdFee) external payable {
 | |
|         uint _amt = getUint(getId, amount);
 | |
| 
 | |
|         uint feeAmt = wmul(_amt, fee);
 | |
| 
 | |
|         uint totalAmt = add(_amt, feeAmt);
 | |
| 
 | |
|         setUint(setId, totalAmt);
 | |
|         setUint(setIdFee, feeAmt);
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| contract ConnectFee is FeeResolver {
 | |
|     string public constant name = "Fee-v1";
 | |
| } | 
