@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.
|
|
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": "
|
|
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
|
-
|
|
24
|
-
|
|
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
|
-
}
|