multicallAllowance method
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]),
));
}
}