bitcoin/src/node
Sjors Provoost c504b6997b
refactor: add coinbase constraints to BlockCreateOptions
When generating a block template through e.g. getblocktemplate RPC,
we reserve 4000 weight units and 400 sigops. Pools use this space
for their coinbase outputs.

At least one pool patched their Bitcoin Core node to adjust
these hardcoded values. They eventually produced an invalid
block which exceeded the sigops limit.
https://bitcoin.stackexchange.com/questions/117837/how-many-sigops-are-in-the-invalid-block-783426

The existince of such patches suggests it may be useful to
make this value configurable. This commit would make such a
change easier.

The main motivation however is that the Stratum v2 spec
requires the pool to communicate the maximum bytes they intend
to add to the coinbase outputs. A proposed change to the spec
would also require them to communicate the maximum number of sigops.

This commit also documents what happens when
-blockmaxweight is lower than the coinbase
reserved value.

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2024-07-17 18:33:15 +02:00
..
abort.cpp refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
abort.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
blockmanager_args.cpp kernel: Add less confusing reindex options 2024-06-07 19:17:11 +02:00
blockmanager_args.h Add [[nodiscard]] where ignoring a Result return type is an error 2023-05-29 13:12:45 +02:00
blockstorage.cpp Merge bitcoin/bitcoin#30428: log: LogError with FlatFilePos in UndoReadFromDisk 2024-07-15 13:42:53 -04:00
blockstorage.h Merge bitcoin/bitcoin#30428: log: LogError with FlatFilePos in UndoReadFromDisk 2024-07-15 13:42:53 -04:00
caches.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
caches.h
chainstate.cpp blockman: Replace m_reindexing with m_blockfiles_indexed 2024-06-07 19:18:46 +02:00
chainstate.h kernel: Add less confusing reindex options 2024-06-07 19:17:11 +02:00
chainstatemanager_args.cpp kernel: De-globalize signature cache 2024-07-05 09:03:04 +02:00
chainstatemanager_args.h refactor: Move {MAX,DEFAULT}_SCRIPTCHECK_THREADS constants 2023-10-03 10:52:17 +01:00
coin.cpp
coin.h scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
coins_view_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
coins_view_args.h refactor, txdb: Add CoinsViewOptions struct 2023-02-10 04:39:11 -04:00
connection_types.cpp net: expose transport types/session IDs of connections in RPC and logs 2023-10-02 18:11:11 -04:00
connection_types.h net: expose transport types/session IDs of connections in RPC and logs 2023-10-02 18:11:11 -04:00
context.cpp Introduce Mining interface 2024-06-18 18:47:51 +02:00
context.h Introduce Mining interface 2024-06-18 18:47:51 +02:00
database_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
database_args.h refactor, dbwrapper: Add DBParams and DBOptions structs 2023-02-10 04:39:11 -04:00
eviction.cpp
eviction.h
interface_ui.cpp util: Move util/string.h functions to util namespace 2024-05-16 10:16:08 -05:00
interface_ui.h Add InitError(error, details) overload 2023-02-28 12:04:47 -05:00
interfaces.cpp refactor: pass BlockCreateOptions to createNewBlock 2024-07-16 10:27:57 +02:00
kernel_notifications.cpp Merge bitcoin/bitcoin#30058: Encapsulate warnings in generalized node::Warnings and remove globals 2024-06-17 17:09:18 -04:00
kernel_notifications.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
mempool_args.cpp util: move fees.h and error.h to common/messages.h 2024-05-16 10:16:08 -05:00
mempool_args.h refactor: Replace std::optional<bilingual_str> with util::Result 2023-05-24 08:55:47 -04:00
mempool_persist.cpp mempool: move LoadMempool/DumpMempool to node 2024-06-26 22:47:09 +00:00
mempool_persist.h mempool: move LoadMempool/DumpMempool to node 2024-06-26 22:47:09 +00:00
mempool_persist_args.cpp move-only: Extract common/args and common/config.cpp from util/system 2023-04-19 10:48:30 +02:00
mempool_persist_args.h refactor: Move fs.* to util/fs.* 2023-03-23 12:55:18 +01:00
miner.cpp refactor: add coinbase constraints to BlockCreateOptions 2024-07-17 18:33:15 +02:00
miner.h refactor: pass BlockCreateOptions to createNewBlock 2024-07-16 10:27:57 +02:00
mini_miner.cpp MiniMiner: use FeeFrac in AncestorFeerateComparator 2024-07-09 17:22:51 +01:00
mini_miner.h Don't use iterator addresses in IteratorComparator 2024-06-19 10:14:31 +01:00
minisketchwrapper.cpp Use steady clock in SeedStrengthen and FindBestImplementation 2023-03-02 14:48:28 +01:00
minisketchwrapper.h
peerman_args.cpp Merge bitcoin/bitcoin#28149: net processing: clamp PeerManager::Options user input 2023-08-09 14:26:03 +02:00
peerman_args.h [net processing] Introduce PeerManager options 2023-07-24 18:30:59 +02:00
protocol_version.h Rename version.h to node/protocol_version.h 2023-11-30 11:28:31 +01:00
psbt.cpp scripted-diff: Bump copyright headers 2022-12-24 23:49:50 +00:00
psbt.h
README.md
timeoffsets.cpp refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
timeoffsets.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00
transaction.cpp util: add TransactionError includes and namespace declarations 2024-05-16 10:16:08 -05:00
transaction.h util: move fees.h and error.h to common/messages.h 2024-05-16 10:16:08 -05:00
txreconciliation.cpp random: get rid of GetRand by inlining 2024-07-01 12:39:53 -04:00
txreconciliation.h [net processing] Move -txreconciliation to PeerManager::Options 2023-07-24 18:35:28 +02:00
types.h refactor: add coinbase constraints to BlockCreateOptions 2024-07-17 18:33:15 +02:00
utxo_snapshot.cpp lint: remove /* Continued */ markers from codebase 2023-08-03 17:52:24 +01:00
utxo_snapshot.h assumeutxo: Add network magic ctor param to SnapshotMetadata 2024-05-24 18:44:02 +02:00
warnings.cpp Use WITH_LOCK in Warnings::Set 2024-07-06 13:00:53 -04:00
warnings.h refactor: remove warnings globals 2024-06-13 11:20:49 +01:00

src/node/

The src/node/ directory contains code that needs to access node state (state in CChain, CBlockIndex, CCoinsView, CTxMemPool, and similar classes).

Code in src/node/ is meant to be segregated from code in src/wallet/ and src/qt/, to ensure wallet and GUI code changes don't interfere with node operation, to allow wallet and GUI code to run in separate processes, and to perhaps eventually allow wallet and GUI code to be maintained in separate source repositories.

As a rule of thumb, code in one of the src/node/, src/wallet/, or src/qt/ directories should avoid calling code in the other directories directly, and only invoke it indirectly through the more limited src/interfaces/ classes.

This directory is at the moment sparsely populated. Eventually more substantial files like src/validation.cpp and src/txmempool.cpp might be moved there.