@0xtorch/evm 0.0.73 → 0.0.75

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 (242) 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 +128 -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 +1 -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/getDataFromDatasource.js +3 -5
  63. package/_cjs/logic/analyzeTransaction/getDataFromDatasource.js.map +1 -1
  64. package/_cjs/logic/analyzeTransaction/index.js +4 -4
  65. package/_cjs/logic/analyzeTransaction/index.js.map +1 -1
  66. package/_esm/index.js +1 -0
  67. package/_esm/index.js.map +1 -1
  68. package/_esm/logic/analyzeTransaction/createActions/fail.js +2 -7
  69. package/_esm/logic/analyzeTransaction/createActions/fail.js.map +1 -1
  70. package/_esm/logic/analyzeTransaction/createActions/gas.js +5 -5
  71. package/_esm/logic/analyzeTransaction/createActions/gas.js.map +1 -1
  72. package/_esm/logic/analyzeTransaction/createActions/general.js +1 -1
  73. package/_esm/logic/analyzeTransaction/createActions/general.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 +124 -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 +1 -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/getDataFromDatasource.js +4 -6
  129. package/_esm/logic/analyzeTransaction/getDataFromDatasource.js.map +1 -1
  130. package/_esm/logic/analyzeTransaction/index.js +4 -4
  131. package/_esm/logic/analyzeTransaction/index.js.map +1 -1
  132. package/_types/index.d.ts +2 -0
  133. package/_types/index.d.ts.map +1 -1
  134. package/_types/logic/analyzeTransaction/createActions/fail.d.ts +3 -2
  135. package/_types/logic/analyzeTransaction/createActions/fail.d.ts.map +1 -1
  136. package/_types/logic/analyzeTransaction/createActions/gas.d.ts +3 -2
  137. package/_types/logic/analyzeTransaction/createActions/gas.d.ts.map +1 -1
  138. package/_types/logic/analyzeTransaction/createActions/general.d.ts +4 -4
  139. package/_types/logic/analyzeTransaction/createActions/general.d.ts.map +1 -1
  140. package/_types/logic/analyzeTransaction/createActions/index.d.ts +5 -3
  141. package/_types/logic/analyzeTransaction/createActions/index.d.ts.map +1 -1
  142. package/_types/logic/analyzeTransaction/createActions/json/addressIn.d.ts +10 -0
  143. package/_types/logic/analyzeTransaction/createActions/json/addressIn.d.ts.map +1 -0
  144. package/_types/logic/analyzeTransaction/createActions/json/allValue.d.ts +9 -0
  145. package/_types/logic/analyzeTransaction/createActions/json/allValue.d.ts.map +1 -0
  146. package/_types/logic/analyzeTransaction/createActions/json/arrayIn.d.ts +10 -0
  147. package/_types/logic/analyzeTransaction/createActions/json/arrayIn.d.ts.map +1 -0
  148. package/_types/logic/analyzeTransaction/createActions/json/betweenBigInt.d.ts +7 -0
  149. package/_types/logic/analyzeTransaction/createActions/json/betweenBigInt.d.ts.map +1 -0
  150. package/_types/logic/analyzeTransaction/createActions/json/customTransferGenerator.d.ts +12 -0
  151. package/_types/logic/analyzeTransaction/createActions/json/customTransferGenerator.d.ts.map +1 -0
  152. package/_types/logic/analyzeTransaction/createActions/json/erc1155Pattern.d.ts +10 -0
  153. package/_types/logic/analyzeTransaction/createActions/json/erc1155Pattern.d.ts.map +1 -0
  154. package/_types/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.d.ts +10 -0
  155. package/_types/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.d.ts.map +1 -0
  156. package/_types/logic/analyzeTransaction/createActions/json/erc20Pattern.d.ts +10 -0
  157. package/_types/logic/analyzeTransaction/createActions/json/erc20Pattern.d.ts.map +1 -0
  158. package/_types/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.d.ts +10 -0
  159. package/_types/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.d.ts.map +1 -0
  160. package/_types/logic/analyzeTransaction/createActions/json/erc721Pattern.d.ts +10 -0
  161. package/_types/logic/analyzeTransaction/createActions/json/erc721Pattern.d.ts.map +1 -0
  162. package/_types/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.d.ts +10 -0
  163. package/_types/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.d.ts.map +1 -0
  164. package/_types/logic/analyzeTransaction/createActions/json/generateActions.d.ts +14 -0
  165. package/_types/logic/analyzeTransaction/createActions/json/generateActions.d.ts.map +1 -0
  166. package/_types/logic/analyzeTransaction/createActions/json/index.d.ts +16 -0
  167. package/_types/logic/analyzeTransaction/createActions/json/index.d.ts.map +1 -0
  168. package/_types/logic/analyzeTransaction/createActions/json/internalTransferGenerator.d.ts +12 -0
  169. package/_types/logic/analyzeTransaction/createActions/json/internalTransferGenerator.d.ts.map +1 -0
  170. package/_types/logic/analyzeTransaction/createActions/json/join.d.ts +9 -0
  171. package/_types/logic/analyzeTransaction/createActions/json/join.d.ts.map +1 -0
  172. package/_types/logic/analyzeTransaction/createActions/json/math.d.ts +9 -0
  173. package/_types/logic/analyzeTransaction/createActions/json/math.d.ts.map +1 -0
  174. package/_types/logic/analyzeTransaction/createActions/json/schema.d.ts +658268 -0
  175. package/_types/logic/analyzeTransaction/createActions/json/schema.d.ts.map +1 -0
  176. package/_types/logic/analyzeTransaction/createActions/json/simpleValue.d.ts +9 -0
  177. package/_types/logic/analyzeTransaction/createActions/json/simpleValue.d.ts.map +1 -0
  178. package/_types/logic/analyzeTransaction/createActions/json/slice.d.ts +9 -0
  179. package/_types/logic/analyzeTransaction/createActions/json/slice.d.ts.map +1 -0
  180. package/_types/logic/analyzeTransaction/createActions/json/transferGenerator.d.ts +15 -0
  181. package/_types/logic/analyzeTransaction/createActions/json/transferGenerator.d.ts.map +1 -0
  182. package/_types/logic/analyzeTransaction/createActions/json/type.d.ts +6 -0
  183. package/_types/logic/analyzeTransaction/createActions/json/type.d.ts.map +1 -0
  184. package/_types/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.d.ts +10 -0
  185. package/_types/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.d.ts.map +1 -0
  186. package/_types/logic/analyzeTransaction/createActions/spam.d.ts +7 -5
  187. package/_types/logic/analyzeTransaction/createActions/spam.d.ts.map +1 -1
  188. package/_types/logic/analyzeTransaction/createActions/utils/createDirection.d.ts +5 -4
  189. package/_types/logic/analyzeTransaction/createActions/utils/createDirection.d.ts.map +1 -1
  190. package/_types/logic/analyzeTransaction/createActions/utils/createTokenTransfers.d.ts +3 -2
  191. package/_types/logic/analyzeTransaction/createActions/utils/createTokenTransfers.d.ts.map +1 -1
  192. package/_types/logic/analyzeTransaction/getDataFromDatasource.d.ts +11 -10
  193. package/_types/logic/analyzeTransaction/getDataFromDatasource.d.ts.map +1 -1
  194. package/_types/logic/analyzeTransaction/index.d.ts +8 -7
  195. package/_types/logic/analyzeTransaction/index.d.ts.map +1 -1
  196. package/_types/types/analyzeDataSource.d.ts +2 -3
  197. package/_types/types/analyzeDataSource.d.ts.map +1 -1
  198. package/_types/types/log.d.ts +2 -2
  199. package/_types/types/transactionDecoded.d.ts +38 -38
  200. package/_types/types/transactionDecoded.d.ts.map +1 -1
  201. package/_types/types/transactionDetail.d.ts +36 -36
  202. package/_types/types/transactionIndex.d.ts +5 -5
  203. package/analyzer/.DS_Store +0 -0
  204. package/chain/.DS_Store +0 -0
  205. package/client/.DS_Store +0 -0
  206. package/explorer/.DS_Store +0 -0
  207. package/index.ts +10 -0
  208. package/logic/analyzeTransaction/createActions/fail.ts +4 -8
  209. package/logic/analyzeTransaction/createActions/gas.ts +7 -6
  210. package/logic/analyzeTransaction/createActions/general.ts +5 -5
  211. package/logic/analyzeTransaction/createActions/index.ts +37 -9
  212. package/logic/analyzeTransaction/createActions/json/addressIn.ts +57 -0
  213. package/logic/analyzeTransaction/createActions/json/allValue.ts +41 -0
  214. package/logic/analyzeTransaction/createActions/json/arrayIn.ts +51 -0
  215. package/logic/analyzeTransaction/createActions/json/betweenBigInt.ts +18 -0
  216. package/logic/analyzeTransaction/createActions/json/customTransferGenerator.ts +166 -0
  217. package/logic/analyzeTransaction/createActions/json/erc1155Pattern.ts +108 -0
  218. package/logic/analyzeTransaction/createActions/json/erc1155TransferGenerator.ts +53 -0
  219. package/logic/analyzeTransaction/createActions/json/erc20Pattern.ts +96 -0
  220. package/logic/analyzeTransaction/createActions/json/erc20TransferGenerator.ts +53 -0
  221. package/logic/analyzeTransaction/createActions/json/erc721Pattern.ts +74 -0
  222. package/logic/analyzeTransaction/createActions/json/erc721TransferGenerator.ts +53 -0
  223. package/logic/analyzeTransaction/createActions/json/generateActions.ts +248 -0
  224. package/logic/analyzeTransaction/createActions/json/index.ts +72 -0
  225. package/logic/analyzeTransaction/createActions/json/internalTransferGenerator.ts +141 -0
  226. package/logic/analyzeTransaction/createActions/json/join.ts +54 -0
  227. package/logic/analyzeTransaction/createActions/json/math.ts +96 -0
  228. package/logic/analyzeTransaction/createActions/json/schema.ts +554 -0
  229. package/logic/analyzeTransaction/createActions/json/simpleValue.ts +339 -0
  230. package/logic/analyzeTransaction/createActions/json/slice.ts +21 -0
  231. package/logic/analyzeTransaction/createActions/json/transferGenerator.ts +158 -0
  232. package/logic/analyzeTransaction/createActions/json/type.ts +8 -0
  233. package/logic/analyzeTransaction/createActions/json/verifyTxSatisfiesCondition.ts +731 -0
  234. package/logic/analyzeTransaction/createActions/spam.ts +9 -6
  235. package/logic/analyzeTransaction/createActions/tests/tx-1-0x5c1345e9b83106f657de5a20d75de3e9f56725697b4ef47cafd019c1fa944128.json +383 -0
  236. package/logic/analyzeTransaction/createActions/utils/containsUrlOrDomain.ts +1 -1
  237. package/logic/analyzeTransaction/createActions/utils/createDirection.ts +10 -8
  238. package/logic/analyzeTransaction/createActions/utils/createTokenTransfers.ts +96 -68
  239. package/logic/analyzeTransaction/getDataFromDatasource.ts +14 -28
  240. package/logic/analyzeTransaction/index.ts +11 -10
  241. package/package.json +2 -2
  242. package/types/analyzeDataSource.ts +2 -2
@@ -0,0 +1,731 @@
1
+ import { stringify } from '@0xtorch/core'
2
+ import type { z } from 'zod'
3
+ import type {
4
+ Erc20TokenTransfer,
5
+ Erc721TokenTransfer,
6
+ Erc1155TokenTransfer,
7
+ Log,
8
+ LowerHex,
9
+ TransactionDecoded,
10
+ } from '../../../../types'
11
+ import { getAllValue } from './allValue'
12
+ import { checkValueIsArrayIn } from './arrayIn'
13
+ import { checkValueIsBetweenBigInt } from './betweenBigInt'
14
+ import { checkTransferIsMatchErc20Pattern } from './erc20Pattern'
15
+ import { checkTransferIsMatchErc721Pattern } from './erc721Pattern'
16
+ import { checkTransferIsMatchErc1155Pattern } from './erc1155Pattern'
17
+ import type {
18
+ exactErc20TransfersConditionSchema,
19
+ exactErc721TransfersConditionSchema,
20
+ exactErc1155TransfersConditionSchema,
21
+ exactLogsConditionSchema,
22
+ someErc20TransfersConditionSchema,
23
+ someErc721TransfersConditionSchema,
24
+ someErc1155TransfersConditionSchema,
25
+ someLogsConditionSchema,
26
+ } from './schema'
27
+ import type { Condition } from './type'
28
+
29
+ type VerifyTxSatisfiesConditionParameters = {
30
+ readonly transaction: TransactionDecoded
31
+ readonly relatedAddresses: Set<LowerHex>
32
+ readonly condition: Condition
33
+ }
34
+
35
+ export const verifyTxSatisfiesCondition = ({
36
+ transaction,
37
+ relatedAddresses,
38
+ condition,
39
+ }: VerifyTxSatisfiesConditionParameters): boolean => {
40
+ try {
41
+ // chainId
42
+ if (condition.chainId !== undefined) {
43
+ const chainIds = new Set(condition.chainId)
44
+ if (!chainIds.has(transaction.chainId)) {
45
+ return false
46
+ }
47
+ }
48
+
49
+ // value
50
+ if (
51
+ condition.value !== undefined &&
52
+ !checkValueIsBetweenBigInt({
53
+ value: transaction.value,
54
+ schema: condition.value,
55
+ })
56
+ ) {
57
+ return false
58
+ }
59
+
60
+ // related addresses
61
+ if (condition.related !== undefined) {
62
+ let someRelatedAddressSatisfies = false
63
+ for (const address of relatedAddresses) {
64
+ if (
65
+ checkValueIsArrayIn({
66
+ value: address,
67
+ schema: condition.related,
68
+ transaction,
69
+ relatedAddresses,
70
+ })
71
+ ) {
72
+ someRelatedAddressSatisfies = true
73
+ break
74
+ }
75
+ }
76
+ if (!someRelatedAddressSatisfies) {
77
+ return false
78
+ }
79
+ }
80
+
81
+ // from
82
+ if (
83
+ condition.from !== undefined &&
84
+ !checkValueIsArrayIn({
85
+ value: transaction.from.address,
86
+ schema: condition.from,
87
+ transaction,
88
+ relatedAddresses,
89
+ })
90
+ ) {
91
+ return false
92
+ }
93
+
94
+ // to
95
+ if (
96
+ condition.to !== undefined &&
97
+ !checkValueIsArrayIn({
98
+ value: transaction.to?.address ?? '',
99
+ schema: condition.to,
100
+ transaction,
101
+ relatedAddresses,
102
+ })
103
+ ) {
104
+ return false
105
+ }
106
+
107
+ // function id
108
+ if (
109
+ transaction.input.length < 10 ||
110
+ transaction.input.slice(0, 10) !== condition.function.id
111
+ ) {
112
+ return false
113
+ }
114
+
115
+ // function interface
116
+ if (
117
+ condition.function.interface !== undefined &&
118
+ condition.function.interface !== transaction.function?.interface
119
+ ) {
120
+ return false
121
+ }
122
+
123
+ // function args
124
+ if (condition.function.args !== undefined) {
125
+ if (transaction.function === undefined) {
126
+ return false
127
+ }
128
+ for (const { index, value: valueSchema } of condition.function.args) {
129
+ const arg = transaction.function.args[index]
130
+ if (typeof valueSchema === 'string') {
131
+ if (arg.value !== valueSchema) {
132
+ return false
133
+ }
134
+ continue
135
+ }
136
+ switch (valueSchema.type) {
137
+ case 'array-in': {
138
+ // array-in
139
+ if (
140
+ !checkValueIsArrayIn({
141
+ value: stringify(arg.value).toLowerCase(),
142
+ schema: valueSchema,
143
+ transaction,
144
+ relatedAddresses,
145
+ })
146
+ ) {
147
+ return false
148
+ }
149
+ break
150
+ }
151
+ case 'between': {
152
+ // between bigint
153
+ if (
154
+ !checkValueIsBetweenBigInt({
155
+ value: BigInt(stringify(arg.value)),
156
+ schema: valueSchema,
157
+ })
158
+ ) {
159
+ return false
160
+ }
161
+ break
162
+ }
163
+ default: {
164
+ // all value
165
+ const value = getAllValue({
166
+ schema: valueSchema,
167
+ transaction,
168
+ relatedAddresses,
169
+ })
170
+ if (value !== stringify(arg.value).toLowerCase()) {
171
+ return false
172
+ }
173
+ break
174
+ }
175
+ }
176
+ }
177
+ }
178
+
179
+ // logs
180
+ if (condition.logs !== undefined) {
181
+ switch (condition.logs.type) {
182
+ case 'exact': {
183
+ if (
184
+ !verifyLogsSatisfiesExactCondition({
185
+ logs: transaction.logs,
186
+ transaction,
187
+ relatedAddresses,
188
+ condition: condition.logs,
189
+ })
190
+ ) {
191
+ return false
192
+ }
193
+ break
194
+ }
195
+ case 'some': {
196
+ if (
197
+ !verifyLogsSatisfiesSomeCondition({
198
+ logs: transaction.logs,
199
+ transaction,
200
+ relatedAddresses,
201
+ condition: condition.logs,
202
+ })
203
+ ) {
204
+ return false
205
+ }
206
+ break
207
+ }
208
+ }
209
+ }
210
+
211
+ // erc20Transfers
212
+ if (condition.erc20Transfers !== undefined) {
213
+ switch (condition.erc20Transfers.type) {
214
+ case 'exact': {
215
+ if (
216
+ !verifyErc20TransfersSatisfiesExactCondition({
217
+ transfers: transaction.erc20Transfers,
218
+ transaction,
219
+ relatedAddresses,
220
+ condition: condition.erc20Transfers,
221
+ })
222
+ ) {
223
+ return false
224
+ }
225
+ break
226
+ }
227
+ case 'some': {
228
+ if (
229
+ !verifyErc20TransfersSatisfiesSomeCondition({
230
+ transfers: transaction.erc20Transfers,
231
+ transaction,
232
+ relatedAddresses,
233
+ condition: condition.erc20Transfers,
234
+ })
235
+ ) {
236
+ return false
237
+ }
238
+ break
239
+ }
240
+ }
241
+ }
242
+
243
+ // erc721Transfers
244
+ if (condition.erc721Transfers !== undefined) {
245
+ switch (condition.erc721Transfers.type) {
246
+ case 'exact': {
247
+ if (
248
+ !verifyErc721TransfersSatisfiesExactCondition({
249
+ transfers: transaction.erc721Transfers,
250
+ transaction,
251
+ relatedAddresses,
252
+ condition: condition.erc721Transfers,
253
+ })
254
+ ) {
255
+ return false
256
+ }
257
+ break
258
+ }
259
+ case 'some': {
260
+ if (
261
+ !verifyErc721TransfersSatisfiesSomeCondition({
262
+ transfers: transaction.erc721Transfers,
263
+ transaction,
264
+ relatedAddresses,
265
+ condition: condition.erc721Transfers,
266
+ })
267
+ ) {
268
+ return false
269
+ }
270
+ break
271
+ }
272
+ }
273
+ }
274
+
275
+ // erc1155Transfers
276
+ if (condition.erc1155Transfers !== undefined) {
277
+ switch (condition.erc1155Transfers.type) {
278
+ case 'exact': {
279
+ if (
280
+ !verifyErc1155TransfersSatisfiesExactCondition({
281
+ transfers: transaction.erc1155Transfers,
282
+ transaction,
283
+ relatedAddresses,
284
+ condition: condition.erc1155Transfers,
285
+ })
286
+ ) {
287
+ return false
288
+ }
289
+ break
290
+ }
291
+ case 'some': {
292
+ if (
293
+ !verifyErc1155TransfersSatisfiesSomeCondition({
294
+ transfers: transaction.erc1155Transfers,
295
+ transaction,
296
+ relatedAddresses,
297
+ condition: condition.erc1155Transfers,
298
+ })
299
+ ) {
300
+ return false
301
+ }
302
+ break
303
+ }
304
+ }
305
+ }
306
+
307
+ return true
308
+ } catch (error) {
309
+ console.debug(error)
310
+ return false
311
+ }
312
+ }
313
+
314
+ const verifyLogsSatisfiesExactCondition = ({
315
+ logs,
316
+ transaction,
317
+ relatedAddresses,
318
+ condition: { patterns },
319
+ }: {
320
+ readonly logs: readonly Log[]
321
+ readonly transaction: TransactionDecoded
322
+ readonly relatedAddresses: Set<LowerHex>
323
+ readonly condition: z.infer<typeof exactLogsConditionSchema>
324
+ }): boolean => {
325
+ for (const [index, pattern] of patterns.entries()) {
326
+ const log = logs[index]
327
+
328
+ // address
329
+ if (
330
+ pattern.address !== undefined &&
331
+ !checkValueIsArrayIn({
332
+ value: log.address,
333
+ schema: pattern.address,
334
+ transaction,
335
+ relatedAddresses,
336
+ })
337
+ ) {
338
+ return false
339
+ }
340
+
341
+ // signature
342
+ if (
343
+ pattern.signature !== undefined &&
344
+ log.topics[0] !== pattern.signature
345
+ ) {
346
+ return false
347
+ }
348
+
349
+ // indexed count
350
+ if (
351
+ pattern.indexedCount !== undefined &&
352
+ log.topics.length - 1 !== pattern.indexedCount
353
+ ) {
354
+ return false
355
+ }
356
+
357
+ // args
358
+ if (pattern.args !== undefined) {
359
+ for (const { index, value: valueSchema } of pattern.args) {
360
+ const arg = log.args === undefined ? undefined : log.args[index].value
361
+
362
+ if (typeof valueSchema === 'string') {
363
+ if (stringify(arg).toLowerCase() !== valueSchema) {
364
+ return false
365
+ }
366
+ continue
367
+ }
368
+
369
+ switch (valueSchema.type) {
370
+ case 'array-in': {
371
+ if (
372
+ !checkValueIsArrayIn({
373
+ value: stringify(arg).toLowerCase(),
374
+ schema: valueSchema,
375
+ transaction,
376
+ relatedAddresses,
377
+ })
378
+ ) {
379
+ return false
380
+ }
381
+ break
382
+ }
383
+ case 'between': {
384
+ if (
385
+ !checkValueIsBetweenBigInt({
386
+ value: BigInt(stringify(arg)),
387
+ schema: valueSchema,
388
+ })
389
+ ) {
390
+ return false
391
+ }
392
+ break
393
+ }
394
+ default: {
395
+ const value = getAllValue({
396
+ schema: valueSchema,
397
+ transaction,
398
+ relatedAddresses,
399
+ })
400
+ if (stringify(arg).toLowerCase() !== value) {
401
+ return false
402
+ }
403
+ break
404
+ }
405
+ }
406
+ }
407
+ }
408
+ }
409
+
410
+ return true
411
+ }
412
+
413
+ const verifyLogsSatisfiesSomeCondition = ({
414
+ logs,
415
+ transaction,
416
+ relatedAddresses,
417
+ condition: { patterns },
418
+ }: {
419
+ readonly logs: readonly Log[]
420
+ readonly transaction: TransactionDecoded
421
+ readonly relatedAddresses: Set<LowerHex>
422
+ readonly condition: z.infer<typeof someLogsConditionSchema>
423
+ }): boolean => {
424
+ for (const pattern of patterns) {
425
+ let matchCount = 0n
426
+ for (const log of logs) {
427
+ // address
428
+ if (
429
+ pattern.address !== undefined &&
430
+ !checkValueIsArrayIn({
431
+ value: log.address,
432
+ schema: pattern.address,
433
+ transaction,
434
+ relatedAddresses,
435
+ })
436
+ ) {
437
+ continue
438
+ }
439
+
440
+ // signature
441
+ if (
442
+ pattern.signature !== undefined &&
443
+ log.topics[0] !== pattern.signature
444
+ ) {
445
+ continue
446
+ }
447
+
448
+ // indexed count
449
+ if (
450
+ pattern.indexedCount !== undefined &&
451
+ log.topics.length - 1 !== pattern.indexedCount
452
+ ) {
453
+ continue
454
+ }
455
+
456
+ // args
457
+ if (pattern.args !== undefined) {
458
+ let unmatched = false
459
+ for (const { index, value: valueSchema } of pattern.args) {
460
+ const arg = log.args === undefined ? undefined : log.args[index].value
461
+
462
+ if (typeof valueSchema === 'string') {
463
+ if (stringify(arg).toLowerCase() !== valueSchema) {
464
+ unmatched = true
465
+ }
466
+ continue
467
+ }
468
+
469
+ switch (valueSchema.type) {
470
+ case 'array-in': {
471
+ if (
472
+ !checkValueIsArrayIn({
473
+ value: stringify(arg).toLowerCase(),
474
+ schema: valueSchema,
475
+ transaction,
476
+ relatedAddresses,
477
+ })
478
+ ) {
479
+ unmatched = true
480
+ }
481
+ break
482
+ }
483
+ case 'between': {
484
+ if (
485
+ !checkValueIsBetweenBigInt({
486
+ value: BigInt(stringify(arg)),
487
+ schema: valueSchema,
488
+ })
489
+ ) {
490
+ unmatched = true
491
+ }
492
+ break
493
+ }
494
+ default: {
495
+ const value = getAllValue({
496
+ schema: valueSchema,
497
+ transaction,
498
+ relatedAddresses,
499
+ })
500
+ if (stringify(arg).toLowerCase() !== value) {
501
+ unmatched = true
502
+ }
503
+ break
504
+ }
505
+ }
506
+
507
+ if (unmatched) {
508
+ break
509
+ }
510
+ }
511
+ if (unmatched) {
512
+ continue
513
+ }
514
+ }
515
+
516
+ matchCount += 1n
517
+ }
518
+
519
+ if (
520
+ !checkValueIsBetweenBigInt({
521
+ value: matchCount,
522
+ schema: pattern.count,
523
+ })
524
+ ) {
525
+ return false
526
+ }
527
+ }
528
+
529
+ return true
530
+ }
531
+
532
+ const verifyErc20TransfersSatisfiesExactCondition = ({
533
+ transfers,
534
+ transaction,
535
+ relatedAddresses,
536
+ condition: { patterns },
537
+ }: {
538
+ readonly transfers: readonly Erc20TokenTransfer[]
539
+ readonly transaction: TransactionDecoded
540
+ readonly relatedAddresses: Set<LowerHex>
541
+ readonly condition: z.infer<typeof exactErc20TransfersConditionSchema>
542
+ }): boolean => {
543
+ for (const [index, pattern] of patterns.entries()) {
544
+ const transfer = transfers[index]
545
+
546
+ const matched = checkTransferIsMatchErc20Pattern({
547
+ transfer,
548
+ schema: pattern,
549
+ transaction,
550
+ relatedAddresses,
551
+ })
552
+ if (!matched) {
553
+ return false
554
+ }
555
+ }
556
+
557
+ return true
558
+ }
559
+
560
+ const verifyErc20TransfersSatisfiesSomeCondition = ({
561
+ transfers,
562
+ transaction,
563
+ relatedAddresses,
564
+ condition: { patterns },
565
+ }: {
566
+ readonly transfers: readonly Erc20TokenTransfer[]
567
+ readonly transaction: TransactionDecoded
568
+ readonly relatedAddresses: Set<LowerHex>
569
+ readonly condition: z.infer<typeof someErc20TransfersConditionSchema>
570
+ }): boolean => {
571
+ for (const pattern of patterns) {
572
+ let matchCount = 0n
573
+
574
+ for (const transfer of transfers) {
575
+ const matched = checkTransferIsMatchErc20Pattern({
576
+ transfer,
577
+ schema: pattern,
578
+ transaction,
579
+ relatedAddresses,
580
+ })
581
+ if (matched) {
582
+ matchCount += 1n
583
+ }
584
+ }
585
+
586
+ if (
587
+ !checkValueIsBetweenBigInt({
588
+ value: matchCount,
589
+ schema: pattern.count,
590
+ })
591
+ ) {
592
+ return false
593
+ }
594
+ }
595
+
596
+ return true
597
+ }
598
+
599
+ const verifyErc721TransfersSatisfiesExactCondition = ({
600
+ transfers,
601
+ transaction,
602
+ relatedAddresses,
603
+ condition: { patterns },
604
+ }: {
605
+ readonly transfers: readonly Erc721TokenTransfer[]
606
+ readonly transaction: TransactionDecoded
607
+ readonly relatedAddresses: Set<LowerHex>
608
+ readonly condition: z.infer<typeof exactErc721TransfersConditionSchema>
609
+ }): boolean => {
610
+ for (const [index, pattern] of patterns.entries()) {
611
+ const transfer = transfers[index]
612
+
613
+ const matched = checkTransferIsMatchErc721Pattern({
614
+ transfer,
615
+ schema: pattern,
616
+ transaction,
617
+ relatedAddresses,
618
+ })
619
+ if (!matched) {
620
+ return false
621
+ }
622
+ }
623
+
624
+ return true
625
+ }
626
+
627
+ const verifyErc721TransfersSatisfiesSomeCondition = ({
628
+ transfers,
629
+ transaction,
630
+ relatedAddresses,
631
+ condition: { patterns },
632
+ }: {
633
+ readonly transfers: readonly Erc721TokenTransfer[]
634
+ readonly transaction: TransactionDecoded
635
+ readonly relatedAddresses: Set<LowerHex>
636
+ readonly condition: z.infer<typeof someErc721TransfersConditionSchema>
637
+ }): boolean => {
638
+ for (const pattern of patterns) {
639
+ let matchCount = 0n
640
+
641
+ for (const transfer of transfers) {
642
+ const matched = checkTransferIsMatchErc721Pattern({
643
+ transfer,
644
+ schema: pattern,
645
+ transaction,
646
+ relatedAddresses,
647
+ })
648
+ if (matched) {
649
+ matchCount += 1n
650
+ }
651
+ }
652
+
653
+ if (
654
+ !checkValueIsBetweenBigInt({
655
+ value: matchCount,
656
+ schema: pattern.count,
657
+ })
658
+ ) {
659
+ return false
660
+ }
661
+ }
662
+
663
+ return true
664
+ }
665
+
666
+ const verifyErc1155TransfersSatisfiesExactCondition = ({
667
+ transfers,
668
+ transaction,
669
+ relatedAddresses,
670
+ condition: { patterns },
671
+ }: {
672
+ readonly transfers: readonly Erc1155TokenTransfer[]
673
+ readonly transaction: TransactionDecoded
674
+ readonly relatedAddresses: Set<LowerHex>
675
+ readonly condition: z.infer<typeof exactErc1155TransfersConditionSchema>
676
+ }): boolean => {
677
+ for (const [index, pattern] of patterns.entries()) {
678
+ const transfer = transfers[index]
679
+
680
+ const matched = checkTransferIsMatchErc1155Pattern({
681
+ transfer,
682
+ schema: pattern,
683
+ transaction,
684
+ relatedAddresses,
685
+ })
686
+ if (!matched) {
687
+ return false
688
+ }
689
+ }
690
+
691
+ return true
692
+ }
693
+
694
+ const verifyErc1155TransfersSatisfiesSomeCondition = ({
695
+ transfers,
696
+ transaction,
697
+ relatedAddresses,
698
+ condition: { patterns },
699
+ }: {
700
+ readonly transfers: readonly Erc1155TokenTransfer[]
701
+ readonly transaction: TransactionDecoded
702
+ readonly relatedAddresses: Set<LowerHex>
703
+ readonly condition: z.infer<typeof someErc1155TransfersConditionSchema>
704
+ }): boolean => {
705
+ for (const pattern of patterns) {
706
+ let matchCount = 0n
707
+
708
+ for (const transfer of transfers) {
709
+ const matched = checkTransferIsMatchErc1155Pattern({
710
+ transfer,
711
+ schema: pattern,
712
+ transaction,
713
+ relatedAddresses,
714
+ })
715
+ if (matched) {
716
+ matchCount += 1n
717
+ }
718
+ }
719
+
720
+ if (
721
+ !checkValueIsBetweenBigInt({
722
+ value: matchCount,
723
+ schema: pattern.count,
724
+ })
725
+ ) {
726
+ return false
727
+ }
728
+ }
729
+
730
+ return true
731
+ }