82be652e40doc: Improve ChainstateManager documentation, use consistent terms (Ryan Ofsky)af455dcb39refactor: Simplify pruning functions (TheCharlatan)ae85c495f1refactor: Delete ChainstateManager::GetAll() method (Ryan Ofsky)6a572dbda9refactor: Add ChainstateManager::ActivateBestChains() method (Ryan Ofsky)491d827d52refactor: Add ChainstateManager::m_chainstates member (Ryan Ofsky)e514fe6116refactor: Delete ChainstateManager::SnapshotBlockhash() method (Ryan Ofsky)ee35250683refactor: Delete ChainstateManager::IsSnapshotValidated() method (Ryan Ofsky)d9e82299fcrefactor: Delete ChainstateManager::IsSnapshotActive() method (Ryan Ofsky)4dfe383912refactor: Convert ChainstateRole enum to struct (Ryan Ofsky)352ad27fc1refactor: Add ChainstateManager::ValidatedChainstate() method (Ryan Ofsky)a229cb9477refactor: Add ChainstateManager::CurrentChainstate() method (Ryan Ofsky)a9b7f5614crefactor: Add Chainstate::StoragePath() method (Ryan Ofsky)840bd2ef23refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation (Ryan Ofsky)1598a15aedrefactor: Deduplicate Chainstate activation code (Ryan Ofsky)9fe927b6d6refactor: Add Chainstate m_assumeutxo and m_target_utxohash members (Ryan Ofsky)6082c84713refactor: Add Chainstate::m_target_blockhash member (Ryan Ofsky)de00e87548test: Fix broken chainstatemanager_snapshot_init check (Ryan Ofsky) Pull request description: This PR contains the first part of #28608, which tries to make assumeutxo code more maintainable, and improve it by not locking `cs_main` for a long time when the snapshot block is connected, and by deleting the snapshot validation chainstate when it is no longer used, instead of waiting until the next restart. The changes in this PR are just refactoring. They make `Chainstate` objects self-contained, so for example, it is possible to determine what blocks to connect to a chainstate without querying `ChainstateManager`, and to determine whether a Chainstate is validated without basing it on inferences like `&cs != &ActiveChainstate()` or `GetAll().size() == 1`. The PR also tries to make assumeutxo terminology less confusing, using "current chainstate" to refer to the chainstate targeting the current network tip, and "historical chainstate" to refer to the chainstate downloading old blocks and validating the assumeutxo snapshot. It removes uses of the terms "active chainstate," "usable chainstate," "disabled chainstate," "ibd chainstate," and "snapshot chainstate" which are confusing for various reasons. ACKs for top commit: maflcko: re-review ACK82be652e40🕍 fjahr: re-ACK82be652e40sedited: Re-ACK82be652e40Tree-SHA512: 81c67abba9fc5bb170e32b7bf8a1e4f7b5592315b4ef720be916d5f1f5a7088c0c59cfb697744dd385552f58aa31ee36176bae6a6e465723e65861089a1252e5
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) orbin/bitcoind(headless)bin/bitcoin(wrapper command)
The bitcoin command supports subcommands like bitcoin gui, bitcoin node, and bitcoin rpc exposing different functionality. Subcommands can be listed with bitcoin help.
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?
- See the documentation at the Bitcoin Wiki for help and more information.
- Ask for help on Bitcoin StackExchange.
- Ask for help on #bitcoin on Libera Chat. If you don't have an IRC client, you can use web.libera.chat.
- Ask for help on the BitcoinTalk forums, in the Technical Support board.
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.
- Dependencies
- macOS Build Notes
- Unix Build Notes
- Windows Build Notes
- FreeBSD Build Notes
- OpenBSD Build Notes
- NetBSD Build Notes
Development
The Bitcoin repo's root README contains relevant information on the development process and automated testing.
- Developer Notes
- Productivity Notes
- Release Process
- Source Code Documentation (External Link)
- Translation Process
- Translation Strings Policy
- JSON-RPC Interface
- Unauthenticated REST Interface
- BIPS
- Dnsseed Policy
- Benchmarking
- Internal Design Docs
Resources
- Discuss on the BitcoinTalk forums, in the Development & Technical Discussion board.
- Discuss project-specific development on #bitcoin-core-dev on Libera Chat. If you don't have an IRC client, you can use web.libera.chat.
Miscellaneous
- Assets Attribution
- bitcoin.conf Configuration File
- CJDNS Support
- Files
- Fuzz-testing
- I2P Support
- Init Scripts (systemd/upstart/openrc)
- Managing Wallets
- Multisig Tutorial
- Offline Signing Tutorial
- P2P bad ports definition and list
- PSBT support
- Reduce Memory
- Reduce Traffic
- Tor Support
- Transaction Relay Policy
- ZMQ
License
Distributed under the MIT software license.