What are pros and cons of txindex option?

27

15

I am reading "Mastering Bitcoin" written by Andreas and I found this explanation about "txindex option"

Transaction Database Index and txindex Option

By default, Bitcoin Core builds a database containing only the transactions related to the user’s wallet. If you want to be able to access any transaction with commands like gettransaction, you need to configure Bitcoin Core to build a complete transaction index, which can be achieved with the txindex option. Set txindex=1 in the Bitcoin Core configuration file

I am not sure what situations should I enable the option. In my understanding, I can set txindex=0 if I use bitcoind as just a transmission tool of Bitcoin so that I can save data and time to sync the blockchain data. Otherwise, if I intend to make a blockexplore site like Blockchain.info, I need to set txindex=1.

Is my understanding of this correct?

zono

Posted 2015-01-24T16:08:40.287

Reputation: 1 569

Answers

32

If you're using Bitcoin Core just for your own personal use, you probably don't need the -txindex=1 option. But, if you're using Bitcoin core for development or blockchain analysis of some sort, you will need to set -txindex=1 to be able to get transactions data for any transaction in the blockchain.

The tradeoff is just that keeping an index is slightly slower, but allows you to do things like:

bitcoin-cli getrawtransaction aec2729f5e46750b310b6feadcf853098aa86df74f93322a701c29cd68b22568 

(where aec2729f5e46750b310b6feadcf853098aa86df74f93322a701c29cd68b22568 is the ID of a transaction that does not affect your wallet at all).

Also, if you have been running your client for a while but haven't had txindex=1 set, then it might take a few hours to build the index. If you want to rebuild, launch with the -reindex option.

morsecoder

Posted 2015-01-24T16:08:40.287

Reputation: 12 624

♦ Thank you very much for your prompt reply. I understood it. I expected that I could save a lot of time to sync the blockchain but it would be not true as far as I read your answer.zono 2015-01-24T16:32:38.223

Does setting txindex=1 or reindex=1 cause a new download? The prod chain is so big, I would like to avoid that if possible.Steve Hibbert 2017-04-03T13:42:43.980

@SteveHibbert no, it doesn't re-download the data, because you should already have the data on disk, it just reprocesses the data you have. It is still time consuming, though.morsecoder 2017-04-03T13:52:07.820

@StephenM347 Great, thanks for that, much obliged.Steve Hibbert 2017-04-03T15:17:09.470

15

By default -txindex=0 Bitcoin Core doesn't maintain any transaction-level data except for those

  • in the mempool or relay set
  • pertinent to addresses in your wallet
  • pertinent to your "watch-only" addresses

If "txindex" is set to true (1), Bitcoin Core maintains an index of all transactions that have ever happened, which you can query using the remote procedure call (RPC) method getrawtransaction or the RESTful API call get-tx.

Several popular wallet and "block explorer" programs require -txindex=1. Note that txindex does not alter the behavior of Bitcoin's peer-to-peer interface.

chrisarnesen

Posted 2015-01-24T16:08:40.287

Reputation: 442

3Funny because I Googled into this and found myself reading an answer that was flat-out wrong. To my surprise when I got to the end, I saw my own name! I just rewrote my answer.chrisarnesen 2015-07-07T15:37:49.260

Bitcoin core does maintain transaction-level data for all unspents, regardless of whether the address belongs to you or not. Otherwise it won't be able to validate incoming transactions.kaykurokawa 2015-08-01T20:30:08.607

@kaykurokawa : I don't know precisely what's included in the "relay set" but that's the terminology consistently used by the developer documentation on bitcoin.org. Of course it must include unspents, but what else is in there?chrisarnesen 2015-08-02T21:34:59.747

ah I see, I was not aware of that term.kaykurokawa 2015-08-03T03:40:03.863

@chrisamesen That's really cool- It didn't occur to me wiki information correction also works with your past and future selves.cmc 2017-11-16T18:29:35.153

3

In addition, txindex=1 used to be required if you wanted to use LND (lightning network daemon). See https://github.com/lightningnetwork/lnd/pull/751

Offer Markovich

Posted 2015-01-24T16:08:40.287

Reputation: 31

@Janus: I've rejected your edit since it changes the content of the answer completely. You should rather add a new answer to mention ElectrumX.Murch 2018-12-16T20:37:43.540

2

In addition to the other answers, txindex=1 is required if you want to use your wallet with Counterparty.

See the installation instructions at https://github.com/CounterpartyXCP/counterparty-lib

alexg

Posted 2015-01-24T16:08:40.287

Reputation: 180