This page has been updated for Wallets SDK V1. If you are using the previous version,
see the previous version of this page or the V1 migration guide.
Reverted transactions are marked as “failed” and won’t be executed. There is no auto-retry mechanism for failed
transactions; you must manually resubmit them if needed.
Common Error Types
Transaction errors typically fall into two categories: validation failures and execution failures.Validation Errors
Validation errors occur when the provided transaction data is invalid. These errors commonly relate to invalid data (e.g.,signature) during transaction approval. Common issues include:
- Malformed signatures
- Invalid signatures (e.g., from an unauthorized wallet)
- Insufficient signer permissions for transaction approval
- Verify the transaction signer is valid
- Confirm you’re signing the correct
messagedata - Verify the signing private key matches the
signerwallet
Execution Errors
Execution errors occur when a transaction is reverted during runtime. These typically relate to thecalls provided during transaction creation. Common causes include:
- Another transaction with the same call was executed already
- State changes between transaction creation and execution (e.g. asset price updated exceeding slippage allowance)
- Review the simulation to understand the revert cause
- Check for similar previous transactions
- Attempt to resubmit with the same parameters
Wallet Errors
WalletNotAvailableError
Thrown bygetWallet() when no wallet exists for the given parameters. This is expected in the get-then-create pattern where you first attempt to retrieve a wallet and fall back to creating one.
In previous SDK versions,
getOrCreateWallet() handled this automatically. In V1, wallet retrieval and creation are separate operations. See the migration guide for details.Common Pitfalls
These are frequent sources of confusion when working with the V1 SDK.Read-only wallet from getWallet()
getWallet() returns a wallet with no active signer unless a device signer is found locally. Calling send(), approve(), or addSigner() on a read-only wallet throws an error.
Fix: Call wallet.useSigner() to activate a signer before performing signing operations, or rely on automatic device signer initialization on the client side.
useSigner() does not accept locator strings
In V1, useSigner() only accepts signer config objects. Passing a locator string (e.g., "evm-keypair:0x...") results in a type error.
getWallet() parameter mismatch between client and server
getWallet() has different signatures on client and server. Using the wrong one throws an error.
- Client-side:
getWallet({ chain: "base-sepolia" })— pass wallet args directly. Passing awalletLocatorstring as the first argument throws. - Server-side:
getWallet("0xWalletAddress", { chain: "base-sepolia" })— requires awalletLocatorstring as the first parameter. Omitting it throws:"getWallet on server side requires a walletLocator parameter."
Client-side input validation errors
The V1 SDK validates inputs before making API calls, failing fast with descriptive errors:| Error | Thrown by | Cause |
|---|---|---|
InvalidAddressError | wallet.send() | Invalid to address format for the chain (EVM: 0x + 40 hex chars, Solana: base58, Stellar: G + 55 alphanumeric) |
InvalidChainError | createWallet(), getWallet() | Unrecognized chain name |
InvalidAmountError | wallet.send() | Zero, negative, Infinity, or NaN amount |
Email and phone signers cannot be added via addSigner()
addSigner() does not support email or phone signer types. These can only be configured as recovery signers during wallet creation. Attempting to add them throws a backend error.

