multicallBalanceOf method

Future<List<BigInt>> multicallBalanceOf(
  1. List<String> addresses, [
  2. Multicall? multicall
])

Multicall of balanceOf, may not be in the same block unless multicall is provided.

Implementation

Future<List<BigInt>> multicallBalanceOf(
  List<String> addresses, [
  Multicall? multicall,
]) async {
  assert(addresses.isNotEmpty, 'address should not be empty');

  if (multicall != null) {
    final res = await multicall
        .aggregate(Iterable<int>.generate(addresses.length).map(
      (e) {
        final functionSig = contract.interface.getSighash('balanceOf');
        final argData =
            abiCoder.encode(['address'], [addresses[e]]).substring(2);
        return MulticallPayload(contract.address, functionSig + argData);
      },
    ).toList());
    return res.returnData.map((e) => BigInt.parse(e)).toList();
  } else {
    return Future.wait(Iterable<int>.generate(addresses.length)
        .map((e) => balanceOf(addresses[e])));
  }
}