Merge remote branch 'upstream/master'

Conflicts:
	src/bitcoinrpc.cpp
This commit is contained in:
Wladimir J. van der Laan
2011-07-26 15:38:31 +02:00
17 changed files with 399 additions and 349 deletions

View File

@@ -39,18 +39,18 @@ struct AddressTablePriv
{
cachedAddressTable.clear();
CRITICAL_BLOCK(cs_mapPubKeys)
CRITICAL_BLOCK(wallet->cs_KeyStore)
CRITICAL_BLOCK(wallet->cs_mapAddressBook)
{
BOOST_FOREACH(const PAIRTYPE(std::string, std::string)& item, wallet->mapAddressBook)
BOOST_FOREACH(const PAIRTYPE(CBitcoinAddress, std::string)& item, wallet->mapAddressBook)
{
std::string strAddress = item.first;
std::string strName = item.second;
const CBitcoinAddress& address = item.first;
const std::string& strName = item.second;
uint160 hash160;
bool fMine = (AddressToHash160(strAddress, hash160) && mapPubKeys.count(hash160));
bool fMine = wallet->HaveKey(address);
cachedAddressTable.append(AddressTableEntry(fMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending,
QString::fromStdString(strName),
QString::fromStdString(strAddress)));
QString::fromStdString(address.ToString())));
}
}
}
@@ -268,9 +268,8 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
}
else if(type == Receive)
{
// Generate a new address to associate with given label, optionally
// set as default receiving address.
strAddress = PubKeyToAddress(wallet->GetOrReuseKeyFromPool());
// Generate a new address to associate with given label
strAddress = CBitcoinAddress(wallet->GetOrReuseKeyFromPool()).ToString();
}
else
{
@@ -312,7 +311,8 @@ QString AddressTableModel::labelForAddress(const QString &address) const
{
CRITICAL_BLOCK(wallet->cs_mapAddressBook)
{
std::map<std::string, std::string>::iterator mi = wallet->mapAddressBook.find(address.toStdString());
CBitcoinAddress address_parsed(address.toStdString());
std::map<CBitcoinAddress, std::string>::iterator mi = wallet->mapAddressBook.find(address_parsed);
if (mi != wallet->mapAddressBook.end())
{
return QString::fromStdString(mi->second);

View File

@@ -125,17 +125,16 @@ string TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx)
{
if (wallet->IsMine(txout))
{
vector<unsigned char> vchPubKey;
if (ExtractPubKey(txout.scriptPubKey, wallet, vchPubKey))
CBitcoinAddress address;
if (ExtractAddress(txout.scriptPubKey, wallet, address))
{
string strAddress = PubKeyToAddress(vchPubKey);
if (wallet->mapAddressBook.count(strAddress))
if (wallet->mapAddressBook.count(address))
{
strHTML += string() + _("<b>From:</b> ") + _("unknown") + "<br>";
strHTML += _("<b>To:</b> ");
strHTML += HtmlEscape(strAddress);
if (!wallet->mapAddressBook[strAddress].empty())
strHTML += _(" (yours, label: ") + wallet->mapAddressBook[strAddress] + ")";
strHTML += HtmlEscape(address.ToString());
if (!wallet->mapAddressBook[address].empty())
strHTML += _(" (yours, label: ") + wallet->mapAddressBook[address] + ")";
else
strHTML += _(" (yours)");
strHTML += "<br>";
@@ -211,14 +210,13 @@ string TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx)
if (wtx.mapValue["to"].empty())
{
// Offline transaction
uint160 hash160;
if (ExtractHash160(txout.scriptPubKey, hash160))
CBitcoinAddress address;
if (ExtractAddress(txout.scriptPubKey, wallet, address))
{
string strAddress = Hash160ToAddress(hash160);
strHTML += _("<b>To:</b> ");
if (wallet->mapAddressBook.count(strAddress) && !wallet->mapAddressBook[strAddress].empty())
strHTML += wallet->mapAddressBook[strAddress] + " ";
strHTML += strAddress;
if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].empty())
strHTML += wallet->mapAddressBook[address] + " ";
strHTML += address.ToString();
strHTML += "<br>";
}
}

View File

@@ -79,10 +79,10 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
{
if(wallet->IsMine(txout))
{
std::vector<unsigned char> vchPubKey;
if (ExtractPubKey(txout.scriptPubKey, wallet, vchPubKey))
CBitcoinAddress address;
if (ExtractAddress(txout.scriptPubKey, wallet, address))
{
sub.address = PubKeyToAddress(vchPubKey);
sub.address = address.ToString();
}
break;
}
@@ -137,9 +137,11 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
{
// Sent to Bitcoin Address
sub.type = TransactionRecord::SendToAddress;
uint160 hash160;
if (ExtractHash160(txout.scriptPubKey, hash160))
sub.address = Hash160ToAddress(hash160);
CBitcoinAddress address;
if (ExtractAddress(txout.scriptPubKey, wallet, address))
{
sub.address = address.ToString();
}
}
int64 nValue = txout.nValue;

View File

@@ -66,9 +66,8 @@ void WalletModel::update()
bool WalletModel::validateAddress(const QString &address)
{
uint160 hash160 = 0;
return AddressToHash160(address.toStdString(), hash160);
CBitcoinAddress addressParsed(address.toStdString());
return addressParsed.IsValid();
}
WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipient> &recipients)
@@ -87,7 +86,7 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(const QList<SendCoinsRecipie
{
uint160 hash160 = 0;
if(!AddressToHash160(rcp.address.toUtf8().constData(), hash160))
if(!validateAddress(rcp.address))
{
return InvalidAddress;
}