πŸ”‹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