mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 14:53:43 +01:00
Merge branch 'op_eval'
This commit is contained in:
@@ -42,6 +42,15 @@ bool CWallet::AddCryptedKey(const vector<unsigned char> &vchPubKey, const vector
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CWallet::AddCScript(const uint160 &hash, const CScript& redeemScript)
|
||||
{
|
||||
if (!CCryptoKeyStore::AddCScript(hash, redeemScript))
|
||||
return false;
|
||||
if (!fFileBacked)
|
||||
return true;
|
||||
return CWalletDB(strWalletFile).WriteCScript(hash, redeemScript);
|
||||
}
|
||||
|
||||
bool CWallet::Unlock(const SecureString& strWalletPassphrase)
|
||||
{
|
||||
if (!IsLocked())
|
||||
@@ -374,6 +383,24 @@ int64 CWallet::GetDebit(const CTxIn &txin) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CWallet::IsChange(const CTxOut& txout) const
|
||||
{
|
||||
CBitcoinAddress address;
|
||||
|
||||
// TODO: fix handling of 'change' outputs. The assumption is that any
|
||||
// payment to a TX_PUBKEYHASH that is mine but isn't in the address book
|
||||
// is change. That assumption is likely to break when we implement multisignature
|
||||
// wallets that return change back into a multi-signature-protected address;
|
||||
// a better way of identifying which outputs are 'the send' and which are
|
||||
// 'the change' will need to be implemented (maybe extend CWalletTx to remember
|
||||
// which output, if any, was change).
|
||||
if (ExtractAddress(txout.scriptPubKey, this, address))
|
||||
CRITICAL_BLOCK(cs_wallet)
|
||||
if (!mapAddressBook.count(address))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
int64 CWalletTx::GetTxTime() const
|
||||
{
|
||||
return nTimeReceived;
|
||||
@@ -443,8 +470,7 @@ void CWalletTx::GetAmounts(int64& nGeneratedImmature, int64& nGeneratedMature, l
|
||||
nFee = nDebit - nValueOut;
|
||||
}
|
||||
|
||||
// Sent/received. Standard client will never generate a send-to-multiple-recipients,
|
||||
// but non-standard clients might (so return a list of address/amount pairs)
|
||||
// Sent/received.
|
||||
BOOST_FOREACH(const CTxOut& txout, vout)
|
||||
{
|
||||
CBitcoinAddress address;
|
||||
@@ -997,12 +1023,11 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64> >& vecSend, CW
|
||||
vector<unsigned char> vchPubKey = reservekey.GetReservedKey();
|
||||
// assert(mapKeys.count(vchPubKey));
|
||||
|
||||
// Fill a vout to ourself, using same address type as the payment
|
||||
// Fill a vout to ourself
|
||||
// TODO: pass in scriptChange instead of reservekey so
|
||||
// change transaction isn't always pay-to-bitcoin-address
|
||||
CScript scriptChange;
|
||||
if (vecSend[0].first.GetBitcoinAddress().IsValid())
|
||||
scriptChange.SetBitcoinAddress(vchPubKey);
|
||||
else
|
||||
scriptChange << vchPubKey << OP_CHECKSIG;
|
||||
scriptChange.SetBitcoinAddress(vchPubKey);
|
||||
|
||||
// Insert change txn at random position:
|
||||
vector<CTxOut>::iterator position = wtxNew.vout.begin()+GetRandInt(wtxNew.vout.size());
|
||||
|
||||
Reference in New Issue
Block a user