Skip to content

AA21 didn't pay prefund

You are not using a paymaster, but the sender address did not have enough native tokens to cover the gas costs associated with the user operation.

Possible solutions

  • If you are not using a paymaster, verify that the sender address has enough native tokens to cover the required prefund. Consider leveraging functions like getRequiredPrefund.
const requiredPrefund = getRequiredPrefund({
const senderBalance = await publicClient.getBalance({
    address: userOperation.sender
if (senderBalance < requiredPrefund) {
    throw new Error(`Sender address does not have enough native tokens`)
  • If you are looking to use a paymaster to cover the gas fees, verify that the paymasterAndData field is set.
const userOperationHash = await bundlerClient.sendUserOperation({
    paymasterAndData: "0x3b912be0270b59143985cc5c6aab452d99e2b4bb0000000000000000000000000000000000000000000000000000000064c0957400000000000000000000000000000000000000000000000000000000000000007d99385d8ef0af67affbf9944df8c121e9d1f6aef8dd82a4aeb5db310c42d3dc5b51c9e0835d94c3b22564d3d94f0e1d14e37571e46651da8de567d128a361a01b", 
    ..., // the rest of the user operation