Mercurial > hg > bitcoin
changeset 1228:175b23373bd3 draft
Merge branch 'master' of https://github.com/bitcoin/bitcoin
Conflicts:
src/script.cpp
author | Wladimir J. van der Laan <laanwj@gmail.com> |
---|---|
date | Wed, 27 Jul 2011 21:44:55 +0200 |
parents | d49bc3240f3c (current diff) a6c90cfbaa28 (diff) |
children | fa39b222e5e0 |
files | src/base58.h src/db.cpp src/qt/transactiondesc.cpp src/qt/transactionrecord.cpp src/script.cpp src/wallet.cpp |
diffstat | 6 files changed, 28 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/db.cpp +++ b/src/db.cpp @@ -528,7 +528,7 @@ char psz[1000]; while (fgets(psz, sizeof(psz), filein)) { - CAddress addr(psz, NODE_NETWORK); + CAddress addr(psz, false, NODE_NETWORK); addr.nTime = 0; // so it won't relay unless successfully connected if (addr.IsValid()) AddAddress(addr);
--- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -211,7 +211,7 @@ { // Offline transaction CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, wallet, address)) + if (ExtractAddress(txout.scriptPubKey, 0, address)) { strHTML += _("<b>To:</b> "); if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty())
--- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -138,7 +138,7 @@ // Sent to Bitcoin Address sub.type = TransactionRecord::SendToAddress; CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, wallet, address)) + if (ExtractAddress(txout.scriptPubKey, 0, address)) { sub.address = address.ToString(); }
--- a/src/script.cpp +++ b/src/script.cpp @@ -1122,31 +1122,38 @@ return true; } - -bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet) +// requires either keystore==0, or a lock on keystore->cs_KeyStore +bool static ExtractAddressInner(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet) { vector<pair<opcodetype, valtype> > vSolution; if (!Solver(scriptPubKey, vSolution)) return false; - CRITICAL_BLOCK(keystore->cs_KeyStore) + BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution) { - BOOST_FOREACH(PAIRTYPE(opcodetype, valtype)& item, vSolution) - { - uint160 hash160; - if (item.first == OP_PUBKEY) - addressRet.SetPubKey(item.second); - else if (item.first == OP_PUBKEYHASH) - addressRet.SetHash160((uint160)item.second); - //if (keystore == NULL || keystore->HaveKey(addressRet)) - return true; - } + if (item.first == OP_PUBKEY) + addressRet.SetPubKey(item.second); + else if (item.first == OP_PUBKEYHASH) + addressRet.SetHash160((uint160)item.second); + if (keystore == NULL || keystore->HaveKey(addressRet)) + return true; } return false; } +bool ExtractAddress(const CScript& scriptPubKey, const CKeyStore* keystore, CBitcoinAddress& addressRet) +{ + if (keystore) + CRITICAL_BLOCK(keystore->cs_KeyStore) + return ExtractAddressInner(scriptPubKey, keystore, addressRet); + else + return ExtractAddressInner(scriptPubKey, NULL, addressRet); + return false; +} + + bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, int nHashType) { vector<vector<unsigned char> > stack;
--- a/src/ui.cpp +++ b/src/ui.cpp @@ -776,6 +776,7 @@ if (pwalletMain->IsMine(txout)) continue; + CBitcoinAddress address; string strAddress; if (!mapValue["to"].empty()) { @@ -785,15 +786,14 @@ else { // Sent to Bitcoin Address - CBitcoinAddress address; - if (ExtractAddress(txout.scriptPubKey, pwalletMain, address)) + if (ExtractAddress(txout.scriptPubKey, NULL, address)) strAddress = address.ToString(); } string strDescription = _("To: "); CRITICAL_BLOCK(pwalletMain->cs_mapAddressBook) - if (pwalletMain->mapAddressBook.count(strAddress) && !pwalletMain->mapAddressBook[strAddress].empty()) - strDescription += pwalletMain->mapAddressBook[strAddress] + " "; + if (pwalletMain->mapAddressBook.count(address) && !pwalletMain->mapAddressBook[address].empty()) + strDescription += pwalletMain->mapAddressBook[address] + " "; strDescription += strAddress; if (!mapValue["message"].empty()) {
--- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -437,7 +437,7 @@ { CBitcoinAddress address; vector<unsigned char> vchPubKey; - if (!ExtractAddress(txout.scriptPubKey, pwallet, address)) + if (!ExtractAddress(txout.scriptPubKey, NULL, address)) { printf("CWalletTx::GetAmounts: Unknown transaction type found, txid %s\n", this->GetHash().ToString().c_str());