mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma solidity ^0.7.0;
 | |
| pragma experimental ABIEncoderV2;
 | |
| 
 | |
| import { DSMath } from "../../common/math.sol";
 | |
| import { Basic } from "../../common/basic.sol";
 | |
| import { SoloMarginContract } from "./interface.sol";
 | |
| 
 | |
| abstract contract Helpers is DSMath, Basic {
 | |
|     /**
 | |
|      * @dev Solo Margin
 | |
|      */
 | |
|     SoloMarginContract internal constant solo = SoloMarginContract(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
 | |
| 
 | |
|     /**
 | |
|      * @dev Get Dydx Actions args.
 | |
|     */
 | |
|     function getActionsArgs(uint256 marketId, uint256 amt, bool sign) internal view returns (SoloMarginContract.ActionArgs[] memory) {
 | |
|         SoloMarginContract.ActionArgs[] memory actions = new SoloMarginContract.ActionArgs[](1);
 | |
|         SoloMarginContract.AssetAmount memory amount = SoloMarginContract.AssetAmount(
 | |
|             sign,
 | |
|             SoloMarginContract.AssetDenomination.Wei,
 | |
|             SoloMarginContract.AssetReference.Delta,
 | |
|             amt
 | |
|         );
 | |
|         bytes memory empty;
 | |
|         SoloMarginContract.ActionType action = sign ? SoloMarginContract.ActionType.Deposit : SoloMarginContract.ActionType.Withdraw;
 | |
|         actions[0] = SoloMarginContract.ActionArgs(
 | |
|             action,
 | |
|             0,
 | |
|             amount,
 | |
|             marketId,
 | |
|             0,
 | |
|             address(this),
 | |
|             0,
 | |
|             empty
 | |
|         );
 | |
|         return actions;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Get Dydx Acccount arg
 | |
|     */
 | |
|     function getAccountArgs() internal view returns (SoloMarginContract.Info[] memory) {
 | |
|         SoloMarginContract.Info[] memory accounts = new SoloMarginContract.Info[](1);
 | |
|         accounts[0] = (SoloMarginContract.Info(address(this), 0));
 | |
|         return accounts;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Get Dydx Position
 | |
|     */
 | |
|     function getDydxPosition(uint256 marketId) internal returns (uint tokenBal, bool tokenSign) {
 | |
|         SoloMarginContract.Wei memory tokenWeiBal = solo.getAccountWei(getAccountArgs()[0], marketId);
 | |
|         tokenBal = tokenWeiBal.value;
 | |
|         tokenSign = tokenWeiBal.sign;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @dev Get Dydx Market ID from token Address
 | |
|     */
 | |
|     function getMarketId(address token) internal view returns (uint _marketId) {
 | |
|         uint markets = solo.getNumMarkets();
 | |
|         address _token = token == ethAddr ? wethAddr : token;
 | |
| 
 | |
|         for (uint i = 0; i < markets; i++) {
 | |
|             if (_token == solo.getMarketTokenAddress(i)) {
 | |
|                 _marketId = i;
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | 
