mirror of
https://github.com/mollyim/monero-wallet-sdk.git
synced 2024-10-01 03:45:36 -04:00
lib: fix balance for pending transfers to own wallet
This commit is contained in:
parent
4cf0059739
commit
ec4ebe6f78
@ -428,6 +428,13 @@ void Wallet::captureTxHistorySnapshot(std::vector<TxInfo>& snapshot) {
|
|||||||
for (const auto& pair: upds) {
|
for (const auto& pair: upds) {
|
||||||
const auto& upd = pair.second.m_pd;
|
const auto& upd = pair.second.m_pd;
|
||||||
bool double_spend_seen = pair.second.m_double_spend_seen; // Unused
|
bool double_spend_seen = pair.second.m_double_spend_seen; // Unused
|
||||||
|
// Skip unconfirmed transfers sent to our own wallet.
|
||||||
|
auto it = std::find_if(
|
||||||
|
utxs.begin(), utxs.end(),
|
||||||
|
[&](const std::pair<crypto::hash, wallet2::unconfirmed_transfer_details>& utx) {
|
||||||
|
return utx.first == upd.m_tx_hash;
|
||||||
|
});
|
||||||
|
if (it != utxs.end()) continue;
|
||||||
// Denormalize individual amounts sent to a single subaddress in a single tx.
|
// Denormalize individual amounts sent to a single subaddress in a single tx.
|
||||||
for (uint64_t amount: upd.m_amounts) {
|
for (uint64_t amount: upd.m_amounts) {
|
||||||
snapshot.emplace_back(upd.m_tx_hash, TxInfo::INCOMING);
|
snapshot.emplace_back(upd.m_tx_hash, TxInfo::INCOMING);
|
||||||
@ -435,7 +442,6 @@ void Wallet::captureTxHistorySnapshot(std::vector<TxInfo>& snapshot) {
|
|||||||
recv.m_subaddress_major = upd.m_subaddr_index.major;
|
recv.m_subaddress_major = upd.m_subaddr_index.major;
|
||||||
recv.m_subaddress_minor = upd.m_subaddr_index.minor;
|
recv.m_subaddress_minor = upd.m_subaddr_index.minor;
|
||||||
recv.m_amount = amount;
|
recv.m_amount = amount;
|
||||||
recv.m_height = upd.m_block_height;
|
|
||||||
recv.m_unlock_time = upd.m_unlock_time;
|
recv.m_unlock_time = upd.m_unlock_time;
|
||||||
recv.m_timestamp = upd.m_timestamp;
|
recv.m_timestamp = upd.m_timestamp;
|
||||||
recv.m_fee = upd.m_fee;
|
recv.m_fee = upd.m_fee;
|
||||||
|
@ -176,6 +176,10 @@ internal class WalletNative private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun createPayment(request: PaymentRequest, callback: ITransferCallback) {
|
override fun createPayment(request: PaymentRequest, callback: ITransferCallback) {
|
||||||
|
if (request.paymentDetails.any { it.recipientAddress.network != network }) {
|
||||||
|
callback.onUnexpectedError("Recipient address is on a different network")
|
||||||
|
return
|
||||||
|
}
|
||||||
scope.launch(singleThreadedDispatcher) {
|
scope.launch(singleThreadedDispatcher) {
|
||||||
val (amounts, addresses) = request.paymentDetails.map {
|
val (amounts, addresses) = request.paymentDetails.map {
|
||||||
it.amount.atomicUnits to it.recipientAddress.address
|
it.amount.atomicUnits to it.recipientAddress.address
|
||||||
|
@ -117,12 +117,12 @@ private fun List<TxInfo>.createTransaction(
|
|||||||
else blockchainContext.resolveUnlockTime(unlockTime)
|
else blockchainContext.resolveUnlockTime(unlockTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
val receivedEnotes = enoteByTxId.getOrDefault(txHash, emptyList()).toSet()
|
val receivedEnotes = enoteByTxId.getOrDefault(txHash, emptyList())
|
||||||
|
|
||||||
val outTxs = filter { !it.incoming }
|
val outTxs = filter { !it.incoming }
|
||||||
|
|
||||||
val spentKeyImages = outTxs.mapNotNull { it.keyImage }
|
val spentKeyImages = outTxs.mapNotNull { it.keyImage }
|
||||||
val sentEnotes = enoteByKeyImage.filterKeys { ki -> ki in spentKeyImages }.values.toSet()
|
val sentEnotes = enoteByKeyImage.filterKeys { ki -> ki in spentKeyImages }.values
|
||||||
|
|
||||||
val payments = outTxs.mapNotNull { it.toPaymentDetail() }
|
val payments = outTxs.mapNotNull { it.toPaymentDetail() }
|
||||||
|
|
||||||
@ -131,8 +131,8 @@ private fun List<TxInfo>.createTransaction(
|
|||||||
state = determineTxState(),
|
state = determineTxState(),
|
||||||
network = blockchainContext.network,
|
network = blockchainContext.network,
|
||||||
timeLock = timeLock,
|
timeLock = timeLock,
|
||||||
sent = sentEnotes,
|
sent = sentEnotes.toSet(),
|
||||||
received = receivedEnotes,
|
received = receivedEnotes.toSet(),
|
||||||
payments = payments,
|
payments = payments,
|
||||||
fee = MoneroAmount(atomicUnits = fee),
|
fee = MoneroAmount(atomicUnits = fee),
|
||||||
change = MoneroAmount(atomicUnits = change),
|
change = MoneroAmount(atomicUnits = change),
|
||||||
|
Loading…
Reference in New Issue
Block a user