checkAllowance method

  1. @override
Future checkAllowance({
  1. required String senderAddress,
  2. required String receiverAddress,
  3. required String contractAddress,
  4. required String caip2Chain,
})
override

Implementation

@override
Future<dynamic> checkAllowance({
  required String senderAddress,
  required String receiverAddress,
  required String contractAddress,
  required String caip2Chain,
}) async {
  // Keccak-256 of "allowance(address,address)"
  final functionSelector = 'dd62ed3e';
  final ownerPadded = senderAddress.replaceFirst('0x', '').padLeft(64, '0');
  final spenderPadded =
      receiverAddress.replaceFirst('0x', '').padLeft(64, '0');
  final data = '0x$functionSelector$ownerPadded$spenderPadded';
  //
  final uri = Uri.parse(_baseUrl);
  final queryParams = {..._requiredParams, 'chainId': caip2Chain};
  final url = uri.replace(queryParameters: queryParams);
  final body = jsonEncode({
    'jsonrpc': '2.0',
    'id': 1,
    'method': 'eth_call',
    'params': [
      {'to': contractAddress, 'data': data},
      'latest'
    ]
  });
  final response = await http.post(
    url,
    headers: _requiredHeaders,
    body: body,
  );
  _core.logger.i(
    '[$runtimeType] checkAllowance $url, $body => ${response.body}',
  );
  if (response.statusCode == 200 && response.body.isNotEmpty) {
    try {
      final namespace = NamespaceUtils.getNamespaceFromChain(caip2Chain);
      return _parseBalanceResult(namespace, response.body);
    } on JsonRpcError catch (e) {
      _core.logger.e('[$runtimeType] checkAllowance, parse error => $e');
      throw 'Failed checking allowance';
    } catch (e) {
      _core.logger.e('[$runtimeType] checkAllowance, parse error => $e');
      throw 'Failed checking allowance';
    }
  }
  try {
    final reason = _parseResponseError(response.body);
    throw Exception(reason);
  } catch (e) {
    _core.logger.e('[$runtimeType] checkAllowance, decode error => $e');
    rethrow;
  }
}