std::shared_ptr<WalletLegacyEvent> WalletUserTransactionsCache::onTransactionDeleted(const Hash& transactionHash) { TransactionId id = CryptoNote::WALLET_LEGACY_INVALID_TRANSACTION_ID; if (m_unconfirmedTransactions.findTransactionId(transactionHash, id)) { m_unconfirmedTransactions.erase(transactionHash); // LOG_ERROR("Unconfirmed transaction is deleted: id = " << id << ", hash = " << transactionHash); assert(false); } else { id = findTransactionByHash(transactionHash); } std::shared_ptr<WalletLegacyEvent> event; if (id != CryptoNote::WALLET_LEGACY_INVALID_TRANSACTION_ID) { WalletLegacyTransaction& tr = getTransaction(id); tr.blockHeight = WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT; tr.timestamp = 0; tr.state = WalletLegacyTransactionState::Deleted; event = std::make_shared<WalletTransactionUpdatedEvent>(id); } else { // LOG_ERROR("Transaction wasn't found: " << transactionHash); assert(false); } return event; }
std::shared_ptr<WalletEvent> WalletUserTransactionsCache::onTransactionUpdated(const TransactionInformation& txInfo, int64_t txBalance) { std::shared_ptr<WalletEvent> event; TransactionId id = CryptoNote::INVALID_TRANSACTION_ID; if (!m_unconfirmedTransactions.findTransactionId(txInfo.transactionHash, id)) { id = findTransactionByHash(txInfo.transactionHash); } else { m_unconfirmedTransactions.erase(txInfo.transactionHash); } bool isCoinbase = txInfo.totalAmountIn == 0; if (id == CryptoNote::INVALID_TRANSACTION_ID) { TransactionInfo transaction; transaction.firstTransferId = INVALID_TRANSFER_ID; transaction.transferCount = 0; transaction.totalAmount = txBalance; transaction.fee = isCoinbase ? 0 : txInfo.totalAmountIn - txInfo.totalAmountOut; transaction.sentTime = 0; transaction.hash = txInfo.transactionHash; transaction.blockHeight = txInfo.blockHeight; transaction.isCoinbase = isCoinbase; transaction.timestamp = txInfo.timestamp; transaction.extra.assign(txInfo.extra.begin(), txInfo.extra.end()); transaction.state = TransactionState::Active; transaction.unlockTime = txInfo.unlockTime; id = insertTransaction(std::move(transaction)); // notification event event = std::make_shared<WalletExternalTransactionCreatedEvent>(id); } else { TransactionInfo& tr = getTransaction(id); tr.blockHeight = txInfo.blockHeight; tr.timestamp = txInfo.timestamp; tr.state = TransactionState::Active; // notification event event = std::make_shared<WalletTransactionUpdatedEvent>(id); } return event; }