@exodus/solana-api 3.30.6 → 3.30.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.30.7](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.30.6...@exodus/solana-api@3.30.7) (2026-04-01)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+
12
+ * fix: addressIsActive users tx history (#7708)
13
+
14
+
15
+
6
16
  ## [3.30.6](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.30.5...@exodus/solana-api@3.30.6) (2026-03-30)
7
17
 
8
18
  **Note:** Version bump only for package @exodus/solana-api
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/solana-api",
3
- "version": "3.30.6",
3
+ "version": "3.30.7",
4
4
  "description": "Transaction monitors, fee monitors, RPC with the blockchain node, and other networking code for Solana",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -49,7 +49,7 @@
49
49
  "@exodus/assets-testing": "^1.0.0",
50
50
  "@exodus/solana-web3.js": "^1.63.1-exodus.9-rc3"
51
51
  },
52
- "gitHead": "0d8639ef50e192df1f302f0ac7ff378d919cc536",
52
+ "gitHead": "3a8c58c8457a1d096ee5d3ecb2eea9e82b69ecb7",
53
53
  "bugs": {
54
54
  "url": "https://github.com/ExodusMovement/assets/issues?q=is%3Aissue+is%3Aopen+label%3Asolana-api"
55
55
  },
package/src/api.js CHANGED
@@ -497,14 +497,13 @@ export class Api {
497
497
  }
498
498
 
499
499
  /**
500
- * Returns true if the account exists (has not been reclaimed).
501
- * Accounts may be reclaimed by the rent collector after their balance dropped below the
502
- * rent-exempt reserve. getAccountInfo only returns the current account state; if the
503
- * runtime deleted the account, RPC returns null.
500
+ * Returns true if the address has any transaction history.
501
+ * Solana system accounts can be reclaimed after staying below rent exemption, so
502
+ * current account info is not a reliable signal for whether an address was ever used.
504
503
  */
505
504
  async addressIsActive(address) {
506
- const value = await this.getAccountInfo(address)
507
- return !!value?.data
505
+ const signatures = await this.getSignaturesForAddress(address, { limit: 1 })
506
+ return signatures.length > 0
508
507
  }
509
508
 
510
509
  async isSpl(address) {
package/src/rpc-api.js CHANGED
@@ -190,6 +190,32 @@ export class RpcApi {
190
190
  }
191
191
  }
192
192
 
193
+ async getSignaturesForAddress(address, { until, before, limit } = {}) {
194
+ until = until || undefined
195
+
196
+ const fetchRetry = retry(
197
+ async () => {
198
+ try {
199
+ return await this.rpcCall('getSignaturesForAddress', [address, { until, before, limit }])
200
+ } catch (error) {
201
+ if (
202
+ error.message &&
203
+ !errorMessagesToRetry.some((errorMessage) => error.message.includes(errorMessage))
204
+ ) {
205
+ error.finalError = true
206
+ }
207
+
208
+ console.warn(`Error getting signatures. Retrying...`, error)
209
+
210
+ throw error
211
+ }
212
+ },
213
+ { delayTimesMs: ['8s', '10s', '15s'] }
214
+ )
215
+
216
+ return fetchRetry()
217
+ }
218
+
193
219
  async getWalletTokensList({ tokenAccounts }) {
194
220
  const tokensMint = []
195
221
  for (const account of tokenAccounts) {
@@ -244,14 +270,13 @@ export class RpcApi {
244
270
  }
245
271
 
246
272
  /**
247
- * Returns true if the account exists (has not been reclaimed).
248
- * Accounts may be reclaimed by the rent collector after their balance dropped below the
249
- * rent-exempt reserve. getAccountInfo only returns the current account state; if the
250
- * runtime deleted the account, RPC returns null.
273
+ * Returns true if the address has any transaction history.
274
+ * Solana system accounts can be reclaimed after staying below rent exemption, so
275
+ * current account info is not a reliable signal for whether an address was ever used.
251
276
  */
252
277
  async addressIsActive(address) {
253
- const value = await this.getAccountInfo(address)
254
- return !!value?.data
278
+ const signatures = await this.getSignaturesForAddress(address, { limit: 1 })
279
+ return signatures.length > 0
255
280
  }
256
281
 
257
282
  async getTokenFeeBasisPoints(address) {