@exodus/ethereum-plugin 2.30.4 → 2.32.0

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,26 @@
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
+ ## [2.32.0](https://github.com/ExodusMovement/assets/compare/@exodus/ethereum-plugin@2.31.0...@exodus/ethereum-plugin@2.32.0) (2026-05-25)
7
+
8
+
9
+ ### Features
10
+
11
+
12
+ * feat(ethereum-api): warn on risky recipients for native ETH sends (#8110)
13
+
14
+
15
+
16
+ ## [2.31.0](https://github.com/ExodusMovement/assets/compare/@exodus/ethereum-plugin@2.30.4...@exodus/ethereum-plugin@2.31.0) (2026-05-19)
17
+
18
+
19
+ ### Features
20
+
21
+
22
+ * feat(ethereum): add no-history receive logs for portfolio transfers (#7967)
23
+
24
+
25
+
6
26
  ## [2.30.4](https://github.com/ExodusMovement/assets/compare/@exodus/ethereum-plugin@2.30.3...@exodus/ethereum-plugin@2.30.4) (2026-05-12)
7
27
 
8
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/ethereum-plugin",
3
- "version": "2.30.4",
3
+ "version": "2.32.0",
4
4
  "description": "Ethereum plugin for Exodus SDK powered wallets",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -24,7 +24,7 @@
24
24
  "@exodus/asset-lib": "^5.9.0",
25
25
  "@exodus/basic-utils": "^3.0.1",
26
26
  "@exodus/currency": "^6.0.1",
27
- "@exodus/ethereum-api": "^8.74.1",
27
+ "@exodus/ethereum-api": "^8.76.0",
28
28
  "@exodus/ethereum-lib": "^5.24.1",
29
29
  "@exodus/ethereum-meta": "^2.9.0",
30
30
  "@exodus/ethereumjs": "^1.0.0",
@@ -38,7 +38,7 @@
38
38
  "@exodus/assets": "^11.4.0",
39
39
  "@exodus/assets-testing": "^1.0.0",
40
40
  "@exodus/crypto": "^1.0.0-rc.13",
41
- "@exodus/evm-fork-testing": "^0.6.1",
41
+ "@exodus/evm-fork-testing": "^0.7.0",
42
42
  "@exodus/models": "^13.0.0",
43
43
  "@exodus/solidity-contract": "^1.3.0",
44
44
  "@exodus/web3-ethereum-utils": "^4.7.5",
@@ -53,5 +53,5 @@
53
53
  "type": "git",
54
54
  "url": "git+https://github.com/ExodusMovement/assets.git"
55
55
  },
56
- "gitHead": "7f184588091acba3b358e4af13783ee1e2bab4ba"
56
+ "gitHead": "73ff97a75479c3b25fccc11f31879ec634818d63"
57
57
  }
package/src/index.js CHANGED
@@ -7,6 +7,9 @@ import { stakingConfiguration, stakingDependencies } from './staking.js'
7
7
 
8
8
  export { POLYGON_STAKING_PREFLIGHT_ERROR_REASONS } from './staking/polygon/service.js'
9
9
 
10
+ // Exodus-hosted proxy to Hypernative's transaction risk assessment endpoint.
11
+ const RISK_ASSESSMENT_PROXY_URL = 'https://simulation.a.exodus.io/simulation/transaction/assessment'
12
+
10
13
  const createAsset = createAssetFactory({
11
14
  assetsList,
12
15
  feeDataConfig: {
@@ -57,6 +60,9 @@ const createAsset = createAssetFactory({
57
60
  monitorInterval: '1m',
58
61
  confirmationsNumber: 30,
59
62
  privacyRpcUrl: 'https://servo.a.exodus.io',
63
+ riskAssessment: {
64
+ apiUrl: RISK_ASSESSMENT_PROXY_URL,
65
+ },
60
66
  eip7702Supported: [
61
67
  { address: '0xD2e28229F6f2c235e57De2EbC727025A1D0530FB', name: 'Trust Wallet' },
62
68
  { address: '0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B', name: 'MetaMask' },
@@ -6,7 +6,6 @@ import {
6
6
  EthLikeError,
7
7
  EVM_ERROR_TYPES,
8
8
  getAggregateTransactionPricing,
9
- getOptimisticTxLogEffects,
10
9
  scaleGasLimitEstimate,
11
10
  stakingProviderClientFactory,
12
11
  } from '@exodus/ethereum-api'
@@ -300,59 +299,22 @@ export function stakingServiceFactory({ assetClientInterface, server: _server, s
300
299
  revertOnSimulationError,
301
300
  })
302
301
 
303
- // Sign transactions
304
- const [approveSigned, delegateSigned] = await Promise.all([
305
- assetClientInterface.signTransaction({
306
- assetName: feeAsset.name,
307
- unsignedTx: unsignedTxApprove.unsignedTx,
308
- walletAccount,
309
- }),
310
- assetClientInterface.signTransaction({
311
- assetName: feeAsset.name,
312
- unsignedTx: unsignedTxDelegate.unsignedTx,
313
- walletAccount,
314
- }),
315
- ])
316
-
317
- // Pre-compute txIDs
318
- const approveTxId = `0x${approveSigned.txId.toString('hex')}`
319
- const delegateTxId = `0x${delegateSigned.txId.toString('hex')}`
320
-
321
- const bundleResponse = await feeAsset.broadcastPrivateBundle({
322
- txs: [approveSigned, delegateSigned].map(({ rawTx }) => rawTx),
302
+ const { txIds } = await asset.baseAsset.sendPrivateBundle({
303
+ unsignedTxBundle: [
304
+ {
305
+ asset: feeAsset,
306
+ unsignedTx: unsignedTxApprove.unsignedTx,
307
+ walletAccount,
308
+ },
309
+ {
310
+ asset: feeAsset,
311
+ unsignedTx: unsignedTxDelegate.unsignedTx,
312
+ walletAccount,
313
+ },
314
+ ],
323
315
  })
324
- const bundleHash = bundleResponse?.bundleHash
325
-
326
- const { optimisticTxLogEffects: approveOptimisticTxLogEffects } =
327
- await getOptimisticTxLogEffects({
328
- asset: feeAsset,
329
- assetClientInterface,
330
- fromAddress: delegatorAddress.toString(),
331
- txId: approveTxId,
332
- unsignedTx: unsignedTxApprove.unsignedTx,
333
- walletAccount,
334
- bundleId: bundleHash ?? undefined,
335
- })
336
316
 
337
- const { optimisticTxLogEffects: delegateOptimisticTxLogEffects } =
338
- await getOptimisticTxLogEffects({
339
- asset: feeAsset,
340
- assetClientInterface,
341
- fromAddress: delegatorAddress.toString(),
342
- txId: delegateTxId,
343
- unsignedTx: unsignedTxDelegate.unsignedTx,
344
- walletAccount,
345
- bundleId: bundleHash ?? undefined,
346
- })
347
- // Combine optimistic effects from both transactions
348
- const tokenOptimisticEffects = [
349
- ...approveOptimisticTxLogEffects,
350
- ...delegateOptimisticTxLogEffects,
351
- ]
352
-
353
- for (const optimisticEffect of tokenOptimisticEffects) {
354
- await assetClientInterface.updateTxLogAndNotify(optimisticEffect)
355
- }
317
+ const delegateTxId = txIds[txIds.length - 1]
356
318
 
357
319
  await stakingProvider.notifyStaking({
358
320
  txId: delegateTxId,
@@ -589,7 +551,7 @@ export function stakingServiceFactory({ assetClientInterface, server: _server, s
589
551
  feeData,
590
552
  } = {}) {
591
553
  const { feeAsset } = await getStakeAssets()
592
- const sendTxArgs = {
554
+ const { unsignedTx } = await feeAsset.api.createTx({
593
555
  asset: feeAsset,
594
556
  walletAccount,
595
557
  address: to,
@@ -600,9 +562,9 @@ export function stakingServiceFactory({ assetClientInterface, server: _server, s
600
562
  tipGasPrice,
601
563
  waitForConfirmation,
602
564
  feeData,
603
- }
565
+ })
604
566
 
605
- const { txId } = await feeAsset.api.sendTx(sendTxArgs)
567
+ const { txId } = await feeAsset.api.sendTx({ asset: feeAsset, walletAccount, unsignedTx })
606
568
 
607
569
  return txId
608
570
  }