dsa-connectors/contracts/avalanche/common/basic.sol

56 lines
2.0 KiB
Solidity
Raw Permalink Normal View History

2022-03-22 14:55:14 +00:00
//SPDX-License-Identifier: MIT
2021-10-04 17:30:09 +00:00
pragma solidity ^0.7.0;
import { TokenInterface } from "./interfaces.sol";
import { Stores } from "./stores.sol";
import { DSMath } from "./math.sol";
abstract contract Basic is DSMath, Stores {
function convert18ToDec(uint _dec, uint256 _amt) internal pure returns (uint256 amt) {
amt = (_amt / 10 ** (18 - _dec));
}
function convertTo18(uint _dec, uint256 _amt) internal pure returns (uint256 amt) {
amt = mul(_amt, 10 ** (18 - _dec));
}
function getTokenBal(TokenInterface token) internal view returns(uint _amt) {
_amt = address(token) == avaxAddr ? address(this).balance : token.balanceOf(address(this));
}
function getTokensDec(TokenInterface buyAddr, TokenInterface sellAddr) internal view returns(uint buyDec, uint sellDec) {
buyDec = address(buyAddr) == avaxAddr ? 18 : buyAddr.decimals();
sellDec = address(sellAddr) == avaxAddr ? 18 : sellAddr.decimals();
}
function encodeEvent(string memory eventName, bytes memory eventParam) internal pure returns (bytes memory) {
return abi.encode(eventName, eventParam);
}
function approve(TokenInterface token, address spender, uint256 amount) internal {
try token.approve(spender, amount) {
} catch {
token.approve(spender, 0);
token.approve(spender, amount);
}
}
function changeAvaxAddress(address buy, address sell) internal pure returns(TokenInterface _buy, TokenInterface _sell){
_buy = buy == avaxAddr ? TokenInterface(wavaxAddr) : TokenInterface(buy);
_sell = sell == avaxAddr ? TokenInterface(wavaxAddr) : TokenInterface(sell);
}
function convertAvaxToWavax(bool isAvax, TokenInterface token, uint amount) internal {
if(isAvax) token.deposit{value: amount}();
}
function convertWavaxToAvax(bool isAvax, TokenInterface token, uint amount) internal {
if(isAvax) {
approve(token, address(token), amount);
token.withdraw(amount);
}
}
}