0

Everybody, I'm trying to sign a message with web3dart and interact with my smart contract, but I have problems when I do this. So I don't know what's going on, because when I use Js to do the same thing, the signature that I got is valid and when I test with the samrt contract, everything is Ok. That's not happen when I do the same with dart.

String domainName = 'KraksPermit';
      String domainVersion = '1';
      int chainId = int.parse(dotenv.env['CHAIN_ID']!);
      String contractAddress = dotenv.env['TOKEN_CONTRACT_ADDRESS']!;

      var domain = {
        "name": domainName,
        "version": domainVersion,
        "verifyingContract": contractAddress,
        "chainId": chainId
      };

      var domainType = [
        { "name": "name", "type": "string" },
        { "name": "version", "type": "string" },
        { "name": "chainId", "type": "uint256" },
        { "name": "verifyingContract", "type": "address" }
      ];

      var permit = { "owner": owner, "spender": spender, "value": value, "nonce": nonce, "deadline": deadline };

      var Permit = [
        { "name": "owner", "type": "address" },
        { "name": "spender", "type": "address" },
        { "name": "value", "type": "uint256" },
        { "name": "nonce", "type": "uint256" },
        { "name": "deadline", "type": "uint256" }
      ];

      var dataToSign = jsonEncode({
        "types": {
          "EIP712Domain": domainType,
          "Permit": Permit
        },
        "domain": domain,
        "primaryType": "Permit",
        "message": permit
      });

      var messageHash = keccakUtf8(dataToSign);
      EthPrivateKey credentials = EthPrivateKey.fromHex(spender);

      var signature = sign(messageHash, credentials.privateKey);

      log(dataToSign);
      log(signature.v.toString());
      log(signature.r.toRadixString(16));
      log(signature.s.toRadixString(16));
      bool isAValidSignature = isValidSignature(messageHash, signature, credentials.encodedPublicKey);
      log("Is a valid signature? -> $isAValidSignature");
      log("/*/*/*/*/*/*/*/*/*/*/*/*/");

This is my code, I don't know what I'm doing wrong, because when I print the signature if it's valid, the response is true, but when I test this signature with my smart contract, this says that is an invalid signature.

This is waht dart says This is what the SMC says

I want to the signature works well with the smart contract.

0 Answers0