Bitcoin Cash
Accept BCH to fresh CashAddr addresses derived from your xpub. NoHoldPay watches the chain - no seed phrase, no custody.
Networks
| Mainnet | Testnet4 | |
|---|---|---|
| Chain key | BCH | BCH_TESTNET |
| Wallet key | xpub | tpub or xpub |
| Address format | bitcoincash:q... | bchtest:q... |
| Confirmations | 15 | 3 |
| Min invoice | $1.00 | $0.10 |
| Payment window | 60 minutes | 60 minutes |
| Late-grace revival | 12 hours | 12 hours |
Wallet setup
| Wallet | Best for | Notes |
|---|---|---|
| Electron Cash | Most merchants | Best default. Console command to raise the gap limit. |
| Bitcoin Cash Node | Full-node merchants | Use only if you already run BCHN. |
Hardware wallets work best through Electron Cash.
Accepting more than one coin? Hodlall holds Bitcoin Cash alongside Bitcoin, Litecoin, Dogecoin, Monero, and more in one app. See Choosing your wallets.
What to paste
| Mode | Chain | Paste this | Do not paste |
|---|---|---|---|
| Live | BCH | Account-level xpub | Seed phrase, private key, xpriv, receive address |
| Test | BCH_TESTNET | Account-level tpub or xpub | Seed phrase, private key, xpriv, receive address |
One account key per NoHoldPay account. An account key can only be bound to one NoHoldPay account at a time. Two accounts on the same key derive byte-identical addresses at the same derivation index, so one customer payment could be credited against an order in each. The second bind is rejected when you add the wallet. If you run more than one account, use a separate account key for each. Retiring a wallet releases its key, so moving your business to a different account still works.
Live setup (Electron Cash)
Do not use the default new-seed flow
A wallet created through Electron Cash's default Create a new seed flow exports a depth-0
Master Public Key, which NoHoldPay rejects with an "extended key depth 0 - expected 3" error.
Create the wallet from a BIP39 mnemonic instead (I already have a seed with the BIP39 option
enabled). That gives the wallet an account-level key at m/44'/145'/0' to export.
wallet.change_gap_limit(500).Export the account-level public key - it must start with xpub.
Screenshot
Electron Cash wallet information showing the account xpub
add image at public/images/guides/bch-electron-cash-xpub.png
BCH -> paste the xpub.Create a small live payment and verify the generated bitcoincash:q... address matches your
wallet.
Test setup
NoHoldPay testnet is on testnet4 only. BCH has three live testnets - testnet3 (deprecated, BIP-94), testnet4 (what we use), and chipnet (used for upgrade-rehearsal, has CashTokens active early). All three share the
bchtest:address prefix, so a tx sent on the wrong network looks like it "should work" but our watcher will never see it. Do not use chipnet wallets (e.g. Cashonize, which currently only supports chipnet - not testnet4).
Use a BIP39 seed on testnet too
Electron Cash's default Create a new seed flow also fails here: it exports a depth-0 Master
Public Key that NoHoldPay rejects. Create the testnet wallet from a BIP39 mnemonic (I already
have a seed with the BIP39 option enabled) so an account-level key at m/44'/1'/0' exists to
export.
Start Electron Cash in testnet4 mode: electron-cash --testnet4 (or use the Electron Cash
launcher's network selector). Do not use --testnet (that's testnet3, deprecated) or
--chipnet.
Create a testnet4 wallet from a BIP39 seed and export the account-level public key (may start
with tpub or xpub).
BCH_TESTNET -> paste the key.- Testnet4 faucet: tbch.googol.cash (select the testnet4 network on the form). Testnet faucets come and go, so if it is dry or offline, find a current one via the BCH testnet faucet thread.
- Testnet4 explorers: tbch4.loping.net, testnet4.imaginary.cash.
- Wallets known to work on testnet4: Electron Cash (with
--testnet4flag), Bitcoin Cash Node (bitcoin-cash-node -testnet4). - Wallets that do NOT work on testnet4: Cashonize (chipnet only as of May 2026), most mobile wallets.
Address verification
The first generated address must match the one your wallet shows at the same derivation path:
| Mode | External receive path | Address |
|---|---|---|
Live BCH | m/44'/145'/0'/0/index | bitcoincash:q... |
Test BCH_TESTNET | Account key /0/index | bchtest:q... |
Gap filler
Same model as Bitcoin - raise the gap limit before launch. In Electron Cash, wallet.change_gap_limit(500).
Fixing a gap:
| Option | What happens | Cost |
|---|---|---|
| Do it yourself | Multi-output send from your wallet. | Miner fee from your wallet. |
| NoHoldPay handles it | Signed and broadcast by NoHoldPay. | Dust + miner fee + platform service fee, from Prepaid Credit. |
The BCH miner fee is pass-through (no markup). The platform service fee is small and shown in the quote before you confirm. Automatic fee bumps are not available for BCH - contact support if a platform-handled transaction is stuck.
Not supported
Native BCH only - no CashTokens, no other assets
NoHoldPay accepts only native BCH on Bitcoin Cash. We do not credit:
- CashTokens (fungible or NFT, CHIP-2022-02-CashTokens). If a customer accidentally sends a CashToken UTXO to a NoHoldPay invoice address, the watcher filters out token-bearing outputs entirely, so the tx is never detected or credited - the payment stays in
awaiting_paymentas if nothing arrived, until the customer sends a real native-BCH transaction. The token UTXO sits at the derived address. The merchant's underlying wallet sees it (since they hold the xpub's derivation tree) and can spend or ignore it independently. - Wrapped BCH on other chains (we don't bridge - pay BCH on BCH).
- Custodial or exchange deposit wallets - paste an xpub from a wallet you control, not an address from Binance / Coinbase / Kraken etc.
If you need to receive CashTokens for your business, use a token-aware wallet directly (Electron Cash, Cashonize, Paytaca) outside the NoHoldPay payment flow.
Recovery
Your BCH seed phrase remains the recovery tool. NoHoldPay only stores your public key.
If your wallet does not show a paid address:
- Raise the gap limit.
- Rescan or restore.
- Use the Recovery Kit for derivation details.