github.com/status-im/status-go@v1.1.0/contracts/balancechecker/BalanceChecker.sol (about) 1 // SPDX-License-Identifier: MIT 2 pragma solidity >=0.4.22 <0.9.0; 3 4 // ERC20 contract interface 5 abstract contract Token { 6 function balanceOf(address) public view virtual returns (uint); 7 } 8 9 contract BalanceChecker { 10 function tokenBalance( 11 address user, 12 address token 13 ) public view returns (uint) { 14 return Token(token).balanceOf(user); 15 } 16 17 function balancesPerAddress( 18 address user, 19 address[] memory tokens 20 ) public view returns (uint[] memory) { 21 uint[] memory addrBalances = new uint[]( 22 tokens.length + 1 23 ); 24 for (uint i = 0; i < tokens.length; i++) { 25 addrBalances[i] = tokenBalance(user, tokens[i]); 26 } 27 28 addrBalances[tokens.length] = user.balance; 29 return addrBalances; 30 } 31 32 function balancesHash( 33 address[] calldata users, 34 address[] calldata tokens 35 ) external view returns (uint256, bytes32[] memory) { 36 bytes32[] memory addrBalances = new bytes32[](users.length); 37 38 for (uint i = 0; i < users.length; i++) { 39 addrBalances[i] = keccak256( 40 abi.encodePacked(balancesPerAddress(users[i], tokens)) 41 ); 42 } 43 44 return (block.number, addrBalances); 45 } 46 }