AA33 reverted (or OOG)
The validatePaymasterUserOp
function of the paymaster contract either reverted or ran out of gas.
Possible solutions
- Verify that the
verificationGasLimit
is high enough to cover thevalidatePaymasterUserOp
function's gas costs. - If you are using your own paymaster contract, verify that the
validatePaymasterUserOp
function is implemented with the correct logic, and that the user operation is supposed to be valid. - If you are using your own paymaster contract, make sure the signature verification logic of the paymaster is implemented correctly. Namely, correct implementations should not revert when the paymaster signature is invalid. If you are not looking to use neither time-based signatures, you should simply return
uint(1)
for invalid signatures in thevalidatePaymasterUserOp
function. - If you are using a paymaster service like Pimlico, and the user operation is well formed with a high enough
verificationGasLimit
, reach out to them. - If you are not looking to use a paymaster to cover the gas fees, verify that the
paymasterAndData
field is not set.
const userOperationHash = await bundlerClient.sendUserOperation({
paymasterAndData: "0x3b912be0270b59143985cc5c6aab452d99e2b4bb0000000000000000000000000000000000000000000000000000000064c0957400000000000000000000000000000000000000000000000000000000000000007d99385d8ef0af67affbf9944df8c121e9d1f6aef8dd82a4aeb5db310c42d3dc5b51c9e0835d94c3b22564d3d94f0e1d14e37571e46651da8de567d128a361a01b",
paymasterAndData: "0x",
..., // the rest of the user operation
})
- If all else fails, investigate why the
validatePaymasterUserOp
function reverted using tools like Tenderly.