@0xtorch/evm 0.0.134 → 0.0.136

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.
Files changed (67) hide show
  1. package/_cjs/chain/definitions/berachain.js +69 -0
  2. package/_cjs/chain/definitions/berachain.js.map +1 -0
  3. package/_cjs/chain/definitions/fantom.js +5 -6
  4. package/_cjs/chain/definitions/fantom.js.map +1 -1
  5. package/_cjs/chain/definitions/unichain.js +80 -0
  6. package/_cjs/chain/definitions/unichain.js.map +1 -0
  7. package/_cjs/chain/index.js +14 -4
  8. package/_cjs/chain/index.js.map +1 -1
  9. package/_cjs/index.js +13 -4
  10. package/_cjs/index.js.map +1 -1
  11. package/_cjs/logic/analyzeTransaction/decodeTransaction/decodeInput.js +6 -1
  12. package/_cjs/logic/analyzeTransaction/decodeTransaction/decodeInput.js.map +1 -1
  13. package/_cjs/logic/getTransactionDetail/decodeTokenTransferLogs.js +110 -0
  14. package/_cjs/logic/getTransactionDetail/decodeTokenTransferLogs.js.map +1 -1
  15. package/_esm/chain/definitions/berachain.js +70 -0
  16. package/_esm/chain/definitions/berachain.js.map +1 -0
  17. package/_esm/chain/definitions/fantom.js +6 -7
  18. package/_esm/chain/definitions/fantom.js.map +1 -1
  19. package/_esm/chain/definitions/unichain.js +75 -0
  20. package/_esm/chain/definitions/unichain.js.map +1 -0
  21. package/_esm/chain/index.js +2 -0
  22. package/_esm/chain/index.js.map +1 -1
  23. package/_esm/index.js +1 -1
  24. package/_esm/index.js.map +1 -1
  25. package/_esm/logic/analyzeTransaction/decodeTransaction/decodeInput.js +8 -2
  26. package/_esm/logic/analyzeTransaction/decodeTransaction/decodeInput.js.map +1 -1
  27. package/_esm/logic/getTransactionDetail/decodeTokenTransferLogs.js +114 -0
  28. package/_esm/logic/getTransactionDetail/decodeTokenTransferLogs.js.map +1 -1
  29. package/_types/chain/definitions/berachain.d.ts +18 -0
  30. package/_types/chain/definitions/berachain.d.ts.map +1 -0
  31. package/_types/chain/definitions/fantom.d.ts +1 -1
  32. package/_types/chain/definitions/fantom.d.ts.map +1 -1
  33. package/_types/chain/definitions/unichain.d.ts +18 -0
  34. package/_types/chain/definitions/unichain.d.ts.map +1 -0
  35. package/_types/chain/index.d.ts +2 -0
  36. package/_types/chain/index.d.ts.map +1 -1
  37. package/_types/chain/viemChains/chainVerse.d.ts +1 -0
  38. package/_types/chain/viemChains/chainVerse.d.ts.map +1 -1
  39. package/_types/chain/viemChains/defiVerse.d.ts +1 -0
  40. package/_types/chain/viemChains/defiVerse.d.ts.map +1 -1
  41. package/_types/chain/viemChains/geekVerse.d.ts +1 -0
  42. package/_types/chain/viemChains/geekVerse.d.ts.map +1 -1
  43. package/_types/chain/viemChains/gesoVerse.d.ts +1 -0
  44. package/_types/chain/viemChains/gesoVerse.d.ts.map +1 -1
  45. package/_types/chain/viemChains/homeVerse.d.ts +1 -0
  46. package/_types/chain/viemChains/homeVerse.d.ts.map +1 -1
  47. package/_types/chain/viemChains/mchVerse.d.ts +1 -0
  48. package/_types/chain/viemChains/mchVerse.d.ts.map +1 -1
  49. package/_types/chain/viemChains/saakuru.d.ts +1 -0
  50. package/_types/chain/viemChains/saakuru.d.ts.map +1 -1
  51. package/_types/chain/viemChains/soneium.d.ts +1 -0
  52. package/_types/chain/viemChains/soneium.d.ts.map +1 -1
  53. package/_types/chain/viemChains/sonic.d.ts +1 -0
  54. package/_types/chain/viemChains/sonic.d.ts.map +1 -1
  55. package/_types/chain/viemChains/tcgVerse.d.ts +1 -0
  56. package/_types/chain/viemChains/tcgVerse.d.ts.map +1 -1
  57. package/_types/index.d.ts +1 -1
  58. package/_types/index.d.ts.map +1 -1
  59. package/_types/logic/analyzeTransaction/decodeTransaction/decodeInput.d.ts.map +1 -1
  60. package/chain/definitions/berachain.ts +93 -0
  61. package/chain/definitions/fantom.ts +5 -7
  62. package/chain/definitions/unichain.ts +98 -0
  63. package/chain/index.ts +12 -0
  64. package/index.ts +8 -0
  65. package/logic/analyzeTransaction/decodeTransaction/decodeInput.ts +8 -1
  66. package/logic/getTransactionDetail/decodeTokenTransferLogs.ts +152 -0
  67. package/package.json +3 -3
@@ -50,6 +50,14 @@ export const decodeTokenTransferLogs = (
50
50
  }
51
51
  }
52
52
 
53
+ const erc20NftAddress = new Set<LowerHex>([
54
+ '0xf5b0a3efb8e8e4c201e2a935f110eaaf3ffecb8d',
55
+ ])
56
+
57
+ const noIndexErc721Address = new Set<LowerHex>([
58
+ '0xda9f43015749056182352e9dc6d3ee0b6293d80a',
59
+ ])
60
+
53
61
  const decodeTokenTransferLog = (
54
62
  log: Log,
55
63
  wrappedTokenAddresses: Set<LowerHex>,
@@ -59,6 +67,16 @@ const decodeTokenTransferLog = (
59
67
  erc721Transfer?: Erc721Transfer
60
68
  erc1155Transfers?: Erc1155Transfer[]
61
69
  } => {
70
+ // ERC20 形式の NFT token の場合、別で処理する
71
+ if (erc20NftAddress.has(log.address)) {
72
+ return decodeErc20NftTransferLog(log)
73
+ }
74
+
75
+ // NoIndex ERC721 の場合、別で処理する
76
+ if (noIndexErc721Address.has(log.address)) {
77
+ return decodeNoIndexLog(log)
78
+ }
79
+
62
80
  // decode by ERC20
63
81
  const decodedByErc20 = decodeErc20TransferLog(log)
64
82
  if (decodedByErc20 !== undefined) {
@@ -106,6 +124,40 @@ const decodeTokenTransferLog = (
106
124
  return { log }
107
125
  }
108
126
 
127
+ const decodeErc20NftTransferLog = (
128
+ log: Log,
129
+ ): {
130
+ log: Log
131
+ erc20Transfer?: Erc20Transfer
132
+ erc721Transfer?: Erc721Transfer
133
+ erc1155Transfers?: Erc1155Transfer[]
134
+ } => {
135
+ // decode by ERC20 as ERC721
136
+ const decodedByErc20AsErc721 = decodeErc20TransferLogAsErc721Transfer(log)
137
+ if (decodedByErc20AsErc721 !== undefined) {
138
+ return decodedByErc20AsErc721
139
+ }
140
+
141
+ return { log }
142
+ }
143
+
144
+ const decodeNoIndexLog = (
145
+ log: Log,
146
+ ): {
147
+ log: Log
148
+ erc20Transfer?: Erc20Transfer
149
+ erc721Transfer?: Erc721Transfer
150
+ erc1155Transfers?: Erc1155Transfer[]
151
+ } => {
152
+ // decode by NoIndex ERC721
153
+ const decodedByNoIndexTransfer = decodeNoIndexErc721TransferLog(log)
154
+ if (decodedByNoIndexTransfer !== undefined) {
155
+ return decodedByNoIndexTransfer
156
+ }
157
+
158
+ return { log }
159
+ }
160
+
109
161
  const erc20TransferSignature =
110
162
  '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
111
163
  const erc20TransferIndexedCount = 2
@@ -161,6 +213,57 @@ const decodeErc20TransferLog = (
161
213
  }
162
214
  }
163
215
 
216
+ const decodeErc20TransferLogAsErc721Transfer = (
217
+ log: Log,
218
+ ): { log: Log; erc721Transfer: Erc721Transfer } | undefined => {
219
+ if (
220
+ log.topics.length !== erc20TransferIndexedCount + 1 ||
221
+ log.topics[0] !== erc20TransferSignature ||
222
+ log.topics[1]?.slice(0, 26) !== '0x000000000000000000000000' ||
223
+ log.topics[2]?.slice(0, 26) !== '0x000000000000000000000000' ||
224
+ log.data.length !== 66
225
+ ) {
226
+ return undefined
227
+ }
228
+
229
+ const from = toLowerHex(`0x${log.topics[1].slice(26)}`)
230
+ const to = toLowerHex(`0x${log.topics[2].slice(26)}`)
231
+ const tokenId = BigInt(log.data)
232
+
233
+ log.eventName = 'Transfer'
234
+ log.args = [
235
+ {
236
+ indexed: true,
237
+ name: 'from',
238
+ type: 'address',
239
+ value: from,
240
+ },
241
+ {
242
+ indexed: true,
243
+ name: 'to',
244
+ type: 'address',
245
+ value: to,
246
+ },
247
+ {
248
+ indexed: true,
249
+ name: 'tokenId',
250
+ type: 'uint256',
251
+ value: tokenId,
252
+ },
253
+ ]
254
+
255
+ return {
256
+ log,
257
+ erc721Transfer: {
258
+ address: log.address,
259
+ logIndex: log.logIndex,
260
+ from,
261
+ to,
262
+ tokenId,
263
+ },
264
+ }
265
+ }
266
+
164
267
  const wrappedTokenDepositSignature =
165
268
  '0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c'
166
269
  const wrappedTokenDepositIndexedCount = 1
@@ -392,6 +495,55 @@ const decodeErc721TransferLog = (
392
495
  }
393
496
  }
394
497
 
498
+ const decodeNoIndexErc721TransferLog = (
499
+ log: Log,
500
+ ): { log: Log; erc721Transfer: Erc721Transfer } | undefined => {
501
+ if (
502
+ log.topics.length !== 1 ||
503
+ log.topics[0] !== erc721TransferSignature ||
504
+ log.data.length !== 192
505
+ ) {
506
+ return undefined
507
+ }
508
+
509
+ const from = toLowerHex(`0x${log.data.slice(26, 66)}`)
510
+ const to = toLowerHex(`0x${log.data.slice(90, 130)}`)
511
+ const tokenId = BigInt(log.data.slice(130))
512
+
513
+ log.eventName = 'Transfer'
514
+ log.args = [
515
+ {
516
+ indexed: true,
517
+ name: 'from',
518
+ type: 'address',
519
+ value: from,
520
+ },
521
+ {
522
+ indexed: true,
523
+ name: 'to',
524
+ type: 'address',
525
+ value: to,
526
+ },
527
+ {
528
+ indexed: true,
529
+ name: 'tokenId',
530
+ type: 'uint256',
531
+ value: tokenId,
532
+ },
533
+ ]
534
+
535
+ return {
536
+ log,
537
+ erc721Transfer: {
538
+ address: log.address,
539
+ logIndex: log.logIndex,
540
+ from,
541
+ to,
542
+ tokenId,
543
+ },
544
+ }
545
+ }
546
+
395
547
  const erc1155TransferSingleSignature =
396
548
  '0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62'
397
549
  const erc1155TransferSingleIndexedCount = 3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xtorch/evm",
3
- "version": "0.0.134",
3
+ "version": "0.0.136",
4
4
  "description": "Cryptorch EVM extension",
5
5
  "keywords": [
6
6
  "cryptorch",
@@ -38,9 +38,9 @@
38
38
  ],
39
39
  "dependencies": {
40
40
  "@0xtorch/big-decimal": "^0.0.14",
41
- "@0xtorch/core": "^0.0.64",
41
+ "@0xtorch/core": "^0.0.65",
42
42
  "abitype": "^1.0.8",
43
- "viem": "^2.29.2",
43
+ "viem": "^2.31.4",
44
44
  "zod": "^3.24.4"
45
45
  }
46
46
  }