Merge pull request #6415
d042854SQUASH "Implement watchonly support in fundrawtransaction" (Matt Corallo)428a898SQUASH "Add have-pubkey distinction to ISMINE flags" (Matt Corallo)6bdb474Implement watchonly support in fundrawtransaction (Matt Corallo)f5813bdAdd logic to track pubkeys as watch-only, not just scripts (Matt Corallo)d3354c5Add have-pubkey distinction to ISMINE flags (Matt Corallo)5c17059Update importaddress help to push its use to script-only (Matt Corallo)a1d7df3Add importpubkey method to import a watch-only pubkey (Matt Corallo)907a425Add p2sh option to importaddress to import redeemScripts (Matt Corallo)983d2d9Split up importaddress into helper functions (Matt Corallo)cfc3dd3Also remove pay-2-pubkey from watch when adding a priv key (Matt Corallo)
This commit is contained in:
@@ -754,10 +754,9 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text)
|
||||
}
|
||||
else // Valid address
|
||||
{
|
||||
CPubKey pubkey;
|
||||
CKeyID keyid;
|
||||
addr.GetKeyID(keyid);
|
||||
if (!model->getPubKey(keyid, pubkey)) // Unknown change address
|
||||
if (!model->havePrivKey(keyid)) // Unknown change address
|
||||
{
|
||||
ui->labelCoinControlChangeLabel->setText(tr("Warning: Unknown change address"));
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, TransactionReco
|
||||
|
||||
if (fAllFromMe)
|
||||
{
|
||||
if(fAllFromMe == ISMINE_WATCH_ONLY)
|
||||
if(fAllFromMe & ISMINE_WATCH_ONLY)
|
||||
strHTML += "<b>" + tr("From") + ":</b> " + tr("watch-only") + "<br>";
|
||||
|
||||
//
|
||||
@@ -190,7 +190,7 @@ QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, TransactionReco
|
||||
strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString());
|
||||
if(toSelf == ISMINE_SPENDABLE)
|
||||
strHTML += " (own address)";
|
||||
else if(toSelf == ISMINE_WATCH_ONLY)
|
||||
else if(toSelf & ISMINE_WATCH_ONLY)
|
||||
strHTML += " (watch-only)";
|
||||
strHTML += "<br>";
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
|
||||
CTxDestination address;
|
||||
sub.idx = parts.size(); // sequence number
|
||||
sub.credit = txout.nValue;
|
||||
sub.involvesWatchAddress = mine == ISMINE_WATCH_ONLY;
|
||||
sub.involvesWatchAddress = mine & ISMINE_WATCH_ONLY;
|
||||
if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address))
|
||||
{
|
||||
// Received by Bitcoin Address
|
||||
@@ -86,7 +86,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
|
||||
BOOST_FOREACH(const CTxIn& txin, wtx.vin)
|
||||
{
|
||||
isminetype mine = wallet->IsMine(txin);
|
||||
if(mine == ISMINE_WATCH_ONLY) involvesWatchAddress = true;
|
||||
if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;
|
||||
if(fAllFromMe > mine) fAllFromMe = mine;
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ QList<TransactionRecord> TransactionRecord::decomposeTransaction(const CWallet *
|
||||
BOOST_FOREACH(const CTxOut& txout, wtx.vout)
|
||||
{
|
||||
isminetype mine = wallet->IsMine(txout);
|
||||
if(mine == ISMINE_WATCH_ONLY) involvesWatchAddress = true;
|
||||
if(mine & ISMINE_WATCH_ONLY) involvesWatchAddress = true;
|
||||
if(fAllToMe > mine) fAllToMe = mine;
|
||||
}
|
||||
|
||||
|
||||
@@ -556,6 +556,11 @@ bool WalletModel::getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const
|
||||
return wallet->GetPubKey(address, vchPubKeyOut);
|
||||
}
|
||||
|
||||
bool WalletModel::havePrivKey(const CKeyID &address) const
|
||||
{
|
||||
return wallet->HaveKey(address);
|
||||
}
|
||||
|
||||
// returns a list of COutputs from COutPoints
|
||||
void WalletModel::getOutputs(const std::vector<COutPoint>& vOutpoints, std::vector<COutput>& vOutputs)
|
||||
{
|
||||
|
||||
@@ -187,6 +187,7 @@ public:
|
||||
UnlockContext requestUnlock();
|
||||
|
||||
bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const;
|
||||
bool havePrivKey(const CKeyID &address) const;
|
||||
void getOutputs(const std::vector<COutPoint>& vOutpoints, std::vector<COutput>& vOutputs);
|
||||
bool isSpent(const COutPoint& outpoint) const;
|
||||
void listCoins(std::map<QString, std::vector<COutput> >& mapCoins) const;
|
||||
|
||||
Reference in New Issue
Block a user