// Copyright (c) 2011-2018 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include WalletModelTransaction::WalletModelTransaction(const QList &_recipients) : recipients(_recipients), fee(0) { } QList WalletModelTransaction::getRecipients() const { return recipients; } std::unique_ptr& WalletModelTransaction::getWtx() { return wtx; } unsigned int WalletModelTransaction::getTransactionSize() { return wtx ? wtx->getVirtualSize() : 0; } CAmount WalletModelTransaction::getTransactionFee() const { return fee; } void WalletModelTransaction::setTransactionFee(const CAmount& newFee) { fee = newFee; } void WalletModelTransaction::reassignAmounts(int nChangePosRet) { const CTransaction* walletTransaction = &wtx->get(); int i = 0; for (QList::iterator it = recipients.begin(); it != recipients.end(); ++it) { SendCoinsRecipient& rcp = (*it); if (rcp.paymentRequest.IsInitialized()) { CAmount subtotal = 0; const payments::PaymentDetails& details = rcp.paymentRequest.getDetails(); for (int j = 0; j < details.outputs_size(); j++) { const payments::Output& out = details.outputs(j); if (out.amount() <= 0) continue; if (i == nChangePosRet) i++; subtotal += walletTransaction->vout[i].nValue; i++; } rcp.amount = subtotal; } else // normal recipient (no payment request) { if (i == nChangePosRet) i++; rcp.amount = walletTransaction->vout[i].nValue; i++; } } } CAmount WalletModelTransaction::getTotalTransactionAmount() const { CAmount totalTransactionAmount = 0; for (const SendCoinsRecipient &rcp : recipients) { totalTransactionAmount += rcp.amount; } return totalTransactionAmount; }