Bitcoin Cash ABC regtest模式sendrawtransaction报错排查求助(Code:-26、16)
Let's break down the possible host-level factors that could be causing this signature verification error, especially since the issue is isolated to one Linux machine and your workflow worked fine previously.
Possible Host-Level Causes & Fixes
1. System Time Drift
Bitcoin nodes (even in regtest mode) rely on consistent time for transaction validation—especially if your transactions use nLockTime parameters. A significant time mismatch between the host system and the node's internal clock could lead to unexpected signature validation failures.
- Check: Run
timedatectlto verify your system time is synchronized with a reliable NTP server. - Fix: Enable NTP synchronization with
systemctl enable --now systemd-timesyncdor usentpddepending on your distro.
2. File System Permissions or Disk Corruption
If the Bitcoin node's data directory (~/.bitcoin/regtest/ by default) has incorrect permissions, or the underlying disk has corrupted blocks, the node might be reading invalid UTXO data or wallet information. This can lead to mismatches between the data you use to sign transactions and what the node expects during verification.
- Check Permissions: Run
ls -la ~/.bitcoin/regtest/to ensure thebitcoindprocess has read/write access to all files. - Check Disk Health: Use
smartctl -a /dev/sdX(replace/dev/sdXwith your disk) to check for hardware errors, or runfsckon the filesystem (ensure the node is stopped first).
3. Insufficient System Resources
Low memory or high CPU load can cause the node process to behave erratically—memory swapping can lead to data corruption during transaction processing, while high CPU usage might cause signature/validation calculations to fail silently.
- Check Resources: Use
htoportopto monitor CPU, memory, and swap usage. Look for processes consuming excessive resources that might be starving the Bitcoin node. - Fix: Close unnecessary processes, add more memory to the machine, or adjust the node's resource limits (e.g., via
ulimit).
4. Node Process Memory Corruption
Long-running bitcoind processes can sometimes suffer from memory leaks or corruption, leading to internal data structure errors. Even if the node ran fine for months, a sudden spike in load or a minor system glitch could trigger this.
- Fix: Stop the node with
bitcoin-cli stop, wait for it to shut down cleanly, then restart it. Since regtest has a tiny chain, resyncing will take just a few seconds. After restarting, try your transaction workflow again.
5. Incompatible System Libraries
Bitcoin Cash ABC depends on system libraries like libssl, libevent, and libboost. If this Linux machine has different library versions than your working machines (e.g., a recent distro update changed a library), it could introduce compatibility issues in the signature/validation logic.
- Check: Run
ldd /path/to/bitcoindto list the node's shared library dependencies. Compare the versions with a working machine to spot discrepancies. - Fix: Install matching library versions, or recompile the Bitcoin Cash ABC node from source on this machine to ensure compatibility with the local libraries.
6. SELinux/AppArmor Restrictions
Security modules like SELinux (common on RHEL/CentOS) or AppArmor (common on Debian/Ubuntu) might be restricting the bitcoind process from accessing critical files (like the wallet or UTXO database) or performing necessary network operations. This can lead to silent failures during transaction processing.
- Test: Temporarily disable SELinux with
sudo setenforce 0or disable AppArmor for the node withsudo aa-disable bitcoind(if a profile exists). Retry your transaction workflow. - Fix: If this resolves the issue, update the SELinux policy or AppArmor profile to allow the node's required operations.
7. Corrupted Wallet File
Your regtest wallet file (~/.bitcoin/regtest/wallet.dat) might have become corrupted due to an unclean shutdown, disk error, or other issue. A corrupted wallet could provide incorrect UTXO details or private key data during the signing process.
- Fix: Create a new wallet with
bitcoin-cli -regtest createwallet "new_regtest_wallet", import your private keys withbitcoin-cli -regtest importprivkey <your_private_key>, generate some new blocks to get fresh UTXOs, then retry the transaction.
8. Misconfigured Node Settings
Even if you didn't intentionally change the config, it's possible a system update, accidental edit, or script modified your regtest.conf file. Certain settings (like strict transaction validation flags) could cause the node to reject your signed transaction.
- Check: Compare your
~/.bitcoin/regtest.confwith a working machine's config. Look for settings likeacceptnonstdtxn,checkmempool, or any custom validation flags that might differ. - Fix: Reset the config to a known-good state, or add
acceptnonstdtxn=1(regtest allows non-standard transactions by default, but if this was disabled, it could cause issues).
Final Suggestion
Start with the simplest fixes first: restart the node, verify system time, and check file permissions. If those don't work, move on to testing with a new wallet and checking for library/security module issues.
内容的提问来源于stack exchange,提问作者Tharun Prabakaran

