sign method

Eip7702Authorization sign(
  1. String privateKey
)

Implementation

Eip7702Authorization sign(String privateKey) {
  int nonce = signerNonce;
  if (signerAddress == gasPayerAddress) nonce++;

  // 1. RLP encode [chainId, address, nonce]
  final items = [
    intToBuffer(chainId), // chainId to bytes32
    address.toLowerCase(), // address to lower case
    intToBuffer(nonce), // nonce to bytes32
  ];
  final rlpData =
      Uint8List.fromList(EIP7702_MAGIC.toUint8List() + rlp.encode(items));
  final hash = getKeccakDigest(rlpData);
  final signature =
      EcdaSignature.sign(hash.toStr(), privateKey.toUint8List());

  return Eip7702Authorization(
      chainId: chainId,
      address: address,
      gasPayerAddress: gasPayerAddress,
      signerAddress: signerAddress,
      signerNonce: nonce,
      v: signature.v,
      r: signature.r.toHex(),
      s: signature.s.toHex());
}