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  }