mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-04 13:55:23 -05:00
Convert CPubKey to WitnessV0KeyHash directly
The round-tripping through PKHash has no effect, and is potentially misleading as such.
This commit is contained in:
parent
3fcc468123
commit
a9e451f144
4 changed files with 6 additions and 4 deletions
|
@ -53,7 +53,7 @@ CTxDestination GetDestinationForKey(const CPubKey& key, OutputType type)
|
||||||
case OutputType::P2SH_SEGWIT:
|
case OutputType::P2SH_SEGWIT:
|
||||||
case OutputType::BECH32: {
|
case OutputType::BECH32: {
|
||||||
if (!key.IsCompressed()) return PKHash(key);
|
if (!key.IsCompressed()) return PKHash(key);
|
||||||
CTxDestination witdest = WitnessV0KeyHash(PKHash(key));
|
CTxDestination witdest = WitnessV0KeyHash(key);
|
||||||
CScript witprog = GetScriptForDestination(witdest);
|
CScript witprog = GetScriptForDestination(witdest);
|
||||||
if (type == OutputType::P2SH_SEGWIT) {
|
if (type == OutputType::P2SH_SEGWIT) {
|
||||||
return ScriptHash(witprog);
|
return ScriptHash(witprog);
|
||||||
|
|
|
@ -21,6 +21,7 @@ CScriptID::CScriptID(const CScript& in) : uint160(Hash160(in.begin(), in.end()))
|
||||||
ScriptHash::ScriptHash(const CScript& in) : uint160(Hash160(in.begin(), in.end())) {}
|
ScriptHash::ScriptHash(const CScript& in) : uint160(Hash160(in.begin(), in.end())) {}
|
||||||
|
|
||||||
PKHash::PKHash(const CPubKey& pubkey) : uint160(pubkey.GetID()) {}
|
PKHash::PKHash(const CPubKey& pubkey) : uint160(pubkey.GetID()) {}
|
||||||
|
WitnessV0KeyHash::WitnessV0KeyHash(const CPubKey& pubkey) : uint160(pubkey.GetID()) {}
|
||||||
|
|
||||||
WitnessV0ScriptHash::WitnessV0ScriptHash(const CScript& in)
|
WitnessV0ScriptHash::WitnessV0ScriptHash(const CScript& in)
|
||||||
{
|
{
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct WitnessV0KeyHash : public uint160
|
||||||
{
|
{
|
||||||
WitnessV0KeyHash() : uint160() {}
|
WitnessV0KeyHash() : uint160() {}
|
||||||
explicit WitnessV0KeyHash(const uint160& hash) : uint160(hash) {}
|
explicit WitnessV0KeyHash(const uint160& hash) : uint160(hash) {}
|
||||||
|
explicit WitnessV0KeyHash(const CPubKey& pubkey);
|
||||||
};
|
};
|
||||||
|
|
||||||
//! CTxDestination subtype to encode any future Witness version
|
//! CTxDestination subtype to encode any future Witness version
|
||||||
|
|
|
@ -167,7 +167,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
||||||
keystore.SetupLegacyScriptPubKeyMan();
|
keystore.SetupLegacyScriptPubKeyMan();
|
||||||
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
||||||
|
|
||||||
CScript witnessscript = GetScriptForDestination(WitnessV0KeyHash(PKHash(pubkeys[0])));
|
CScript witnessscript = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0]));
|
||||||
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessscript));
|
scriptPubKey = GetScriptForDestination(WitnessV0ScriptHash(witnessscript));
|
||||||
|
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessscript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessscript));
|
||||||
|
@ -202,7 +202,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
||||||
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
|
|
||||||
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(PKHash(pubkeys[0])));
|
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(pubkeys[0]));
|
||||||
|
|
||||||
// Keystore implicitly has key and P2SH redeemScript
|
// Keystore implicitly has key and P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
|
@ -217,7 +217,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
||||||
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
LOCK(keystore.GetLegacyScriptPubKeyMan()->cs_KeyStore);
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
||||||
|
|
||||||
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(PKHash(uncompressedPubkey)));
|
scriptPubKey = GetScriptForDestination(WitnessV0KeyHash(uncompressedPubkey));
|
||||||
|
|
||||||
// Keystore has key, but no P2SH redeemScript
|
// Keystore has key, but no P2SH redeemScript
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
|
|
Loading…
Add table
Reference in a new issue