Electroneum
Loading...
Searching...
No Matches
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
bool sign (const std::string &signedFileName) override
 sign - Sign txs and saves to file
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}
Here is the call graph for this function:

◆ ~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)

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}

◆ 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
unsigned __int64 uint64_t
Definition stdint.h:136
Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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
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}
Here is the call graph for this function:
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}
void * memcpy(void *a, const void *b, size_t c)
POD_CLASS hash8
Definition hash.h:53
POD_CLASS hash
Definition hash.h:50
bool get_encrypted_payment_id_from_tx_extra_nonce(const blobdata &extra_nonce, crypto::hash8 &payment_id)
bool get_payment_id_from_tx_extra_nonce(const blobdata &extra_nonce, crypto::hash &payment_id)
bool find_tx_extra_field_by_type(const std::vector< tx_extra_field > &tx_extra_fields, T &field, size_t index=0)
bool parse_tx_extra(const std::vector< uint8_t > &tx_extra, std::vector< tx_extra_field > &tx_extra_fields)
std::string pod_to_hex(const t_pod_type &s)
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)
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)
::std::string string

◆ 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}

◆ 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: