Wallet::transfer in progress

This commit is contained in:
Ilya Kitaev 2016-04-03 14:34:38 +03:00
parent 830c19c934
commit c37c856d6d
2 changed files with 42 additions and 1 deletions

View file

@ -32,7 +32,11 @@
#include "wallet2.h" #include "wallet2.h"
#include "mnemonics/electrum-words.h" #include "mnemonics/electrum-words.h"
#include "cryptonote_core/cryptonote_format_utils.h" #include "cryptonote_core/cryptonote_format_utils.h"
#include "cryptonote_core/cryptonote_basic_impl.h"
#include <memory> #include <memory>
#include <vector>
namespace epee { namespace epee {
unsigned int g_test_dbg_lock_sleep = 0; unsigned int g_test_dbg_lock_sleep = 0;
@ -44,11 +48,16 @@ struct WalletManagerImpl;
namespace { namespace {
static WalletManagerImpl * g_walletManager = nullptr; static WalletManagerImpl * g_walletManager = nullptr;
// copy-pasted from
static const size_t DEFAULT_MIX = 4;
} }
using namespace std;
Wallet::~Wallet() {} Wallet::~Wallet() {}
///////////////////////// Wallet implementation //////////////////////////////// ///////////////////////// Wallet implementation ////////////////////////////////
@ -77,6 +86,7 @@ public:
uint64_t unlockedBalance() const; uint64_t unlockedBalance() const;
std::string displayAmount(uint64_t amount) const; std::string displayAmount(uint64_t amount) const;
bool refresh(); bool refresh();
bool transfer(const std::string &dst_addr, uint64_t amount);
private: private:
@ -306,6 +316,36 @@ bool WalletImpl::refresh()
return m_status == Status_Ok; return m_status == Status_Ok;
} }
bool WalletImpl::transfer(const std::string &dst_addr, uint64_t amount)
{
clearStatus();
vector<cryptonote::tx_destination_entry> dsts;
cryptonote::tx_destination_entry de;
bool has_payment_id;
bool payment_id_seen = false;
crypto::hash8 new_payment_id;
size_t fake_outs_count = DEFAULT_MIX;
if(!cryptonote::get_account_integrated_address_from_str(de.addr, has_payment_id, new_payment_id, m_wallet->testnet(), dst_addr)) {
// TODO: copy-paste 'if treating as an address fails, try as url' from simplewallet.cpp:1982
m_status = Status_Error;
m_errorString = "Invalid destination address";
return false;
}
de.amount = amount;
if (de.amount <= 0) {
m_status = Status_Error;
m_errorString = "Invalid amount";
return false;
}
dsts.push_back(de);
return m_status == Status_Ok;
}
bool WalletImpl::connectToDaemon() bool WalletImpl::connectToDaemon()
{ {
bool result = m_wallet->check_connection(); bool result = m_wallet->check_connection();

View file

@ -74,9 +74,10 @@ struct Wallet
virtual std::string displayAmount(uint64_t amount) const = 0; virtual std::string displayAmount(uint64_t amount) const = 0;
// TODO? // TODO?
// virtual uint64_t unlockedDustBalance() const = 0; // virtual uint64_t unlockedDustBalance() const = 0;
// TODO refresh
virtual bool refresh() = 0; virtual bool refresh() = 0;
// TODO transfer // TODO transfer
virtual bool transfer(const std::string &dst_addr, uint64_t amount) = 0;
}; };
/** /**