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.