Skip to content

Latest commit

 

History

History
42 lines (27 loc) · 3.1 KB

multiprocess.md

File metadata and controls

42 lines (27 loc) · 3.1 KB

Multiprocess Bitcoin

This document describes usage of the multiprocess feature. For design information, see the design/multiprocess.md file.

Build Option

On Unix systems, the -DENABLE_IPC=ON build option can be passed to build the supplemental bitcoin-node and bitcoin-gui multiprocess executables.

Debugging

The -debug=ipc command line option can be used to see requests and responses between processes.

Installation

Specifying -DENABLE_IPC=ON requires Cap'n Proto to be installed. See build-unix.md and build-osx.md for information about installing dependencies.

Depends installation

Alternately the depends system can be used to avoid need to install local dependencies. A simple way to get started is to pass the MULTIPROCESS=1 dependency option to make:

cd <BITCOIN_SOURCE_DIRECTORY>
make -C depends NO_QT=1 MULTIPROCESS=1
# Set host platform to output of gcc -dumpmachine or clang -dumpmachine or check the depends/ directory for the generated subdirectory name
HOST_PLATFORM="x86_64-pc-linux-gnu"
cmake -B build --toolchain=depends/$HOST_PLATFORM/toolchain.cmake
cmake --build build
build/bin/bitcoin-node -regtest -printtoconsole -debug=ipc
BITCOIND=$(pwd)/build/bin/bitcoin-node build/test/functional/test_runner.py

The cmake build will pick up settings and library locations from the depends directory, so there is no need to pass -DENABLE_IPC=ON as a separate flag when using the depends system (it's controlled by the MULTIPROCESS=1 option).

Cross-compiling

When cross-compiling and not using depends, native code generation tools from libmultiprocess and Cap'n Proto are required. They can be passed to the cmake build by specifying -DMPGEN_EXECUTABLE=/path/to/mpgen -DCAPNP_EXECUTABLE=/path/to/capnp -DCAPNPC_CXX_EXECUTABLE=/path/to/capnpc-c++ options.

Usage

bitcoin-node is a drop-in replacement for bitcoind, and bitcoin-gui is a drop-in replacement for bitcoin-qt, and there are no differences in use or external behavior between the new and old executables. But internally after #10102, bitcoin-gui will spawn a bitcoin-node process to run P2P and RPC code, communicating with it across a socket pair, and bitcoin-node will spawn bitcoin-wallet to run wallet code, also communicating over a socket pair. This will let node, wallet, and GUI code run in separate address spaces for better isolation, and allow future improvements like being able to start and stop components independently on different machines and environments. #19460 also adds a new bitcoin-node -ipcbind option and a bitcoind-wallet -ipcconnect option to allow new wallet processes to connect to an existing node process. And #19461 adds a new bitcoin-gui -ipcconnect option to allow new GUI processes to connect to an existing node process.