1 // Copyright (c) 2017-2022 The Limenka developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 5 #ifndef LIMENKA_INDEX_TXINDEX_H
6 #define LIMENKA_INDEX_TXINDEX_H
7 8 #include <index/base.h>
9 10 static constexpr bool DEFAULT_TXINDEX{false};
11 12 /**
13 * TxIndex is used to look up transactions included in the blockchain by hash.
14 * The index is written to a LevelDB database and records the filesystem
15 * location of each transaction by transaction hash.
16 */
17 class TxIndex final : public BaseIndex
18 {
19 protected:
20 class DB;
21 22 private:
23 const std::unique_ptr<DB> m_db;
24 25 bool AllowPrune() const override { return false; }
26 bilingual_str GetDisableAction() const override { return _("set -txindex=0"); }
27 28 protected:
29 bool CustomAppend(const interfaces::BlockInfo& block) override;
30 31 BaseIndex::DB& GetDB() const override;
32 33 public:
34 /// Constructs the index, which becomes available to be queried.
35 explicit TxIndex(std::unique_ptr<interfaces::Chain> chain, size_t n_cache_size, bool f_memory = false, bool f_wipe = false);
36 37 // Destructor is declared because this class contains a unique_ptr to an incomplete type.
38 virtual ~TxIndex() override;
39 40 /// Look up a transaction by hash.
41 ///
42 /// @param[in] tx_hash The hash of the transaction to be returned.
43 /// @param[out] block_hash The hash of the block the transaction is found in.
44 /// @param[out] tx The transaction itself.
45 /// @return true if transaction is found, false otherwise
46 bool FindTx(const uint256& tx_hash, uint256& block_hash, CTransactionRef& tx) const;
47 };
48 49 /// The global transaction index, used in GetTransaction. May be null.
50 extern std::unique_ptr<TxIndex> g_txindex;
51 52 #endif // LIMENKA_INDEX_TXINDEX_H
53