Skip to main content
Version: SDK V4 (latest)

Common Errors

We are sorry to cause any inconvenience while interacting with biconomy SDK. We are trying our best to send meaningful error messages that can help you do quick fixes without interacting with any support channel. Some of the error messages are not in our control as we are using some standard contract ( e.g EntryPoint ) to provider gasless experience. Following are some standard error messages that can help you apply quick fixes and sort the issues.

tip

Ensure that you are using the bundler, paymaster, and RPC URL of the same blockchain.

ErrorDescription
AA21 didn’t pay prefundThrows if your smart wallet does not have funds to send transaction. Send some native tokens in your smart wallet to be able to resolve the error.
AA23 reverted (or OOG)Make sure the signature verification logic of the smart account is implemented correctly. Ensure you are using the same signer, you created the account with. If the error persists, try simulating validateUserOp method on entrypoint contract with the user operation on tenderly. Also ensure, if sender has sufficient native tokens to cover the User Operation's gas costs. If you are using paymaster to sponsor the transactions, ensure that the paymasterAndData field of the user operation is correctly set to enable proper handling of gas fees.
AA24 Signature errorThrows if the signature field of userOp is inaccurate. This could occur if any userOp field is altered after the userOp has been signed. Ensure that you are using the correct chain Id, entry point address and corresponding bundler URL.
AA10 sender already constructedThrows if your smart wallet is already created but you are still sending initcode in userOp.
AA13 initCode failed or OOGThrows if userOp doesn’t have enough verificationGasLimit to create smart account. you need to increase verificationGasLimit to be able to send transaction.
AA14 initCode must return senderThrows if the factory contract that you are using to deploy smart account does not return smart account address. Or sender field in userOp does not have same address as factory contract is creating for you.
AA93 invalid paymasterAndDataThrows if paymasterAndData created by signing service is not valid.
AA95 out of gasThrows if callGasLimit or verificationGasLimit is not correct for executing callData sent in userOp. Make sure callGasLimit and verificationGasLimit are not too high and use correct estimated values for preparing the userOp.
AA90 invalid beneficiaryThrows if the beneficiary address sent in userOp that is going to get sponsored transaction fee back is not valid.
AA31 paymaster deposit too lowThrows if the Paymaster you have created using dashboard does not have enough funds in its gas tank to sponsor transaction.
AA41 too little verificationGasThrows if the userOp does not have enough verificationGasLimit to create smart account. you need to increase verificationGasLimit to be able to resolve this error.
AA33 reverted (or OOG)Throws if the transaction you are sending is not valid or userOp does not have enough verificationGasLimit to be able to validate transaction. Try increasing verificationGasLimit or verify either the transaction you are making is valid to be able to resolve this error. In case of SPONSORED paymaster you might get this error due to insufficient token balance.
AA40 over verificationGasLimitThrows when gas used in the verification step on chain, is more than the verificationGasLimit. Try increasing the verificationGasLimit value to be able to resolve this error.
AA51 prefund below actualGasCostThrows because of 2 possible reasons: either your smart wallet does not have funds to send transaction or the Paymaster you have created using dashboard does not have enough funds in its gas tank to sponsor transaction.
AA34 signature errorThrows when the paymaster's signature is invalid. Check the format of the signature in paymasterAndData. Once the paymasterData is created, any changes to the userOp may lead to this error. In case you have passed the calculateGasLimits flag as true while creating the paymasterData, do update the gasLimits as mentioned here to avoid this error.
AA25 Invalid Account NonceThrows when the nonce is invalid. The user operation may be re-using an old nonce, or formatted the nonce incorrectly. If you are trying parallel transactions execution, refer to nonceOptions in this page for more details
No policies were set on the dashboard. Please set policies to allow gas sponsorship via paymastersThrows if the contracts are not whitelisted using the dashboard to be able to sponsor transactions.
error in txnThrows when there is internal server error from relayer side which can be due to multiple reasons. In this we would require the transacitonId from the user.
only allowed via delegateCallThrows when trying to send native tokens directly to the Smart Account implementation.
Smart Account:: new Signatory address cannot be selfThrows when trying to set the Smart Account address as its own owner.
new Signatory address cannot be same as old oneThrows when trying to set owner with an address that is already an owner.
Address cannot be zeroThrows when trying to update to a zero address as implementation.
invalid tokenGasPriceFactorThrows when token Gas Price factor provided is 0.
Invalid signatures lengthThrows when the length of the signature provided in the Forward flow is less than 65.
Could not get network config valuesThrows when we can’t find the provided network in the network config.
Exceeded maximum duration (30 sec) waiting to get receipt for userOpHashThis is a timeout error on bundler, If the error persists on a particular network, create a bundler instance by increasing the userOpReceiptMaxDurationIntervals as mentioned here. And pass this bundler to the createSmartAccountClient function
UserOperation reverted during execution phaseThis error comes when the call data execution is failing, which is the call that the Entry Point makes to the Smart Account. A quick way to debug is to go on Tenderly and simulate the exact call data execution. To do that you can add the Smart Account address in the Paste any address box of Tenderly, then select the network which you are on. After that paste the callData from the userOp in the raw data input box and also edit the From address to be the Entry Point address. If the network you are on is not supported by Tenderly, one can use eth_estimateGas to capture the revert reason.
maxPriorityFeePerGas in userOp is lower than expected maxPriorityFeePerGasThis error indicates that the userOp sent to the bundler is a low paying userOp and won't be accepted in the bundler mempool. The way to fix this is to retry by building the userOp again. The value of maxPriorityFeePerGas should always be fetched from biconomy_getGasFeeValues or eth_estimateUserOperationGas.
maxFeePerGas in userOp is lower than expected maxFeePerGasThis error indicates that the userOp sent to the bundler is a low paying userOp and won't be accepted in the bundler mempool. The way to fix this is to retry by building the userOp again. The value of maxFeePerGas should always be fetched from biconomy_getGasFeeValues or eth_estimateUserOperationGas.
preVerificationGas in userOp is lower than expected preVerificationGasThis error indicates that the userOp sent to the bundler is a low paying userOp and won't be accepted in the bundler mempool. The way to fix this is to retry by building the userOp again. The value of preVerificationGas should always be fetched from eth_estimateUserOperationGas.

Custom Errors

Error SignatureError SelectorDescription
CallerIsNotAnEntryPoint(address)0xbb587b6eThrows at onlyEntryPoint when msg.sender is not an EntryPoint set for this Smart Account
HandlerCannotBeZero()0xdd449f5fThrows if zero address has been provided as Fallback Handler address
EntryPointCannotBeZero()0x245d23e4Throws if zero address has been provided as Entry Point address
MixedAuthFail(address)0x1141614aThrows at mixedAuth when msg.sender is not an owner neither _self
TokenTransferFailed(address,address,uint256)0xc8776798Throws if transfer of tokens failed. Arguments: token address, receiver address, amount.
OwnerCannotBeZero() 0x9b15e16fThrows if trying to change an owner of a SmartAccount to the zero address
BaseImplementationCannotBeZero()0x70204800Throws if zero address has been provided as Base Implementation address
InvalidImplementation(address)0x0c760937Throws if there is no code at implementationAddress
CallerIsNotOwner(address)0xd4ed9a17Throws at onlyOwner when msg.sender is not an owner
CallerIsNotEntryPointOrOwner(address)0x65b7a78eThrows at _requireFromEntryPointOrOwner when msg.sender is not an EntryPoint neither an owner
AlreadyInitialized(address)0x93360fbfThrows if trying to initialize a Smart Account that has already been initialized
NotEnoughGasLeft(uint256,uint256)0xbbbb17a0Throws if not enough gas is left at some point
CanNotEstimateGas(uint256,uint256,bool)0x830fc3f8Throws if not able to estimate gas. It can happen when the amount of gas and its price are both zero and the transaction has failed to be executed
WrongContractSignatureFormat(uint256,uint256,uint256)0x71448bfeThrows if contract signature is provided in the wrong format
WrongContractSignature(bytes)0x605d3489Throws when isValidSignature for the contract signature and data hash return differs from EIP1271 Magic Value
InvalidSignature(address,address)0x42d750dcThrows when the address that signed the data (restored from signature) differs from the expected signer
ExecutionFailed() 0xacfdb444Throws when the transaction execution fails
TransferToZeroAddressAttempt()0x9293b190Throws when trying to transfer to the zero address
WrongBatchProvided(uint256,uint256,uint256)0x50605488Throws when data for executeBatchCall provided in the wrong format (i.e. empty array or lengths mismatch)
ProxyDeploymentFailed(address,uint256)0x6d05b867Throws when the Proxy (Smart Account) deployment attempt failed
ModulesAlreadyInitialized() 0xdf8cc4e3Throws when trying to initialize the module manager that has already been initialized
ModulesSetupExecutionFailed() 0x65c74720Throws when a delegatecall during module manager initialization has failed
ModuleCannotBeZeroOrSentinel(address)0xcadb248fThrows when address(0) or SENTINEL_MODULES constant has been provided as a module address
ModuleAlreadyEnabled(address)0xb29d4595Throws when trying to enable a module that has already been enabled
ModuleAndPrevModuleMismatch(address,address,address)0xc40d496cThrows when the module and previous module mismatch
ModuleNotEnabled(address)0x21ac7c5fThrows when trying to execute a transaction from a module that is not enabled
CallerIsNotSelf(address)0x051e38ccThrows when the caller is not address(this)
EntryPointCannotBeZero() 0x245d23e4Throws when the Entry Point address provided is address(0)
VerifyingSignerCannotBeZero() 0x8fc6a931Throws when the verifying signer address provided is address(0)
PaymasterIdCannotBeZero() 0xab9a38caThrows when the paymaster Id address provided is address(0)
DepositCanNotBeZero()0x674c2ee2Throws when 0 has been provided as the deposit amount
CanNotWithdrawToZeroAddress() 0x92bc9df3Throws when trying to withdraw to address(0)
InsufficientBalance(uint256,uint256)0xcf479181Throws when trying to withdraw more than the available balance
InvalidPaymasterSignatureLength(uint256)0xe4b52b17Throws when the signature provided to the paymaster has an invalid length

Was this page helpful?