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 {
    final String eip1271MagicValue = "0x1626ba7e";
    final String dynamicTypeOffset =
        "0000000000000000000000000000000000000000000000000000000000000040";
    final 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(
      '${AuthConstants.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;
  }
}