isValidEip1271Signature static method

Future<bool> isValidEip1271Signature(
  1. String address,
  2. String reconstructedMessage,
  3. String cacaoSignature,
  4. String chainId,
  5. String projectId,
)

Implementation

static Future<bool> isValidEip1271Signature(
  String address,
  String reconstructedMessage,
  String cacaoSignature,
  String chainId,
  String projectId,
) async {
  try {
    const String eip1271MagicValue = '0x1626ba7e';
    const String dynamicTypeOffset =
        '0000000000000000000000000000000000000000000000000000000000000040';
    const String dynamicTypeLength =
        '0000000000000000000000000000000000000000000000000000000000000041';
    final String nonPrefixedSignature = cacaoSignature.substring(2);
    final String nonPrefixedHashedMessage = hex
        .encode(hashMessage(reconstructedMessage))
        .substring(2);

    final String data =
        eip1271MagicValue +
        nonPrefixedHashedMessage +
        dynamicTypeOffset +
        dynamicTypeLength +
        nonPrefixedSignature;

    final Uri url = Uri.parse(
      '${StringConstants.AUTH_DEFAULT_URL}/?chainId=$chainId&projectId=$projectId',
    );
    final Map<String, dynamic> body = JsonRpcUtils.formatJsonRpcRequest(
      'eth_call',
      {'to': address, 'data': data},
    );

    final http.Response response = await http.post(url, body: body);

    // print(response.body);
    // final jsonBody = jsonDecode(response.body);
    final String recoveredValue = response.body.substring(
      0,
      eip1271MagicValue.length,
    );
    return recoveredValue.toLowerCase() == eip1271MagicValue.toLowerCase();
  } catch (e) {
    return false;
  }
}