User operation reverted
A user operationUser operation A signed instruction package that tells a smart account what executions to perform. reverts with reason 0x when validation succeeds, but execution fails without a
revert reason. This differs from AA-coded EntryPoint contract errors such as AA23, AA25,
or AA21.
When the EntryPoint contract calls the smart account's execution function, it performs a low-level
call internally. If that inner call reverts with empty data, the bundler reports
reason 0x with no additional details.
The following sections describe common causes and how to troubleshoot them.
Function doesn't exist
The callData encodes a call from the smart account to a target contract, but the function
selector doesn't match any function on that contract, and no fallback function exists. The EVM
reverts with empty data.
This commonly happens when:
- The function selector has a typo or doesn't match the target's ABI.
- The target address is wrong or points to a different contract.
- The target contract isn't deployed on the current chain.
Solution
Decode callData and verify the inner call. Confirm that the target address has deployed code
and that the function selector matches the target's ABI.
const code = await publicClient.getCode({
address: targetAddress,
});
if (!code) {
console.log("No contract deployed at this address");
}