@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 +18 -0
- package/package.json +3 -3
- package/src/api.js +8 -0
- package/src/tx-parser.js +9 -0
- package/src/ws-api.js +8 -0
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.
|
|
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.
|
|
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": "
|
|
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
|
|