πGenerating the data to sign
How to generate a properly formatted data using a contract interface particular function
Encode a Transaction to Relay using ethers
let iface = new ethers.utils.Interface(gameABIV2);
let dataFct
dataFct = iface.encodeFunctionData("enterGameGasLess",
[
gameData.collectionId, // 1,2,3
gameData.tokenId, //glmj ID
gameData.badge1, //badge1 ID
gameData.badge2, //badge2 ID
gameData.jBoostId, //jBoost ID
gameData.rented //rented
])
Get a Nonce for a particular wallet
async function getNonces(wallet) {
const preCompileContract = new ethers.Contract(callPermitAddress, callPermitABI, provider)
let nonce
try {
nonce = await preCompileContract.nonces(wallet);
}
catch (nonceErr) {
console.log(nonceErr, 'nonce error')
}
return await nonce
}
Create the Permit Message data to sign
const createPermitMessageData = async function () {
const message = {
from: publicAddy,
to: gameAddressv2,
value: 0,
data: gameData.encoded,
gaslimit: 300000,
nonce: currentNonce.toNumber(),
deadline: Date.now() + (5 * 60 * 1000),
};
const typedData = { types: { EIP712Domain: [{ name: 'name', type: 'string' }, { name: 'version', type: 'string' }, { name: 'chainId', type: 'uint256' }, { name: 'verifyingContract', type: 'address' },], CallPermit: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'value', type: 'uint256' }, { name: 'data', type: 'bytes' }, { name: 'gaslimit', type: 'uint64' }, { name: 'nonce', type: 'uint256' }, { name: 'deadline', type: 'uint256' },], }, primaryType: 'CallPermit', domain: { name: 'Call Permit Precompile', version: '1', chainId: 1284, verifyingContract: '0x000000000000000000000000000000000000080a', }, message: message, };
return {
typedData,
message,
};
};
let messageData
try {
messageData = await createPermitMessageData();
}
Last updated