@exodus/ethereum-api 8.78.0 → 8.78.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,22 @@
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
+ ## [8.78.1](https://github.com/ExodusMovement/assets/compare/@exodus/ethereum-api@8.77.1...@exodus/ethereum-api@8.78.1) (2026-08-13)
7
+
8
+
9
+ ### Features
10
+
11
+ * source eip7702 delegation whitelist from remote config ([#8356](https://github.com/ExodusMovement/assets/issues/8356)) ([1a0966b](https://github.com/ExodusMovement/assets/commit/1a0966b08befb6e9310993f323c21d003dea2754))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * **ethereum-api:** detect legacy delegate transactions ([#8357](https://github.com/ExodusMovement/assets/issues/8357)) ([070e529](https://github.com/ExodusMovement/assets/commit/070e5295f21f12695e97e721ff8c0601c553e447))
17
+ * **lint:** fix oxlint warnings and convert rules to error ([#8489](https://github.com/ExodusMovement/assets/issues/8489)) ([19d35be](https://github.com/ExodusMovement/assets/commit/19d35be718391303d331978926884f2f376b356f))
18
+ * **simulation:** route recipient changes to dedicated field, guard asset-less entries ([#8370](https://github.com/ExodusMovement/assets/issues/8370)) ([c0a082b](https://github.com/ExodusMovement/assets/commit/c0a082b6c80710408337ff9285a19fb657c656be))
19
+
20
+
21
+
6
22
  ## [8.78.0](https://github.com/ExodusMovement/assets/compare/@exodus/ethereum-api@8.77.1...@exodus/ethereum-api@8.78.0) (2026-08-04)
7
23
 
8
24
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/ethereum-api",
3
- "version": "8.78.0",
3
+ "version": "8.78.1",
4
4
  "description": "Transaction monitors, fee monitors, RPC with the blockchain node, and other networking code for Ethereum and EVM-based blockchains",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -17,9 +17,7 @@
17
17
  "provenance": false
18
18
  },
19
19
  "scripts": {
20
- "test": "run -T exodus-test --jest",
21
- "lint": "run -T eslintc .",
22
- "lint:fix": "yarn lint --fix"
20
+ "test": "run -T exodus-test --jest"
23
21
  },
24
22
  "dependencies": {
25
23
  "@exodus/asset": "^2.0.4",
@@ -69,5 +67,5 @@
69
67
  "type": "git",
70
68
  "url": "git+https://github.com/ExodusMovement/assets.git"
71
69
  },
72
- "gitHead": "e878130c84c596ee86050984806b0da491e14910"
70
+ "gitHead": "5c444367f50e09f2f5f5c1c65829c2b07c473549"
73
71
  }
@@ -20,8 +20,8 @@ const isCanonicalAbsoluteTx = (tx, fieldName) => {
20
20
 
21
21
  return Boolean(
22
22
  tx?.data?.[fieldName] &&
23
- typeof tx.data.blockNumber === 'number' &&
24
- typeof tx.data.transactionIndex === 'number'
23
+ typeof tx.data.blockNumber === 'number' &&
24
+ typeof tx.data.transactionIndex === 'number'
25
25
  )
26
26
  }
27
27
 
@@ -14,6 +14,24 @@ const isFiniteInteger = (n) => Number.isFinite(n) && Number.isInteger(n)
14
14
 
15
15
  // This function takes a server transaction object fetched from clarity,
16
16
  // and transforms it into Tx models to update the exodus state.
17
+
18
+ const tryFindExternalRecipient = (transfers, ourWalletAddress) =>
19
+ transfers.find(({ to }) => to !== ourWalletAddress)?.to || ourWalletAddress
20
+
21
+ // If the timestamp is in the future, use the current time.
22
+ const parseServerTxDate = (timestamp) => new Date(Math.min(Date.now(), parseInt(timestamp, 16)))
23
+
24
+ function isSelfSendTx({
25
+ coinAmount,
26
+ ourWalletWasSender,
27
+ sendingTransferPresent,
28
+ receivingTransferPresent,
29
+ }) {
30
+ return (
31
+ coinAmount.isZero && sendingTransferPresent && receivingTransferPresent && ourWalletWasSender
32
+ )
33
+ }
34
+
17
35
  export default function getLogItemsFromServerTx({
18
36
  serverTx,
19
37
  asset,
@@ -200,20 +218,3 @@ export default function getLogItemsFromServerTx({
200
218
 
201
219
  return Object.fromEntries(logItemsForServerTxEntries)
202
220
  }
203
-
204
- const tryFindExternalRecipient = (transfers, ourWalletAddress) =>
205
- transfers.find(({ to }) => to !== ourWalletAddress)?.to || ourWalletAddress
206
-
207
- // If the timestamp is in the future, use the current time.
208
- const parseServerTxDate = (timestamp) => new Date(Math.min(Date.now(), parseInt(timestamp, 16)))
209
-
210
- function isSelfSendTx({
211
- coinAmount,
212
- ourWalletWasSender,
213
- sendingTransferPresent,
214
- receivingTransferPresent,
215
- }) {
216
- return (
217
- coinAmount.isZero && sendingTransferPresent && receivingTransferPresent && ourWalletWasSender
218
- )
219
- }
@@ -167,7 +167,7 @@ export class EthereumMonitor extends BaseMonitor {
167
167
  server: this.server,
168
168
  ourWalletAddress: derivedData.ourWalletAddress,
169
169
  minimumConfirmations: derivedData.minimumConfirmations,
170
- index: refresh ? 0 : derivedIndex ?? 0,
170
+ index: refresh ? 0 : (derivedIndex ?? 0),
171
171
  })
172
172
  const hasNewIndex = !derivedIndex || index > derivedIndex
173
173
 
@@ -11,6 +11,28 @@ import isConsideredSentTokenTx from './is-considered-sent-token-tx.js'
11
11
  // This function takes a server transaction object fetched from magnifier,
12
12
  // and transforms it into Tx models to update the exodus state.
13
13
 
14
+ const tryFindExternalRecipient = (transfers, ourWalletAddress) =>
15
+ transfers.find(({ to }) => to !== ourWalletAddress)?.to || ourWalletAddress
16
+
17
+ function isSelfSendTx({
18
+ coinAmount,
19
+ ourWalletWasSender,
20
+ sendingTransferPresent,
21
+ receivingTransferPresent,
22
+ }) {
23
+ return (
24
+ coinAmount.isZero && sendingTransferPresent && receivingTransferPresent && ourWalletWasSender
25
+ )
26
+ }
27
+
28
+ function isNftTransfer({ serverTx, ourWalletAddress }) {
29
+ if (!Array.isArray(serverTx.erc721) || serverTx.erc721.length === 0) return false
30
+
31
+ return serverTx.erc721.some(
32
+ (transfer) => transfer.to === ourWalletAddress || transfer.from === ourWalletAddress
33
+ )
34
+ }
35
+
14
36
  export default function getLogItemsFromServerTx({
15
37
  serverTx,
16
38
  asset,
@@ -179,25 +201,3 @@ export default function getLogItemsFromServerTx({
179
201
 
180
202
  return Object.fromEntries(logItemsForServerTxEntries)
181
203
  }
182
-
183
- const tryFindExternalRecipient = (transfers, ourWalletAddress) =>
184
- transfers.find(({ to }) => to !== ourWalletAddress)?.to || ourWalletAddress
185
-
186
- function isSelfSendTx({
187
- coinAmount,
188
- ourWalletWasSender,
189
- sendingTransferPresent,
190
- receivingTransferPresent,
191
- }) {
192
- return (
193
- coinAmount.isZero && sendingTransferPresent && receivingTransferPresent && ourWalletWasSender
194
- )
195
- }
196
-
197
- function isNftTransfer({ serverTx, ourWalletAddress }) {
198
- if (!Array.isArray(serverTx.erc721) || serverTx.erc721.length === 0) return false
199
-
200
- return serverTx.erc721.some(
201
- (transfer) => transfer.to === ourWalletAddress || transfer.from === ourWalletAddress
202
- )
203
- }