diff --git a/contracts/protocols/erc20.sol b/contracts/protocols/erc20.sol index d888e3d..f11ac46 100644 --- a/contracts/protocols/erc20.sol +++ b/contracts/protocols/erc20.sol @@ -1,12 +1,54 @@ -pragma solidity ^0.6.0; +pragma solidity ^0.6.10; +pragma experimental ABIEncoderV2; interface TokenInterface { function balanceOf(address) external view returns (uint); function allowance(address owner, address spender) external view returns (uint256); + function decimals() external view returns (uint); + function name() external view returns (string memory); + function symbol() external view returns (string memory); + } - 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 (uint i = 0; i < tknAddress.length; i++) { + if (tknAddress[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { + tokenDatas[i] = TokenData( + true, + "ETHER", + "ETH", + 18 + ); + } else { + TokenInterface token = TokenInterface(tknAddress[i]); + try token.name() { + tokenDatas[i] = TokenData( + true, + token.name(), + token.symbol(), + token.decimals() + ); + } catch { + tokenDatas[i] = TokenData( + false, + "", + "", + 0 + ); + } + } + } + return tokenDatas; + } function getBalances(address owner, address[] memory tknAddress) public view returns (uint[] memory) { uint[] memory tokensBal = new uint[](tknAddress.length);