pragma solidity ^0.6.0; interface TokenInterface { function balanceOf(address) external view returns (uint); function allowance(address owner, address spender) external view returns (uint256); } contract InstaBalanceResolver { function getBalances(address owner, address[] memory tknAddress) public view returns (uint[] memory) { uint[] memory tokensBal = new uint[](tknAddress.length); for (uint 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 getAllowance(address owner, address spender, address[] memory tknAddress) public view returns (uint[] memory) { uint[] memory tokenAllowances = new uint[](tknAddress.length); for (uint i = 0; i < tknAddress.length; i++) { if (tknAddress[i] == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { tokenAllowances[i] = uint(-1); } else { TokenInterface token = TokenInterface(tknAddress[i]); tokenAllowances[i] = token.allowance(owner, spender); } } return tokenAllowances; } }