Electroneum
Electroneum::UnsignedTransactionImpl Class Reference

#include <unsigned_transaction.h>

Inheritance diagram for Electroneum::UnsignedTransactionImpl:
Collaboration diagram for Electroneum::UnsignedTransactionImpl:

Public Member Functions

 UnsignedTransactionImpl (WalletImpl &wallet)
 
 ~UnsignedTransactionImpl ()
 
int status () const override
 
std::string errorString () const override
 
std::vector< uint64_tamount () const override
 
std::vector< uint64_tfee () const override
 
std::vector< uint64_tmixin () const override
 
std::vector< std::string > paymentId () const override
 
std::vector< std::string > recipientAddress () const override
 
uint64_t txCount () const override
 txCount - number of transactions current transaction will be splitted to More...
 
bool sign (const std::string &signedFileName) override
 sign - Sign txs and saves to file More...
 
std::string confirmationMessage () const override
 
uint64_t minMixinCount () const override
 
- Public Member Functions inherited from Electroneum::UnsignedTransaction
virtual ~UnsignedTransaction ()=0
 

Friends

class WalletImpl
 

Additional Inherited Members

- Public Types inherited from Electroneum::UnsignedTransaction
enum  Status { Status_Ok, Status_Error, Status_Critical }
 

Detailed Description

Definition at line 42 of file unsigned_transaction.h.

Constructor & Destructor Documentation

◆ UnsignedTransactionImpl()

Electroneum::UnsignedTransactionImpl::UnsignedTransactionImpl ( WalletImpl wallet)

Definition at line 51 of file unsigned_transaction.cpp.

52  : m_wallet(wallet)
53 {
54  m_status = Status_Ok;
55 }

◆ ~UnsignedTransactionImpl()

Electroneum::UnsignedTransactionImpl::~UnsignedTransactionImpl ( )

Definition at line 57 of file unsigned_transaction.cpp.

58 {
59  LOG_PRINT_L3("Unsigned tx deleted");
60 }
#define LOG_PRINT_L3(x)
Definition: misc_log_ex.h:102

Member Function Documentation

◆ amount()

std::vector< uint64_t > Electroneum::UnsignedTransactionImpl::amount ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 223 of file unsigned_transaction.cpp.

224 {
225  std::vector<uint64_t> result;
226  for (const auto &utx : m_unsigned_tx_set.txes) {
227  for (const auto &unsigned_dest : utx.dests) {
228  result.push_back(unsigned_dest.amount);
229  }
230  }
231  return result;
232 }
std::vector< tx_construction_data > txes
Definition: wallet2.h:499

◆ confirmationMessage()

std::string Electroneum::UnsignedTransactionImpl::confirmationMessage ( ) const
inlineoverridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 57 of file unsigned_transaction.h.

57 {return m_confirmationMessage;}

◆ errorString()

string Electroneum::UnsignedTransactionImpl::errorString ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 67 of file unsigned_transaction.cpp.

68 {
69  return m_errorString;
70 }

◆ fee()

std::vector< uint64_t > Electroneum::UnsignedTransactionImpl::fee ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 234 of file unsigned_transaction.cpp.

235 {
236  std::vector<uint64_t> result;
237  for (const auto &utx : m_unsigned_tx_set.txes) {
238  uint64_t fee = 0;
239  for (const auto &i: utx.sources) fee += i.amount;
240  for (const auto &i: utx.splitted_dsts) fee -= i.amount;
241  result.push_back(fee);
242  }
243  return result;
244 }
std::vector< uint64_t > fee() const override
std::vector< tx_construction_data > txes
Definition: wallet2.h:499
unsigned __int64 uint64_t
Definition: stdint.h:136

◆ minMixinCount()

uint64_t Electroneum::UnsignedTransactionImpl::minMixinCount ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 310 of file unsigned_transaction.cpp.

311 {
312  uint64_t min_mixin = ~0;
313  for (const auto &utx: m_unsigned_tx_set.txes) {
314  for (size_t s = 0; s < utx.sources.size(); ++s) {
315  size_t mixin = utx.sources[s].outputs.size() - 1;
316  if (mixin < min_mixin)
317  min_mixin = mixin;
318  }
319  }
320  return min_mixin;
321 }
std::vector< uint64_t > mixin() const override
std::vector< tx_construction_data > txes
Definition: wallet2.h:499
unsigned __int64 uint64_t
Definition: stdint.h:136
Here is the call graph for this function:

◆ mixin()

std::vector< uint64_t > Electroneum::UnsignedTransactionImpl::mixin ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 246 of file unsigned_transaction.cpp.

247 {
248  std::vector<uint64_t> result;
249  for (const auto &utx: m_unsigned_tx_set.txes) {
250  size_t min_mixin = ~0;
251  // TODO: Is this loop needed or is sources[0] ?
252  for (size_t s = 0; s < utx.sources.size(); ++s) {
253  size_t mixin = utx.sources[s].outputs.size() - 1;
254  if (mixin < min_mixin)
255  min_mixin = mixin;
256  }
257  result.push_back(min_mixin);
258  }
259  return result;
260 }
std::vector< uint64_t > mixin() const override
std::vector< tx_construction_data > txes
Definition: wallet2.h:499
Here is the caller graph for this function:

◆ paymentId()

std::vector< std::string > Electroneum::UnsignedTransactionImpl::paymentId ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 267 of file unsigned_transaction.cpp.

268 {
269  std::vector<string> result;
270  for (const auto &utx: m_unsigned_tx_set.txes) {
271  crypto::hash payment_id = crypto::null_hash;
272  cryptonote::tx_extra_nonce extra_nonce;
273  std::vector<cryptonote::tx_extra_field> tx_extra_fields;
274  cryptonote::parse_tx_extra(utx.extra, tx_extra_fields);
275  if (cryptonote::find_tx_extra_field_by_type(tx_extra_fields, extra_nonce))
276  {
277  crypto::hash8 payment_id8 = crypto::null_hash8;
279  {
280  // We can't decrypt short pid without recipient key.
281  memcpy(payment_id.data, payment_id8.data, 8);
282  }
283  else if (!cryptonote::get_payment_id_from_tx_extra_nonce(extra_nonce.nonce, payment_id))
284  {
285  payment_id = crypto::null_hash;
286  }
287  }
288  if(payment_id != crypto::null_hash)
289  result.push_back(epee::string_tools::pod_to_hex(payment_id));
290  else
291  result.push_back("");
292  }
293  return result;
294 }
bool parse_tx_extra(const std::vector< uint8_t > &tx_extra, std::vector< tx_extra_field > &tx_extra_fields)
bool find_tx_extra_field_by_type(const std::vector< tx_extra_field > &tx_extra_fields, T &field, size_t index=0)
std::vector< tx_construction_data > txes
Definition: wallet2.h:499
std::string pod_to_hex(const t_pod_type &s)
Definition: string_tools.h:317
bool get_payment_id_from_tx_extra_nonce(const blobdata &extra_nonce, crypto::hash &payment_id)
bool get_encrypted_payment_id_from_tx_extra_nonce(const blobdata &extra_nonce, crypto::hash8 &payment_id)
POD_CLASS hash8
Definition: hash.h:53
void * memcpy(void *a, const void *b, size_t c)
POD_CLASS hash
Definition: hash.h:50
Here is the call graph for this function:

◆ recipientAddress()

std::vector< std::string > Electroneum::UnsignedTransactionImpl::recipientAddress ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 296 of file unsigned_transaction.cpp.

297 {
298  // TODO: return integrated address if short payment ID exists
299  std::vector<string> result;
300  for (const auto &utx: m_unsigned_tx_set.txes) {
301  if (utx.dests.empty()) {
302  MERROR("empty destinations, skipped");
303  continue;
304  }
305  result.push_back(cryptonote::get_account_address_as_str(m_wallet.m_wallet->nettype(), utx.dests[0].is_subaddress, utx.dests[0].addr));
306  }
307  return result;
308 }
#define MERROR(x)
Definition: misc_log_ex.h:73
std::string get_account_address_as_str(network_type nettype, bool subaddress, account_public_address const &adr)
std::vector< tx_construction_data > txes
Definition: wallet2.h:499
Here is the call graph for this function:

◆ sign()

bool Electroneum::UnsignedTransactionImpl::sign ( const std::string &  signedFileName)
overridevirtual

sign - Sign txs and saves to file

Parameters
signedFileNamereturn - true on success

Implements Electroneum::UnsignedTransaction.

Definition at line 72 of file unsigned_transaction.cpp.

73 {
74  if(m_wallet.watchOnly())
75  {
76  m_errorString = tr("This is a watch only wallet");
77  m_status = Status_Error;
78  return false;
79  }
80  std::vector<tools::wallet2::pending_tx> ptx;
81  try
82  {
83  bool r = m_wallet.m_wallet->sign_tx(m_unsigned_tx_set, signedFileName, ptx);
84  if (!r)
85  {
86  m_errorString = tr("Failed to sign transaction");
87  m_status = Status_Error;
88  return false;
89  }
90  }
91  catch (const std::exception &e)
92  {
93  m_errorString = string(tr("Failed to sign transaction")) + e.what();
94  m_status = Status_Error;
95  return false;
96  }
97  return true;
98 }
#define tr(x)
Definition: common_defines.h:4
::std::string string
Definition: gtest-port.h:1097
bool watchOnly() const override
watchOnly - checks if wallet is watch only
Definition: wallet.cpp:2043
Here is the call graph for this function:

◆ status()

int Electroneum::UnsignedTransactionImpl::status ( ) const
overridevirtual

Implements Electroneum::UnsignedTransaction.

Definition at line 62 of file unsigned_transaction.cpp.

63 {
64  return m_status;
65 }

◆ txCount()

uint64_t Electroneum::UnsignedTransactionImpl::txCount ( ) const
overridevirtual

txCount - number of transactions current transaction will be splitted to

Returns

Implements Electroneum::UnsignedTransaction.

Definition at line 262 of file unsigned_transaction.cpp.

263 {
264  return m_unsigned_tx_set.txes.size();
265 }
std::vector< tx_construction_data > txes
Definition: wallet2.h:499

Friends And Related Function Documentation

◆ WalletImpl

friend class WalletImpl
friend

Definition at line 64 of file unsigned_transaction.h.


The documentation for this class was generated from the following files: