mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-12 14:22:43 +02:00
Merge #16546: External signer support - Wallet Box edition
f75e0c1edd
doc: add external-signer.md (Sjors Provoost)d4b0107d68
rpc: send: support external signer (Sjors Provoost)245b4457cf
rpc: signerdisplayaddress (Sjors Provoost)7ebc7c0215
wallet: ExternalSigner: add GetDescriptors method (Sjors Provoost)fc5da520f5
wallet: add GetExternalSigner() (Sjors Provoost)259f52cc33
test: external_signer wallet flag is immutable (Sjors Provoost)2655197e1c
rpc: add external_signer option to createwallet (Sjors Provoost)2700f09c41
rpc: signer: add enumeratesigners to list external signers (Sjors Provoost)07b7c940a7
rpc: add external signer RPC files (Sjors Provoost)8ce7767071
wallet: add ExternalSignerScriptPubKeyMan (Sjors Provoost)157ea7c614
wallet: add external_signer flag (Sjors Provoost)f3e6ce78fb
test: add external signer test (Sjors Provoost)8cf543f96d
wallet: add -signer argument for external signer command (Sjors Provoost)f7eb7ecc67
test: framework: add skip_if_no_external_signer (Sjors Provoost)87a97941f6
configure: add --enable-external-signer (Sjors Provoost) Pull request description: Big picture overview in [this gist](https://gist.github.com/Sjors/29d06728c685e6182828c1ce9b74483d). This PR lets `bitcoind` call an arbitrary command `-signer=<cmd>`, e.g. a hardware wallet driver, where it can fetch public keys, ask to display an address, and sign a transaction (using PSBT under the hood). It's design to work with https://github.com/bitcoin-core/HWI, which supports multiple hardware wallets. Any command with the same arguments and return values will work. It simplifies the manual procedure described [here](https://github.com/bitcoin-core/HWI/blob/master/docs/bitcoin-core-usage.md). Usage is documented in [doc/external-signer.md]( https://github.com/Sjors/bitcoin/blob/2019/08/hww-box2/doc/external-signer.md), which also describes what protocol a different signer binary should conform to. Use `--enable-external-signer` to opt in, requires Boost::Process: ``` Options used to compile and link: with wallet = yes with gui / qt = no external signer = yes ``` It adds the following RPC methods: * `enumeratesigners`: asks <cmd> for a list of signers (e.g. devices) and their master key fingerprint * `signerdisplayaddress <address>`: asks <cmd> to display an address It enhances the following RPC methods: * `createwallet`: takes an additional `external_signer` argument and fetches keys from device * `send`: automatically sends transaction to device and waits Usage TL&DR: * clone HWI repo somewhere and launch `bitcoind -signer=../HWI/hwi.py` * check if you can see your hardware device: `bitcoin-cli enumeratesigners` * create wallet and auto import keys `bitcoin-cli createwallet "hww" true true "" true true true` * display address on device: `bitcoin-cli signerdisplayaddress ...` * to spend, use `send` RPC and approve transaction on device Prerequisites: - [x] #21127 load wallet flags before everything else - [x] #21182 remove mostly pointless BOOST_PROCESS macro Potentially useful followups: - GUI support: bitcoin-core/gui#4 - bumpfee support - (automatically) verify (a subset of) keys on the device after import, through message signing ACKs for top commit: laanwj: re-ACKf75e0c1edd
Tree-SHA512: 7db8afd54762295c1424c3f01d8c587ec256a72f34bd5256e04b21832dabd5dc212be8ab975ae3b67de75259fd569a561491945750492f417111dc7b6641e77f
This commit is contained in:
@ -50,8 +50,8 @@
|
||||
/* define if the Boost::Filesystem library is available */
|
||||
#define HAVE_BOOST_FILESYSTEM /**/
|
||||
|
||||
/* define if the Boost::Process library is available */
|
||||
#define HAVE_BOOST_PROCESS /**/
|
||||
/* define if external signer support is enabled (requires Boost::Process) */
|
||||
#define ENABLE_EXTERNAL_SIGNER /**/
|
||||
|
||||
/* define if the Boost::System library is available */
|
||||
#define HAVE_BOOST_SYSTEM /**/
|
||||
|
Reference in New Issue
Block a user