From b023fd98b642817888dcb6038a2f2973aab3d360 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 18 Feb 2026 15:23:24 +0100 Subject: [PATCH] fix balance for cross group transactions --- .../syncDbWithBlockchain/AbstractSync.role.ts | 3 ++- .../RemoteTransactionsSync.role.ts | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/AbstractSync.role.ts b/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/AbstractSync.role.ts index a5cfb710c..d6a6fc23a 100644 --- a/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/AbstractSync.role.ts +++ b/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/AbstractSync.role.ts @@ -51,7 +51,7 @@ export abstract class AbstractSyncRole { throw new Error('publicKey is empty') } const f = Filter.lastBalanceFor(publicKey) - f.coinCommunityId = communityId + f.setCommunityId(communityId) const lastSenderTransaction = blockchain.findOne(f) if (!lastSenderTransaction) { return new Balance(publicKey, communityId) @@ -59,6 +59,7 @@ export abstract class AbstractSyncRole { const lastConfirmedTransaction = lastSenderTransaction.getConfirmedTransaction() if (!lastConfirmedTransaction) { throw new Error(`invalid transaction, getConfirmedTransaction call failed for transaction nr: ${lastSenderTransaction.getTransactionNr()}`) + } const senderLastAccountBalance = lastConfirmedTransaction.getAccountBalance(publicKey, communityId) if (!senderLastAccountBalance) { diff --git a/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/RemoteTransactionsSync.role.ts b/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/RemoteTransactionsSync.role.ts index 567a7ee79..19a33189b 100644 --- a/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/RemoteTransactionsSync.role.ts +++ b/dlt-connector/src/migrations/db-v2.7.0_to_blockchain-v3.7/interaction/syncDbWithBlockchain/RemoteTransactionsSync.role.ts @@ -114,13 +114,19 @@ export class RemoteTransactionsSyncRole extends AbstractSyncRole this.accountBalances.add(new AccountBalance(publicKey, GradidoUnit.zero(), coinCommunityId)) return this.accountBalances } else { - const lastBalance = this.getLastBalanceForUser(publicKey, communityContext.blockchain, coinCommunityId) + // try to use same coins from this community + let lastBalance = this.getLastBalanceForUser(publicKey, communityContext.blockchain, coinCommunityId) + if (lastBalance.getBalance().equal(GradidoUnit.zero()) || lastBalance.getBalance().calculateDecay(lastBalance.getDate(), item.balanceDate).lt(amount)) { + // don't work, so we use or own coins + lastBalance = this.getLastBalanceForUser(publicKey, communityContext.blockchain, communityContext.communityId) + } try { lastBalance.updateLegacyDecay(amount, item.balanceDate) } catch(e) { if (e instanceof NegativeBalanceError) { - this.logLastBalanceChangingTransactions(publicKey, communityContext.blockchain, 10) + console.log(`coin community id: ${coinCommunityId}, context community id: ${communityContext.communityId}`) + this.logLastBalanceChangingTransactions(publicKey, communityContext.blockchain, 1) throw e } } @@ -195,5 +201,7 @@ export class RemoteTransactionsSyncRole extends AbstractSyncRole } throw new BlockchainError(`Error adding ${this.itemTypeName()}`, item, e as Error) } + // this.logLastBalanceChangingTransactions(senderPublicKey, senderCommunityContext.blockchain, 1) + // this.logLastBalanceChangingTransactions(recipientPublicKey, recipientCommunityContext.blockchain, 1) } }