This guide covers common issues when sending sponsored userOperations with CDP Paymaster and how to debug them.
For a complete list of error codes and their meanings, see the Errors page.
Transaction Rejected by Policy
Symptom: Your userOperation is rejected before reaching the chain.
Common causes:
- Contract address not in your allowlist
- Function not allowlisted for the contract
- Per-user or global spend limits exceeded
- Sender address doesn’t have required attestation
Solution: Check your Paymaster Configuration in CDP Portal:
- Verify the contract address is in your allowlist
- Confirm the specific function you’re calling is allowed
- Review your spend limits in the Configuration tab
Execution Reverted
Symptom: The userOperation made it onchain but the transaction reverted.
This means the smart contract execution failed. Common causes:
| Cause | Solution |
|---|
| Insufficient gas | Increase callGasLimit or preVerificationGas |
| Invalid callData | Verify your encoded function call is correct |
| Contract logic error | Debug your contract with Tenderly |
| Insufficient token balance | Ensure the account has required tokens |
Debugging with Tenderly
Tenderly is useful for simulating and debugging userOperations.
To debug gas issues:
- Go to Tenderly and select the Entrypoint contract:
0x5ff137d4b0fdcd49dca30c7cf57e578a026d2789
- Use the
simulateHandleOp function
- Paste your userOperation in the
op field (wrap it in array brackets [{...}])
To debug contract logic:
- Enter your smart contract’s address
- Paste the
callData from your userOperation
- Run the simulation to see where it fails
Decoding Revert Data
If you see an error like:
{
"code": -32004,
"message": "execution reverted with data",
"data": "0xed6c3dec00000000000000000000000036e53f56454e1206f775dafe2b33c1b737c43632"
}
Use an ABI decoder to decode the error:
- Upload your contract’s ABI
- Paste the
data field
- The decoder will show the specific error and parameters
Invalid Chain ID
Symptom: Request rejected with chain ID mismatch error.
Cause: You’re using a Paymaster URL for a different network than your transaction targets.
Solution: In CDP Portal, check the network dropdown in the top right corner and ensure it matches your transaction’s chain:
- Base Mainnet — Chain ID
8453
- Base Sepolia — Chain ID
84532
Invalid Signature
Symptom: Error message about account signature or paymaster signature check failing.
UserOperation rejected because account signature check failed
(or paymaster signature, if the paymaster uses its data as signature).
Cause: The userOperation was modified after the Paymaster signed it.
The Paymaster signs the complete userOperation. If you change any field after calling getPaymasterData(), the signature becomes invalid.
Solution:
- Finalize all userOperation fields (
callData, gas limits, etc.) before requesting the Paymaster signature
- Don’t modify the userOperation after receiving
paymasterAndData
- If you need to change something, request a new Paymaster signature
When batching multiple userOperations, ensure each one has its own matching Paymaster signature. Signatures are not interchangeable between operations.
Symptom: Transaction goes through but user paid gas instead of sponsorship.
Common causes:
- Wallet doesn’t support paymaster capabilities
paymasterService capability not passed correctly
- Using an EOA instead of a smart account
Solution:
- Verify you’re using a smart account (check with
eth_getCode — should return non-empty)
- Confirm the wallet supports
paymasterService capability
- Check that you’re passing the paymaster URL in the correct format for your SDK
Still Stuck?
If you’ve tried the above and are still having issues:
- Check the Logs tab in CDP Portal for detailed request/response data
- Export your userOp logs for offline analysis
- Reach out in CDP Discord in the
#paymaster channel — include your error message, userOperation details, and what you’ve tried