Browser Extension
Testing and Troubleshooting
Develop against Testnet and Devnet, run locally, and fix common errors.
Testing on Testnet or Devnet
- In Joey, open Settings → Network and choose Testnet (or Devnet).
- Fund your test address from an XRPL faucet.
- Pass
chain: 'xrpl:1'(or'xrpl:2') on signing calls. If the wallet is still on Mainnet, the request fails with4901instead of signing on the wrong network.
There's no method to switch networks from a dApp. Ask the user to switch in Joey, and listen for networkChanged.
Don't set NetworkID on transactions; Joey refuses it on every network it supports.
Local development
http://localhost,http://127.0.0.1andhttp://[::1]can connect on any port. Every other site must usehttps:.file://pages can't connect. Serve your dApp from a development server.
Troubleshooting
| Symptom | Likely cause |
|---|---|
waitForJoey rejects with 4900 |
Joey isn't installed or is disabled; the page is a file:// page; or you're in a sandboxed iframe. |
connect({ silent: true }) returns [] |
Expected until the user approves your site. Call connect() from a button click. |
getNetwork() throws 4100 |
Your site isn't connected yet. Connect first, or read chain from the connect result. |
| Signing throws 4100 "transaction type not permitted" | The transaction, or an inner Batch transaction, is a refused type or flag. |
| Signing throws -32602 | Account isn't the signing account; fee over 2 XRP with autofill: false; a NetworkID field; an X-address; or malformed fields. |
| Signing throws 4901 | Your chain doesn't match Joey's network, or the user switched network during the request. |
| -32005 | Too many concurrent or pending requests, or the user rejected many requests in a row. Back off. |
| A call stays pending for minutes | It's waiting for the user to approve (up to 5 minutes) or to unlock Joey. Don't time out sooner. |
| Sign-in "signature did not verify" | You didn't check isChallengeSignIn: Ledger accounts return signedTx, not signature. |
signTransactionFor signature rejected by the network |
This method never autofills. Set Fee, Sequence and LastLedgerSequence yourself. |
Batch refused with 4100 |
The extension doesn't support Batch yet (check joey.supportsBatch()), or an inner transaction is refused. |
Batch refused with -32602 |
A batch involving other accounts with autofill on; invalid inner fields; more than one transaction in the request; or a Ledger account. |
instanceof JoeyRpcError is false |
Two copies of the SDK are bundled. Deduplicate @joeywallet/wallet-sdk. |
| "useJoey must be used inside a JoeyProvider" | Wrap your tree in <JoeyProvider>. In Next.js, do it inside a 'use client' component. |