From 15feb74640844462ca460e083716b5c8b0968668 Mon Sep 17 00:00:00 2001 From: Luke Dashjr Date: Thu, 11 Jan 2018 10:44:25 +0000 Subject: [PATCH 1/2] Wallet: Support disabling implicit Segwit operation --- src/dummywallet.cpp | 1 + src/outputtype.cpp | 2 +- src/script/signingprovider.cpp | 4 ++- src/script/signingprovider.h | 4 +++ src/wallet/init.cpp | 9 +++++++ src/wallet/scriptpubkeyman.cpp | 1 + src/wallet/test/scriptpubkeyman_tests.cpp | 27 ++++++++++++++++----- test/functional/test_framework/test_node.py | 3 +++ 8 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/dummywallet.cpp b/src/dummywallet.cpp index 9160ec19e6..930f3bdfb7 100644 --- a/src/dummywallet.cpp +++ b/src/dummywallet.cpp @@ -45,6 +45,7 @@ void DummyWalletInit::AddWalletOptions(ArgsManager& argsman) const "-wallet=", "-walletbroadcast", "-walletdir=", + "-walletimplicitsegwit", "-walletnotify=", "-walletrbf", "-dblogsize=", diff --git a/src/outputtype.cpp b/src/outputtype.cpp index 566e5ec55a..18ac3e2f24 100644 --- a/src/outputtype.cpp +++ b/src/outputtype.cpp @@ -72,7 +72,7 @@ std::vector GetAllDestinationsForKey(const CPubKey& key) { PKHash keyid(key); CTxDestination p2pkh{keyid}; - if (key.IsCompressed()) { + if (key.IsCompressed() && g_implicit_segwit) { CTxDestination segwit = WitnessV0KeyHash(keyid); CTxDestination p2sh = ScriptHash(GetScriptForDestination(segwit)); return Vector(std::move(p2pkh), std::move(p2sh), std::move(segwit)); diff --git a/src/script/signingprovider.cpp b/src/script/signingprovider.cpp index ff02ab5a12..06d0598de3 100644 --- a/src/script/signingprovider.cpp +++ b/src/script/signingprovider.cpp @@ -9,6 +9,8 @@ #include +bool g_implicit_segwit = true; + const SigningProvider& DUMMY_SIGNING_PROVIDER = SigningProvider(); template @@ -102,7 +104,7 @@ void FillableSigningProvider::ImplicitlyLearnRelatedKeyScripts(const CPubKey& pu // "Implicitly" refers to fact that scripts are derived automatically from // existing keys, and are present in memory, even without being explicitly // loaded (e.g. from a file). - if (pubkey.IsCompressed()) { + if (pubkey.IsCompressed() && g_implicit_segwit) { CScript script = GetScriptForDestination(WitnessV0KeyHash(key_id)); // This does not use AddCScript, as it may be overridden. CScriptID id(script); diff --git a/src/script/signingprovider.h b/src/script/signingprovider.h index 3298376389..ddc4512515 100644 --- a/src/script/signingprovider.h +++ b/src/script/signingprovider.h @@ -14,6 +14,10 @@ #include