Page MenuHomePhabricator

Add private key derivation functions to descriptors
AbandonedPublic

Authored by PiRK on Oct 29 2020, 10:09.

Details

Reviewers
None
Group Reviewers
Restricted Owners Package(Owns No Changed Paths)
Restricted Project
Summary

Currently, descriptors have an Expand() function which returns public keys and scripts for a specific index of a ranged descriptor. But the private key for a specific index is not given. This allows private keys for specific indices to be derived. This also allows those keys to be imported through the importmulti RPC rather than having to provide them separately.

This is a backport of Core PR15024 [1/4]
Commit https://github.com/bitcoin/bitcoin/pull/15024/commits/a4d1bd1a29be2dcc5e00c63b6b41916b1c466de0

Test Plan

ninja && ninja check-all

Diff Detail

Event Timeline

Owners added a reviewer: Restricted Owners Package.Oct 29 2020, 10:09
PiRK requested review of this revision.Oct 29 2020, 10:09

Tail of the build log:

[288/485] Building CXX object src/CMakeFiles/common.dir/netbase.cpp.o
[289/485] Building CXX object src/CMakeFiles/common.dir/core_write.cpp.o
[290/485] Building CXX object src/CMakeFiles/common.dir/versionbitsinfo.cpp.o
[291/485] Building CXX object src/CMakeFiles/common.dir/salteduint256hasher.cpp.o
[292/485] Building CXX object src/CMakeFiles/common.dir/scheduler.cpp.o
[293/485] Building CXX object src/CMakeFiles/script.dir/script/bitfield.cpp.o
[294/485] Building CXX object src/CMakeFiles/common.dir/outputtype.cpp.o
[295/485] Building CXX object src/CMakeFiles/common.dir/protocol.cpp.o
[296/485] Building CXX object src/CMakeFiles/script.dir/script/script_error.cpp.o
[297/485] Building CXX object src/CMakeFiles/common.dir/psbt.cpp.o
[298/485] Building CXX object src/CMakeFiles/script.dir/script/script.cpp.o
[299/485] Building CXX object src/CMakeFiles/bitcoinconsensus-shared.dir/script/bitcoinconsensus.cpp.o
[300/485] Building CXX object src/CMakeFiles/common.dir/warnings.cpp.o
[301/485] Building CXX object src/CMakeFiles/common.dir/policy/policy.cpp.o
[302/485] Building CXX object src/CMakeFiles/script.dir/script/interpreter.cpp.o
[303/485] Building CXX object src/CMakeFiles/common.dir/rpc/rawtransaction_util.cpp.o
[304/485] Building CXX object src/CMakeFiles/script.dir/script/sigencoding.cpp.o
[305/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/arith_uint256.cpp.o
[306/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/hash.cpp.o
[307/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/primitives/transaction.cpp.o
[308/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/uint256.cpp.o
[309/485] Building CXX object src/CMakeFiles/script.dir/script/standard.cpp.o
[310/485] Building CXX object src/CMakeFiles/script.dir/script/sign.cpp.o
[311/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/pubkey.cpp.o
[312/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/util/strencodings.cpp.o
[313/485] Building C object src/secp256k1/CMakeFiles/sign-bench.dir/src/bench_sign.c.o
[314/485] Building CXX object src/CMakeFiles/script.dir/script/descriptor.cpp.o
FAILED: src/CMakeFiles/script.dir/script/descriptor.cpp.o 
/usr/bin/cmake -E __run_co_compile --launcher=/usr/bin/ccache --tidy="/usr/bin/clang-tidy-8;-warnings-as-errors=*" --source=../../src/script/descriptor.cpp -- /usr/bin/clang++  -DBOOST_AC_USE_STD_ATOMIC -DBOOST_SP_USE_STD_ATOMIC -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -I../../src/. -Isrc -I../../src/univalue/include -Isrc/crypto/.. -I../../src/secp256k1/include -isystem /usr/include/jemalloc -g -O2 -fPIC -fvisibility=hidden   -fstack-protector-all -Wstack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wshadow -Wshadow-field -Wrange-loop-analysis -Wredundant-decls -Wformat-security -Wredundant-move -Wno-unused-parameter -Wno-implicit-fallthrough -pthread -std=gnu++14 -MD -MT src/CMakeFiles/script.dir/script/descriptor.cpp.o -MF src/CMakeFiles/script.dir/script/descriptor.cpp.o.d -o src/CMakeFiles/script.dir/script/descriptor.cpp.o -c ../../src/script/descriptor.cpp
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:398:37: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (!GetExtKey(arg, extkey)) return false;
                                    ^
                                     {
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:402:48: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (m_derive == DeriveType::UNHARDENED) extkey.Derive(extkey, pos);
                                               ^
                                                {
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:403:46: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (m_derive == DeriveType::HARDENED)
                                             ^
                                              {
2071 warnings generated.
Suppressed 2068 warnings (2068 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings treated as errors
[315/485] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[316/485] Building C object src/secp256k1/CMakeFiles/recover-bench.dir/src/bench_recover.c.o
[317/485] Building C object src/secp256k1/CMakeFiles/verify-bench.dir/src/bench_verify.c.o
[318/485] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[319/485] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[320/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/consensus/tx_check.cpp.o
[321/485] Building CXX object src/CMakeFiles/script.dir/script/signingprovider.cpp.o
[322/485] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
[323/485] Building CXX object src/CMakeFiles/server.dir/rpc/misc.cpp.o
[324/485] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[325/485] Building CXX object src/CMakeFiles/common.dir/rpc/util.cpp.o
[326/485] Building CXX object src/CMakeFiles/server.dir/rpc/mining.cpp.o
[327/485] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
ninja: build stopped: subcommand failed.
Build build-clang-tidy failed with exit code 1

fix docstring formatting

Tail of the build log:

[286/485] Building CXX object src/CMakeFiles/common.dir/core_read.cpp.o
[287/485] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[288/485] Building CXX object src/CMakeFiles/common.dir/netbase.cpp.o
[289/485] Building CXX object src/CMakeFiles/common.dir/core_write.cpp.o
[290/485] Building CXX object src/CMakeFiles/common.dir/versionbitsinfo.cpp.o
[291/485] Building CXX object src/CMakeFiles/common.dir/salteduint256hasher.cpp.o
[292/485] Building CXX object src/CMakeFiles/common.dir/scheduler.cpp.o
[293/485] Building CXX object src/CMakeFiles/script.dir/script/bitfield.cpp.o
[294/485] Building CXX object src/CMakeFiles/common.dir/outputtype.cpp.o
[295/485] Building CXX object src/CMakeFiles/common.dir/protocol.cpp.o
[296/485] Building CXX object src/CMakeFiles/script.dir/script/script_error.cpp.o
[297/485] Building CXX object src/CMakeFiles/common.dir/policy/policy.cpp.o
[298/485] Building CXX object src/CMakeFiles/common.dir/psbt.cpp.o
[299/485] Building CXX object src/CMakeFiles/script.dir/script/script.cpp.o
[300/485] Building CXX object src/CMakeFiles/bitcoinconsensus-shared.dir/script/bitcoinconsensus.cpp.o
[301/485] Building CXX object src/CMakeFiles/common.dir/warnings.cpp.o
[302/485] Building CXX object src/CMakeFiles/common.dir/rpc/rawtransaction_util.cpp.o
[303/485] Building CXX object src/CMakeFiles/script.dir/script/interpreter.cpp.o
[304/485] Building CXX object src/CMakeFiles/script.dir/script/sigencoding.cpp.o
[305/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/arith_uint256.cpp.o
[306/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/hash.cpp.o
[307/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/primitives/transaction.cpp.o
[308/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/uint256.cpp.o
[309/485] Building CXX object src/CMakeFiles/script.dir/script/sign.cpp.o
[310/485] Building CXX object src/CMakeFiles/script.dir/script/standard.cpp.o
[311/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/pubkey.cpp.o
[312/485] Building CXX object src/CMakeFiles/script.dir/script/descriptor.cpp.o
FAILED: src/CMakeFiles/script.dir/script/descriptor.cpp.o 
/usr/bin/cmake -E __run_co_compile --launcher=/usr/bin/ccache --tidy="/usr/bin/clang-tidy-8;-warnings-as-errors=*" --source=../../src/script/descriptor.cpp -- /usr/bin/clang++  -DBOOST_AC_USE_STD_ATOMIC -DBOOST_SP_USE_STD_ATOMIC -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -I../../src/. -Isrc -I../../src/univalue/include -Isrc/crypto/.. -I../../src/secp256k1/include -isystem /usr/include/jemalloc -g -O2 -fPIC -fvisibility=hidden   -fstack-protector-all -Wstack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wshadow -Wshadow-field -Wrange-loop-analysis -Wredundant-decls -Wformat-security -Wredundant-move -Wno-unused-parameter -Wno-implicit-fallthrough -pthread -std=gnu++14 -MD -MT src/CMakeFiles/script.dir/script/descriptor.cpp.o -MF src/CMakeFiles/script.dir/script/descriptor.cpp.o.d -o src/CMakeFiles/script.dir/script/descriptor.cpp.o -c ../../src/script/descriptor.cpp
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:398:37: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (!GetExtKey(arg, extkey)) return false;
                                    ^
                                     {
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:402:48: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (m_derive == DeriveType::UNHARDENED) extkey.Derive(extkey, pos);
                                               ^
                                                {
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:403:46: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (m_derive == DeriveType::HARDENED)
                                             ^
                                              {
2071 warnings generated.
Suppressed 2068 warnings (2068 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings treated as errors
[313/485] Building C object src/secp256k1/CMakeFiles/sign-bench.dir/src/bench_sign.c.o
[314/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/util/strencodings.cpp.o
[315/485] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[316/485] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[317/485] Building CXX object src/CMakeFiles/script.dir/script/signingprovider.cpp.o
[318/485] Building C object src/secp256k1/CMakeFiles/internal-bench.dir/src/bench_internal.c.o
[319/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/consensus/tx_check.cpp.o
[320/485] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[321/485] Building CXX object src/CMakeFiles/server.dir/rpc/misc.cpp.o
[322/485] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[323/485] Building CXX object src/CMakeFiles/server.dir/rpc/mining.cpp.o
[324/485] Building CXX object src/CMakeFiles/common.dir/rpc/util.cpp.o
[325/485] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
ninja: build stopped: subcommand failed.
Build build-clang-tidy failed with exit code 1

Tail of the build log:

[274/485] Building CXX object src/CMakeFiles/common.dir/coins.cpp.o
[275/485] Building CXX object src/CMakeFiles/common.dir/compressor.cpp.o
[276/485] Building CXX object src/CMakeFiles/common.dir/merkleblock.cpp.o
[277/485] Building CXX object src/CMakeFiles/common.dir/key.cpp.o
[278/485] Building CXX object src/CMakeFiles/common.dir/feerate.cpp.o
[279/485] Building CXX object src/CMakeFiles/common.dir/netaddress.cpp.o
[280/485] Building CXX object src/CMakeFiles/common.dir/key_io.cpp.o
[281/485] Building CXX object src/CMakeFiles/common.dir/core_read.cpp.o
[282/485] Building CXX object src/CMakeFiles/common.dir/core_write.cpp.o
[283/485] Building CXX object src/CMakeFiles/server.dir/rpc/mining.cpp.o
[284/485] Building CXX object src/CMakeFiles/common.dir/primitives/block.cpp.o
[285/485] Building CXX object src/CMakeFiles/common.dir/netbase.cpp.o
[286/485] Building CXX object src/CMakeFiles/server.dir/rpc/net.cpp.o
[287/485] Building CXX object src/CMakeFiles/common.dir/outputtype.cpp.o
[288/485] Building CXX object src/CMakeFiles/common.dir/salteduint256hasher.cpp.o
[289/485] Building CXX object src/CMakeFiles/common.dir/scheduler.cpp.o
[290/485] Building CXX object src/CMakeFiles/common.dir/versionbitsinfo.cpp.o
[291/485] Building CXX object src/CMakeFiles/common.dir/protocol.cpp.o
[292/485] Building CXX object src/CMakeFiles/common.dir/policy/policy.cpp.o
[293/485] Building CXX object src/CMakeFiles/script.dir/script/bitfield.cpp.o
[294/485] Building CXX object src/CMakeFiles/common.dir/psbt.cpp.o
[295/485] Building CXX object src/CMakeFiles/common.dir/rpc/rawtransaction_util.cpp.o
[296/485] Building CXX object src/CMakeFiles/bitcoinconsensus-shared.dir/script/bitcoinconsensus.cpp.o
[297/485] Building CXX object src/CMakeFiles/script.dir/script/script_error.cpp.o
[298/485] Building CXX object src/CMakeFiles/common.dir/warnings.cpp.o
[299/485] Building CXX object src/CMakeFiles/common.dir/net_permissions.cpp.o
[300/485] Building CXX object src/CMakeFiles/script.dir/script/script.cpp.o
[301/485] Building CXX object src/CMakeFiles/script.dir/script/interpreter.cpp.o
[302/485] Building CXX object src/CMakeFiles/script.dir/script/sigencoding.cpp.o
[303/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/arith_uint256.cpp.o
[304/485] Building CXX object src/CMakeFiles/script.dir/script/descriptor.cpp.o
FAILED: src/CMakeFiles/script.dir/script/descriptor.cpp.o 
/usr/bin/cmake -E __run_co_compile --launcher=/usr/bin/ccache --tidy="/usr/bin/clang-tidy-8;-warnings-as-errors=*" --source=../../src/script/descriptor.cpp -- /usr/bin/clang++  -DBOOST_AC_USE_STD_ATOMIC -DBOOST_SP_USE_STD_ATOMIC -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -I../../src/. -Isrc -I../../src/univalue/include -Isrc/crypto/.. -I../../src/secp256k1/include -isystem /usr/include/jemalloc -g -O2 -fPIC -fvisibility=hidden   -fstack-protector-all -Wstack-protector -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wshadow -Wshadow-field -Wrange-loop-analysis -Wredundant-decls -Wformat-security -Wredundant-move -Wno-unused-parameter -Wno-implicit-fallthrough -pthread -std=gnu++14 -MD -MT src/CMakeFiles/script.dir/script/descriptor.cpp.o -MF src/CMakeFiles/script.dir/script/descriptor.cpp.o.d -o src/CMakeFiles/script.dir/script/descriptor.cpp.o -c ../../src/script/descriptor.cpp
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:398:37: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (!GetExtKey(arg, extkey)) return false;
                                    ^
                                     {
/work/abc-ci-builds/build-clang-tidy/../../src/script/descriptor.cpp:405:46: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
        if (m_derive == DeriveType::HARDENED)
                                             ^
                                              {
2070 warnings generated.
Suppressed 2068 warnings (2068 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings treated as errors
[305/485] Building CXX object src/CMakeFiles/bitcoinconsensus.dir/hash.cpp.o
[306/485] Building CXX object src/CMakeFiles/script.dir/script/standard.cpp.o
[307/485] Building CXX object src/CMakeFiles/script.dir/script/sign.cpp.o
[308/485] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[309/485] Building CXX object src/CMakeFiles/script.dir/script/signingprovider.cpp.o
[310/485] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[311/485] Building CXX object src/CMakeFiles/server.dir/net_processing.cpp.o
[312/485] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[313/485] Building CXX object src/CMakeFiles/common.dir/rpc/util.cpp.o
[314/485] Building CXX object src/CMakeFiles/server.dir/txmempool.cpp.o
[315/485] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[316/485] Building CXX object src/CMakeFiles/server.dir/rpc/rawtransaction.cpp.o
[317/485] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
ninja: build stopped: subcommand failed.
Build build-clang-tidy failed with exit code 1