Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,23 @@ All notable changes in this release are listed below.
## [Unreleased]

### New Features

- Test screen for developers is now available [#815](https://github.com/Adamant-im/adamant-im/pull/815) — [@Linhead](https://github.com/Linhead)
- Universal macOS build added [#840](https://github.com/Adamant-im/adamant-im/pull/840) — [@S-FrontendDev](https://github.com/S-FrontendDev)
- Release notes file added [#853](https://github.com/Adamant-im/adamant-im/pull/853) — [@S-FrontendDev](https://github.com/S-FrontendDev)

### Improvements

- APK name changed in GitHub workflow [#839](https://github.com/Adamant-im/adamant-im/pull/839) — [@S-FrontendDev](https://github.com/S-FrontendDev)
- Wallets UI updated for better usability [#846](https://github.com/Adamant-im/adamant-im/pull/846) — [@Linhead](https://github.com/Linhead), [@adamant-al](https://github.com/adamant-al)
- ESLint updated to improve code quality [#849](https://github.com/Adamant-im/adamant-im/pull/849) — [@graycraft](https://github.com/graycraft)
- Different small UI style updates [#848](https://github.com/Adamant-im/adamant-im/pull/848) — [@kalpovskii](https://github.com/kalpovskii), [@adamant-al](https://github.com/adamant-al)
- GitHub Actions workflow and Husky postinstall git hook for ESLint [#858](https://github.com/Adamant-im/adamant-im/pull/858) — [@graycraft](https://github.com/graycraft)

### Bug Fixes

- Transaction fee calculation for ETH & ERC20 fixed [#805](https://github.com/Adamant-im/adamant-im/pull/805) — [@Linhead](https://github.com/Linhead)
- Layout issue on "Export keys" page fixed [#841](https://github.com/Adamant-im/adamant-im/pull/841) — [@kalpovskii](https://github.com/kalpovskii), [@adamant-al](https://github.com/adamant-al)
- Add disabled input field in the Welcome to ADAMANT chat, impoved paddings [#842](https://github.com/Adamant-im/adamant-im/pull/842) — [@kalpovskii](https://github.com/kalpovskii)
- Resolve source code issues with ESLint 9 [#852](https://github.com/Adamant-im/adamant-im/pull/852) — [@graycraft](https://github.com/graycraft)
- Fixed status rejected BTC dust transactions in chat when node validation fails [#857](https://github.com/Adamant-im/adamant-im/pull/857) — [@Linhead](https://github.com/Linhead)
9 changes: 8 additions & 1 deletion src/hooks/queries/transaction/useBtcTransactionQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@ export function useBtcTransactionQuery(
return pendingTransaction
}
},
retry: retryFactory(Cryptos.BTC, unref(transactionId)),
retry: (failureCount: number): boolean => {
// Don't retry dust amount BTC transactions
const dustedIds = store.state.btc.dustedTransactionsIds || []
if (dustedIds.includes(unref(transactionId))) {
return false
}
return retryFactory(Cryptos.BTC, unref(transactionId))(failureCount)
},
retryDelay: retryDelayFactory(Cryptos.BTC, unref(transactionId)),
refetchInterval: ({ state }) => refetchIntervalFactory(Cryptos.BTC, state.status, state.data),
refetchOnWindowFocus: false,
Expand Down
9 changes: 8 additions & 1 deletion src/hooks/queries/transaction/useDashTransactionQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@ export function useDashTransactionQuery(
return pendingTransaction
}
},
retry: retryFactory(Cryptos.DASH, unref(transactionId)),
retry: (failureCount: number): boolean => {
// Don't retry dust amount DASH transactions
const dustedIds = store.state.dash.dustedTransactionsIds || []
if (dustedIds.includes(unref(transactionId))) {
return false
}
return retryFactory(Cryptos.DASH, unref(transactionId))(failureCount)
},
retryDelay: retryDelayFactory(Cryptos.DASH, unref(transactionId)),
refetchInterval: ({ state }) => refetchIntervalFactory(Cryptos.DASH, state.status, state.data),
refetchOnWindowFocus: false,
Expand Down
9 changes: 8 additions & 1 deletion src/hooks/queries/transaction/useDogeTransactionQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@ export function useDogeTransactionQuery(
return pendingTransaction
}
},
retry: retryFactory(Cryptos.DOGE, unref(transactionId)),
retry: (failureCount: number): boolean => {
// Don't retry dust amount DOGE transactions
const dustedIds = store.state.doge.dustedTransactionsIds || []
if (dustedIds.includes(unref(transactionId))) {
return false
}
return retryFactory(Cryptos.DOGE, unref(transactionId))(failureCount)
},
retryDelay: retryDelayFactory(Cryptos.DOGE, unref(transactionId)),
refetchInterval: ({ state }) => refetchIntervalFactory(Cryptos.DOGE, state.status, state.data),
refetchOnWindowFocus: false,
Expand Down
7 changes: 7 additions & 0 deletions src/store/modules/btc-base/btc-base-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,14 @@ function createActions(options) {

return hash
} catch (error) {
if (
error.response?.data?.includes('dust') ||
error.response?.data?.error?.message?.includes('dust')
) {
context.commit('addDustedTransactionId', signedTransaction.txid)
}
context.commit('transactions', [{ hash: signedTransaction.txid, status: 'REJECTED' }])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be it's better not to use dustedTransactionsIds but something like

context.commit('transactions', [{ hash: signedTransaction.txid, status: 'REJECTED', isDust: true }])

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was my first idea. But I paid attention that transactions from store show only on wallet page. On chat page list of transactions are fetching by API call. That's why I need to check each transaction from API response if it was rejected by dust amount.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, thanks.
@S-FrontendDev Please check if it's the optimal solution.

Copy link
Member

@adamantmm adamantmm Sep 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On chat page list of transactions are fetching by API call

Do we still store transaction info locally?
May be we can mark this tx as isDust and amend this checking function accordingly.

@Linhead

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@adamantmm
We discussed with @S-FrontendDev and decided to do this fix as part of task that already implements a proper transaction status synchronization system without workarounds - https://trello.com/c/S29m39O1/759-coin-tx-status-chore-fix-verify-update-coin-tx-sending-algorithm

I've created a new PR for this fix - #866


PendingTxStore.remove(context.state.crypto)
throw error
}
Expand Down
4 changes: 4 additions & 0 deletions src/store/modules/btc-base/btc-base-mutations.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ export default (initialState) => ({
})
},

addDustedTransactionId(state, dustedTransactionId) {
state.dustedTransactionsIds.push(dustedTransactionId)
},

areOlderLoading(state, areLoading) {
state.areOlderLoading = areLoading
},
Expand Down
3 changes: 2 additions & 1 deletion src/store/modules/btc-base/btc-base-state.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ export default () => ({
areTransactionsLoading: false,
areRecentLoading: false,
areOlderLoading: false,
bottomReached: false
bottomReached: false,
dustedTransactionsIds: []
})