@exodus/solana-api 3.26.6 → 3.27.1

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,24 @@
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.27.1](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.27.0...@exodus/solana-api@3.27.1) (2026-01-09)
7
+
8
+ **Note:** Version bump only for package @exodus/solana-api
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.27.0](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.26.6...@exodus/solana-api@3.27.0) (2026-01-08)
15
+
16
+
17
+ ### Features
18
+
19
+
20
+ * feat: filter SOL poisoning txs (#7212)
21
+
22
+
23
+
6
24
  ## [3.26.6](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.26.5...@exodus/solana-api@3.26.6) (2026-01-08)
7
25
 
8
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/solana-api",
3
- "version": "3.26.6",
3
+ "version": "3.27.1",
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",
@@ -33,7 +33,7 @@
33
33
  "@exodus/fetch": "^1.7.3",
34
34
  "@exodus/models": "^12.0.1",
35
35
  "@exodus/simple-retry": "^0.0.6",
36
- "@exodus/solana-lib": "^3.17.0",
36
+ "@exodus/solana-lib": "^3.19.2",
37
37
  "@exodus/solana-meta": "^2.0.2",
38
38
  "@exodus/timer": "^1.1.1",
39
39
  "debug": "^4.1.1",
@@ -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": "cc6f873a99d2a770ee83f0f7563f803e068d04de",
52
+ "gitHead": "62748839770af085bedc9708a2d2ae5efa4ad84b",
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
@@ -232,6 +232,14 @@ export class Api {
232
232
  })
233
233
 
234
234
  if (!parsedTx.from && parsedTx.tokenTxs?.length === 0 && !includeUnparsed) return // cannot parse it
235
+ if (
236
+ !parsedTx.ownerIsFeePayer &&
237
+ parsedTx.error &&
238
+ parsedTx.from === address &&
239
+ !parsedTx.signers.includes(address)
240
+ ) {
241
+ return
242
+ } // skip address poisoning txs attempts.
235
243
 
236
244
  // split dexTx in separate txs
237
245
  if (parsedTx.dexTxs) {
package/src/tx-parser.js CHANGED
@@ -25,6 +25,7 @@ export const parseTransaction = (
25
25
  let { instructions, accountKeys = [] } = txDetails.transaction.message
26
26
  const feePayerPubkey = accountKeys[0].pubkey
27
27
  const ownerIsFeePayer = feePayerPubkey === ownerAddress
28
+ const signers = accountKeys.filter((key) => key.signer).map((key) => key.pubkey)
28
29
  const txId = txDetails.transaction.signatures[0]
29
30
 
30
31
  const getUnparsedTx = () => {
@@ -87,6 +88,8 @@ export const parseTransaction = (
87
88
  id: txId,
88
89
  slot: txDetails.slot,
89
90
  error: !(txDetails.meta.err === null),
91
+ ownerIsFeePayer,
92
+ signers,
90
93
  owner,
91
94
  from,
92
95
  to,
@@ -219,6 +222,8 @@ export const parseTransaction = (
219
222
  program: ix.program,
220
223
  type: ix.parsed.type,
221
224
  slot: txDetails.slot,
225
+ ownerIsFeePayer,
226
+ signers,
222
227
  owner: isSending ? ownerAddress : null,
223
228
  from: isSending ? ownerAddress : source,
224
229
  to: isSending ? destination : ownerAddress,
@@ -361,6 +366,8 @@ export const parseTransaction = (
361
366
  id: txId,
362
367
  slot: txDetails.slot,
363
368
  error: !(txDetails.meta.err === null),
369
+ ownerIsFeePayer,
370
+ signers,
364
371
  ...tx,
365
372
  }))
366
373
  } else if (preTokenBalances && postTokenBalances) {
@@ -428,6 +435,8 @@ export const parseTransaction = (
428
435
  id: txId,
429
436
  slot: txDetails.slot,
430
437
  error: !(txDetails.meta.err === null),
438
+ ownerIsFeePayer,
439
+ signers,
431
440
  ...tx,
432
441
  }
433
442
  }
package/src/ws-api.js CHANGED
@@ -150,6 +150,14 @@ export class WsApi {
150
150
  const timestamp = Date.now() // the notification event has no blockTime
151
151
 
152
152
  if (!parsedTx.from && parsedTx.tokenTxs?.length === 0) return { logItemsByAsset: {} } // cannot parse it
153
+ if (
154
+ !parsedTx.ownerIsFeePayer &&
155
+ parsedTx.error &&
156
+ parsedTx.from === address &&
157
+ !parsedTx.signers.includes(address)
158
+ ) {
159
+ return { logItemsByAsset: {} } // skip address poisoning txs attempts.
160
+ }
153
161
 
154
162
  const transactions = [] // because one single tx can have multiple instructions inside
155
163