update wallet to use derived types

This commit is contained in:
woodser
2019-06-17 15:34:32 -04:00
parent 61034b12ea
commit eb8bd2b68d
2 changed files with 12 additions and 16 deletions
+11 -15
View File
@@ -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<shared_ptr<MoneroTx>>& txs, const shared_ptr<MoneroTx>& tx, bool skipIfAbsent) {
void mergeTx(vector<shared_ptr<MoneroTxWallet>>& txs, const shared_ptr<MoneroTxWallet>& 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<shared_ptr<MoneroTx>> txs;
vector<shared_ptr<MoneroTxWallet>> txs;
// get confirmed incoming transfers
if (isIn) {
std::list<std::pair<crypto::hash, tools::wallet2::payment_details>> payments;
wallet2->get_payments(payments, minHeight, maxHeight, accountIndex, subaddressIndices);
for (std::list<std::pair<crypto::hash, tools::wallet2::payment_details>>::const_iterator i = payments.begin(); i != payments.end(); ++i) {
shared_ptr<MoneroTx> tx = buildTxWithIncomingTransfer(i->second.m_tx_hash, i->first, i->second);
shared_ptr<MoneroTxWallet> 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<shared_ptr<MoneroTransfer>> transfers;
for (int i = 0; i < txs.size(); i++) {
shared_ptr<MoneroTx> txBase = txs[i];
const MoneroTxWallet* tx = static_cast<MoneroTxWallet*>(&*txBase); // shared_ptrs use base class but these are actually MoneroTxWallets
shared_ptr<MoneroTxWallet> 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<MoneroTx> MoneroWallet::buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const {
shared_ptr<MoneroTxWallet> 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<MoneroTx> txBase = shared_ptr<MoneroTx>(new MoneroTxWallet());
MoneroTxWallet* tx = static_cast<MoneroTxWallet*>(&*txBase); // get MoneroTxWallet* from base shared_ptr
shared_ptr<MoneroTxWallet> tx = shared_ptr<MoneroTxWallet>(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<MoneroIncomingTransfer> incomingTransferBase = shared_ptr<MoneroIncomingTransfer>(new MoneroIncomingTransfer());
MoneroIncomingTransfer* incomingTransfer = static_cast<MoneroIncomingTransfer*>(&*incomingTransferBase);
incomingTransfer->tx = static_pointer_cast<MoneroTxWallet>(txBase);
tx->incomingTransfers.push_back(incomingTransferBase);
shared_ptr<MoneroIncomingTransfer> incomingTransfer = shared_ptr<MoneroIncomingTransfer>(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 {
+1 -1
View File
@@ -1085,6 +1085,6 @@ namespace monero {
MoneroSyncResult syncAux(boost::optional<uint64_t> startHeight, boost::optional<uint64_t> endHeight, boost::optional<MoneroSyncListener&> listener);
vector<MoneroSubaddress> getSubaddressesAux(uint32_t accountIdx, vector<uint32_t> subaddressIndices, vector<tools::wallet2::transfer_details> transfers) const;
shared_ptr<MoneroTx> buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const;
shared_ptr<MoneroTxWallet> buildTxWithIncomingTransfer(const crypto::hash &txid, const crypto::hash &payment_id, const tools::wallet2::payment_details &pd) const;
};
}