Nexa QT Desktop Wallet: Tips, Tricks and Troubleshooting

The Nexa QT core wallet is the original core client wallet for Bitcoin. As many users are not familiar with OG core wallets I’d like to walk you through the key things you will need to know regarding utilizing the wallet.

full-node-qt

1.) There is no 12 or 24 seed word associated with this wallet

2.) Backing up of the wallet is done via saving copies of the wallet.dat file that is created.

3.) You can also export a file which contains your private keys for all the addresses associated with your wallet (there are many addresses associated with each wallet)

4.) The wallet runs a full node, therefore it takes time to load the wallet the first time, and if you don’t have the wallet open for a long period of time it will take time to synchronize the wallet

To obtain the desktop wallet please head on over to https://www.nexa.org/node

Once downloaded and installed/extracted, please open the wallet by opening the Nexa-QT application. The first time you enter the wallet I recommend you add a few more peers/nodes to make sure you have more than enough connections to keep your wallet working correctly. Please go into the file menu.

To add more nodes/connections: (or if your sync seems to be stuck)

Top Menu → Help → Debug Window → Console

When in the console please type the following:

addnode 51.89.85.101 add

Then press enter. Wait for output, then type the following:

addnode 72.206.127.43 add

Then press enter. Wait for output, then type the following:

addnode 209.182.219.172 add

Then press enter.

That should increase your inbound/outbound connections. However, this is just a band-aid. You can also add more nodes if you would like from the list of the running nodes here: Peers (nexa.org)

If you are still having issues with the wallet syncing it is recommended to enable port forwarding or UPnP setup properly. The reason is due to their not being enough available slots to get outbound connections and that’s because very few users are actually allowing inbound connections. As a result, Bitcoin Unlimited/Nexa is running several nodes with high numbers of available connections to accommodate all these unconfigured nodes. In order to set-up inbound connections on your node you need to enable port forwarding on your route and/or set-up UPnP.

The first step is to enter the Nexa QT wallet, top menu → Settings → Options and click on “map port using UPnP.” If UPnP is set-up on your router this should work and allow more connections. If not, you will also need to make sure that ports 7227 and 7228 are forwarded on your router. Each router has a bit different process to set-up, I reccomend you do a google search for your particular router. Here is also a quick video that discusses this process in more detail:

To back-up your wallet:

Don’t forget to then back-up your wallet.dat file, you can create a copy of your wallet.dat by going into the users//appdata/roaming/nexa file and making a copy of the wallet.dat file. I reccomend you save this file on a few different usb sticks. This wallet.dat file can be used to restore you wallet should you lose access to the computer with your wallet stored on it. To restore your wallet with the wallet.dat file all you need to do is take this file, and put it in the same folder above that you previously made the copy from. Make sure when you restore you have the wallet closed when you move your backup wallet.dat file into the folder. (if you can’t locate your appdata folder within your user directory you will need to go into “view” in windows explorer and check the box for “show hidden files/folders”)

To obtain your private keys:

You can enter the debug console again, on top menu navigate to help->debug window->console. Once in the debug window you can type in the following:

dumpwallet dump

This will create a file in your nexa/bin directory that is named “dump”, you can now open this file with notepad and you will see each private key for each address in your account. If you receive an error when you try this command make sure that you have opened qt wallet with administrator privledges.

If you want to restore your wallet with a private key on a new installation of the wallet, enter the debug console yet again and enter the command:

importprivkey

This will then import the specific address that the key is associated with into your new wallet. Please note that your wallet has many, many addresses that can be associated with it, so you want to ensure that each address that contains coins in it, is imported into the console. (and is listed in your dumpwallet dump file).

How to encrypt/password protect your wallet:

To keep your wallet safe on your computer and ensure someone can’t interact with your coins if you lose your computer or if it was stolen, it is essential to encrypt with a password. To encrypt, go to top menu → settings → encrypt and enter the password of your choosing, you will be asked to enter it twice to ensure you typed correctly. It is 100% essential that you remember this password, if lost or forgotten, you will not be able to interact with your coins.

The rest of the article will focus on key troubleshooting:

What to do if a transactions seems to be stuck at 0/confs?

On top menu → debug window → console and enter:

resendwallettransactions

Then press enter. Once you get an output please exit, and restart your wallet.

What to do if your wallet seems to be missing a transaction that has already been confirmed on the blockchain?

Go to the folder where the qt is in. Hold Shift, and right click mouse → Click into “open powershell here” Once powershell opens run the command:

./nexa-qt.exe -rescan

What to do if you get an “error reading from database” when starting the wallet?

Go to the folder where the qt is in. Hold Shift, and right click mouse → Click into “open powershell here” Once powershell opens run the command:

./nexa-qt -reindex

2 Likes

More command-line options:

nexa-qt [command-line options]

Help options:

-? This help message
-version Print version and exit
-help-debug Show all debugging options (usage: --help -help-debug)

Configuration location options:

-conf= Specify configuration file (default: nexa.conf)
-forks= Specify fork deployment file (default: forks.csv)
-datadir= Specify data directory

General options:

-alertnotify= Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message)
-blocknotify= Execute command when the best block changes (%s in cmd is replaced by block hash)
-useblockdb Which method to store blocks on disk (default: 0) 0 = sequential files, 1 = blockdb
-checkblocks= How many blocks to check at startup (default: 6, 0 = all)
-checklevel= How thorough the block verification of -checkblocks is (0-4, default: 3)
-loadblock= Imports blocks from external blk000??.dat file on startup
-par= Set the number of script verification threads (-12 to 16, 0 = auto, <0 = leave that many cores free, default: 0)
-prune= Reduce storage requirements by pruning (deleting) old blocks. This mode is incompatible with -txindex and -rescan. Warning: Reverting this setting requires re-downloading the entire blockchain. (default: 0 = disable pruning blocks, >550 = target size in MiB to use for block files)
-reindex Rebuild block chain index from current blk000??.dat files on startup
-resync Entirely resyncronize the blockchain database from genesis
-txindex Maintain a full transaction index, used by the getrawtransaction rpc call (default: 0)

Connection options:

-addnode= Add a node to connect to and attempt to keep the connection open
-banscore= Threshold for disconnecting misbehaving peers (default: 100)
-bantime= Number of seconds to keep misbehaving peers from reconnecting (default: 86400)
-bind= Bind to given address and always listen on it. Use [host]:port notation for IPv6
-bindallorfail Bind all ports (P2P as well RPC) or fail to start. This is used for RPC testing, but might find other uses.
-bitnodes Query for peer addresses via Bitnodes API, if low on addresses (default: 1 unless -connect)
-connect= Connect only to the specified node(s)
-discover Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)
-dns Allow DNS lookups for -addnode, -seednode and -connect (default: 1)
-dnsseed Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)
-externalip= Specify your own public address
-forcebitnodes Always query for peer addresses via Bitnodes API (default: 0)
-forcednsseed Always query for peer addresses via DNS lookup (default: 0)
-listen Accept connections from outside (default: 1 if no -proxy or -connect)
-listenonion Automatically create Tor hidden service (default: 1)
-maxreceivebuffer= Maximum per-connection receive buffer, *1000 bytes (default: 10000)
-maxsendbuffer= Maximum per-connection send buffer, *1000 bytes (default: 10000)
-onion=ip:port Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy)
-onlynet= Only connect to nodes in network (ipv4, ipv6 or onion)
-peerbloomfilters Support filtering of blocks and transaction with bloom filters (default: 1)
-port= Listen for connections on (default: 7228, testnet: 7230, regtest: 18444)
-proxy=ip:port Connect through SOCKS5 proxy
-proxyrandomize Randomize credentials for every proxy connection. This enables Tor stream isolation (default: 1)
-seednode= Connect to a node to retrieve peer addresses, and disconnect
-timeout= Specify connection timeout in milliseconds (minimum: 1, default: 5000)
-torcontrol=: Tor control port to use if onion listening enabled (default: 127.0.0.1:9051)
-torpassword= Tor control port password (default: empty)
-upnp Use UPnP to map the listening port (default: 0)
-usednsseed= Add a custom DNS seed to use. If at least one custom DNS seed is set, the default DNS seeds will be ignored.
-whitebind= Bind to given address and whitelist peers connecting to it. Use [host]:port notation for IPv6
-whitelist= Whitelist peers connecting from the given netmask or IP address. Can be specified multiple times. Whitelisted peers cannot be DoS banned and their transactions are always relayed, even if they are already in the mempool, useful e.g. for a gateway
-whitelistrelay Accept relayed transactions received from whitelisted peers even when not relaying transactions (default: 1)
-whitelistforcerelay Force relay of transactions from whitelisted peers even they violate local relay policy (default: 1)
-maxuploadtarget= Tries to keep outbound traffic under the given target (in MiB per 24h), 0 = no limit (default: 0)

Wallet options:

-disablewallet Do not load the wallet and disable wallet RPC calls
-keypool= Set key pool size to (default: 100)
-rescan Rescan the block chain for missing wallet transactions on startup
-salvagewallet Attempt to recover private keys from a corrupt wallet.dat on startup
-sendfreetransactions Send transactions as zero-fee transactions if possible (default: 0)
-spendzeroconfchange Spend unconfirmed change when sending transactions (default: 1)
-txconfirmtarget= If paytxfee is not set, include enough fee so transactions begin confirmation on average within n blocks (default: 2)
-upgradewallet Upgrade wallet to latest format on startup
-usehd Use hierarchical deterministic key generation (HD) after bip32. Only has effect during wallet creation/first start (default: 1)
-wallet= Specify wallet file (within data directory) (default: wallet.dat)
-walletbroadcast Make the wallet broadcast transactions (default: 1)
-walletnotify= Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)
-zapwallettxes= Delete all wallet transactions and only recover those parts of the blockchain through -rescan on startup (1 = keep tx meta data e.g. account owner and payment request information, 2 = drop tx meta data)
-usecashaddr Use Nexa Cash Address for destination encoding (default: true

ZeroMQ notification options:

-zmqpubhashblock= Enable publish hash block in
-zmqpubhashtx= Enable publish hash transaction in
-zmqpubhashds= Enable publishing of the hash of double spent transactions in
-zmqpubrawds= Enable publishing of raw double spend proofs to
-zmqpubrawblock= Enable publish raw block in
-zmqpubrawtx= Enable publish raw transaction in

Debugging/Testing options:

-uacomment= Append comment to the user agent string
-debug= Output debugging information (default: 0, supplying is optional). If is not supplied or if = 1, output all debugging information. can be: addrman, bench, blk, bloom, coindb, db, estimatefee, evict, http, lck, libevent, mempool, mempoolrej, miner, net, parallel, partitioncheck, proxy, prune, rand, reindex, req, rpc, selectcoins, thin, tor, wallet, zmq, graphene, respend, weakblocks, qt. Multiple debug categories can be separated by comma.
-logips Include IP addresses in debug output (default: 1)
-logtimestamps Prepend debug output with timestamp (default: 1)
-printtoconsole Send trace/debug info to console instead of debug.log file
-shrinkdebugfile Shrink debug.log file on client startup (default: 1 when no -debug)
-maxtipage= Maximum time since the last block was mined in seconds before we consider ourselves still in IBD (default: 86400)

Chain selection options:

-testnet Use the testnet chain
-nexa Use Nexa main chain

Node relay options:

-expeditedblock= Request expedited blocks from this host whenever we are connected to it
-maxexpeditedblockrecipients= The maximum number of nodes this node will forward expedited blocks to
-maxexpeditedtxrecipients= The maximum number of nodes this node will forward expedited transactions to
-receiveavg- The average rate that data can be received in kB/s (default: 9223372036854775807)
-receiveburst= The maximum rate that data can be received in kB/s. If there has been a period of lower than average data rates, the client may receive extra data to bring the average back to ‘-receiveavg’ but the data rate will not exceed this parameter (default: 9223372036854775807)
-sendavg- The average rate that data can be sent in kB/s (default: 9223372036854775807)
-sendburst- The maximum rate that data can be sent in kB/s. If there has been a period of lower than average data rates, the client may send extra data to bring the average back to ‘-receiveavg’ but the data rate will not exceed this parameter (default: 9223372036854775807)
-use-thinblocks Enable thin blocks to speed up the relay of blocks (default: 1)
-xthinbloomfiltersize= The maximum xthin bloom filter size that our node will accept in Bytes (default: 36000)
-use-grapheneblocks Enable graphene to speed up the relay of blocks (default: 1)
-use-compactblocks Enable compact blocks to speed up the relay of blocks (default: 1)
-use-extversion Enable extended versioning during node handshake (extversion) (default: 1)
-preferential-timer= Set graphene, thinblock and compactblock preferential timer duration (default: 1000). Use 0 to disable it.

RPC server options:

-server Accept command line and JSON-RPC commands
-rest Accept public REST requests (default: 0)
-rpcbind= Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6. This option can be specified multiple times (default: bind to all interfaces)
-rpccookiefile= Location of the auth cookie (default: data dir)
-rpcuser= Username for JSON-RPC connections
-rpcpassword= Password for JSON-RPC connections
-rpcauth= Username and hashed password for JSON-RPC connections. The field comes in the format: :$. A canonical python script is included in share/rpcuser. This option can be specified multiple times
-rpcport= Listen for JSON-RPC connections on (default: 7227, testnet: 7229, regtest: 18332)
-rpcallowip= Allow JSON-RPC connections from specified source. Valid for are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times
-rpcthreads= Set the number of threads to service RPC calls (default: 4)

Electrum server options:

-electrum Enable electrum server
-electrum.dir Data directory for electrum database
-electrum.port Port electrum RPC listens on (default: mainnet 20001, testnet: 30001, regtest: 30401)
-electrum.host Host electrum RPC listens on (default: all interfaces)
-electrum.rawarg Raw argument to pass directly to underlying electrum daemon (example: -electrum.rawarg=“–server-banner="Welcome to my server!"”). This option can be specified multiple times.
-electrum.ws.host Host electrum Websocket listens on (default: all interfaces
-electrum.ws.port Port electrum Websocket listens on (default: mainnet 20003, testnet: 30003, regtest: 30403)
-electrum.shutdownonerror Shutdown if the electrum server exits unexpectedly
-electrum.blocknotify Instantly notify electrum server of new blocks.

Configuration tweaks which can be modified without restart:

-blockchain.checkScriptDays= The number of days in the past we check scripts during initial block download (default: 30)
-cache.dbcache= Set database cache size in megabytes (4 to 32736, default: 0). Zero means auto-size the cache.
-cache.maxCapdPool= Set the counterparty and protocol discovery message pool size (default: 10485760, 0 disables). Note that enabling CAPD will only happen for new node connections, and disabling will make this node silently drop incoming CAPD messages.
-cache.maxOrphanPool= Keep at most unconnectable transactions (orphans) in memory (default: 1000000)
-cache.maxTxPool= Keep the transaction memory pool below megabytes (default: 300)
-cache.orphanPoolExpiry= Do not keep transactions in the orphanpool longer than hours (default: 4)
-cache.persistTxPool= Whether to save the mempool and orphanpool on shutdown and load them on restart (default: 1)
-cache.txPoolExpiry= Do not keep transactions in the mempool longer than hours (default: 72)
-mining.blockSize= Maximum block size in bytes. The maximum block size returned from ‘getblocktemplate’ will be this value minus mining.coinbaseReserve. A value of Zero means use the adaptive block size algorithm (default: 0)
-mining.coinbaseReserve= How much space to reserve for the coinbase transaction, in bytes (default: 1000)
-mining.comment= Include this text in a block’s coinbase.
-mining.maxCandidates= How many simultaneous block candidates to track (default: 10)
-mining.minCandidateInterval= Reuse a block candidate if requested within this many seconds (default: 30)
-mining.prioritySize= Set maximum size, in bytes, of the high-priority/low-fee transaction area within a block(default: 0)
-mining.unsafeGetBlockTemplate= Allow getblocktemplate to succeed even if the chain tip is old or this node is not connected to other nodes (default: false)
-mining.vote= Comma separated list of features to vote for in a block’s nVersion field (as per BIP135)
-net.allowp2pTxVal= allow requests to check if a transaction would be accepted into the mempool via p2p message (default: false)
-net.displayArchInSubver= Show box architecture, 32/64bit, in node user agent string (subver) (true/false - default: 1)
-net.doubleSpendProofs= Process and forward double spend proofs (default: true)
-net.maxConnections= Maximum number of connections (default: 125)
-net.maxOutboundConnections= Maximum number of outbound connections
-net.msgHandlerThreads= Max message handler threads. Auto detection is zero (default: 0).
-net.randomlyDontInv= Skip sending an INV for some percent of transactions (default: 0)
-net.subversionOverride= If set, this field will override the normal subversion field. This is useful if you need to hide your node
-net.syncMempoolWithPeers= Synchronize mempool with peers (default: false)
-net.txAdmissionThreads= Max transaction mempool admission threads Auto detection is zero (default: 0).
-prune.pruneInterval= How much block data (in MiB) is written to disk before trying to prune our block storage (default: 100)
-reindex.typicalBlockSize= Set larger than the typical block size. The block data file’s RAM buffer will initally be 2x this size (default: 100000)
-relay.dataCarrier= Relay and mine OP_RETURN transactions (default: 1)
-relay.dataCarrierSize= Maximum size of OP_RETURN data script in bytes that we relay and mine (default: 223)
-relay.dustThreshold= Dust Threshold in satoshis (default: 546)
-relay.limitFreeRelay= Continuously rate-limit free transactions to *1000 bytes per minute (default: 0)
-relay.limitRespendRelay= Continuously rate-limit double spend transactions to *1000 bytes per minute (default: 100)
-relay.minRelayTxFee= Fees (in satoshi/KB) smaller than this are considered zero fee and subject to -relay.limitFreeRelay (default: 1000)
-relay.priority= Require high priority for relaying free or low-fee transactions (default: 0)
-wallet.auto= Auto consolidate utxos by creating a valid chain of transactions during transaction creation, with each transaction not exceeding the consensus input limit of 256 (default: false)
-wallet.coinSelSearchTime= When sending, how long should this wallet search for a no-change payment solution in milliseconds. A no-change solution reduces transaction fees (default: 25)
-wallet.feeEstimation= Is fee estimation turned on (default: false)
-wallet.instant= Are coins from unconfirmed transactions instantly spendable from the wallet (default: false)
-wallet.instantDelay= Time in seconds to wait before making an instant transaction spendable (default: 5)
-wallet.maxTxFee= Maximum total fees (in satoshis) to use in a single wallet transaction or raw transaction; setting this too low may abort large transactions (default: 1000000)
-wallet.payTxFee= Fee (in sat/KB) to add to transactions you send (default: 0)
-wallet.preferredNumUTXO= How many UTXOs should be maintained in this wallet (on average). If the number of UTXOs exceeds this value, transactions will be found that tend to have more inputs. This will consolidate UTXOs (default: 5000)
-wallet.txFeeOverpay= If transactions overpay by less than this amount in Satoshis, the extra will be put in the fee rather than a change address. Zero means calculate this dynamically as a fraction of the current transaction fee (default: 0).
-wallet.useBIP69= sort input and outputs of created transactions in lexicographical order (default: true)

UI Options:

-choosedatadir Choose data directory on startup (default: 0)
-lang= Set language, for example “de_DE” (default: system locale)
-min Start minimized
-rootcertificates= Set SSL root certificates for payment request (default: -system-)
-splash Show splash screen on startup (default: 1)
-resetguisettings Reset all settings changes made over the GUI