@0xtorch/evm 0.0.74 → 0.0.76

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 (246) hide show
  1. package/.DS_Store +0 -0
  2. package/_cjs/index.js +6 -2
  3. package/_cjs/index.js.map +1 -1
  4. package/_cjs/logic/analyzeTransaction/createActions/fail.js +2 -7
  5. package/_cjs/logic/analyzeTransaction/createActions/fail.js.map +1 -1
  6. package/_cjs/logic/analyzeTransaction/createActions/gas.js +4 -4
  7. package/_cjs/logic/analyzeTransaction/createActions/gas.js.map +1 -1
  8. package/_cjs/logic/analyzeTransaction/createActions/index.js +27 -4
  9. package/_cjs/logic/analyzeTransaction/createActions/index.js.map +1 -1
  10. package/_cjs/logic/analyzeTransaction/createActions/json/addressIn.js +37 -0
  11. package/_cjs/logic/analyzeTransaction/createActions/json/addressIn.js.map +1 -0
  12. package/_cjs/logic/analyzeTransaction/createActions/json/allValue.js +28 -0
  13. package/_cjs/logic/analyzeTransaction/createActions/json/allValue.js.map +1 -0
  14. package/_cjs/logic/analyzeTransaction/createActions/json/arrayIn.js +30 -0
  15. package/_cjs/logic/analyzeTransaction/createActions/json/arrayIn.js.map +1 -0
  16. package/_cjs/logic/analyzeTransaction/createActions/json/betweenBigInt.js +14 -0
  17. package/_cjs/logic/analyzeTransaction/createActions/json/betweenBigInt.js.map +1 -0
  18. package/_cjs/logic/analyzeTransaction/createActions/json/customTransferGenerator.js +132 -0
  19. package/_cjs/logic/analyzeTransaction/createActions/json/customTransferGenerator.js.map +1 -0
  20. package/_cjs/logic/analyzeTransaction/createActions/json/erc1155Pattern.js +76 -0
  21. package/_cjs/logic/analyzeTransaction/createActions/json/erc1155Pattern.js.map +1 -0
  22. package/_cjs/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.js +45 -0
  23. package/_cjs/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.js.map +1 -0
  24. package/_cjs/logic/analyzeTransaction/createActions/json/erc20Pattern.js +68 -0
  25. package/_cjs/logic/analyzeTransaction/createActions/json/erc20Pattern.js.map +1 -0
  26. package/_cjs/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.js +45 -0
  27. package/_cjs/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.js.map +1 -0
  28. package/_cjs/logic/analyzeTransaction/createActions/json/erc721Pattern.js +45 -0
  29. package/_cjs/logic/analyzeTransaction/createActions/json/erc721Pattern.js.map +1 -0
  30. package/_cjs/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.js +45 -0
  31. package/_cjs/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.js.map +1 -0
  32. package/_cjs/logic/analyzeTransaction/createActions/json/generateActions.js +179 -0
  33. package/_cjs/logic/analyzeTransaction/createActions/json/generateActions.js.map +1 -0
  34. package/_cjs/logic/analyzeTransaction/createActions/json/index.js +41 -0
  35. package/_cjs/logic/analyzeTransaction/createActions/json/index.js.map +1 -0
  36. package/_cjs/logic/analyzeTransaction/createActions/json/internalTransferGenerator.js +100 -0
  37. package/_cjs/logic/analyzeTransaction/createActions/json/internalTransferGenerator.js.map +1 -0
  38. package/_cjs/logic/analyzeTransaction/createActions/json/join.js +44 -0
  39. package/_cjs/logic/analyzeTransaction/createActions/json/join.js.map +1 -0
  40. package/_cjs/logic/analyzeTransaction/createActions/json/math.js +80 -0
  41. package/_cjs/logic/analyzeTransaction/createActions/json/math.js.map +1 -0
  42. package/_cjs/logic/analyzeTransaction/createActions/json/schema.js +385 -0
  43. package/_cjs/logic/analyzeTransaction/createActions/json/schema.js.map +1 -0
  44. package/_cjs/logic/analyzeTransaction/createActions/json/simpleValue.js +253 -0
  45. package/_cjs/logic/analyzeTransaction/createActions/json/simpleValue.js.map +1 -0
  46. package/_cjs/logic/analyzeTransaction/createActions/json/slice.js +14 -0
  47. package/_cjs/logic/analyzeTransaction/createActions/json/slice.js.map +1 -0
  48. package/_cjs/logic/analyzeTransaction/createActions/json/transferGenerator.js +179 -0
  49. package/_cjs/logic/analyzeTransaction/createActions/json/transferGenerator.js.map +1 -0
  50. package/_cjs/logic/analyzeTransaction/createActions/json/type.js +3 -0
  51. package/_cjs/logic/analyzeTransaction/createActions/json/type.js.map +1 -0
  52. package/_cjs/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.js +492 -0
  53. package/_cjs/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.js.map +1 -0
  54. package/_cjs/logic/analyzeTransaction/createActions/spam.js +2 -2
  55. package/_cjs/logic/analyzeTransaction/createActions/spam.js.map +1 -1
  56. package/_cjs/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.js +0 -1
  57. package/_cjs/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.js.map +1 -1
  58. package/_cjs/logic/analyzeTransaction/createActions/utils/createDirection.js +5 -5
  59. package/_cjs/logic/analyzeTransaction/createActions/utils/createDirection.js.map +1 -1
  60. package/_cjs/logic/analyzeTransaction/createActions/utils/createTokenTransfers.js +82 -65
  61. package/_cjs/logic/analyzeTransaction/createActions/utils/createTokenTransfers.js.map +1 -1
  62. package/_cjs/logic/analyzeTransaction/decodeTransaction/decodeLog.js +2 -2
  63. package/_cjs/logic/analyzeTransaction/decodeTransaction/decodeLog.js.map +1 -1
  64. package/_cjs/logic/analyzeTransaction/getDataFromDatasource.js +3 -5
  65. package/_cjs/logic/analyzeTransaction/getDataFromDatasource.js.map +1 -1
  66. package/_cjs/logic/analyzeTransaction/index.js +4 -4
  67. package/_cjs/logic/analyzeTransaction/index.js.map +1 -1
  68. package/_esm/index.js +1 -0
  69. package/_esm/index.js.map +1 -1
  70. package/_esm/logic/analyzeTransaction/createActions/fail.js +2 -7
  71. package/_esm/logic/analyzeTransaction/createActions/fail.js.map +1 -1
  72. package/_esm/logic/analyzeTransaction/createActions/gas.js +5 -5
  73. package/_esm/logic/analyzeTransaction/createActions/gas.js.map +1 -1
  74. package/_esm/logic/analyzeTransaction/createActions/index.js +28 -6
  75. package/_esm/logic/analyzeTransaction/createActions/index.js.map +1 -1
  76. package/_esm/logic/analyzeTransaction/createActions/json/addressIn.js +33 -0
  77. package/_esm/logic/analyzeTransaction/createActions/json/addressIn.js.map +1 -0
  78. package/_esm/logic/analyzeTransaction/createActions/json/allValue.js +29 -0
  79. package/_esm/logic/analyzeTransaction/createActions/json/allValue.js.map +1 -0
  80. package/_esm/logic/analyzeTransaction/createActions/json/arrayIn.js +28 -0
  81. package/_esm/logic/analyzeTransaction/createActions/json/arrayIn.js.map +1 -0
  82. package/_esm/logic/analyzeTransaction/createActions/json/betweenBigInt.js +10 -0
  83. package/_esm/logic/analyzeTransaction/createActions/json/betweenBigInt.js.map +1 -0
  84. package/_esm/logic/analyzeTransaction/createActions/json/customTransferGenerator.js +128 -0
  85. package/_esm/logic/analyzeTransaction/createActions/json/customTransferGenerator.js.map +1 -0
  86. package/_esm/logic/analyzeTransaction/createActions/json/erc1155Pattern.js +77 -0
  87. package/_esm/logic/analyzeTransaction/createActions/json/erc1155Pattern.js.map +1 -0
  88. package/_esm/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.js +41 -0
  89. package/_esm/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.js.map +1 -0
  90. package/_esm/logic/analyzeTransaction/createActions/json/erc20Pattern.js +68 -0
  91. package/_esm/logic/analyzeTransaction/createActions/json/erc20Pattern.js.map +1 -0
  92. package/_esm/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.js +41 -0
  93. package/_esm/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.js.map +1 -0
  94. package/_esm/logic/analyzeTransaction/createActions/json/erc721Pattern.js +45 -0
  95. package/_esm/logic/analyzeTransaction/createActions/json/erc721Pattern.js.map +1 -0
  96. package/_esm/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.js +41 -0
  97. package/_esm/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.js.map +1 -0
  98. package/_esm/logic/analyzeTransaction/createActions/json/generateActions.js +177 -0
  99. package/_esm/logic/analyzeTransaction/createActions/json/generateActions.js.map +1 -0
  100. package/_esm/logic/analyzeTransaction/createActions/json/index.js +43 -0
  101. package/_esm/logic/analyzeTransaction/createActions/json/index.js.map +1 -0
  102. package/_esm/logic/analyzeTransaction/createActions/json/internalTransferGenerator.js +99 -0
  103. package/_esm/logic/analyzeTransaction/createActions/json/internalTransferGenerator.js.map +1 -0
  104. package/_esm/logic/analyzeTransaction/createActions/json/join.js +43 -0
  105. package/_esm/logic/analyzeTransaction/createActions/json/join.js.map +1 -0
  106. package/_esm/logic/analyzeTransaction/createActions/json/math.js +76 -0
  107. package/_esm/logic/analyzeTransaction/createActions/json/math.js.map +1 -0
  108. package/_esm/logic/analyzeTransaction/createActions/json/schema.js +389 -0
  109. package/_esm/logic/analyzeTransaction/createActions/json/schema.js.map +1 -0
  110. package/_esm/logic/analyzeTransaction/createActions/json/simpleValue.js +266 -0
  111. package/_esm/logic/analyzeTransaction/createActions/json/simpleValue.js.map +1 -0
  112. package/_esm/logic/analyzeTransaction/createActions/json/slice.js +10 -0
  113. package/_esm/logic/analyzeTransaction/createActions/json/slice.js.map +1 -0
  114. package/_esm/logic/analyzeTransaction/createActions/json/transferGenerator.js +178 -0
  115. package/_esm/logic/analyzeTransaction/createActions/json/transferGenerator.js.map +1 -0
  116. package/_esm/logic/analyzeTransaction/createActions/json/type.js +2 -0
  117. package/_esm/logic/analyzeTransaction/createActions/json/type.js.map +1 -0
  118. package/_esm/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.js +511 -0
  119. package/_esm/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.js.map +1 -0
  120. package/_esm/logic/analyzeTransaction/createActions/spam.js +3 -3
  121. package/_esm/logic/analyzeTransaction/createActions/spam.js.map +1 -1
  122. package/_esm/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.js +0 -1
  123. package/_esm/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.js.map +1 -1
  124. package/_esm/logic/analyzeTransaction/createActions/utils/createDirection.js +5 -5
  125. package/_esm/logic/analyzeTransaction/createActions/utils/createDirection.js.map +1 -1
  126. package/_esm/logic/analyzeTransaction/createActions/utils/createTokenTransfers.js +82 -65
  127. package/_esm/logic/analyzeTransaction/createActions/utils/createTokenTransfers.js.map +1 -1
  128. package/_esm/logic/analyzeTransaction/decodeTransaction/decodeLog.js +2 -2
  129. package/_esm/logic/analyzeTransaction/decodeTransaction/decodeLog.js.map +1 -1
  130. package/_esm/logic/analyzeTransaction/getDataFromDatasource.js +4 -6
  131. package/_esm/logic/analyzeTransaction/getDataFromDatasource.js.map +1 -1
  132. package/_esm/logic/analyzeTransaction/index.js +4 -4
  133. package/_esm/logic/analyzeTransaction/index.js.map +1 -1
  134. package/_types/index.d.ts +2 -0
  135. package/_types/index.d.ts.map +1 -1
  136. package/_types/logic/analyzeTransaction/createActions/fail.d.ts +3 -2
  137. package/_types/logic/analyzeTransaction/createActions/fail.d.ts.map +1 -1
  138. package/_types/logic/analyzeTransaction/createActions/gas.d.ts +3 -2
  139. package/_types/logic/analyzeTransaction/createActions/gas.d.ts.map +1 -1
  140. package/_types/logic/analyzeTransaction/createActions/general.d.ts +4 -4
  141. package/_types/logic/analyzeTransaction/createActions/general.d.ts.map +1 -1
  142. package/_types/logic/analyzeTransaction/createActions/index.d.ts +5 -3
  143. package/_types/logic/analyzeTransaction/createActions/index.d.ts.map +1 -1
  144. package/_types/logic/analyzeTransaction/createActions/json/addressIn.d.ts +10 -0
  145. package/_types/logic/analyzeTransaction/createActions/json/addressIn.d.ts.map +1 -0
  146. package/_types/logic/analyzeTransaction/createActions/json/allValue.d.ts +9 -0
  147. package/_types/logic/analyzeTransaction/createActions/json/allValue.d.ts.map +1 -0
  148. package/_types/logic/analyzeTransaction/createActions/json/arrayIn.d.ts +10 -0
  149. package/_types/logic/analyzeTransaction/createActions/json/arrayIn.d.ts.map +1 -0
  150. package/_types/logic/analyzeTransaction/createActions/json/betweenBigInt.d.ts +7 -0
  151. package/_types/logic/analyzeTransaction/createActions/json/betweenBigInt.d.ts.map +1 -0
  152. package/_types/logic/analyzeTransaction/createActions/json/customTransferGenerator.d.ts +12 -0
  153. package/_types/logic/analyzeTransaction/createActions/json/customTransferGenerator.d.ts.map +1 -0
  154. package/_types/logic/analyzeTransaction/createActions/json/erc1155Pattern.d.ts +10 -0
  155. package/_types/logic/analyzeTransaction/createActions/json/erc1155Pattern.d.ts.map +1 -0
  156. package/_types/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.d.ts +10 -0
  157. package/_types/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.d.ts.map +1 -0
  158. package/_types/logic/analyzeTransaction/createActions/json/erc20Pattern.d.ts +10 -0
  159. package/_types/logic/analyzeTransaction/createActions/json/erc20Pattern.d.ts.map +1 -0
  160. package/_types/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.d.ts +10 -0
  161. package/_types/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.d.ts.map +1 -0
  162. package/_types/logic/analyzeTransaction/createActions/json/erc721Pattern.d.ts +10 -0
  163. package/_types/logic/analyzeTransaction/createActions/json/erc721Pattern.d.ts.map +1 -0
  164. package/_types/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.d.ts +10 -0
  165. package/_types/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.d.ts.map +1 -0
  166. package/_types/logic/analyzeTransaction/createActions/json/generateActions.d.ts +14 -0
  167. package/_types/logic/analyzeTransaction/createActions/json/generateActions.d.ts.map +1 -0
  168. package/_types/logic/analyzeTransaction/createActions/json/index.d.ts +16 -0
  169. package/_types/logic/analyzeTransaction/createActions/json/index.d.ts.map +1 -0
  170. package/_types/logic/analyzeTransaction/createActions/json/internalTransferGenerator.d.ts +12 -0
  171. package/_types/logic/analyzeTransaction/createActions/json/internalTransferGenerator.d.ts.map +1 -0
  172. package/_types/logic/analyzeTransaction/createActions/json/join.d.ts +9 -0
  173. package/_types/logic/analyzeTransaction/createActions/json/join.d.ts.map +1 -0
  174. package/_types/logic/analyzeTransaction/createActions/json/math.d.ts +9 -0
  175. package/_types/logic/analyzeTransaction/createActions/json/math.d.ts.map +1 -0
  176. package/_types/logic/analyzeTransaction/createActions/json/schema.d.ts +658268 -0
  177. package/_types/logic/analyzeTransaction/createActions/json/schema.d.ts.map +1 -0
  178. package/_types/logic/analyzeTransaction/createActions/json/simpleValue.d.ts +9 -0
  179. package/_types/logic/analyzeTransaction/createActions/json/simpleValue.d.ts.map +1 -0
  180. package/_types/logic/analyzeTransaction/createActions/json/slice.d.ts +9 -0
  181. package/_types/logic/analyzeTransaction/createActions/json/slice.d.ts.map +1 -0
  182. package/_types/logic/analyzeTransaction/createActions/json/transferGenerator.d.ts +15 -0
  183. package/_types/logic/analyzeTransaction/createActions/json/transferGenerator.d.ts.map +1 -0
  184. package/_types/logic/analyzeTransaction/createActions/json/type.d.ts +6 -0
  185. package/_types/logic/analyzeTransaction/createActions/json/type.d.ts.map +1 -0
  186. package/_types/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.d.ts +10 -0
  187. package/_types/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.d.ts.map +1 -0
  188. package/_types/logic/analyzeTransaction/createActions/spam.d.ts +7 -5
  189. package/_types/logic/analyzeTransaction/createActions/spam.d.ts.map +1 -1
  190. package/_types/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.d.ts.map +1 -1
  191. package/_types/logic/analyzeTransaction/createActions/utils/createDirection.d.ts +5 -4
  192. package/_types/logic/analyzeTransaction/createActions/utils/createDirection.d.ts.map +1 -1
  193. package/_types/logic/analyzeTransaction/createActions/utils/createTokenTransfers.d.ts +3 -2
  194. package/_types/logic/analyzeTransaction/createActions/utils/createTokenTransfers.d.ts.map +1 -1
  195. package/_types/logic/analyzeTransaction/getDataFromDatasource.d.ts +11 -10
  196. package/_types/logic/analyzeTransaction/getDataFromDatasource.d.ts.map +1 -1
  197. package/_types/logic/analyzeTransaction/index.d.ts +8 -7
  198. package/_types/logic/analyzeTransaction/index.d.ts.map +1 -1
  199. package/_types/types/analyzeDataSource.d.ts +2 -3
  200. package/_types/types/analyzeDataSource.d.ts.map +1 -1
  201. package/_types/types/log.d.ts +2 -2
  202. package/_types/types/transactionDecoded.d.ts +38 -38
  203. package/_types/types/transactionDecoded.d.ts.map +1 -1
  204. package/_types/types/transactionDetail.d.ts +36 -36
  205. package/_types/types/transactionIndex.d.ts +5 -5
  206. package/analyzer/.DS_Store +0 -0
  207. package/chain/.DS_Store +0 -0
  208. package/client/.DS_Store +0 -0
  209. package/explorer/.DS_Store +0 -0
  210. package/index.ts +10 -0
  211. package/logic/analyzeTransaction/createActions/fail.ts +4 -8
  212. package/logic/analyzeTransaction/createActions/gas.ts +7 -6
  213. package/logic/analyzeTransaction/createActions/general.ts +4 -4
  214. package/logic/analyzeTransaction/createActions/index.ts +37 -9
  215. package/logic/analyzeTransaction/createActions/json/addressIn.ts +57 -0
  216. package/logic/analyzeTransaction/createActions/json/allValue.ts +41 -0
  217. package/logic/analyzeTransaction/createActions/json/arrayIn.ts +51 -0
  218. package/logic/analyzeTransaction/createActions/json/betweenBigInt.ts +18 -0
  219. package/logic/analyzeTransaction/createActions/json/customTransferGenerator.ts +166 -0
  220. package/logic/analyzeTransaction/createActions/json/erc1155Pattern.ts +108 -0
  221. package/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.ts +53 -0
  222. package/logic/analyzeTransaction/createActions/json/erc20Pattern.ts +96 -0
  223. package/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.ts +53 -0
  224. package/logic/analyzeTransaction/createActions/json/erc721Pattern.ts +74 -0
  225. package/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.ts +53 -0
  226. package/logic/analyzeTransaction/createActions/json/generateActions.ts +248 -0
  227. package/logic/analyzeTransaction/createActions/json/index.ts +72 -0
  228. package/logic/analyzeTransaction/createActions/json/internalTransferGenerator.ts +141 -0
  229. package/logic/analyzeTransaction/createActions/json/join.ts +54 -0
  230. package/logic/analyzeTransaction/createActions/json/math.ts +96 -0
  231. package/logic/analyzeTransaction/createActions/json/schema.ts +554 -0
  232. package/logic/analyzeTransaction/createActions/json/simpleValue.ts +339 -0
  233. package/logic/analyzeTransaction/createActions/json/slice.ts +21 -0
  234. package/logic/analyzeTransaction/createActions/json/transferGenerator.ts +220 -0
  235. package/logic/analyzeTransaction/createActions/json/type.ts +8 -0
  236. package/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.ts +731 -0
  237. package/logic/analyzeTransaction/createActions/spam.ts +9 -6
  238. package/logic/analyzeTransaction/createActions/tests/tx-1-0x5c1345e9b83106f657de5a20d75de3e9f56725697b4ef47cafd019c1fa944128.json +383 -0
  239. package/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.ts +0 -1
  240. package/logic/analyzeTransaction/createActions/utils/createDirection.ts +10 -8
  241. package/logic/analyzeTransaction/createActions/utils/createTokenTransfers.ts +96 -68
  242. package/logic/analyzeTransaction/decodeTransaction/decodeLog.ts +6 -3
  243. package/logic/analyzeTransaction/getDataFromDatasource.ts +14 -28
  244. package/logic/analyzeTransaction/index.ts +11 -10
  245. package/package.json +2 -2
  246. package/types/analyzeDataSource.ts +2 -2
@@ -0,0 +1,53 @@
1
+ import { createBigDecimal } from '@0xtorch/big-decimal'
2
+ import type { Transfer } from '@0xtorch/core'
3
+ import type { z } from 'zod'
4
+ import type { LowerHex, TransactionDecoded } from '../../../../types'
5
+ import { createEvmAddressId } from '../../../../utils'
6
+ import { checkTransferIsMatchErc1155Pattern } from './erc1155Pattern'
7
+ import type { erc1155TransferGeneratorSchema } from './schema'
8
+
9
+ export const generateTransfersByErc1155Transfer = ({
10
+ schema,
11
+ transaction,
12
+ relatedAddresses,
13
+ }: {
14
+ readonly schema: z.infer<typeof erc1155TransferGeneratorSchema>
15
+ readonly transaction: TransactionDecoded
16
+ readonly relatedAddresses: Set<LowerHex>
17
+ }): readonly Transfer[] => {
18
+ const transfers: Transfer[] = []
19
+ let currentIndex = -1
20
+ for (const transfer of transaction.erc1155Transfers) {
21
+ const matched = checkTransferIsMatchErc1155Pattern({
22
+ transfer,
23
+ schema,
24
+ transaction,
25
+ relatedAddresses,
26
+ })
27
+ if (matched) {
28
+ currentIndex += 1
29
+ if (schema.index === undefined || currentIndex === schema.index) {
30
+ transfers.push({
31
+ direction: schema.direction,
32
+ from: createEvmAddressId({
33
+ chainId: transaction.chainId,
34
+ address: transfer.from,
35
+ }),
36
+ to: createEvmAddressId({
37
+ chainId: transaction.chainId,
38
+ address: transfer.to,
39
+ }),
40
+ asset: transfer.token,
41
+ amount: createBigDecimal(transfer.value),
42
+ })
43
+ }
44
+ if (currentIndex === schema.index) {
45
+ return transfers
46
+ }
47
+ }
48
+ }
49
+ if (schema.index === undefined) {
50
+ return transfers
51
+ }
52
+ throw new Error('Matched ERC1155 transfer is not found')
53
+ }
@@ -0,0 +1,96 @@
1
+ import type { z } from 'zod'
2
+ import type {
3
+ Erc20TokenTransfer,
4
+ LowerHex,
5
+ TransactionDecoded,
6
+ } from '../../../../types'
7
+ import { getAllValue } from './allValue'
8
+ import { checkValueIsArrayIn } from './arrayIn'
9
+ import { checkValueIsBetweenBigInt } from './betweenBigInt'
10
+ import type { erc20TransferPatternSchema } from './schema'
11
+
12
+ export const checkTransferIsMatchErc20Pattern = ({
13
+ transfer,
14
+ schema,
15
+ transaction,
16
+ relatedAddresses,
17
+ }: {
18
+ readonly transfer: Erc20TokenTransfer
19
+ readonly schema: z.infer<typeof erc20TransferPatternSchema>
20
+ readonly transaction: TransactionDecoded
21
+ readonly relatedAddresses: Set<LowerHex>
22
+ }): boolean => {
23
+ // address
24
+ if (
25
+ schema.address !== undefined &&
26
+ !checkValueIsArrayIn({
27
+ value: transfer.address,
28
+ schema: schema.address,
29
+ transaction,
30
+ relatedAddresses,
31
+ })
32
+ ) {
33
+ return false
34
+ }
35
+
36
+ // from
37
+ if (
38
+ schema.from !== undefined &&
39
+ !checkValueIsArrayIn({
40
+ value: transfer.from,
41
+ schema: schema.from,
42
+ transaction,
43
+ relatedAddresses,
44
+ })
45
+ ) {
46
+ return false
47
+ }
48
+
49
+ // to
50
+ if (
51
+ schema.to !== undefined &&
52
+ !checkValueIsArrayIn({
53
+ value: transfer.to,
54
+ schema: schema.to,
55
+ transaction,
56
+ relatedAddresses,
57
+ })
58
+ ) {
59
+ return false
60
+ }
61
+
62
+ // amount
63
+ if (schema.amount !== undefined) {
64
+ if (typeof schema.amount === 'string') {
65
+ if (transfer.value.toString() !== schema.amount) {
66
+ return false
67
+ }
68
+ } else {
69
+ switch (schema.amount.type) {
70
+ case 'between': {
71
+ if (
72
+ !checkValueIsBetweenBigInt({
73
+ value: transfer.value,
74
+ schema: schema.amount,
75
+ })
76
+ ) {
77
+ return false
78
+ }
79
+ break
80
+ }
81
+ default: {
82
+ const value = getAllValue({
83
+ schema: schema.amount,
84
+ transaction,
85
+ relatedAddresses,
86
+ })
87
+ if (transfer.value.toString() !== value) {
88
+ return false
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ return true
96
+ }
@@ -0,0 +1,53 @@
1
+ import { createBigDecimal } from '@0xtorch/big-decimal'
2
+ import type { Transfer } from '@0xtorch/core'
3
+ import type { z } from 'zod'
4
+ import type { LowerHex, TransactionDecoded } from '../../../../types'
5
+ import { createEvmAddressId } from '../../../../utils'
6
+ import { checkTransferIsMatchErc20Pattern } from './erc20Pattern'
7
+ import type { erc20TransferGeneratorSchema } from './schema'
8
+
9
+ export const generateTransfersByErc20Transfer = ({
10
+ schema,
11
+ transaction,
12
+ relatedAddresses,
13
+ }: {
14
+ readonly schema: z.infer<typeof erc20TransferGeneratorSchema>
15
+ readonly transaction: TransactionDecoded
16
+ readonly relatedAddresses: Set<LowerHex>
17
+ }): readonly Transfer[] => {
18
+ const transfers: Transfer[] = []
19
+ let currentIndex = -1
20
+ for (const transfer of transaction.erc20Transfers) {
21
+ const matched = checkTransferIsMatchErc20Pattern({
22
+ transfer,
23
+ schema,
24
+ transaction,
25
+ relatedAddresses,
26
+ })
27
+ if (matched) {
28
+ currentIndex += 1
29
+ if (schema.index === undefined || currentIndex === schema.index) {
30
+ transfers.push({
31
+ direction: schema.direction,
32
+ from: createEvmAddressId({
33
+ chainId: transaction.chainId,
34
+ address: transfer.from,
35
+ }),
36
+ to: createEvmAddressId({
37
+ chainId: transaction.chainId,
38
+ address: transfer.to,
39
+ }),
40
+ asset: transfer.token.currency,
41
+ amount: createBigDecimal(transfer.value, transfer.token.decimals),
42
+ })
43
+ }
44
+ if (currentIndex === schema.index) {
45
+ return transfers
46
+ }
47
+ }
48
+ }
49
+ if (schema.index === undefined) {
50
+ return transfers
51
+ }
52
+ throw new Error('Matched ERC20 transfer is not found')
53
+ }
@@ -0,0 +1,74 @@
1
+ import type { z } from 'zod'
2
+ import type {
3
+ Erc721TokenTransfer,
4
+ LowerHex,
5
+ TransactionDecoded,
6
+ } from '../../../../types'
7
+ import { getAllValue } from './allValue'
8
+ import { checkValueIsArrayIn } from './arrayIn'
9
+ import type { erc721TransferPatternSchema } from './schema'
10
+
11
+ export const checkTransferIsMatchErc721Pattern = ({
12
+ transfer,
13
+ schema,
14
+ transaction,
15
+ relatedAddresses,
16
+ }: {
17
+ readonly transfer: Erc721TokenTransfer
18
+ readonly schema: z.infer<typeof erc721TransferPatternSchema>
19
+ readonly transaction: TransactionDecoded
20
+ readonly relatedAddresses: Set<LowerHex>
21
+ }): boolean => {
22
+ // address
23
+ if (
24
+ schema.address !== undefined &&
25
+ !checkValueIsArrayIn({
26
+ value: transfer.address,
27
+ schema: schema.address,
28
+ transaction,
29
+ relatedAddresses,
30
+ })
31
+ ) {
32
+ return false
33
+ }
34
+
35
+ // from
36
+ if (
37
+ schema.from !== undefined &&
38
+ !checkValueIsArrayIn({
39
+ value: transfer.from,
40
+ schema: schema.from,
41
+ transaction,
42
+ relatedAddresses,
43
+ })
44
+ ) {
45
+ return false
46
+ }
47
+
48
+ // to
49
+ if (
50
+ schema.to !== undefined &&
51
+ !checkValueIsArrayIn({
52
+ value: transfer.to,
53
+ schema: schema.to,
54
+ transaction,
55
+ relatedAddresses,
56
+ })
57
+ ) {
58
+ return false
59
+ }
60
+
61
+ // id
62
+ if (
63
+ schema.id !== undefined &&
64
+ getAllValue({
65
+ schema: schema.id,
66
+ transaction,
67
+ relatedAddresses,
68
+ }) !== transfer.tokenId.toString()
69
+ ) {
70
+ return false
71
+ }
72
+
73
+ return true
74
+ }
@@ -0,0 +1,53 @@
1
+ import { createBigDecimal } from '@0xtorch/big-decimal'
2
+ import type { Transfer } from '@0xtorch/core'
3
+ import type { z } from 'zod'
4
+ import type { LowerHex, TransactionDecoded } from '../../../../types'
5
+ import { createEvmAddressId } from '../../../../utils'
6
+ import { checkTransferIsMatchErc721Pattern } from './erc721Pattern'
7
+ import type { erc721TransferGeneratorSchema } from './schema'
8
+
9
+ export const generateTransfersByErc721Transfer = ({
10
+ schema,
11
+ transaction,
12
+ relatedAddresses,
13
+ }: {
14
+ readonly schema: z.infer<typeof erc721TransferGeneratorSchema>
15
+ readonly transaction: TransactionDecoded
16
+ readonly relatedAddresses: Set<LowerHex>
17
+ }): readonly Transfer[] => {
18
+ const transfers: Transfer[] = []
19
+ let currentIndex = -1
20
+ for (const transfer of transaction.erc721Transfers) {
21
+ const matched = checkTransferIsMatchErc721Pattern({
22
+ transfer,
23
+ schema,
24
+ transaction,
25
+ relatedAddresses,
26
+ })
27
+ if (matched) {
28
+ currentIndex += 1
29
+ if (schema.index === undefined || currentIndex === schema.index) {
30
+ transfers.push({
31
+ direction: schema.direction,
32
+ from: createEvmAddressId({
33
+ chainId: transaction.chainId,
34
+ address: transfer.from,
35
+ }),
36
+ to: createEvmAddressId({
37
+ chainId: transaction.chainId,
38
+ address: transfer.to,
39
+ }),
40
+ asset: transfer.token,
41
+ amount: createBigDecimal(1n),
42
+ })
43
+ }
44
+ if (currentIndex === schema.index) {
45
+ return transfers
46
+ }
47
+ }
48
+ }
49
+ if (schema.index === undefined) {
50
+ return transfers
51
+ }
52
+ throw new Error('Matched ERC721 transfer is not found')
53
+ }
@@ -0,0 +1,248 @@
1
+ import type { Action, Nft } from '@0xtorch/core'
2
+ import type { Chain } from '../../../../chain'
3
+ import type {
4
+ Erc20TokenTransfer,
5
+ Erc721TokenTransfer,
6
+ Erc1155TokenTransfer,
7
+ LowerHex,
8
+ TransactionDecoded,
9
+ } from '../../../../types'
10
+ import { getAllValue } from './allValue'
11
+ import { checkTransferIsMatchErc20Pattern } from './erc20Pattern'
12
+ import { checkTransferIsMatchErc721Pattern } from './erc721Pattern'
13
+ import { checkTransferIsMatchErc1155Pattern } from './erc1155Pattern'
14
+ import { generateTransfers } from './transferGenerator'
15
+ import type { Generator } from './type'
16
+
17
+ type GenerateActionsParameters = {
18
+ readonly chain: Chain
19
+ readonly transaction: TransactionDecoded
20
+ readonly relatedAddresses: Set<LowerHex>
21
+ readonly generator: Generator
22
+ readonly source: string
23
+ }
24
+
25
+ export const generateActions = ({
26
+ chain,
27
+ transaction,
28
+ relatedAddresses,
29
+ generator,
30
+ source,
31
+ }: GenerateActionsParameters): readonly Action[] => {
32
+ // target 取得
33
+ if (generator.target !== undefined) {
34
+ const actions: Action[] = []
35
+ switch (generator.target.type) {
36
+ case 'erc20': {
37
+ for (const transfer of transaction.erc20Transfers) {
38
+ if (
39
+ !checkTransferIsMatchErc20Pattern({
40
+ transfer,
41
+ schema: generator.target,
42
+ transaction,
43
+ relatedAddresses,
44
+ })
45
+ ) {
46
+ continue
47
+ }
48
+ actions.push(
49
+ generateActionsWithTarget({
50
+ chain,
51
+ transaction,
52
+ relatedAddresses,
53
+ generator,
54
+ source,
55
+ erc20Target: transfer,
56
+ }),
57
+ )
58
+ }
59
+ break
60
+ }
61
+ case 'erc721': {
62
+ for (const transfer of transaction.erc721Transfers) {
63
+ if (
64
+ !checkTransferIsMatchErc721Pattern({
65
+ transfer,
66
+ schema: generator.target,
67
+ transaction,
68
+ relatedAddresses,
69
+ })
70
+ ) {
71
+ continue
72
+ }
73
+ actions.push(
74
+ generateActionsWithTarget({
75
+ chain,
76
+ transaction,
77
+ relatedAddresses,
78
+ generator,
79
+ source,
80
+ erc721Target: transfer,
81
+ }),
82
+ )
83
+ }
84
+ break
85
+ }
86
+ case 'erc1155': {
87
+ for (const transfer of transaction.erc1155Transfers) {
88
+ if (
89
+ !checkTransferIsMatchErc1155Pattern({
90
+ transfer,
91
+ schema: generator.target,
92
+ transaction,
93
+ relatedAddresses,
94
+ })
95
+ ) {
96
+ continue
97
+ }
98
+ actions.push(
99
+ generateActionsWithTarget({
100
+ chain,
101
+ transaction,
102
+ relatedAddresses,
103
+ generator,
104
+ source,
105
+ erc1155Target: transfer,
106
+ }),
107
+ )
108
+ }
109
+ break
110
+ }
111
+ }
112
+ return actions
113
+ }
114
+
115
+ // target 未指定の場合は単一 action 生成
116
+ return [
117
+ generateActionsWithTarget({
118
+ chain,
119
+ transaction,
120
+ relatedAddresses,
121
+ generator,
122
+ source,
123
+ }),
124
+ ]
125
+ }
126
+
127
+ const generateActionsWithTarget = ({
128
+ chain,
129
+ transaction,
130
+ relatedAddresses,
131
+ generator,
132
+ source,
133
+ erc20Target,
134
+ erc721Target,
135
+ erc1155Target,
136
+ }: {
137
+ readonly chain: Chain
138
+ readonly transaction: TransactionDecoded
139
+ readonly relatedAddresses: Set<LowerHex>
140
+ readonly generator: Generator
141
+ readonly source: string
142
+ readonly erc20Target?: Erc20TokenTransfer
143
+ readonly erc721Target?: Erc721TokenTransfer
144
+ readonly erc1155Target?: Erc1155TokenTransfer
145
+ }): Action => {
146
+ return {
147
+ source,
148
+ order: 0,
149
+ type: generator.type,
150
+ timestamp: transaction.timestamp,
151
+ evidence: 'contract',
152
+ comment:
153
+ generator.comment === undefined
154
+ ? undefined
155
+ : getAllValue({
156
+ schema: generator.comment,
157
+ transaction,
158
+ relatedAddresses,
159
+ }),
160
+ app: transaction.to?.app ?? transaction.from.app,
161
+ transfers: generator.transfers.flatMap((schema) =>
162
+ generateTransfers({
163
+ schema,
164
+ chain,
165
+ transaction,
166
+ relatedAddresses,
167
+ erc20Target,
168
+ erc721Target,
169
+ erc1155Target,
170
+ }),
171
+ ),
172
+ crossId:
173
+ generator.crossId === undefined
174
+ ? undefined
175
+ : getAllValue({
176
+ schema: generator.crossId,
177
+ transaction,
178
+ relatedAddresses,
179
+ }),
180
+ crossType: generator.crossType,
181
+ loanId:
182
+ generator.loanId === undefined
183
+ ? undefined
184
+ : getAllValue({
185
+ schema: generator.loanId,
186
+ transaction,
187
+ relatedAddresses,
188
+ }),
189
+ target: generateValueTarget({
190
+ transaction,
191
+ relatedAddresses,
192
+ schema: generator.valueTarget,
193
+ }),
194
+ }
195
+ }
196
+
197
+ const generateValueTarget = ({
198
+ transaction,
199
+ relatedAddresses,
200
+ schema,
201
+ }: {
202
+ readonly transaction: TransactionDecoded
203
+ readonly relatedAddresses: Set<LowerHex>
204
+ readonly schema: Generator['valueTarget']
205
+ }): Nft | undefined => {
206
+ if (schema === undefined) {
207
+ return undefined
208
+ }
209
+
210
+ let currentIndex = -1
211
+ switch (schema.type) {
212
+ case 'erc721': {
213
+ for (const transfer of transaction.erc721Transfers) {
214
+ const matched = checkTransferIsMatchErc721Pattern({
215
+ transfer,
216
+ schema: schema,
217
+ transaction,
218
+ relatedAddresses,
219
+ })
220
+ if (matched) {
221
+ currentIndex += 1
222
+ if (currentIndex === schema.index) {
223
+ return transfer.token
224
+ }
225
+ }
226
+ }
227
+ break
228
+ }
229
+ case 'erc1155': {
230
+ for (const transfer of transaction.erc1155Transfers) {
231
+ const matched = checkTransferIsMatchErc1155Pattern({
232
+ transfer,
233
+ schema: schema,
234
+ transaction,
235
+ relatedAddresses,
236
+ })
237
+ if (matched) {
238
+ currentIndex += 1
239
+ if (currentIndex === schema.index) {
240
+ return transfer.token
241
+ }
242
+ }
243
+ }
244
+ break
245
+ }
246
+ }
247
+ throw new Error('Matched ERC721 or ERC1155 transfer is not found')
248
+ }
@@ -0,0 +1,72 @@
1
+ import {
2
+ type Action,
3
+ type Transfer,
4
+ checkIfActionsIsValid,
5
+ } from '@0xtorch/core'
6
+ import type { Chain } from '../../../../chain'
7
+ import type { LowerHex, TransactionDecoded } from '../../../../types'
8
+ import { generateActions } from './generateActions'
9
+ import type { JsonAnalyzer } from './type'
10
+ import { verifyTxSatisfiesCondition } from './verifyTxSatisfiesCondition'
11
+
12
+ type CreateActionsByJsonAnalyzerParameters = {
13
+ readonly chain: Chain
14
+ readonly transaction: TransactionDecoded
15
+ readonly relatedAddresses: Set<LowerHex>
16
+ readonly accountIds: Set<string>
17
+ readonly jsonAnalyzers: readonly JsonAnalyzer[]
18
+ readonly transfers: readonly Transfer[]
19
+ readonly source: string
20
+ }
21
+
22
+ export const createActionsByJsonAnalyzer = ({
23
+ chain,
24
+ transaction,
25
+ relatedAddresses,
26
+ accountIds,
27
+ jsonAnalyzers,
28
+ transfers,
29
+ source,
30
+ }: CreateActionsByJsonAnalyzerParameters): readonly Action[] | undefined => {
31
+ // JSON 毎に処理
32
+ for (const { condition, generators } of jsonAnalyzers) {
33
+ // condition に合致するか確認
34
+ const verified = verifyTxSatisfiesCondition({
35
+ transaction,
36
+ relatedAddresses,
37
+ condition,
38
+ })
39
+ if (!verified) {
40
+ continue
41
+ }
42
+
43
+ // generator 毎に action 生成
44
+ // action 生成中にエラーが発生した場合は catch して次の JSON Analyzer に進む
45
+ const actions: Action[] = []
46
+ try {
47
+ for (const generator of generators) {
48
+ actions.push(
49
+ ...generateActions({
50
+ chain,
51
+ transaction,
52
+ relatedAddresses,
53
+ source,
54
+ generator,
55
+ }),
56
+ )
57
+ }
58
+ } catch (error) {
59
+ console.debug(error)
60
+ continue
61
+ }
62
+
63
+ // validation して問題なければ action を返す
64
+ if (!checkIfActionsIsValid({ actions, accountIds, transfers })) {
65
+ continue
66
+ }
67
+ return actions
68
+ }
69
+
70
+ // 全ての処理で action が生成されない場合は undefined を返す
71
+ return undefined
72
+ }