mirror of
https://github.com/monero-project/monero.git
synced 2024-12-25 13:09:24 +00:00
wallet2_api: support for sweeping all
This commit is contained in:
parent
38727f7d2f
commit
1669621937
3 changed files with 33 additions and 11 deletions
|
@ -540,15 +540,14 @@ int WalletImpl::autoRefreshInterval() const
|
||||||
// - unconfirmed_transfer_details;
|
// - unconfirmed_transfer_details;
|
||||||
// - confirmed_transfer_details)
|
// - confirmed_transfer_details)
|
||||||
|
|
||||||
PendingTransaction *WalletImpl::createTransaction(const string &dst_addr, const string &payment_id, uint64_t amount, uint32_t mixin_count,
|
PendingTransaction *WalletImpl::createTransaction(const string &dst_addr, const string &payment_id, optional<uint64_t> amount, uint32_t mixin_count,
|
||||||
PendingTransaction::Priority priority)
|
PendingTransaction::Priority priority)
|
||||||
|
|
||||||
{
|
{
|
||||||
clearStatus();
|
clearStatus();
|
||||||
// Pause refresh thread while creating transaction
|
// Pause refresh thread while creating transaction
|
||||||
pauseRefresh();
|
pauseRefresh();
|
||||||
vector<cryptonote::tx_destination_entry> dsts;
|
cryptonote::account_public_address addr;
|
||||||
cryptonote::tx_destination_entry de;
|
|
||||||
|
|
||||||
// indicates if dst_addr is integrated address (address + payment_id)
|
// indicates if dst_addr is integrated address (address + payment_id)
|
||||||
bool has_payment_id;
|
bool has_payment_id;
|
||||||
|
@ -561,7 +560,7 @@ PendingTransaction *WalletImpl::createTransaction(const string &dst_addr, const
|
||||||
PendingTransactionImpl * transaction = new PendingTransactionImpl(*this);
|
PendingTransactionImpl * transaction = new PendingTransactionImpl(*this);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if(!cryptonote::get_account_integrated_address_from_str(de.addr, has_payment_id, payment_id_short, m_wallet->testnet(), dst_addr)) {
|
if(!cryptonote::get_account_integrated_address_from_str(addr, has_payment_id, payment_id_short, m_wallet->testnet(), dst_addr)) {
|
||||||
// TODO: copy-paste 'if treating as an address fails, try as url' from simplewallet.cpp:1982
|
// TODO: copy-paste 'if treating as an address fails, try as url' from simplewallet.cpp:1982
|
||||||
m_status = Status_Error;
|
m_status = Status_Error;
|
||||||
m_errorString = "Invalid destination address";
|
m_errorString = "Invalid destination address";
|
||||||
|
@ -595,14 +594,23 @@ PendingTransaction *WalletImpl::createTransaction(const string &dst_addr, const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
de.amount = amount;
|
|
||||||
dsts.push_back(de);
|
|
||||||
//std::vector<tools::wallet2::pending_tx> ptx_vector;
|
//std::vector<tools::wallet2::pending_tx> ptx_vector;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (amount) {
|
||||||
|
vector<cryptonote::tx_destination_entry> dsts;
|
||||||
|
cryptonote::tx_destination_entry de;
|
||||||
|
de.addr = addr;
|
||||||
|
de.amount = *amount;
|
||||||
|
dsts.push_back(de);
|
||||||
transaction->m_pending_tx = m_wallet->create_transactions_2(dsts, fake_outs_count, 0 /* unlock_time */,
|
transaction->m_pending_tx = m_wallet->create_transactions_2(dsts, fake_outs_count, 0 /* unlock_time */,
|
||||||
static_cast<uint32_t>(priority),
|
static_cast<uint32_t>(priority),
|
||||||
extra, m_trustedDaemon);
|
extra, m_trustedDaemon);
|
||||||
|
} else {
|
||||||
|
transaction->m_pending_tx = m_wallet->create_transactions_all(addr, fake_outs_count, 0 /* unlock_time */,
|
||||||
|
static_cast<uint32_t>(priority),
|
||||||
|
extra, m_trustedDaemon);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (const tools::error::daemon_busy&) {
|
} catch (const tools::error::daemon_busy&) {
|
||||||
// TODO: make it translatable with "tr"?
|
// TODO: make it translatable with "tr"?
|
||||||
|
|
|
@ -89,7 +89,7 @@ public:
|
||||||
|
|
||||||
|
|
||||||
PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
|
PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
|
||||||
uint64_t amount, uint32_t mixin_count,
|
optional<uint64_t> amount, uint32_t mixin_count,
|
||||||
PendingTransaction::Priority priority = PendingTransaction::Priority_Low);
|
PendingTransaction::Priority priority = PendingTransaction::Priority_Low);
|
||||||
virtual PendingTransaction * createSweepUnmixableTransaction();
|
virtual PendingTransaction * createSweepUnmixableTransaction();
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,20 @@ namespace Bitmonero {
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
bool isAddressLocal(const std::string &hostaddr);
|
bool isAddressLocal(const std::string &hostaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
class optional {
|
||||||
|
public:
|
||||||
|
optional(): set(false) {}
|
||||||
|
optional(const T &t): t(t), set(true) {}
|
||||||
|
const T &operator*() const { return t; }
|
||||||
|
T &operator*() { return t; }
|
||||||
|
operator bool() const { return set; }
|
||||||
|
private:
|
||||||
|
T t;
|
||||||
|
bool set;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Transaction-like interface for sending money
|
* @brief Transaction-like interface for sending money
|
||||||
*/
|
*/
|
||||||
|
@ -332,7 +346,7 @@ struct Wallet
|
||||||
*/
|
*/
|
||||||
|
|
||||||
virtual PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
|
virtual PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
|
||||||
uint64_t amount, uint32_t mixin_count,
|
optional<uint64_t> amount, uint32_t mixin_count,
|
||||||
PendingTransaction::Priority = PendingTransaction::Priority_Low) = 0;
|
PendingTransaction::Priority = PendingTransaction::Priority_Low) = 0;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
Loading…
Reference in a new issue