diff --git a/src/wallet/MoneroWallet.cpp b/src/wallet/MoneroWallet.cpp index 42b4cf0..2120c3d 100644 --- a/src/wallet/MoneroWallet.cpp +++ b/src/wallet/MoneroWallet.cpp @@ -83,7 +83,7 @@ namespace monero { * @param skipIfAbsent specifies if the tx should not be added if it doesn't already exist * @returns the merged tx */ - void mergeTx(vector>& txs, const shared_ptr& tx, bool skipIfAbsent) { + void mergeTx(vector>& txs, const shared_ptr& tx, bool skipIfAbsent) { cout << "mergeTx(txs, txs)" << endl; if (tx->id == boost::none) throw runtime_error("Tx id is not initialized"); for (const auto& aTx: txs) { @@ -569,16 +569,15 @@ namespace monero { bool isPool = canBeIncoming && canBeInTxPool; bool isFailed = !boolEquals(false, txReq.isFailed) && !boolEquals(true, txReq.isConfirmed) && !boolEquals(true, txReq.inTxPool); - // collect unique transactions - vector> txs; + vector> txs; // get confirmed incoming transfers if (isIn) { std::list> payments; wallet2->get_payments(payments, minHeight, maxHeight, accountIndex, subaddressIndices); for (std::list>::const_iterator i = payments.begin(); i != payments.end(); ++i) { - shared_ptr tx = buildTxWithIncomingTransfer(i->second.m_tx_hash, i->first, i->second); + shared_ptr tx = buildTxWithIncomingTransfer(i->second.m_tx_hash, i->first, i->second); mergeTx(txs, tx, false); //txs.push_back(tx); } @@ -604,8 +603,7 @@ namespace monero { // collect resulting transfers vector> transfers; for (int i = 0; i < txs.size(); i++) { - shared_ptr txBase = txs[i]; - const MoneroTxWallet* tx = static_cast(&*txBase); // shared_ptrs use base class but these are actually MoneroTxWallets + shared_ptr tx = txs[i]; for (int j = 0; j < tx->incomingTransfers.size(); j++) { transfers.push_back(tx->incomingTransfers[j]); } @@ -761,7 +759,7 @@ namespace monero { return subaddresses; } - shared_ptr MoneroWallet::buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const { + shared_ptr MoneroWallet::buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const { cout << "buildTxWithIncomingTransfer()" << endl; // construct block @@ -770,10 +768,9 @@ namespace monero { block->timestamp = pd.m_timestamp; // construct tx - shared_ptr txBase = shared_ptr(new MoneroTxWallet()); - MoneroTxWallet* tx = static_cast(&*txBase); // get MoneroTxWallet* from base shared_ptr + shared_ptr tx = shared_ptr(new MoneroTxWallet()); tx->block = block; - block->txs.push_back(txBase); + block->txs.push_back(tx); tx->id = string_tools::pod_to_hex(pd.m_tx_hash); tx->paymentId = string_tools::pod_to_hex(payment_id); if (tx->paymentId->substr(16).find_first_not_of('0') == std::string::npos) tx->paymentId = tx->paymentId->substr(0, 16); // TODO monero core: this should be part of core wallet @@ -796,10 +793,9 @@ namespace monero { else tx->numConfirmations = chainHeight - *block->height; // construct transfer - shared_ptr incomingTransferBase = shared_ptr(new MoneroIncomingTransfer()); - MoneroIncomingTransfer* incomingTransfer = static_cast(&*incomingTransferBase); - incomingTransfer->tx = static_pointer_cast(txBase); - tx->incomingTransfers.push_back(incomingTransferBase); + shared_ptr incomingTransfer = shared_ptr(new MoneroIncomingTransfer()); + incomingTransfer->tx = tx; + tx->incomingTransfers.push_back(incomingTransfer); incomingTransfer->amount = pd.m_amount; incomingTransfer->accountIndex = pd.m_subaddr_index.major; incomingTransfer->subaddressIndex = pd.m_subaddr_index.minor; @@ -811,7 +807,7 @@ namespace monero { else incomingTransfer->numSuggestedConfirmations = (*incomingTransfer->amount + blockReward - 1) / blockReward; // return pointer to new tx - return txBase; + return tx; } // MoneroTransfer MoneroWallet::convertWallet2IncomingTransfer(const tools::wallet2& wallet2, const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const { diff --git a/src/wallet/MoneroWallet.h b/src/wallet/MoneroWallet.h index 084cbb2..37dd219 100644 --- a/src/wallet/MoneroWallet.h +++ b/src/wallet/MoneroWallet.h @@ -1085,6 +1085,6 @@ namespace monero { MoneroSyncResult syncAux(boost::optional startHeight, boost::optional endHeight, boost::optional listener); vector getSubaddressesAux(uint32_t accountIdx, vector subaddressIndices, vector transfers) const; - shared_ptr buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const; + shared_ptr buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const; }; }