@exodus/solana-api 3.26.1 → 3.26.3

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.26.3](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.26.2...@exodus/solana-api@3.26.3) (2025-12-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+
12
+ * fix: solana reduce fee payer sponsorship requests (#7147)
13
+
14
+
15
+
16
+ ## [3.26.2](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.26.1...@exodus/solana-api@3.26.2) (2025-12-15)
17
+
18
+ **Note:** Version bump only for package @exodus/solana-api
19
+
20
+
21
+
22
+
23
+
6
24
  ## [3.26.1](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.26.0...@exodus/solana-api@3.26.1) (2025-12-12)
7
25
 
8
26
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/solana-api",
3
- "version": "3.26.1",
3
+ "version": "3.26.3",
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": "5a877f02b11baad5b4a22bf43c8a22f41694653c",
52
+ "gitHead": "ae424af3e4254f05509527496806913d56e39aca",
53
53
  "bugs": {
54
54
  "url": "https://github.com/ExodusMovement/assets/issues?q=is%3Aissue+is%3Aopen+label%3Asolana-api"
55
55
  },
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  createUnsignedTx,
3
- deserializeTransaction,
4
3
  findAssociatedTokenAddress,
5
4
  parseTxBuffer,
6
5
  prepareForSigning,
@@ -24,6 +23,7 @@ export const createTxFactory = ({ assetClientInterface, api, feePayerClient }) =
24
23
  feeData: providedFeeData,
25
24
  fromAddress: providedFromAddress,
26
25
  toAddress,
26
+ address,
27
27
  amount,
28
28
  reference,
29
29
  memo,
@@ -56,6 +56,8 @@ export const createTxFactory = ({ assetClientInterface, api, feePayerClient }) =
56
56
  assert(asset, 'asset is required')
57
57
  assert(walletAccount, 'walletAccount is required')
58
58
 
59
+ toAddress = toAddress ?? address
60
+
59
61
  let tokenParams = Object.create(null)
60
62
 
61
63
  const baseAsset = asset.baseAsset
@@ -178,20 +180,18 @@ export const createTxFactory = ({ assetClientInterface, api, feePayerClient }) =
178
180
  ...magicEdenParams,
179
181
  })
180
182
 
183
+ unsignedTx.txMeta.stakingParams = stakingParams
184
+
181
185
  const resolveUnitConsumed = async () => {
182
186
  // this avoids unnecessary simulations. Also the simulation fails with InsufficientFundsForRent when sending all.
183
187
  if (asset.name === asset.baseAsset.name && amount && !nft && !method) {
184
188
  return 150 + CU_FOR_COMPUTE_BUDGET_INSTRUCTIONS
185
189
  }
186
190
 
187
- const transactionForFeeEstimation = await maybeAddFeePayerWithAuth({
188
- unsignedTx,
189
- feePayerClient,
190
- enableFeePayer: feeData.enableFeePayer,
191
- })
192
- const message = transactionForFeeEstimation.txMeta.usedFeePayer
193
- ? deserializeTransaction(transactionForFeeEstimation.txData.transactionBuffer).message
194
- : prepareForSigning(transactionForFeeEstimation).message
191
+ // Simulate with unsigned transaction. The fee payer service is deterministic -
192
+ // same input always produces same output. Any variance from SetAuthority
193
+ // instructions added by fee payer is covered by computeUnitsMultiplier.
194
+ const { message } = prepareForSigning(unsignedTx)
195
195
 
196
196
  const { unitsConsumed, err } = await api.simulateUnsignedTransaction({
197
197
  message,
@@ -215,8 +215,6 @@ export const createTxFactory = ({ assetClientInterface, api, feePayerClient }) =
215
215
  unsignedTx.txData.computeUnits = computeUnits
216
216
  }
217
217
 
218
- unsignedTx.txMeta.stakingParams = stakingParams
219
-
220
218
  // we add token account creation fee
221
219
  let tokenCreationFee = asset.feeAsset.currency.ZERO
222
220
  if (isToken && (!unsignedTx.txData.isAssociatedTokenAccountActive || isExchange)) {
package/src/tx-send.js CHANGED
@@ -6,26 +6,13 @@ export const createAndBroadcastTXFactory = ({ api, assetClientInterface }) => {
6
6
  assert(assetClientInterface, 'assetClientInterface is required')
7
7
  assert(api, 'api is required')
8
8
 
9
- return async ({ asset, walletAccount, unsignedTx: predefinedUnsignedTx, ...legacyParams }) => {
9
+ return async ({ asset, walletAccount, unsignedTx: providedUnsignedTx, ...legacyParams }) => {
10
10
  const assetName = asset.name
11
11
  const baseAsset = asset.baseAsset
12
12
 
13
- const resolveTxs = async () => {
14
- if (predefinedUnsignedTx) {
15
- return predefinedUnsignedTx
16
- }
17
-
18
- return baseAsset.api.createTx({
19
- asset,
20
- walletAccount,
21
- amount: legacyParams.amount,
22
- toAddress: legacyParams.address,
23
- ...legacyParams,
24
- ...legacyParams.options,
25
- })
26
- }
27
-
28
- const unsignedTx = await resolveTxs()
13
+ const { unsignedTx } = providedUnsignedTx
14
+ ? { unsignedTx: providedUnsignedTx }
15
+ : await baseAsset.api.createTx({ asset, walletAccount, ...legacyParams })
29
16
 
30
17
  const signedTx = await assetClientInterface.signTransaction({
31
18
  assetName: baseAsset.name,