multicallAllowance method

Future<List<BigInt>> multicallAllowance(
  1. List<String> owners,
  2. List<String> spenders, [
  3. Multicall? multicall
])

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

Implementation

Future<List<BigInt>> multicallAllowance(
  List<String> owners,
  List<String> spenders, [
  Multicall? multicall,
]) async {
  assert(owners.isNotEmpty, 'Owner list empty');
  assert(spenders.isNotEmpty, 'Spender list empty');
  assert(owners.length == spenders.length,
      'Owner list length must be same as spender');
  if (multicall != null) {
    final res =
        await multicall.aggregate(Iterable<int>.generate(owners.length).map(
      (e) {
        final functionSig = contract.interface.getSighash('allowance');
        final argData = abiCoder.encode(
            ['address', 'address'], [owners[e], spenders[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(owners.length).map(
      (e) => allowance(owners[e], spenders[e]),
    ));
  }
}