bitcoin/doc
Ryan Ofsky 5acf12bafe
Merge bitcoin/bitcoin#31583: rpc: add target to getmininginfo field and show next block info
a4df12323c doc: add release notes (Sjors Provoost)
c75872ffdd test: use DIFF_1_N_BITS in tool_signet_miner (tdb3)
4131f322ac test: check difficulty adjustment using alternate mainnet (Sjors Provoost)
c4f68c12e2 Use OP_0 for BIP34 padding in signet and tests (Sjors Provoost)
cf0a62878b rpc: add next to getmininginfo (Sjors Provoost)
2d18a078a2 rpc: add target and bits to getchainstates (Sjors Provoost)
f153f57acc rpc: add target and bits to getblockchaininfo (Sjors Provoost)
baa504fdfa rpc: add target to getmininginfo result (Sjors Provoost)
2a7bfebd5e Add target to getblock(header) in RPC and REST (Sjors Provoost)
341f932516 rpc: add GetTarget helper (Sjors Provoost)
d20d96fa41 test: use REGTEST_N_BITS in feature_block (tdb3)
7ddbed4f9f rpc: add nBits to getmininginfo (Sjors Provoost)
ba7b9f3d7b build: move pow and chain to bitcoin_common (Sjors Provoost)
c4cc9e3e9d consensus: add DeriveTarget() to pow.h (Sjors Provoost)

Pull request description:

  **tl&dr for consensus-code only reviewers**: the first commit splits `CheckProofOfWorkImpl()` in order to create a `DeriveTarget()` helper. The rest of this PR does not touch consensus code.

  There are three ways to represent the proof-of-work in a block:

  1. nBits
  2. Difficulty
  3. Target

  The latter notation is useful when you want to compare share work against either the pool target (to get paid) or network difficulty (found an actual block). E.g. for difficulty 1 which corresponds to an nBits value of `0x00ffff`:

  ```
  share hash: f6b973257df982284715b0c7a20640dad709d22b0b1a58f2f88d35886ea5ac45
  target:     7fffff0000000000000000000000000000000000000000000000000000000000
  ```

  It's immediately clear that the share is invalid because the hash is above the target.

  This type of logging is mostly done by the pool software. It's a nice extra convenience, but not very important. It impacts the following RPC calls:

  1. `getmininginfo` displays the `target` for the tip block
  2. `getblock` and `getblockheader` display the `target` for a specific block (ditto for their REST equivalents)

  The `getdifficulty` method is a bit useless in its current state, because what miners really want to know if the difficulty for the _next_ block. So I added a boolean argument `next` to `getdifficulty`. (These values are typically the same, except for the first block in a retarget period. On testnet3 / testnet4 they change when no block is found after 20 minutes).

  Similarly I added a `next` object to `getmininginfo` which shows `bit`, `difficulty` and `target` for the next block.

  In order to test the difficulty transition, an alternate mainnet chain with 2016 blocks was generated and used in `mining_mainnet.py`. The chain is deterministic except for its timestamp and nonce values, which are stored in `mainnet_alt.json`.

  As described at the top, this PR introduces a helper method `DeriveTarget()` which is split out from `CheckProofOfWorkImpl`. The proposed `checkblock` RPC in #31564 needs this helper method internally to figure out the consensus target.

  Finally, this PR moves `pow.cpp` and `chain.cpp` from `bitcoin_node` to `bitcoin_common`, in order to give `rpc/util.cpp` (which lives in `bitcoin_common`) access to `pow.h`.

ACKs for top commit:
  ismaelsadeeq:
    re-ACK a4df12323c
  tdb3:
    code review re ACK a4df12323c
  ryanofsky:
    Code review ACK a4df12323c. Only overall changes since last review were dropping new `gettarget` method and dropping changes to `getdifficulty`, but there were also various internal changes splitting and rearranging commits.

Tree-SHA512: edef5633590379c4be007ac96fd1deda8a5b9562ca6ff19fe377cb552b5166f3890d158554c249ab8345977a06da5df07866c9f42ac43ee83dfe3830c61cd169
2025-01-22 15:01:23 -05:00
..
design doc: multiprocess documentation improvements 2024-09-23 15:03:04 -05:00
man build: Remove Autotools-based build system 2024-08-30 21:31:39 +01:00
policy Merge bitcoin/bitcoin#31096: Package validation: accept packages of size 1 2024-12-03 17:46:23 -05:00
release-notes doc: Archive 28.1 release notes 2025-01-13 11:52:54 -05:00
assets-attribution.md [doc] Merge doc/assets-attribution.md into contrib/debian/copyright 2015-09-18 18:14:42 +02:00
assumeutxo.md doc: fix assumeutxo design doc link 2024-09-04 22:53:34 +01:00
benchmarking.md [doc] Amend notes on benchmarking 2025-01-22 16:50:16 +01:00
bips.md docs: remove requirement to signal bip125 2024-10-31 13:19:31 -04:00
bitcoin-conf.md doc: add testnet4 section header for config file 2024-10-01 15:18:12 +02:00
bitcoin_logo_doxygen.png Lossless image optimization 2013-12-02 10:10:22 +01:00
build-freebsd.md doc: Install net/py-pyzmq port on FreeBSD for interface_zmq.py 2024-12-18 12:09:49 +00:00
build-netbsd.md doc: Update NetBSD Build Guide 2024-12-31 10:14:02 +00:00
build-openbsd.md doc: Install py3-zmq port on OpenBSD for interface_zmq.py 2024-12-18 19:48:03 +00:00
build-osx.md doc: migrate from pkg-config to pkgconf in macOS build docs 2024-11-21 10:28:44 +00:00
build-unix.md doc: Update dependency installation for Debian/Ubuntu and CI 2025-01-16 17:31:13 +02:00
build-windows-msvc.md build, msvc: Enable libqrencode vcpkg package 2024-11-05 16:38:56 +00:00
build-windows.md doc: remove dependency install instructions from win docs 2024-10-16 14:47:11 +01:00
cjdns.md doc: update getnodeaddresses for CJDNS, I2P and Tor and rm link 2023-06-01 15:52:51 +02:00
CMakeLists.txt cmake: add USE_SOURCE_PERMISSIONS to all configure_file usage 2024-09-06 10:52:19 +01:00
dependencies.md depends: Qt 5.15.16 2025-01-15 11:52:27 +00:00
descriptors.md doc: update descriptors.md for getdescriptoractivity 2024-11-26 20:47:11 -05:00
developer-notes.md doc: Fix word order in developer-notes.md 2024-11-04 20:05:14 -08:00
dnsseed-policy.md Update the developer mailing list address. 2024-04-02 15:38:40 -03:00
Doxyfile.in build: Rename PACKAGE_* variables to CLIENT_* 2024-10-28 12:35:55 +00:00
external-signer.md wallet: compare address returned by displayaddress 2024-04-16 17:47:43 +02:00
files.md Merge bitcoin/bitcoin#29775: Testnet4 including PoW difficulty adjustment fix 2024-08-07 13:05:04 -04:00
fuzzing.md doc: correct libfuzzer-nosan preset flag 2024-12-02 10:27:14 +00:00
guix.md docs: Point to contrib/guix/README.md in doc/guix.md 2021-01-08 11:40:01 -05:00
i2p.md doc: i2p: improve -i2pacceptincoming mention 2024-04-04 18:32:39 -03:00
init.md Merge bitcoin/bitcoin#28167: init: Add option for rpccookie permissions (replace 26088) 2024-06-27 17:35:08 -04:00
JSON-RPC-interface.md minor: remove unnecessary semicolons from RPC content type examples 2024-06-07 10:47:24 -04:00
managing-wallets.md Merge bitcoin/bitcoin#27064: system: use %LOCALAPPDATA% as default datadir on windows 2024-05-23 12:11:55 -04:00
multiprocess.md doc: multiprocess documentation improvements 2024-09-23 15:03:04 -05:00
multisig-tutorial.md doc: Fix grammatical errors in multisig-tutorial.md 2024-11-05 12:13:02 -08:00
offline-signing-tutorial.md doc: Add missing 'blank=true' option in offline-signing-tutorial.md 2024-11-06 10:36:30 -08:00
p2p-bad-ports.md init, doc: improve -onlynet help and tor/i2p documentation 2022-03-03 16:14:01 +01:00
productivity.md doc: Update for CMake-based build system 2024-08-16 21:24:08 +01:00
psbt.md doc: mention descriptorprocesspsbt in psbt.md 2024-11-12 14:56:12 +01:00
README.md doc: update IBD requirements in doc/README.md 2024-10-02 17:46:11 +02:00
README_doxygen.md doc: Improve doxygen readme navigation section 2019-09-23 19:22:06 -04:00
README_windows.txt doc: Remove version numbers from READMEs 2017-04-05 09:40:48 +02:00
reduce-memory.md doc: Be vague instead of wrong about MALLOC_ARENA_MAX 2023-09-20 17:12:24 +00:00
reduce-traffic.md doc: update/clarify max outbound connection count 2023-12-11 20:05:25 +01:00
release-notes-28121.md doc: add release note about testmempoolaccept debug-message 2024-12-10 11:00:43 -05:00
release-notes-28358.md validation: drop maximum -dbcache 2024-05-28 08:36:28 +02:00
release-notes-30239.md Add release note for ephemeral dust 2024-11-12 09:41:24 -05:00
release-notes-30592.md doc: release note for mempoolrullrbf removal 2024-10-31 13:19:31 -04:00
release-notes-30708.md rpc: add getdescriptoractivity 2024-11-26 20:47:08 -05:00
release-notes-31130.md doc: add release note for #31130 2024-10-25 09:27:30 -04:00
release-notes-31156.md doc: add release note for 31156 2024-10-28 11:38:38 -04:00
release-notes-31175.md rpc: Remove submitblock duplicate pre-check 2024-11-21 22:18:33 +01:00
release-notes-31223.md Add release note for #31223 2024-11-15 16:27:51 -05:00
release-notes-31583.md doc: add release notes 2025-01-22 12:31:46 +01:00
release-notes-empty-template.md doc: Clarify min macOS and Xcode version 2025-01-06 12:30:55 +01:00
release-process.md doc: Use more precise anchor links to Xcode SDK extraction 2024-11-28 05:36:25 +00:00
REST-interface.md doc: Fix missing comma in JSON example in REST-interface.md 2024-11-08 14:24:01 -08:00
tor.md doc: remove mentions of UPnP 2024-10-25 09:27:29 -04:00
tracing.md tracing: pass if replaced by tx/pkg to tracepoint 2024-11-13 13:27:01 -05:00
translation_process.md doc: Updating docs from autotools to cmake 2024-09-18 11:04:52 -04:00
translation_strings_policy.md doc: Updating docs from autotools to cmake 2024-09-18 11:04:52 -04:00
zmq.md doc: correct the zmq automatic build info 2024-09-25 07:07:04 -04:00

Bitcoin Core

Setup

Bitcoin Core is the original Bitcoin client and it builds the backbone of the network. It downloads and, by default, stores the entire history of Bitcoin transactions, which requires several hundred gigabytes or more of disk space. Depending on the speed of your computer and network connection, the synchronization process can take anywhere from a few hours to several days or more.

To download Bitcoin Core, visit bitcoincore.org.

Running

The following are some helpful notes on how to run Bitcoin Core on your native platform.

Unix

Unpack the files into a directory and run:

  • bin/bitcoin-qt (GUI) or
  • bin/bitcoind (headless)

Windows

Unpack the files into a directory, and then run bitcoin-qt.exe.

macOS

Drag Bitcoin Core to your applications folder, and then run Bitcoin Core.

Need Help?

Building

The following are developer notes on how to build Bitcoin Core on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.

Development

The Bitcoin repo's root README contains relevant information on the development process and automated testing.

Resources

Miscellaneous

License

Distributed under the MIT software license.