dsa-resolvers-deprecated/contracts/protocols/mainnet/resolvers/erc20/main.sol
2021-06-16 07:23:37 +08:00

91 lines
2.7 KiB
Solidity

pragma solidity ^0.6.10;
pragma experimental ABIEncoderV2;
import {TokenInterface} from "./interface.sol";
contract Resolver {
struct TokenData {
bool isToken;
string name;
string symbol;
uint256 decimals;
}
function getTokenDetails(address[] memory tknAddress)
public
view
returns (TokenData[] memory)
{
TokenData[] memory tokenDatas = new TokenData[](tknAddress.length);
for (uint256 i = 0; i < tknAddress.length; i++) {
if (tknAddress[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
tokenDatas[i] = TokenData(true, "ETHER", "ETH", 18);
} else {
TokenInterface token = TokenInterface(tknAddress[i]);
bool isToken = true;
try token.symbol() {} catch {
isToken = false;
continue;
}
try token.name() {} catch {
isToken = false;
continue;
}
try token.decimals() {} catch {
isToken = false;
continue;
}
tokenDatas[i] = TokenData(
true,
token.name(),
token.symbol(),
token.decimals()
);
}
}
return tokenDatas;
}
function getBalances(address owner, address[] memory tknAddress)
public
view
returns (uint256[] memory)
{
uint256[] memory tokensBal = new uint256[](tknAddress.length);
for (uint256 i = 0; i < tknAddress.length; i++) {
if (tknAddress[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
tokensBal[i] = owner.balance;
} else {
TokenInterface token = TokenInterface(tknAddress[i]);
tokensBal[i] = token.balanceOf(owner);
}
}
return tokensBal;
}
function getAllowances(
address owner,
address spender,
address[] memory tknAddress
) public view returns (uint256[] memory) {
uint256[] memory tokenAllowances = new uint256[](tknAddress.length);
for (uint256 i = 0; i < tknAddress.length; i++) {
if (tknAddress[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
tokenAllowances[i] = 0;
} else {
TokenInterface token = TokenInterface(tknAddress[i]);
tokenAllowances[i] = token.allowance(owner, spender);
}
}
return tokenAllowances;
}
}
contract InstaERC20Resolver is Resolver {
string public constant name = "ERC20-Resolver-v1.1";
}