Update CScriptID class
authorsvost <ya.nowa@yandex.ru>
Sat, 28 Jan 2017 10:26:28 +0000 (13:26 +0300)
committersvost <ya.nowa@yandex.ru>
Sat, 28 Jan 2017 10:26:28 +0000 (13:26 +0300)
src/key.cpp
src/key.h
src/keystore.cpp
src/qt/multisigdialog.cpp
src/rpcrawtransaction.cpp
src/rpcwallet.cpp
src/script.cpp
src/script.h
src/wallet.cpp

index 072199b..3c4762e 100644 (file)
@@ -165,6 +165,10 @@ const unsigned char vchMaxModHalfOrder[32] = {
 
 const unsigned char *vchZero = NULL;
 
+CScriptID::CScriptID(const CScript& in) : uint160(Hash160(in.begin(), in.end()))
+{
+}
+
 void CKey::SetCompressedPubKey(bool fCompressed)
 {
     EC_KEY_set_conv_form(pkey, fCompressed ? POINT_CONVERSION_COMPRESSED : POINT_CONVERSION_UNCOMPRESSED);
index c4c1c96..5c42c41 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -59,6 +59,7 @@ class CScriptID : public uint160
 {
 public:
     CScriptID() : uint160(0) { }
+    CScriptID(const CScript& in);
     CScriptID(const uint160 &in) : uint160(in) { }
 };
 
index ae1d93f..e5f0ce3 100644 (file)
@@ -102,7 +102,7 @@ bool CBasicKeyStore::AddCScript(const CScript& redeemScript)
 
     {
         LOCK(cs_KeyStore);
-        mapScripts[redeemScript.GetID()] = redeemScript;
+        mapScripts[CScriptID(redeemScript)] = redeemScript;
     }
     return true;
 }
index 6f0851c..3f4c93f 100644 (file)
@@ -190,7 +190,7 @@ void MultisigDialog::on_createAddressButton_clicked()
         QMessageBox::warning(this, tr("Error"), tr("Redeem script exceeds size limit: %1 > %2\nReduce the number of addresses involved in the address creation.").arg(script.size()).arg(MAX_SCRIPT_ELEMENT_SIZE), QMessageBox::Ok);
         return;
     }
-    CScriptID scriptID = script.GetID();
+    CScriptID scriptID(script);
     CBitcoinAddress address(scriptID);
 
     ui->multisigAddress->setText(address.ToString().c_str());
@@ -216,7 +216,7 @@ void MultisigDialog::on_saveRedeemScriptButton_clicked()
     std::string redeemScript = ui->redeemScript->text().toStdString();
     std::vector<unsigned char> scriptData(ParseHex(redeemScript));
     CScript script(scriptData.begin(), scriptData.end());
-    CScriptID scriptID = script.GetID();
+    CScriptID scriptID(script);
 
     LOCK(wallet->cs_wallet);
     if(!wallet->HaveCScript(scriptID))
@@ -238,7 +238,7 @@ void MultisigDialog::on_saveMultisigAddressButton_clicked()
 
     std::vector<unsigned char> scriptData(ParseHex(redeemScript));
     CScript script(scriptData.begin(), scriptData.end());
-    CScriptID scriptID = script.GetID();
+    CScriptID scriptID(script);
 
     LOCK(wallet->cs_wallet);
     if(!wallet->HaveCScript(scriptID))
index b3b3c31..3359338 100644 (file)
@@ -368,7 +368,7 @@ Value decodescript(const Array& params, bool fHelp)
     }
     ScriptPubKeyToJSON(script, r, false);
 
-    r.push_back(Pair("p2sh", CBitcoinAddress(script.GetID()).ToString()));
+    r.push_back(Pair("p2sh", CBitcoinAddress(CScriptID(script)).ToString()));
     return r;
 }
 
@@ -690,7 +690,7 @@ Value createmultisig(const Array& params, bool fHelp)
         throw runtime_error(
             strprintf("redeemScript exceeds size limit: %" PRIszu " > %d", inner.size(), MAX_SCRIPT_ELEMENT_SIZE));
 
-    auto innerID = inner.GetID();
+    auto innerID = CScriptID(inner);
     CBitcoinAddress address(innerID);
 
     Object result;
index ef9276c..0892121 100644 (file)
@@ -889,7 +889,7 @@ Value addmultisigaddress(const Array& params, bool fHelp)
         strprintf("redeemScript exceeds size limit: %" PRIszu " > %d", inner.size(), MAX_SCRIPT_ELEMENT_SIZE));
 
     pwalletMain->AddCScript(inner);
-    CBitcoinAddress address(inner.GetID());
+    CBitcoinAddress address{ CScriptID(inner) }; // "most vexing parse"
 
     pwalletMain->SetAddressBookName(address, strAccount);
     return address.ToString();
@@ -913,7 +913,7 @@ Value addredeemscript(const Array& params, bool fHelp)
     auto innerData = ParseHexV(params[0], "redeemScript");
     CScript inner(innerData.begin(), innerData.end());
     pwalletMain->AddCScript(inner);
-    CBitcoinAddress address(inner.GetID());
+    CBitcoinAddress address{ CScriptID(inner) }; // "most vexing parse"
 
     pwalletMain->SetAddressBookName(address, strAccount);
     return address.ToString();
index b18d4fe..0185075 100644 (file)
@@ -2478,8 +2478,3 @@ void CScript::print() const
 {
     printf("%s\n", ToString().c_str());
 }
-
-CScriptID CScript::GetID() const
-{
-    return CScriptID(Hash160(*this));
-}
index 28def01..17e3d36 100644 (file)
@@ -375,7 +375,6 @@ public:
     void PrintHex() const;
     std::string ToString(bool fShort=false) const;
     void print() const;
-    CScriptID GetID() const;
 };
 
 bool IsCanonicalPubKey(const std::vector<unsigned char> &vchPubKey, unsigned int flags);
index 9baa959..c90b374 100644 (file)
@@ -229,7 +229,7 @@ bool CWallet::LoadCScript(const CScript& redeemScript)
      * these. Do not add them to the wallet and warn. */
     if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
     {
-        auto strAddr = CBitcoinAddress(redeemScript.GetID()).ToString();
+        auto strAddr = CBitcoinAddress(CScriptID(redeemScript)).ToString();
         printf("LoadCScript() : Warning: This wallet contains a redeemScript of size %" PRIszu " which exceeds maximum size %i thus can never be redeemed. Do not use address %s.\n",
           redeemScript.size(), MAX_SCRIPT_ELEMENT_SIZE, strAddr.c_str());
           return true;