/ src / node / types.h
types.h
  1  // Copyright (c) 2010-present The Bitcoin Core 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  //! @file node/types.h is a home for public enum and struct type definitions
  6  //! that are used internally by node code, but also used externally by wallet,
  7  //! mining or GUI code.
  8  //!
  9  //! This file is intended to define only simple types that do not have external
 10  //! dependencies. More complicated types should be defined in dedicated header
 11  //! files.
 12  
 13  #ifndef BITCOIN_NODE_TYPES_H
 14  #define BITCOIN_NODE_TYPES_H
 15  
 16  #include <consensus/amount.h>
 17  #include <cstddef>
 18  #include <cstdint>
 19  #include <optional>
 20  #include <policy/policy.h>
 21  #include <primitives/transaction.h>
 22  #include <script/script.h>
 23  #include <uint256.h>
 24  #include <util/time.h>
 25  #include <vector>
 26  
 27  namespace node {
 28  enum class TransactionError {
 29      OK, //!< No error
 30      MISSING_INPUTS,
 31      ALREADY_IN_UTXO_SET,
 32      MEMPOOL_REJECTED,
 33      MEMPOOL_ERROR,
 34      MAX_FEE_EXCEEDED,
 35      MAX_BURN_EXCEEDED,
 36      INVALID_PACKAGE,
 37  };
 38  
 39  struct BlockCreateOptions {
 40      /**
 41       * Set false to omit mempool transactions
 42       */
 43      bool use_mempool{true};
 44      /**
 45       * The default reserved weight for the fixed-size block header,
 46       * transaction count and coinbase transaction. Minimum: 2000 weight units
 47       * (MINIMUM_BLOCK_RESERVED_WEIGHT).
 48       *
 49       * Providing a value overrides the `-blockreservedweight` startup setting.
 50       * Cap'n Proto IPC clients currently cannot leave this field unset, so they
 51       * always provide a value.
 52       */
 53      std::optional<size_t> block_reserved_weight{};
 54      /**
 55       * The maximum additional sigops which the pool will add in coinbase
 56       * transaction outputs.
 57       */
 58      size_t coinbase_output_max_additional_sigops{DEFAULT_COINBASE_OUTPUT_MAX_ADDITIONAL_SIGOPS};
 59      /**
 60       * Script to put in the coinbase transaction. The default is an
 61       * anyone-can-spend dummy.
 62       *
 63       * Should only be used for tests, when the default doesn't suffice.
 64       *
 65       * Note that higher level code like the getblocktemplate RPC may omit the
 66       * coinbase transaction entirely. It's instead constructed by pool software
 67       * using fields like coinbasevalue, coinbaseaux and default_witness_commitment.
 68       * This software typically also controls the payout outputs, even for solo
 69       * mining.
 70       *
 71       * The size and sigops are not checked against
 72       * coinbase_max_additional_weight and coinbase_output_max_additional_sigops.
 73       */
 74      CScript coinbase_output_script{CScript() << OP_TRUE};
 75      /**
 76       * Whether to include an OP_0 as a dummy extraNonce in the template's coinbase
 77       */
 78      bool include_dummy_extranonce{false};
 79  };
 80  
 81  struct BlockWaitOptions {
 82      /**
 83       * How long to wait before returning nullptr instead of a new template.
 84       * Default is to wait forever.
 85       */
 86      MillisecondsDouble timeout{MillisecondsDouble::max()};
 87  
 88      /**
 89       * The wait method will not return a new template unless it has fees at
 90       * least fee_threshold sats higher than the current template, or unless
 91       * the chain tip changes and the previous template is no longer valid.
 92       *
 93       * A caller may not be interested in templates with higher fees, and
 94       * determining whether fee_threshold is reached is also expensive. So as
 95       * an optimization, when fee_threshold is set to MAX_MONEY (default), the
 96       * implementation is able to be much more efficient, skipping expensive
 97       * checks and only returning new templates when the chain tip changes.
 98       */
 99      CAmount fee_threshold{MAX_MONEY};
100  };
101  
102  struct BlockCheckOptions {
103      /**
104       * Set false to omit the merkle root check
105       */
106      bool check_merkle_root{true};
107  
108      /**
109       * Set false to omit the proof-of-work check
110       */
111      bool check_pow{true};
112  };
113  
114  /**
115   * Template containing all coinbase transaction fields that are set by our
116   * miner code. Clients are expected to add their own outputs and typically
117   * also expand the scriptSig.
118   */
119  struct CoinbaseTx {
120      /* nVersion */
121      uint32_t version;
122      /* nSequence for the only coinbase transaction input */
123      uint32_t sequence;
124      /**
125       * Prefix which needs to be placed at the beginning of the scriptSig.
126       * Clients may append extra data to this as long as the overall scriptSig
127       * size is 100 bytes or less, to avoid the block being rejected with
128       * "bad-cb-length" error.
129       *
130       * Currently with BIP 34, the prefix is guaranteed to be less than 8 bytes,
131       * but future soft forks could require longer prefixes.
132       */
133      CScript script_sig_prefix;
134      /**
135       * The first (and only) witness stack element of the coinbase input.
136       *
137       * Omitted for block templates without witness data.
138       *
139       * This is currently the BIP 141 witness reserved value, and can be chosen
140       * arbitrarily by the node, but future soft forks may constrain it.
141       */
142      std::optional<uint256> witness;
143      /**
144       * Block subsidy plus fees, minus any non-zero required_outputs.
145       *
146       * Currently there are no non-zero required_outputs, so block_reward_remaining
147       * is the entire block reward. See also required_outputs.
148       */
149      CAmount block_reward_remaining;
150      /*
151       * To be included as the last outputs in the coinbase transaction.
152       * Currently this is only the witness commitment OP_RETURN, but future
153       * softforks or a custom mining patch could add more.
154       *
155       * The dummy output that spends the full reward is excluded.
156       */
157      std::vector<CTxOut> required_outputs;
158      uint32_t lock_time;
159  };
160  
161  /**
162   * How to broadcast a local transaction.
163   * Used to influence `BroadcastTransaction()` and its callers.
164   */
165  enum class TxBroadcast : uint8_t {
166      /// Add the transaction to the mempool and broadcast to all peers for which tx relay is enabled.
167      MEMPOOL_AND_BROADCAST_TO_ALL,
168      /// Add the transaction to the mempool, but don't broadcast to anybody.
169      MEMPOOL_NO_BROADCAST,
170      /// Omit the mempool and directly send the transaction via a few dedicated connections to
171      /// peers on privacy networks.
172      NO_MEMPOOL_PRIVATE_BROADCAST,
173  };
174  
175  } // namespace node
176  
177  #endif // BITCOIN_NODE_TYPES_H