Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/coinselection.h
// Copyright (c) 2017 The Bitcoin Core developers | // Copyright (c) 2017 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#ifndef BITCOIN_COINSELECTION_H | #ifndef BITCOIN_COINSELECTION_H | ||||
#define BITCOIN_COINSELECTION_H | #define BITCOIN_COINSELECTION_H | ||||
#include <amount.h> | #include <amount.h> | ||||
#include <primitives/transaction.h> | #include <primitives/transaction.h> | ||||
#include <random.h> | #include <random.h> | ||||
#include <wallet/wallet.h> | |||||
//! target minimum change amount | |||||
static const Amount MIN_CHANGE = CENT; | |||||
//! final minimum change amount after paying for fees | |||||
static const Amount MIN_FINAL_CHANGE = MIN_CHANGE / 2; | |||||
class CInputCoin { | |||||
public: | |||||
CInputCoin(const CTransactionRef &tx, unsigned int i) { | |||||
if (!tx) { | |||||
throw std::invalid_argument("tx should not be null"); | |||||
} | |||||
if (i >= tx->vout.size()) { | |||||
throw std::out_of_range("The output index is out of range"); | |||||
} | |||||
outpoint = COutPoint(tx->GetId(), i); | |||||
txout = tx->vout[i]; | |||||
effective_value = txout.nValue; | |||||
} | |||||
COutPoint outpoint; | |||||
CTxOut txout; | |||||
Amount effective_value; | |||||
Amount fee = Amount::zero(); | |||||
Amount long_term_fee = Amount::zero(); | |||||
bool operator<(const CInputCoin &rhs) const { | |||||
return outpoint < rhs.outpoint; | |||||
} | |||||
bool operator!=(const CInputCoin &rhs) const { | |||||
return outpoint != rhs.outpoint; | |||||
} | |||||
bool operator==(const CInputCoin &rhs) const { | |||||
return outpoint == rhs.outpoint; | |||||
} | |||||
}; | |||||
bool SelectCoinsBnB(std::vector<CInputCoin> &utxo_pool, | bool SelectCoinsBnB(std::vector<CInputCoin> &utxo_pool, | ||||
const Amount &target_value, const Amount &cost_of_change, | const Amount &target_value, const Amount &cost_of_change, | ||||
std::set<CInputCoin> &out_set, Amount &value_ret, | std::set<CInputCoin> &out_set, Amount &value_ret, | ||||
Amount not_input_fees); | Amount not_input_fees); | ||||
#endif // BITCOIN_COINSELECTION_H | #endif // BITCOIN_COINSELECTION_H |