#include "init.h"
#include "base58.h"
#include "bitcoinunits.h"
+#include "script.h"
#include "walletmodel.h"
#include "addresstablemodel.h"
#include "optionsmodel.h"
#include "coincontrol.h"
#include "dialogwindowflags.h"
+#include "wallet.h"
#include <QApplication>
#include <QCheckBox>
coinControl->ListSelected(vCoinControl);
model->getOutputs(vCoinControl, vOutputs);
- BOOST_FOREACH(const COutput& out, vOutputs)
+ for (const COutput& out : vOutputs)
{
// Quantity
nQuantity++;
dPriorityInputs += (double)out.tx->vout[out.i].nValue * (out.nDepth+1);
// Bytes
- CTxDestination address;
- if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, address))
+ CBitcoinAddress address;
+ if(ExtractAddress(*pwalletMain, out.tx->vout[out.i].scriptPubKey, address))
{
- CPubKey pubkey;
- CKeyID *keyid = boost::get< CKeyID >(&address);
- if (keyid && model->getPubKey(*keyid, pubkey))
- nBytesInputs += (pubkey.IsCompressed() ? 148 : 180);
- else
- nBytesInputs += 148; // in all error cases, simply assume 148 here
+ if (address.IsPair())
+ nBytesInputs += 213;
+ else if (address.IsPubKey())
+ {
+ CPubKey pubkey;
+ CKeyID keyid;
+ if (address.GetKeyID(keyid) && model->getPubKey(keyid, pubkey))
+ nBytesInputs += (pubkey.IsCompressed() ? 148 : 180);
+ else
+ nBytesInputs += 148; // in all error cases, simply assume 148 here
+ }
}
- else nBytesInputs += 148;
}
// calculation
map<QString, vector<COutput> > mapCoins;
model->listCoins(mapCoins);
- BOOST_FOREACH(PAIRTYPE(QString, vector<COutput>) coins, mapCoins)
+ for (auto coins : mapCoins)
{
QTreeWidgetItem *itemWalletAddress = new QTreeWidgetItem();
QString sWalletAddress = coins.first;
int nChildren = 0;
int nInputSum = 0;
uint64_t nTxWeight = 0, nTxWeightSum = 0;
- BOOST_FOREACH(const COutput& out, coins.second)
+ for (const COutput& out : coins.second)
{
int nInputSize = 148; // 180 if uncompressed public key
nSum += out.tx->vout[out.i].nValue;
itemOutput->setCheckState(COLUMN_CHECKBOX,Qt::Unchecked);
// address
-/*
- CTxDestination outputAddress;
+ CBitcoinAddress outputAddress;
QString sAddress = "";
- if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, outputAddress))
+
+ if(ExtractAddress(*pwalletMain, out.tx->vout[out.i].scriptPubKey, outputAddress))
{
sAddress = CBitcoinAddress(outputAddress).ToString().c_str();
if (!treeMode || (!(sAddress == sWalletAddress)))
itemOutput->setText(COLUMN_ADDRESS, sAddress);
- CPubKey pubkey;
- CKeyID *keyid = boost::get< CKeyID >(&outputAddress);
- if (keyid && model->getPubKey(*keyid, pubkey) && !pubkey.IsCompressed())
- nInputSize = 180;
- }
-*/
- QString sAddress = "";
- txnouttype whichType;
- std::vector<valtype> vSolutions;
- if (Solver(out.tx->vout[out.i].scriptPubKey, whichType, vSolutions))
- {
- CTxDestination address;
- if (whichType == TX_PUBKEY)
+ if (outputAddress.IsPubKey())
{
- // Pay-to-Pubkey
- CPubKey pubKey = CPubKey(vSolutions[0]);
- address = pubKey.GetID();
- sAddress = CBitcoinAddress(address).ToString().c_str();
-
- if (!pubKey.IsCompressed())
- nInputSize = 180;
- }
- else if (whichType == TX_PUBKEYHASH)
- {
- // Pay-to-PubkeyHash
- address = CKeyID(uint160(vSolutions[0]));
- sAddress = CBitcoinAddress(address).ToString().c_str();
-
CPubKey pubkey;
- CKeyID *keyid = boost::get< CKeyID >(&address);
- if (keyid && model->getPubKey(*keyid, pubkey) && !pubkey.IsCompressed())
+ CKeyID keyid;
+ if (outputAddress.GetKeyID(keyid) && model->getPubKey(keyid, pubkey) && !pubkey.IsCompressed())
nInputSize = 180;
}
- else if (whichType == TX_SCRIPTHASH)
- {
- // Pay-to-ScriptHash
- address = CScriptID(uint160(vSolutions[0]));
- sAddress = CBitcoinAddress(address).ToString().c_str();
- }
- else if (whichType == TX_PUBKEY_DROP)
- {
- // Pay-to-Pubkey-R
- CMalleableKeyView view;
- pwalletMain->CheckOwnership(CPubKey(vSolutions[0]), CPubKey(vSolutions[1]), view);
- sAddress = view.GetMalleablePubKey().ToString().c_str();
- }
-
- // if listMode or change => show bitcoin address. In tree mode, address is not shown again for direct wallet address outputs
- if (!treeMode || (!(sAddress == sWalletAddress)))
- itemOutput->setText(COLUMN_ADDRESS, sAddress);
}
// label