@snovon/solast 0.2.0

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 (738) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +190 -0
  3. package/dist/api.d.ts +89 -0
  4. package/dist/api.js +33 -0
  5. package/dist/ast/resolve-return-names.d.ts +2 -0
  6. package/dist/ast/resolve-return-names.js +199 -0
  7. package/dist/ast/solc-walker.d.ts +17 -0
  8. package/dist/ast/solc-walker.js +497 -0
  9. package/dist/ast/storage-layout.d.ts +21 -0
  10. package/dist/ast/storage-layout.js +64 -0
  11. package/dist/cli.d.ts +65 -0
  12. package/dist/cli.js +755 -0
  13. package/dist/config.d.ts +9 -0
  14. package/dist/config.js +284 -0
  15. package/dist/dedup/files.d.ts +1 -0
  16. package/dist/dedup/files.js +74 -0
  17. package/dist/dedup/findings.d.ts +41 -0
  18. package/dist/dedup/findings.js +211 -0
  19. package/dist/detectors/_common/access-control.d.ts +204 -0
  20. package/dist/detectors/_common/access-control.js +377 -0
  21. package/dist/detectors/_common/ast.d.ts +139 -0
  22. package/dist/detectors/_common/ast.js +239 -0
  23. package/dist/detectors/_common/compiler-profile.d.ts +14 -0
  24. package/dist/detectors/_common/compiler-profile.js +66 -0
  25. package/dist/detectors/_common/dataflow.d.ts +75 -0
  26. package/dist/detectors/_common/dataflow.js +57 -0
  27. package/dist/detectors/_common/fhe.d.ts +7 -0
  28. package/dist/detectors/_common/fhe.js +40 -0
  29. package/dist/detectors/_common/integer-overflow-helpers.d.ts +58 -0
  30. package/dist/detectors/_common/integer-overflow-helpers.js +422 -0
  31. package/dist/detectors/_common/loop-call-stack.d.ts +9 -0
  32. package/dist/detectors/_common/loop-call-stack.js +132 -0
  33. package/dist/detectors/_common/oracle.d.ts +5 -0
  34. package/dist/detectors/_common/oracle.js +64 -0
  35. package/dist/detectors/_common/price-rate.d.ts +116 -0
  36. package/dist/detectors/_common/price-rate.js +446 -0
  37. package/dist/detectors/_common/source-text.d.ts +11 -0
  38. package/dist/detectors/_common/source-text.js +82 -0
  39. package/dist/detectors/_common/weighted-pool-invariant.d.ts +21 -0
  40. package/dist/detectors/_common/weighted-pool-invariant.js +105 -0
  41. package/dist/detectors/aave-v2-reentrancy.d.ts +7 -0
  42. package/dist/detectors/aave-v2-reentrancy.js +286 -0
  43. package/dist/detectors/access-control.d.ts +103 -0
  44. package/dist/detectors/access-control.js +983 -0
  45. package/dist/detectors/add-reentrancy-on-weth-contract.d.ts +7 -0
  46. package/dist/detectors/add-reentrancy-on-weth-contract.js +536 -0
  47. package/dist/detectors/ai-generated-randomness.d.ts +32 -0
  48. package/dist/detectors/ai-generated-randomness.js +239 -0
  49. package/dist/detectors/amm-spot-oracle-manipulation.d.ts +52 -0
  50. package/dist/detectors/amm-spot-oracle-manipulation.js +420 -0
  51. package/dist/detectors/analyzing-the-uniswap-v3-exploit.d.ts +26 -0
  52. package/dist/detectors/analyzing-the-uniswap-v3-exploit.js +279 -0
  53. package/dist/detectors/any-token-is-destroyed.d.ts +34 -0
  54. package/dist/detectors/any-token-is-destroyed.js +527 -0
  55. package/dist/detectors/anyswap-anytoken-permit-allowance-drain.d.ts +7 -0
  56. package/dist/detectors/anyswap-anytoken-permit-allowance-drain.js +524 -0
  57. package/dist/detectors/anyswap-insufficient-token-validation.d.ts +24 -0
  58. package/dist/detectors/anyswap-insufficient-token-validation.js +342 -0
  59. package/dist/detectors/approval-based-drain.d.ts +7 -0
  60. package/dist/detectors/approval-based-drain.js +772 -0
  61. package/dist/detectors/arbitrary-account-balance-transfer.d.ts +7 -0
  62. package/dist/detectors/arbitrary-account-balance-transfer.js +485 -0
  63. package/dist/detectors/arbitrary-address-spoofing-attack.d.ts +7 -0
  64. package/dist/detectors/arbitrary-address-spoofing-attack.js +444 -0
  65. package/dist/detectors/arbitrary-address-spoofing.d.ts +9 -0
  66. package/dist/detectors/arbitrary-address-spoofing.js +657 -0
  67. package/dist/detectors/arbitrary-call-error.d.ts +127 -0
  68. package/dist/detectors/arbitrary-call-error.js +1163 -0
  69. package/dist/detectors/arbitrary-call.d.ts +4 -0
  70. package/dist/detectors/arbitrary-call.js +11 -0
  71. package/dist/detectors/arbitrary-delegatecall-target.d.ts +35 -0
  72. package/dist/detectors/arbitrary-delegatecall-target.js +554 -0
  73. package/dist/detectors/arbitrary-recipient-no-access-control.d.ts +7 -0
  74. package/dist/detectors/arbitrary-recipient-no-access-control.js +638 -0
  75. package/dist/detectors/arbitrary-storage-proof-forgery.d.ts +35 -0
  76. package/dist/detectors/arbitrary-storage-proof-forgery.js +340 -0
  77. package/dist/detectors/arbitrary-transfer-from.d.ts +38 -0
  78. package/dist/detectors/arbitrary-transfer-from.js +339 -0
  79. package/dist/detectors/arbitrum-cross-chain-message-replay.d.ts +22 -0
  80. package/dist/detectors/arbitrum-cross-chain-message-replay.js +477 -0
  81. package/dist/detectors/avs-slashing-without-quorum-check.d.ts +50 -0
  82. package/dist/detectors/avs-slashing-without-quorum-check.js +386 -0
  83. package/dist/detectors/bad-debt-propagation.d.ts +13 -0
  84. package/dist/detectors/bad-debt-propagation.js +480 -0
  85. package/dist/detectors/bad-k-value-verification.d.ts +7 -0
  86. package/dist/detectors/bad-k-value-verification.js +512 -0
  87. package/dist/detectors/bad-randomness-zero-blockhash.d.ts +29 -0
  88. package/dist/detectors/bad-randomness-zero-blockhash.js +115 -0
  89. package/dist/detectors/balancer-flash-loan-manipulation.d.ts +33 -0
  90. package/dist/detectors/balancer-flash-loan-manipulation.js +178 -0
  91. package/dist/detectors/balancer-pause-guard.d.ts +33 -0
  92. package/dist/detectors/balancer-pause-guard.js +307 -0
  93. package/dist/detectors/balancer-weighted-pool-flash-loan.d.ts +42 -0
  94. package/dist/detectors/balancer-weighted-pool-flash-loan.js +275 -0
  95. package/dist/detectors/batch-transfer-overflow.d.ts +7 -0
  96. package/dist/detectors/batch-transfer-overflow.js +465 -0
  97. package/dist/detectors/beneficiary-validation.d.ts +7 -0
  98. package/dist/detectors/beneficiary-validation.js +696 -0
  99. package/dist/detectors/borrow-behalf-consent.d.ts +7 -0
  100. package/dist/detectors/borrow-behalf-consent.js +400 -0
  101. package/dist/detectors/break-continue-scope.d.ts +7 -0
  102. package/dist/detectors/break-continue-scope.js +194 -0
  103. package/dist/detectors/bridge-accounting-bypass.d.ts +65 -0
  104. package/dist/detectors/bridge-accounting-bypass.js +449 -0
  105. package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.d.ts +43 -0
  106. package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.js +394 -0
  107. package/dist/detectors/bridge-collateral-drain.d.ts +7 -0
  108. package/dist/detectors/bridge-collateral-drain.js +630 -0
  109. package/dist/detectors/bridge-forged-proof.d.ts +7 -0
  110. package/dist/detectors/bridge-forged-proof.js +754 -0
  111. package/dist/detectors/bridge-missing-message-nonce.d.ts +57 -0
  112. package/dist/detectors/bridge-missing-message-nonce.js +638 -0
  113. package/dist/detectors/bridge-swap-metapool-attack.d.ts +20 -0
  114. package/dist/detectors/bridge-swap-metapool-attack.js +230 -0
  115. package/dist/detectors/business-logic-flaw-flashloan-price-mani.d.ts +7 -0
  116. package/dist/detectors/business-logic-flaw-flashloan-price-mani.js +353 -0
  117. package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.d.ts +7 -0
  118. package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.js +403 -0
  119. package/dist/detectors/business-logic-flaw.d.ts +21 -0
  120. package/dist/detectors/business-logic-flaw.js +339 -0
  121. package/dist/detectors/business-logic.d.ts +17 -0
  122. package/dist/detectors/business-logic.js +22 -0
  123. package/dist/detectors/bypassed-insolvency-check.d.ts +30 -0
  124. package/dist/detectors/bypassed-insolvency-check.js +232 -0
  125. package/dist/detectors/bytecode-divergence-risk.d.ts +32 -0
  126. package/dist/detectors/bytecode-divergence-risk.js +150 -0
  127. package/dist/detectors/cache-array-length.d.ts +30 -0
  128. package/dist/detectors/cache-array-length.js +177 -0
  129. package/dist/detectors/cache-storage-reads.d.ts +46 -0
  130. package/dist/detectors/cache-storage-reads.js +323 -0
  131. package/dist/detectors/calldata-secret-access-control.d.ts +36 -0
  132. package/dist/detectors/calldata-secret-access-control.js +446 -0
  133. package/dist/detectors/capital-cross-contract-reentrancy.d.ts +34 -0
  134. package/dist/detectors/capital-cross-contract-reentrancy.js +481 -0
  135. package/dist/detectors/cartel-custom-approval-logic.d.ts +7 -0
  136. package/dist/detectors/cartel-custom-approval-logic.js +407 -0
  137. package/dist/detectors/ccip-receiver-missing-replay-guard.d.ts +22 -0
  138. package/dist/detectors/ccip-receiver-missing-replay-guard.js +413 -0
  139. package/dist/detectors/chain-coupling-risk.d.ts +8 -0
  140. package/dist/detectors/chain-coupling-risk.js +203 -0
  141. package/dist/detectors/chainlink-deprecated-function.d.ts +7 -0
  142. package/dist/detectors/chainlink-deprecated-function.js +205 -0
  143. package/dist/detectors/chainlink-tx-origin.d.ts +7 -0
  144. package/dist/detectors/chainlink-tx-origin.js +363 -0
  145. package/dist/detectors/check-effects-interactions.d.ts +39 -0
  146. package/dist/detectors/check-effects-interactions.js +783 -0
  147. package/dist/detectors/check-permit-missing-chainid.d.ts +27 -0
  148. package/dist/detectors/check-permit-missing-chainid.js +456 -0
  149. package/dist/detectors/classic-reentrancy.d.ts +93 -0
  150. package/dist/detectors/classic-reentrancy.js +645 -0
  151. package/dist/detectors/coinbase-morpho-wethloan-policy.d.ts +29 -0
  152. package/dist/detectors/coinbase-morpho-wethloan-policy.js +368 -0
  153. package/dist/detectors/compoundv2-inflation-attack.d.ts +7 -0
  154. package/dist/detectors/compoundv2-inflation-attack.js +675 -0
  155. package/dist/detectors/constructor-address-validation.d.ts +24 -0
  156. package/dist/detectors/constructor-address-validation.js +335 -0
  157. package/dist/detectors/constructor-interface-no-address-validation.d.ts +32 -0
  158. package/dist/detectors/constructor-interface-no-address-validation.js +283 -0
  159. package/dist/detectors/cross-chain-arbitrary-call.d.ts +7 -0
  160. package/dist/detectors/cross-chain-arbitrary-call.js +601 -0
  161. package/dist/detectors/cross-chain-input-validation.d.ts +31 -0
  162. package/dist/detectors/cross-chain-input-validation.js +347 -0
  163. package/dist/detectors/cross-chain-intent-replay.d.ts +38 -0
  164. package/dist/detectors/cross-chain-intent-replay.js +453 -0
  165. package/dist/detectors/cross-chain-intent-stale-resolution.d.ts +7 -0
  166. package/dist/detectors/cross-chain-intent-stale-resolution.js +463 -0
  167. package/dist/detectors/cross-chain-message-order-dependency.d.ts +8 -0
  168. package/dist/detectors/cross-chain-message-order-dependency.js +472 -0
  169. package/dist/detectors/cross-chain-message-replay.d.ts +8 -0
  170. package/dist/detectors/cross-chain-message-replay.js +568 -0
  171. package/dist/detectors/cross-chain-messaging.d.ts +7 -0
  172. package/dist/detectors/cross-chain-messaging.js +663 -0
  173. package/dist/detectors/cross-chain-msg-truncation.d.ts +7 -0
  174. package/dist/detectors/cross-chain-msg-truncation.js +453 -0
  175. package/dist/detectors/cross-chain-truncation.d.ts +7 -0
  176. package/dist/detectors/cross-chain-truncation.js +422 -0
  177. package/dist/detectors/cross-contract-integer-overflow.d.ts +76 -0
  178. package/dist/detectors/cross-contract-integer-overflow.js +554 -0
  179. package/dist/detectors/cross-contract-reentrancy-trusted-callee.d.ts +39 -0
  180. package/dist/detectors/cross-contract-reentrancy-trusted-callee.js +385 -0
  181. package/dist/detectors/cross-contract-reentrancy.d.ts +63 -0
  182. package/dist/detectors/cross-contract-reentrancy.js +631 -0
  183. package/dist/detectors/cross-function-reentrancy.d.ts +37 -0
  184. package/dist/detectors/cross-function-reentrancy.js +648 -0
  185. package/dist/detectors/cross-protocol-contagion.d.ts +20 -0
  186. package/dist/detectors/cross-protocol-contagion.js +445 -0
  187. package/dist/detectors/cross-protocol-oracle-collateral.d.ts +38 -0
  188. package/dist/detectors/cross-protocol-oracle-collateral.js +487 -0
  189. package/dist/detectors/cross-vm-reentrancy.d.ts +7 -0
  190. package/dist/detectors/cross-vm-reentrancy.js +484 -0
  191. package/dist/detectors/decimals-mismatch.d.ts +89 -0
  192. package/dist/detectors/decimals-mismatch.js +451 -0
  193. package/dist/detectors/deferred-state-update.d.ts +16 -0
  194. package/dist/detectors/deferred-state-update.js +35 -0
  195. package/dist/detectors/deflationary-token.d.ts +27 -0
  196. package/dist/detectors/deflationary-token.js +751 -0
  197. package/dist/detectors/delegate-transfer-unrestricted-caller.d.ts +44 -0
  198. package/dist/detectors/delegate-transfer-unrestricted-caller.js +410 -0
  199. package/dist/detectors/delegatecall-fallback-reentrancy-bypass.d.ts +14 -0
  200. package/dist/detectors/delegatecall-fallback-reentrancy-bypass.js +241 -0
  201. package/dist/detectors/delegatecall-in-loops.d.ts +7 -0
  202. package/dist/detectors/delegatecall-in-loops.js +129 -0
  203. package/dist/detectors/delegatecall-init-owner-mutator.d.ts +8 -0
  204. package/dist/detectors/delegatecall-init-owner-mutator.js +655 -0
  205. package/dist/detectors/delegatecall-init.d.ts +7 -0
  206. package/dist/detectors/delegatecall-init.js +769 -0
  207. package/dist/detectors/delegatecall-untrusted-implementation.d.ts +41 -0
  208. package/dist/detectors/delegatecall-untrusted-implementation.js +888 -0
  209. package/dist/detectors/delegated-authorization-bypass.d.ts +7 -0
  210. package/dist/detectors/delegated-authorization-bypass.js +370 -0
  211. package/dist/detectors/denial-of-service.d.ts +117 -0
  212. package/dist/detectors/denial-of-service.js +947 -0
  213. package/dist/detectors/division-before-multiplication.d.ts +7 -0
  214. package/dist/detectors/division-before-multiplication.js +303 -0
  215. package/dist/detectors/dn404-mirror-access-control.d.ts +26 -0
  216. package/dist/detectors/dn404-mirror-access-control.js +315 -0
  217. package/dist/detectors/doge-flashloan.d.ts +29 -0
  218. package/dist/detectors/doge-flashloan.js +329 -0
  219. package/dist/detectors/donate-inflation-exchangerate-roundin.d.ts +7 -0
  220. package/dist/detectors/donate-inflation-exchangerate-roundin.js +621 -0
  221. package/dist/detectors/donation-share-inflation.d.ts +24 -0
  222. package/dist/detectors/donation-share-inflation.js +466 -0
  223. package/dist/detectors/dont-let-eth-get-rekt.d.ts +84 -0
  224. package/dist/detectors/dont-let-eth-get-rekt.js +1151 -0
  225. package/dist/detectors/dos-unbounded-loop-external-call-revert.d.ts +37 -0
  226. package/dist/detectors/dos-unbounded-loop-external-call-revert.js +541 -0
  227. package/dist/detectors/eip1167-proxy-reentrancy.d.ts +7 -0
  228. package/dist/detectors/eip1167-proxy-reentrancy.js +508 -0
  229. package/dist/detectors/eip4626-vault-reentrancy.d.ts +32 -0
  230. package/dist/detectors/eip4626-vault-reentrancy.js +312 -0
  231. package/dist/detectors/eip5792-auth-replay.d.ts +45 -0
  232. package/dist/detectors/eip5792-auth-replay.js +519 -0
  233. package/dist/detectors/eip712-domain-separator.d.ts +42 -0
  234. package/dist/detectors/eip712-domain-separator.js +524 -0
  235. package/dist/detectors/eip712-signature-verification.d.ts +49 -0
  236. package/dist/detectors/eip712-signature-verification.js +689 -0
  237. package/dist/detectors/eip7702-auth-replay.d.ts +7 -0
  238. package/dist/detectors/eip7702-auth-replay.js +768 -0
  239. package/dist/detectors/eip7702-cross-chain-replay.d.ts +27 -0
  240. package/dist/detectors/eip7702-cross-chain-replay.js +307 -0
  241. package/dist/detectors/eip7702-delegated-eoa-approval-race.d.ts +39 -0
  242. package/dist/detectors/eip7702-delegated-eoa-approval-race.js +413 -0
  243. package/dist/detectors/eip7702-delegation-reentrancy.d.ts +21 -0
  244. package/dist/detectors/eip7702-delegation-reentrancy.js +705 -0
  245. package/dist/detectors/eip7702-delegation-risk.d.ts +7 -0
  246. package/dist/detectors/eip7702-delegation-risk.js +745 -0
  247. package/dist/detectors/eip7702-eoa-assumption.d.ts +57 -0
  248. package/dist/detectors/eip7702-eoa-assumption.js +461 -0
  249. package/dist/detectors/erc1155-batch-missing-per-id-approval.d.ts +23 -0
  250. package/dist/detectors/erc1155-batch-missing-per-id-approval.js +343 -0
  251. package/dist/detectors/erc1155-reentrancy.d.ts +31 -0
  252. package/dist/detectors/erc1155-reentrancy.js +217 -0
  253. package/dist/detectors/erc1271-stub-implementation.d.ts +21 -0
  254. package/dist/detectors/erc1271-stub-implementation.js +268 -0
  255. package/dist/detectors/erc20-safe-wrapper-return-unchecked.d.ts +43 -0
  256. package/dist/detectors/erc20-safe-wrapper-return-unchecked.js +368 -0
  257. package/dist/detectors/erc20-unchecked-non-standard-return.d.ts +55 -0
  258. package/dist/detectors/erc20-unchecked-non-standard-return.js +454 -0
  259. package/dist/detectors/erc2612-permit-frontrunning.d.ts +23 -0
  260. package/dist/detectors/erc2612-permit-frontrunning.js +246 -0
  261. package/dist/detectors/erc2771-context-spoofing.d.ts +41 -0
  262. package/dist/detectors/erc2771-context-spoofing.js +510 -0
  263. package/dist/detectors/erc4337-validation-storage-access.d.ts +35 -0
  264. package/dist/detectors/erc4337-validation-storage-access.js +232 -0
  265. package/dist/detectors/erc4626-totalassets-stub.d.ts +17 -0
  266. package/dist/detectors/erc4626-totalassets-stub.js +216 -0
  267. package/dist/detectors/erc6909-balance-overflow.d.ts +7 -0
  268. package/dist/detectors/erc6909-balance-overflow.js +688 -0
  269. package/dist/detectors/erc6909-operator-scope.d.ts +49 -0
  270. package/dist/detectors/erc6909-operator-scope.js +494 -0
  271. package/dist/detectors/erc721-unchecked-transfer.d.ts +38 -0
  272. package/dist/detectors/erc721-unchecked-transfer.js +364 -0
  273. package/dist/detectors/erc7579-module-install-without-threshold.d.ts +40 -0
  274. package/dist/detectors/erc7579-module-install-without-threshold.js +338 -0
  275. package/dist/detectors/erc7683-fill-validation.d.ts +53 -0
  276. package/dist/detectors/erc7683-fill-validation.js +758 -0
  277. package/dist/detectors/erc7683-intent-resolution.d.ts +7 -0
  278. package/dist/detectors/erc7683-intent-resolution.js +457 -0
  279. package/dist/detectors/erc777-callback-reentrancy.d.ts +8 -0
  280. package/dist/detectors/erc777-callback-reentrancy.js +439 -0
  281. package/dist/detectors/erc777-reentrancy.d.ts +7 -0
  282. package/dist/detectors/erc777-reentrancy.js +488 -0
  283. package/dist/detectors/erc777-tokens-to-send-reentrancy.d.ts +47 -0
  284. package/dist/detectors/erc777-tokens-to-send-reentrancy.js +674 -0
  285. package/dist/detectors/estuary-token-flaw.d.ts +16 -0
  286. package/dist/detectors/estuary-token-flaw.js +547 -0
  287. package/dist/detectors/euler-debt-token-manipulation.d.ts +32 -0
  288. package/dist/detectors/euler-debt-token-manipulation.js +347 -0
  289. package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.d.ts +29 -0
  290. package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.js +210 -0
  291. package/dist/detectors/fallback-delegatecall-reentrancy.d.ts +14 -0
  292. package/dist/detectors/fallback-delegatecall-reentrancy.js +236 -0
  293. package/dist/detectors/farm-business-logic-flaw-lack-of-access.d.ts +7 -0
  294. package/dist/detectors/farm-business-logic-flaw-lack-of-access.js +665 -0
  295. package/dist/detectors/fee-mechanism-exploitation.d.ts +20 -0
  296. package/dist/detectors/fee-mechanism-exploitation.js +400 -0
  297. package/dist/detectors/fee-on-transfer-balance-mismatch.d.ts +49 -0
  298. package/dist/detectors/fee-on-transfer-balance-mismatch.js +394 -0
  299. package/dist/detectors/fhe-encrypted-input-validation.d.ts +29 -0
  300. package/dist/detectors/fhe-encrypted-input-validation.js +210 -0
  301. package/dist/detectors/fhe-handle-leakage.d.ts +44 -0
  302. package/dist/detectors/fhe-handle-leakage.js +315 -0
  303. package/dist/detectors/fhe-oz-pattern-misuse.d.ts +26 -0
  304. package/dist/detectors/fhe-oz-pattern-misuse.js +311 -0
  305. package/dist/detectors/fhe-state-leakage.d.ts +8 -0
  306. package/dist/detectors/fhe-state-leakage.js +400 -0
  307. package/dist/detectors/fi-bridges.d.ts +33 -0
  308. package/dist/detectors/fi-bridges.js +428 -0
  309. package/dist/detectors/finance-access-control-price-oracle-man.d.ts +9 -0
  310. package/dist/detectors/finance-access-control-price-oracle-man.js +640 -0
  311. package/dist/detectors/finance-bridge-address0safetransferfrom.d.ts +8 -0
  312. package/dist/detectors/finance-bridge-address0safetransferfrom.js +574 -0
  313. package/dist/detectors/finance-business-logic-in-mint.d.ts +54 -0
  314. package/dist/detectors/finance-business-logic-in-mint.js +687 -0
  315. package/dist/detectors/finance-erc667-reentrancy.d.ts +7 -0
  316. package/dist/detectors/finance-erc667-reentrancy.js +509 -0
  317. package/dist/detectors/finance-flashloan-price-oracle-manipul.d.ts +7 -0
  318. package/dist/detectors/finance-flashloan-price-oracle-manipul.js +546 -0
  319. package/dist/detectors/finance-flashloan-reentrancy.d.ts +7 -0
  320. package/dist/detectors/finance-flashloan-reentrancy.js +547 -0
  321. package/dist/detectors/finance-swap-metapool-attack.d.ts +19 -0
  322. package/dist/detectors/finance-swap-metapool-attack.js +321 -0
  323. package/dist/detectors/flashloan-price-manipulation.d.ts +7 -0
  324. package/dist/detectors/flashloan-price-manipulation.js +950 -0
  325. package/dist/detectors/flashloan-reentrancy-rari.d.ts +28 -0
  326. package/dist/detectors/flashloan-reentrancy-rari.js +577 -0
  327. package/dist/detectors/flashloan-reentrancy.d.ts +7 -0
  328. package/dist/detectors/flashloan-reentrancy.js +383 -0
  329. package/dist/detectors/flashloan-token-migrate.d.ts +7 -0
  330. package/dist/detectors/flashloan-token-migrate.js +274 -0
  331. package/dist/detectors/force-fed-eth-state-corruption.d.ts +32 -0
  332. package/dist/detectors/force-fed-eth-state-corruption.js +293 -0
  333. package/dist/detectors/free-mint-bug.d.ts +41 -0
  334. package/dist/detectors/free-mint-bug.js +483 -0
  335. package/dist/detectors/front-running-orderbook-state-update.d.ts +37 -0
  336. package/dist/detectors/front-running-orderbook-state-update.js +471 -0
  337. package/dist/detectors/front-running-shared-collateral-write.d.ts +41 -0
  338. package/dist/detectors/front-running-shared-collateral-write.js +508 -0
  339. package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.d.ts +30 -0
  340. package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.js +354 -0
  341. package/dist/detectors/generalized-frontrunning.d.ts +7 -0
  342. package/dist/detectors/generalized-frontrunning.js +836 -0
  343. package/dist/detectors/governance-flash-loan.d.ts +62 -0
  344. package/dist/detectors/governance-flash-loan.js +452 -0
  345. package/dist/detectors/governance-flashloan-vote.d.ts +41 -0
  346. package/dist/detectors/governance-flashloan-vote.js +272 -0
  347. package/dist/detectors/halborn-security-report-aave-v3.d.ts +6 -0
  348. package/dist/detectors/halborn-security-report-aave-v3.js +357 -0
  349. package/dist/detectors/incorrect-access-control.d.ts +26 -0
  350. package/dist/detectors/incorrect-access-control.js +328 -0
  351. package/dist/detectors/incorrect-burn-accounting.d.ts +10 -0
  352. package/dist/detectors/incorrect-burn-accounting.js +387 -0
  353. package/dist/detectors/incorrect-dividends-calculation.d.ts +27 -0
  354. package/dist/detectors/incorrect-dividends-calculation.js +524 -0
  355. package/dist/detectors/incorrect-dividends.d.ts +27 -0
  356. package/dist/detectors/incorrect-dividends.js +485 -0
  357. package/dist/detectors/incorrect-input-validation.d.ts +23 -0
  358. package/dist/detectors/incorrect-input-validation.js +312 -0
  359. package/dist/detectors/incorrect-signature-verification.d.ts +26 -0
  360. package/dist/detectors/incorrect-signature-verification.js +530 -0
  361. package/dist/detectors/infinite-loop.d.ts +7 -0
  362. package/dist/detectors/infinite-loop.js +440 -0
  363. package/dist/detectors/infinite-number-of-loans.d.ts +13 -0
  364. package/dist/detectors/infinite-number-of-loans.js +565 -0
  365. package/dist/detectors/inheritance-override.d.ts +26 -0
  366. package/dist/detectors/inheritance-override.js +320 -0
  367. package/dist/detectors/initialization-access-control.d.ts +8 -0
  368. package/dist/detectors/initialization-access-control.js +659 -0
  369. package/dist/detectors/insecure-randomness.d.ts +73 -0
  370. package/dist/detectors/insecure-randomness.js +610 -0
  371. package/dist/detectors/insufficient-access-control-trusted-param.d.ts +39 -0
  372. package/dist/detectors/insufficient-access-control-trusted-param.js +356 -0
  373. package/dist/detectors/insufficient-dvn-threshold.d.ts +32 -0
  374. package/dist/detectors/insufficient-dvn-threshold.js +585 -0
  375. package/dist/detectors/integer-overflow-detector.d.ts +45 -0
  376. package/dist/detectors/integer-overflow-detector.js +284 -0
  377. package/dist/detectors/integer-overflow.d.ts +95 -0
  378. package/dist/detectors/integer-overflow.js +344 -0
  379. package/dist/detectors/integer-underflow.d.ts +7 -0
  380. package/dist/detectors/integer-underflow.js +422 -0
  381. package/dist/detectors/intent-settlement-balance-manipulation.d.ts +22 -0
  382. package/dist/detectors/intent-settlement-balance-manipulation.js +548 -0
  383. package/dist/detectors/l1-to-l2-message-reentrancy.d.ts +7 -0
  384. package/dist/detectors/l1-to-l2-message-reentrancy.js +545 -0
  385. package/dist/detectors/l2-withdrawal-validation.d.ts +8 -0
  386. package/dist/detectors/l2-withdrawal-validation.js +303 -0
  387. package/dist/detectors/lack-of-access-control.d.ts +7 -0
  388. package/dist/detectors/lack-of-access-control.js +425 -0
  389. package/dist/detectors/lack-of-calldata-validation.d.ts +16 -0
  390. package/dist/detectors/lack-of-calldata-validation.js +914 -0
  391. package/dist/detectors/lack-of-input-validation-reentrancy.d.ts +7 -0
  392. package/dist/detectors/lack-of-input-validation-reentrancy.js +637 -0
  393. package/dist/detectors/lack-of-slippage-control.d.ts +7 -0
  394. package/dist/detectors/lack-of-slippage-control.js +513 -0
  395. package/dist/detectors/lack-of-slippage-protection.d.ts +7 -0
  396. package/dist/detectors/lack-of-slippage-protection.js +474 -0
  397. package/dist/detectors/lack-of-validation-data.d.ts +23 -0
  398. package/dist/detectors/lack-of-validation-data.js +391 -0
  399. package/dist/detectors/lack-of-validation-pool.d.ts +7 -0
  400. package/dist/detectors/lack-of-validation-pool.js +492 -0
  401. package/dist/detectors/lack-of-validation-userdata.d.ts +7 -0
  402. package/dist/detectors/lack-of-validation-userdata.js +583 -0
  403. package/dist/detectors/lack-of-validation.d.ts +27 -0
  404. package/dist/detectors/lack-of-validation.js +609 -0
  405. package/dist/detectors/layerzero-dvn-quorum-missing.d.ts +22 -0
  406. package/dist/detectors/layerzero-dvn-quorum-missing.js +464 -0
  407. package/dist/detectors/layerzero-v2-unverified-origin.d.ts +40 -0
  408. package/dist/detectors/layerzero-v2-unverified-origin.js +368 -0
  409. package/dist/detectors/liquidation-accounting-desync.d.ts +14 -0
  410. package/dist/detectors/liquidation-accounting-desync.js +145 -0
  411. package/dist/detectors/liquidation-gain-manipulation.d.ts +42 -0
  412. package/dist/detectors/liquidation-gain-manipulation.js +606 -0
  413. package/dist/detectors/liquidation-price-rounding-advantage.d.ts +26 -0
  414. package/dist/detectors/liquidation-price-rounding-advantage.js +283 -0
  415. package/dist/detectors/liquidity-poisoning.d.ts +25 -0
  416. package/dist/detectors/liquidity-poisoning.js +339 -0
  417. package/dist/detectors/loans-malicious-proposal-price-oracle.d.ts +44 -0
  418. package/dist/detectors/loans-malicious-proposal-price-oracle.js +813 -0
  419. package/dist/detectors/logic-flaw.d.ts +186 -0
  420. package/dist/detectors/logic-flaw.js +3356 -0
  421. package/dist/detectors/manipulation-of-funds.d.ts +31 -0
  422. package/dist/detectors/manipulation-of-funds.js +304 -0
  423. package/dist/detectors/merkl-unsafe-claim-callback.d.ts +22 -0
  424. package/dist/detectors/merkl-unsafe-claim-callback.js +94 -0
  425. package/dist/detectors/mev-boost-timestamp.d.ts +7 -0
  426. package/dist/detectors/mev-boost-timestamp.js +318 -0
  427. package/dist/detectors/mev-merge-exploit.d.ts +29 -0
  428. package/dist/detectors/mev-merge-exploit.js +397 -0
  429. package/dist/detectors/mev-sandwich-vulnerability.d.ts +24 -0
  430. package/dist/detectors/mev-sandwich-vulnerability.js +648 -0
  431. package/dist/detectors/mev-slot-manipulation.d.ts +36 -0
  432. package/dist/detectors/mev-slot-manipulation.js +691 -0
  433. package/dist/detectors/mevbot-insufficient-validation.d.ts +48 -0
  434. package/dist/detectors/mevbot-insufficient-validation.js +574 -0
  435. package/dist/detectors/migration-rebalance-without-bound.d.ts +7 -0
  436. package/dist/detectors/migration-rebalance-without-bound.js +514 -0
  437. package/dist/detectors/mint-hardcoded-asset-parity.d.ts +31 -0
  438. package/dist/detectors/mint-hardcoded-asset-parity.js +356 -0
  439. package/dist/detectors/miscalculation-on-spendallowance.d.ts +7 -0
  440. package/dist/detectors/miscalculation-on-spendallowance.js +188 -0
  441. package/dist/detectors/misconfiguration.d.ts +27 -0
  442. package/dist/detectors/misconfiguration.js +410 -0
  443. package/dist/detectors/missing-access-control-caller-supplied-auth.d.ts +7 -0
  444. package/dist/detectors/missing-access-control-caller-supplied-auth.js +550 -0
  445. package/dist/detectors/missing-access-control-receiver-payout.d.ts +7 -0
  446. package/dist/detectors/missing-access-control-receiver-payout.js +460 -0
  447. package/dist/detectors/missing-access-control-role-or-transferfrom.d.ts +7 -0
  448. package/dist/detectors/missing-access-control-role-or-transferfrom.js +663 -0
  449. package/dist/detectors/missing-access-control.d.ts +19 -0
  450. package/dist/detectors/missing-access-control.js +781 -0
  451. package/dist/detectors/missing-sequencer-uptime-check.d.ts +30 -0
  452. package/dist/detectors/missing-sequencer-uptime-check.js +348 -0
  453. package/dist/detectors/missing-storage-gap.d.ts +19 -0
  454. package/dist/detectors/missing-storage-gap.js +193 -0
  455. package/dist/detectors/missing-swap-deadline-slippage.d.ts +31 -0
  456. package/dist/detectors/missing-swap-deadline-slippage.js +231 -0
  457. package/dist/detectors/missing-zk-proof-verification.d.ts +60 -0
  458. package/dist/detectors/missing-zk-proof-verification.js +547 -0
  459. package/dist/detectors/my-experience-with-yearn-finance.d.ts +7 -0
  460. package/dist/detectors/my-experience-with-yearn-finance.js +552 -0
  461. package/dist/detectors/network-bridge-ronin.d.ts +7 -0
  462. package/dist/detectors/network-bridge-ronin.js +408 -0
  463. package/dist/detectors/network-bridge.d.ts +7 -0
  464. package/dist/detectors/network-bridge.js +444 -0
  465. package/dist/detectors/network-underflow.d.ts +7 -0
  466. package/dist/detectors/network-underflow.js +517 -0
  467. package/dist/detectors/nft-denial-of-service.d.ts +7 -0
  468. package/dist/detectors/nft-denial-of-service.js +223 -0
  469. package/dist/detectors/nft-marketplace-order-reentrancy.d.ts +7 -0
  470. package/dist/detectors/nft-marketplace-order-reentrancy.js +427 -0
  471. package/dist/detectors/nft-token-standard-access-control.d.ts +7 -0
  472. package/dist/detectors/nft-token-standard-access-control.js +455 -0
  473. package/dist/detectors/oracle-manipulation-amm-spot-price.d.ts +42 -0
  474. package/dist/detectors/oracle-manipulation-amm-spot-price.js +321 -0
  475. package/dist/detectors/oracle-manipulation-liquidity-withdrawal.d.ts +27 -0
  476. package/dist/detectors/oracle-manipulation-liquidity-withdrawal.js +192 -0
  477. package/dist/detectors/oracle-manipulation.d.ts +90 -0
  478. package/dist/detectors/oracle-manipulation.js +1023 -0
  479. package/dist/detectors/oracle-vortex-manipulation.d.ts +30 -0
  480. package/dist/detectors/oracle-vortex-manipulation.js +473 -0
  481. package/dist/detectors/overpriced-asset-in-oracle.d.ts +41 -0
  482. package/dist/detectors/overpriced-asset-in-oracle.js +420 -0
  483. package/dist/detectors/oz-access-control-roles.d.ts +33 -0
  484. package/dist/detectors/oz-access-control-roles.js +359 -0
  485. package/dist/detectors/pair-manipulation-transfer-hook.d.ts +38 -0
  486. package/dist/detectors/pair-manipulation-transfer-hook.js +366 -0
  487. package/dist/detectors/parameter-access-control.d.ts +47 -0
  488. package/dist/detectors/parameter-access-control.js +511 -0
  489. package/dist/detectors/parameter-manipulation.d.ts +7 -0
  490. package/dist/detectors/parameter-manipulation.js +505 -0
  491. package/dist/detectors/parity-multisig-delegatecall.d.ts +7 -0
  492. package/dist/detectors/parity-multisig-delegatecall.js +707 -0
  493. package/dist/detectors/permissionless-claim-amm-spot-pricing.d.ts +7 -0
  494. package/dist/detectors/permissionless-claim-amm-spot-pricing.js +351 -0
  495. package/dist/detectors/permit-future-dated-deadline.d.ts +31 -0
  496. package/dist/detectors/permit-future-dated-deadline.js +339 -0
  497. package/dist/detectors/phishing-attack-bybit.d.ts +37 -0
  498. package/dist/detectors/phishing-attack-bybit.js +513 -0
  499. package/dist/detectors/post-insolvency-check.d.ts +7 -0
  500. package/dist/detectors/post-insolvency-check.js +277 -0
  501. package/dist/detectors/precision-loss-vulnerability.d.ts +7 -0
  502. package/dist/detectors/precision-loss-vulnerability.js +472 -0
  503. package/dist/detectors/precision-truncation.d.ts +8 -0
  504. package/dist/detectors/precision-truncation.js +425 -0
  505. package/dist/detectors/price-dependency-veth.d.ts +41 -0
  506. package/dist/detectors/price-dependency-veth.js +588 -0
  507. package/dist/detectors/price-feed-verification.d.ts +7 -0
  508. package/dist/detectors/price-feed-verification.js +557 -0
  509. package/dist/detectors/price-manipulation-reentrancy.d.ts +32 -0
  510. package/dist/detectors/price-manipulation-reentrancy.js +445 -0
  511. package/dist/detectors/price-manipulation-via-reentranc.d.ts +7 -0
  512. package/dist/detectors/price-manipulation-via-reentranc.js +569 -0
  513. package/dist/detectors/price-oracle-manipulation.d.ts +25 -0
  514. package/dist/detectors/price-oracle-manipulation.js +530 -0
  515. package/dist/detectors/project-instant-rewards-unlocked.d.ts +6 -0
  516. package/dist/detectors/project-instant-rewards-unlocked.js +462 -0
  517. package/dist/detectors/protocol-reentrancy.d.ts +7 -0
  518. package/dist/detectors/protocol-reentrancy.js +457 -0
  519. package/dist/detectors/proxy-init-race.d.ts +11 -0
  520. package/dist/detectors/proxy-init-race.js +634 -0
  521. package/dist/detectors/proxy-storage-slot-collision.d.ts +7 -0
  522. package/dist/detectors/proxy-storage-slot-collision.js +135 -0
  523. package/dist/detectors/public-internal-function.d.ts +39 -0
  524. package/dist/detectors/public-internal-function.js +233 -0
  525. package/dist/detectors/quote-silent-zero.d.ts +25 -0
  526. package/dist/detectors/quote-silent-zero.js +156 -0
  527. package/dist/detectors/readonly-reentrancy.d.ts +9 -0
  528. package/dist/detectors/readonly-reentrancy.js +108 -0
  529. package/dist/detectors/receipt-redemption-missing-validation.d.ts +31 -0
  530. package/dist/detectors/receipt-redemption-missing-validation.js +453 -0
  531. package/dist/detectors/reentrancy-balance.d.ts +36 -0
  532. package/dist/detectors/reentrancy-balance.js +577 -0
  533. package/dist/detectors/reentrancy-business-logic-game.d.ts +36 -0
  534. package/dist/detectors/reentrancy-business-logic-game.js +616 -0
  535. package/dist/detectors/reentrancy-on-sell-nft.d.ts +23 -0
  536. package/dist/detectors/reentrancy-on-sell-nft.js +510 -0
  537. package/dist/detectors/reflection-token-balance-desync.d.ts +28 -0
  538. package/dist/detectors/reflection-token-balance-desync.js +246 -0
  539. package/dist/detectors/registry-engine.d.ts +34 -0
  540. package/dist/detectors/registry-engine.js +388 -0
  541. package/dist/detectors/rollup-unvalidated-state-update.d.ts +35 -0
  542. package/dist/detectors/rollup-unvalidated-state-update.js +286 -0
  543. package/dist/detectors/s-horizon-bridge-private-key-compromis.d.ts +8 -0
  544. package/dist/detectors/s-horizon-bridge-private-key-compromis.js +615 -0
  545. package/dist/detectors/share-price-manipulation.d.ts +7 -0
  546. package/dist/detectors/share-price-manipulation.js +653 -0
  547. package/dist/detectors/signature-replay.d.ts +30 -0
  548. package/dist/detectors/signature-replay.js +367 -0
  549. package/dist/detectors/simpleswap-unverified-approval.d.ts +27 -0
  550. package/dist/detectors/simpleswap-unverified-approval.js +198 -0
  551. package/dist/detectors/single-spot-oracle-collateral-valuation.d.ts +22 -0
  552. package/dist/detectors/single-spot-oracle-collateral-valuation.js +419 -0
  553. package/dist/detectors/skim-token-balance.d.ts +7 -0
  554. package/dist/detectors/skim-token-balance.js +788 -0
  555. package/dist/detectors/sky-oft-governance-payload.d.ts +7 -0
  556. package/dist/detectors/sky-oft-governance-payload.js +515 -0
  557. package/dist/detectors/sky-oft-governance-truncation.d.ts +32 -0
  558. package/dist/detectors/sky-oft-governance-truncation.js +377 -0
  559. package/dist/detectors/solana-evm-bridge-truncation.d.ts +7 -0
  560. package/dist/detectors/solana-evm-bridge-truncation.js +638 -0
  561. package/dist/detectors/solhint-unchecked-low-level-call.d.ts +74 -0
  562. package/dist/detectors/solhint-unchecked-low-level-call.js +463 -0
  563. package/dist/detectors/stablecoin-pair-spot-oracle.d.ts +7 -0
  564. package/dist/detectors/stablecoin-pair-spot-oracle.js +364 -0
  565. package/dist/detectors/staked-rate-as-oracle.d.ts +44 -0
  566. package/dist/detectors/staked-rate-as-oracle.js +497 -0
  567. package/dist/detectors/stale-oracle.d.ts +63 -0
  568. package/dist/detectors/stale-oracle.js +649 -0
  569. package/dist/detectors/starkware-proof-validation-gap.d.ts +18 -0
  570. package/dist/detectors/starkware-proof-validation-gap.js +629 -0
  571. package/dist/detectors/steth-transfer-reentrancy.d.ts +8 -0
  572. package/dist/detectors/steth-transfer-reentrancy.js +317 -0
  573. package/dist/detectors/storage-collision-malicious-proposal.d.ts +27 -0
  574. package/dist/detectors/storage-collision-malicious-proposal.js +386 -0
  575. package/dist/detectors/timestamp-manipulation.d.ts +49 -0
  576. package/dist/detectors/timestamp-manipulation.js +383 -0
  577. package/dist/detectors/token-access-control.d.ts +7 -0
  578. package/dist/detectors/token-access-control.js +544 -0
  579. package/dist/detectors/token-incorrect-signature-verification.d.ts +23 -0
  580. package/dist/detectors/token-incorrect-signature-verification.js +434 -0
  581. package/dist/detectors/token-transfer-logic-flaw.d.ts +33 -0
  582. package/dist/detectors/token-transfer-logic-flaw.js +267 -0
  583. package/dist/detectors/transfer-double-debit-pool-recipient.d.ts +7 -0
  584. package/dist/detectors/transfer-double-debit-pool-recipient.js +542 -0
  585. package/dist/detectors/treasury-reentrancy.d.ts +7 -0
  586. package/dist/detectors/treasury-reentrancy.js +442 -0
  587. package/dist/detectors/tstore-poison.d.ts +32 -0
  588. package/dist/detectors/tstore-poison.js +417 -0
  589. package/dist/detectors/tstore-race-condition.d.ts +7 -0
  590. package/dist/detectors/tstore-race-condition.js +632 -0
  591. package/dist/detectors/types.d.ts +85 -0
  592. package/dist/detectors/types.js +20 -0
  593. package/dist/detectors/unauthorized-payer-transferfrom.d.ts +66 -0
  594. package/dist/detectors/unauthorized-payer-transferfrom.js +339 -0
  595. package/dist/detectors/unauthorized-transferfrom-shell.d.ts +7 -0
  596. package/dist/detectors/unauthorized-transferfrom-shell.js +504 -0
  597. package/dist/detectors/unauthorized-transferfrom.d.ts +16 -0
  598. package/dist/detectors/unauthorized-transferfrom.js +838 -0
  599. package/dist/detectors/unbound-zk-verifier-input.d.ts +7 -0
  600. package/dist/detectors/unbound-zk-verifier-input.js +445 -0
  601. package/dist/detectors/unbounded-share-price-collateral-oracle.d.ts +48 -0
  602. package/dist/detectors/unbounded-share-price-collateral-oracle.js +566 -0
  603. package/dist/detectors/uncapped-reward-emission.d.ts +7 -0
  604. package/dist/detectors/uncapped-reward-emission.js +493 -0
  605. package/dist/detectors/unchecked-call-forwarding.d.ts +31 -0
  606. package/dist/detectors/unchecked-call-forwarding.js +330 -0
  607. package/dist/detectors/unchecked-external-call-unconditional-state-mutation.d.ts +18 -0
  608. package/dist/detectors/unchecked-external-call-unconditional-state-mutation.js +311 -0
  609. package/dist/detectors/unchecked-external-call.d.ts +66 -0
  610. package/dist/detectors/unchecked-external-call.js +389 -0
  611. package/dist/detectors/unchecked-oft-return.d.ts +13 -0
  612. package/dist/detectors/unchecked-oft-return.js +118 -0
  613. package/dist/detectors/unguarded-governance-execution.d.ts +35 -0
  614. package/dist/detectors/unguarded-governance-execution.js +422 -0
  615. package/dist/detectors/unguarded-governance-executor.d.ts +35 -0
  616. package/dist/detectors/unguarded-governance-executor.js +349 -0
  617. package/dist/detectors/unindexed-event-address.d.ts +7 -0
  618. package/dist/detectors/unindexed-event-address.js +268 -0
  619. package/dist/detectors/uninitialized-implementation.d.ts +27 -0
  620. package/dist/detectors/uninitialized-implementation.js +333 -0
  621. package/dist/detectors/uninitialized-storage-pointer.d.ts +7 -0
  622. package/dist/detectors/uninitialized-storage-pointer.js +110 -0
  623. package/dist/detectors/uniswap-skim-token-balance-attack.d.ts +8 -0
  624. package/dist/detectors/uniswap-skim-token-balance-attack.js +331 -0
  625. package/dist/detectors/uniswap-v4-hook-state-manipulation.d.ts +7 -0
  626. package/dist/detectors/uniswap-v4-hook-state-manipulation.js +296 -0
  627. package/dist/detectors/unprotected-admin-or-fund-sink.d.ts +7 -0
  628. package/dist/detectors/unprotected-admin-or-fund-sink.js +643 -0
  629. package/dist/detectors/unprotected-dex-swap.d.ts +43 -0
  630. package/dist/detectors/unprotected-dex-swap.js +334 -0
  631. package/dist/detectors/unprotected-initializer.d.ts +7 -0
  632. package/dist/detectors/unprotected-initializer.js +707 -0
  633. package/dist/detectors/unprotected-pair-initializer.d.ts +22 -0
  634. package/dist/detectors/unprotected-pair-initializer.js +359 -0
  635. package/dist/detectors/unprotected-upgrade-function.d.ts +7 -0
  636. package/dist/detectors/unprotected-upgrade-function.js +180 -0
  637. package/dist/detectors/unreachable-code-0.8.28.d.ts +19 -0
  638. package/dist/detectors/unreachable-code-0.8.28.js +206 -0
  639. package/dist/detectors/unsafe-proxy-storage.d.ts +7 -0
  640. package/dist/detectors/unsafe-proxy-storage.js +436 -0
  641. package/dist/detectors/unsafe-transient-storage.d.ts +7 -0
  642. package/dist/detectors/unsafe-transient-storage.js +1052 -0
  643. package/dist/detectors/unsafe-tx-origin.d.ts +9 -0
  644. package/dist/detectors/unsafe-tx-origin.js +179 -0
  645. package/dist/detectors/unsigned-validity-window.d.ts +20 -0
  646. package/dist/detectors/unsigned-validity-window.js +220 -0
  647. package/dist/detectors/unvalidated-interface-address.d.ts +25 -0
  648. package/dist/detectors/unvalidated-interface-address.js +377 -0
  649. package/dist/detectors/uups-uninitialized-storage.d.ts +9 -0
  650. package/dist/detectors/uups-uninitialized-storage.js +366 -0
  651. package/dist/detectors/v2-error-k-value-attack.d.ts +33 -0
  652. package/dist/detectors/v2-error-k-value-attack.js +276 -0
  653. package/dist/detectors/v2-k-invariant-bypass.d.ts +33 -0
  654. package/dist/detectors/v2-k-invariant-bypass.js +283 -0
  655. package/dist/detectors/v4-hook-reentrancy.d.ts +9 -0
  656. package/dist/detectors/v4-hook-reentrancy.js +488 -0
  657. package/dist/detectors/vault-inflation-rounding.d.ts +23 -0
  658. package/dist/detectors/vault-inflation-rounding.js +477 -0
  659. package/dist/detectors/vault-share-price-manipulation.d.ts +7 -0
  660. package/dist/detectors/vault-share-price-manipulation.js +332 -0
  661. package/dist/detectors/vortex-interaction-guard.d.ts +45 -0
  662. package/dist/detectors/vortex-interaction-guard.js +275 -0
  663. package/dist/detectors/vortex-protocol-reentrancy-guard.d.ts +27 -0
  664. package/dist/detectors/vortex-protocol-reentrancy-guard.js +408 -0
  665. package/dist/detectors/vulnerable-price-dependency.d.ts +41 -0
  666. package/dist/detectors/vulnerable-price-dependency.js +473 -0
  667. package/dist/detectors/weak-random-mint.d.ts +37 -0
  668. package/dist/detectors/weak-random-mint.js +271 -0
  669. package/dist/detectors/withdraw-be-to-withdraw.d.ts +26 -0
  670. package/dist/detectors/withdraw-be-to-withdraw.js +329 -0
  671. package/dist/detectors/wrong-function-visibility.d.ts +29 -0
  672. package/dist/detectors/wrong-function-visibility.js +147 -0
  673. package/dist/detectors/wrong-price-calculation.d.ts +42 -0
  674. package/dist/detectors/wrong-price-calculation.js +387 -0
  675. package/dist/detectors/yearn-vault-v2-share-price-manipulation.d.ts +32 -0
  676. package/dist/detectors/yearn-vault-v2-share-price-manipulation.js +248 -0
  677. package/dist/detectors/zero-fee.d.ts +7 -0
  678. package/dist/detectors/zero-fee.js +596 -0
  679. package/dist/detectors/zetachain-gateway-hack-analysis.d.ts +7 -0
  680. package/dist/detectors/zetachain-gateway-hack-analysis.js +629 -0
  681. package/dist/detectors/zk-rollup-da-gap.d.ts +8 -0
  682. package/dist/detectors/zk-rollup-da-gap.js +322 -0
  683. package/dist/detectors/zksync-batch-validation.d.ts +8 -0
  684. package/dist/detectors/zksync-batch-validation.js +461 -0
  685. package/dist/detectors/zksync-era-rollup-state-update.d.ts +60 -0
  686. package/dist/detectors/zksync-era-rollup-state-update.js +360 -0
  687. package/dist/detectors/zksync-simulation-drift.d.ts +35 -0
  688. package/dist/detectors/zksync-simulation-drift.js +309 -0
  689. package/dist/exit-codes.d.ts +15 -0
  690. package/dist/exit-codes.js +18 -0
  691. package/dist/formatters/github-actions.d.ts +2 -0
  692. package/dist/formatters/github-actions.js +61 -0
  693. package/dist/formatters/sarif.d.ts +24 -0
  694. package/dist/formatters/sarif.js +670 -0
  695. package/dist/formatters/text.d.ts +14 -0
  696. package/dist/formatters/text.js +152 -0
  697. package/dist/fp-rates.json +70 -0
  698. package/dist/identity/diff-baseline.d.ts +16 -0
  699. package/dist/identity/diff-baseline.js +152 -0
  700. package/dist/identity/hashing.d.ts +39 -0
  701. package/dist/identity/hashing.js +96 -0
  702. package/dist/index.d.ts +174 -0
  703. package/dist/index.js +358 -0
  704. package/dist/parallel-scan.d.ts +66 -0
  705. package/dist/parallel-scan.js +227 -0
  706. package/dist/registry.d.ts +17 -0
  707. package/dist/registry.js +118 -0
  708. package/dist/rules/glob.d.ts +5 -0
  709. package/dist/rules/glob.js +76 -0
  710. package/dist/rules/suppressions.d.ts +23 -0
  711. package/dist/rules/suppressions.js +136 -0
  712. package/dist/rules/tiers.d.ts +23 -0
  713. package/dist/rules/tiers.js +341 -0
  714. package/dist/scan-worker.d.ts +1 -0
  715. package/dist/scan-worker.js +61 -0
  716. package/dist/scan.d.ts +24 -0
  717. package/dist/scan.js +558 -0
  718. package/dist/semantic/contracts.d.ts +10 -0
  719. package/dist/semantic/contracts.js +141 -0
  720. package/dist/semantic/diagnostics.d.ts +29 -0
  721. package/dist/semantic/diagnostics.js +25 -0
  722. package/dist/semantic/eog.d.ts +56 -0
  723. package/dist/semantic/eog.js +545 -0
  724. package/dist/semantic/imports.d.ts +88 -0
  725. package/dist/semantic/imports.js +246 -0
  726. package/dist/semantic/index.d.ts +2 -0
  727. package/dist/semantic/index.js +8 -0
  728. package/dist/semantic/inheritance.d.ts +33 -0
  729. package/dist/semantic/inheritance.js +137 -0
  730. package/dist/semantic/model.d.ts +95 -0
  731. package/dist/semantic/model.js +232 -0
  732. package/dist/semantic/taint-tracker.d.ts +49 -0
  733. package/dist/semantic/taint-tracker.js +410 -0
  734. package/dist/semantic/types.d.ts +119 -0
  735. package/dist/semantic/types.js +18 -0
  736. package/dist/severity.d.ts +10 -0
  737. package/dist/severity.js +78 -0
  738. package/package.json +52 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Integer-overflow detector helpers — pragma classification, arithmetic
3
+ * operator vocabularies, signedness classification, expression
4
+ * canonicalization, and overflow/underflow guard recognizers.
5
+ *
6
+ * Extracted from `src/index.ts` per roadmap item 1.1 (split god-file
7
+ * into focused modules). The public API surface is unchanged —
8
+ * `src/index.ts` re-exports every name below so the 184 detector files
9
+ * importing from `'../index'` continue to see them at the same path.
10
+ *
11
+ * No external imports. Pure functions over Solidity AST node shapes.
12
+ * Accepts both the `@solidity-parser/parser` shape (`type` field) and
13
+ * the solc compact JSON shape (`nodeType` field) where relevant.
14
+ */
15
+ /**
16
+ * Determines whether a `pragma solidity X` value permits any compiler version
17
+ * older than 0.8.0. v0.2 integer-overflow detection only fires for ranges that
18
+ * could compile under <0.8.0, since 0.8+ already inserts overflow checks.
19
+ *
20
+ * The implementation is a deliberately small semver-range parser: we extract
21
+ * the lower bound implied by each comparator and report whether that lower
22
+ * bound is below 0.8.0. Unrecognized inputs fall back to "pre-0.8 allowed"
23
+ * (conservative — flag rather than miss).
24
+ */
25
+ export declare function pragmaAllowsPre080(pragmaValue: string): boolean;
26
+ export declare const ARITH_OPERATORS: Set<string>;
27
+ export declare const COMPOUND_ARITH_OPERATORS: Set<string>;
28
+ export declare const COMPOUND_TO_BARE_ARITH: Map<string, string>;
29
+ export declare const ARITH_DIRECTION: Map<string, "overflow" | "underflow">;
30
+ export declare function isArithmeticBinaryOp(node: any): boolean;
31
+ export type Signedness = 'unsigned' | 'signed' | 'unknown';
32
+ /**
33
+ * Classify a Solidity AST `typeName` node as `unsigned`, `signed`, or
34
+ * `unknown`. Accepts both the `@solidity-parser/parser` shape (`type` field)
35
+ * and the solc compact JSON shape (`nodeType` field). Anything that is not a
36
+ * direct `uint*` or `int*` elementary type is reported as `unknown`, which
37
+ * the caller treats conservatively as "do not suppress".
38
+ */
39
+ export declare function classifyTypeName(typeName: any): Signedness;
40
+ /**
41
+ * Predicate used by guard recognizers: an arithmetic operand is treated as
42
+ * unsigned only when we can prove it via a tracked declaration (parameter,
43
+ * local, or state variable resolved as `uint*`). Unknown types are
44
+ * conservatively treated as not-unsigned so the eventual `BinaryOperation`
45
+ * is still reported.
46
+ */
47
+ export type IsUnsignedFn = (expr: any) => boolean;
48
+ export declare function isConstantExpr(expr: any): boolean;
49
+ export declare function expressionSignature(expr: any): string;
50
+ export declare function unwrapTuple(expr: any): any;
51
+ /**
52
+ * Walk the top-level boolean shape of a `require`/`assert` argument and emit
53
+ * guard signatures for the recognised overflow/underflow predicates. Combines
54
+ * sides of `&&` (each side stands as its own guard); `||` is only honoured for
55
+ * the SafeMath multiplication pattern.
56
+ */
57
+ export declare function collectGuardSignatures(arg: any, sigs: Set<string>, isUnsigned: IsUnsignedFn): void;
58
+ export declare function isRequireFunctionCall(node: any): boolean;
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ /**
3
+ * Integer-overflow detector helpers — pragma classification, arithmetic
4
+ * operator vocabularies, signedness classification, expression
5
+ * canonicalization, and overflow/underflow guard recognizers.
6
+ *
7
+ * Extracted from `src/index.ts` per roadmap item 1.1 (split god-file
8
+ * into focused modules). The public API surface is unchanged —
9
+ * `src/index.ts` re-exports every name below so the 184 detector files
10
+ * importing from `'../index'` continue to see them at the same path.
11
+ *
12
+ * No external imports. Pure functions over Solidity AST node shapes.
13
+ * Accepts both the `@solidity-parser/parser` shape (`type` field) and
14
+ * the solc compact JSON shape (`nodeType` field) where relevant.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ARITH_DIRECTION = exports.COMPOUND_TO_BARE_ARITH = exports.COMPOUND_ARITH_OPERATORS = exports.ARITH_OPERATORS = void 0;
18
+ exports.pragmaAllowsPre080 = pragmaAllowsPre080;
19
+ exports.isArithmeticBinaryOp = isArithmeticBinaryOp;
20
+ exports.classifyTypeName = classifyTypeName;
21
+ exports.isConstantExpr = isConstantExpr;
22
+ exports.expressionSignature = expressionSignature;
23
+ exports.unwrapTuple = unwrapTuple;
24
+ exports.collectGuardSignatures = collectGuardSignatures;
25
+ exports.isRequireFunctionCall = isRequireFunctionCall;
26
+ /**
27
+ * Determines whether a `pragma solidity X` value permits any compiler version
28
+ * older than 0.8.0. v0.2 integer-overflow detection only fires for ranges that
29
+ * could compile under <0.8.0, since 0.8+ already inserts overflow checks.
30
+ *
31
+ * The implementation is a deliberately small semver-range parser: we extract
32
+ * the lower bound implied by each comparator and report whether that lower
33
+ * bound is below 0.8.0. Unrecognized inputs fall back to "pre-0.8 allowed"
34
+ * (conservative — flag rather than miss).
35
+ */
36
+ function pragmaAllowsPre080(pragmaValue) {
37
+ if (!pragmaValue)
38
+ return true;
39
+ const branches = pragmaValue.split('||');
40
+ for (const branch of branches) {
41
+ const tokens = branch.trim().split(/\s+/).filter(Boolean);
42
+ if (tokens.length === 0)
43
+ return true;
44
+ let lowerMinor = -1;
45
+ let sawComparator = false;
46
+ for (const token of tokens) {
47
+ const match = token.match(/^([\^~]|>=|>|<=|<|=)?\s*0\.(\d+)(?:\.(\d+))?/);
48
+ if (!match)
49
+ continue;
50
+ const op = match[1] || '=';
51
+ const minor = parseInt(match[2], 10);
52
+ if (op === '<' || op === '<=')
53
+ continue;
54
+ sawComparator = true;
55
+ if (lowerMinor < 0 || minor > lowerMinor)
56
+ lowerMinor = minor;
57
+ }
58
+ if (!sawComparator)
59
+ return true;
60
+ if (lowerMinor < 8)
61
+ return true;
62
+ }
63
+ return false;
64
+ }
65
+ exports.ARITH_OPERATORS = new Set(['+', '-', '*']);
66
+ // Compound-assignment forms of the arithmetic operators above. These are only
67
+ // flagged when seen inside an `unchecked { ... }` block, where they share the
68
+ // same wrap-around runtime behavior as their binary counterparts. Outside
69
+ // `unchecked`, Solidity >=0.8.0 still inserts the overflow check, so the
70
+ // rule stays quiet to match the existing v0.2 contract.
71
+ exports.COMPOUND_ARITH_OPERATORS = new Set(['+=', '-=', '*=']);
72
+ // Maps each compound arithmetic operator to the equivalent bare arithmetic
73
+ // operator. Used to canonicalize the guard-lookup signature for `+=`/`-=`/`*=`
74
+ // so that `require(a + b >= a); unchecked { a += b; }` matches the same
75
+ // suppression entry as the `unchecked { a = a + b; }` form.
76
+ exports.COMPOUND_TO_BARE_ARITH = new Map([
77
+ ['+=', '+'],
78
+ ['-=', '-'],
79
+ ['*=', '*']
80
+ ]);
81
+ // Maps every flagged operator (binary or compound) to its overflow direction.
82
+ exports.ARITH_DIRECTION = new Map([
83
+ ['+', 'overflow'],
84
+ ['-', 'underflow'],
85
+ ['*', 'overflow'],
86
+ ['+=', 'overflow'],
87
+ ['-=', 'underflow'],
88
+ ['*=', 'overflow']
89
+ ]);
90
+ function isArithmeticBinaryOp(node) {
91
+ return !!node && node.type === 'BinaryOperation' && exports.ARITH_OPERATORS.has(node.operator);
92
+ }
93
+ /**
94
+ * Classify a Solidity AST `typeName` node as `unsigned`, `signed`, or
95
+ * `unknown`. Accepts both the `@solidity-parser/parser` shape (`type` field)
96
+ * and the solc compact JSON shape (`nodeType` field). Anything that is not a
97
+ * direct `uint*` or `int*` elementary type is reported as `unknown`, which
98
+ * the caller treats conservatively as "do not suppress".
99
+ */
100
+ function classifyTypeName(typeName) {
101
+ if (!typeName || typeof typeName !== 'object')
102
+ return 'unknown';
103
+ const kind = typeName.type || typeName.nodeType;
104
+ if (kind !== 'ElementaryTypeName')
105
+ return 'unknown';
106
+ const name = String(typeName.name || '').toLowerCase();
107
+ if (name.startsWith('uint'))
108
+ return 'unsigned';
109
+ if (name.startsWith('int'))
110
+ return 'signed';
111
+ return 'unknown';
112
+ }
113
+ function isConstantExpr(expr) {
114
+ if (!expr || typeof expr !== 'object')
115
+ return false;
116
+ if (expr.type === 'NumberLiteral' || expr.type === 'HexLiteral' || expr.type === 'BooleanLiteral') {
117
+ return true;
118
+ }
119
+ if (expr.type === 'BinaryOperation') {
120
+ return isConstantExpr(expr.left) && isConstantExpr(expr.right);
121
+ }
122
+ if (expr.type === 'UnaryOperation') {
123
+ return isConstantExpr(expr.subExpression);
124
+ }
125
+ if (expr.type === 'TupleExpression') {
126
+ const components = expr.components || [];
127
+ return components.length > 0 && components.every((c) => c == null || isConstantExpr(c));
128
+ }
129
+ return false;
130
+ }
131
+ function expressionSignature(expr) {
132
+ if (!expr || typeof expr !== 'object')
133
+ return '';
134
+ switch (expr.type) {
135
+ case 'Identifier':
136
+ return `id:${expr.name || ''}`;
137
+ case 'NumberLiteral':
138
+ return `num:${expr.number ?? expr.value ?? ''}`;
139
+ case 'HexLiteral':
140
+ return `hex:${expr.value ?? ''}`;
141
+ case 'BooleanLiteral':
142
+ return `bool:${expr.value ?? ''}`;
143
+ case 'StringLiteral':
144
+ return `str:${expr.value ?? ''}`;
145
+ case 'BinaryOperation':
146
+ return `(${expressionSignature(expr.left)}${expr.operator}${expressionSignature(expr.right)})`;
147
+ case 'UnaryOperation':
148
+ return `${expr.operator}${expressionSignature(expr.subExpression)}`;
149
+ case 'MemberAccess':
150
+ return `${expressionSignature(expr.expression)}.${expr.memberName || ''}`;
151
+ case 'IndexAccess':
152
+ return `${expressionSignature(expr.base)}[${expressionSignature(expr.index)}]`;
153
+ case 'TupleExpression': {
154
+ const parts = (expr.components || []).map((c) => (c ? expressionSignature(c) : ''));
155
+ return `(${parts.join(',')})`;
156
+ }
157
+ case 'FunctionCall': {
158
+ const args = (expr.arguments || []).map(expressionSignature).join(',');
159
+ return `${expressionSignature(expr.expression)}(${args})`;
160
+ }
161
+ default:
162
+ return `?:${expr.type || 'unknown'}`;
163
+ }
164
+ }
165
+ function unwrapTuple(expr) {
166
+ while (expr &&
167
+ expr.type === 'TupleExpression' &&
168
+ Array.isArray(expr.components) &&
169
+ expr.components.length === 1 &&
170
+ expr.components[0]) {
171
+ expr = expr.components[0];
172
+ }
173
+ return expr;
174
+ }
175
+ function exprEquals(a, b) {
176
+ const sa = expressionSignature(unwrapTuple(a));
177
+ const sb = expressionSignature(unwrapTuple(b));
178
+ return !!sa && sa === sb;
179
+ }
180
+ function isZeroLiteral(expr) {
181
+ if (!expr || expr.type !== 'NumberLiteral')
182
+ return false;
183
+ const raw = expr.number ?? expr.value ?? '';
184
+ return String(raw).trim() === '0';
185
+ }
186
+ /**
187
+ * Add the signature of an arithmetic binary op to `sigs`, plus its commuted
188
+ * form for `+` and `*`. This is what lets `require(a + b >= a)` suppress
189
+ * `b + a` in the body too.
190
+ *
191
+ * The signature is only emitted when both operands are known to be unsigned
192
+ * integers. For signed integers, predicates like `a >= b` or `a + b >= a`
193
+ * do not actually rule out wrap-around (e.g. `int256.max - (-1)` overflows),
194
+ * so we leave the eventual `BinaryOperation` to be reported.
195
+ */
196
+ function addCommutativeArithmeticSig(arith, sigs, isUnsigned) {
197
+ arith = unwrapTuple(arith);
198
+ if (!isArithmeticBinaryOp(arith))
199
+ return;
200
+ const left = unwrapTuple(arith.left);
201
+ const right = unwrapTuple(arith.right);
202
+ if (!isUnsigned(left) || !isUnsigned(right))
203
+ return;
204
+ const sig = `(${expressionSignature(left)}${arith.operator}${expressionSignature(right)})`;
205
+ if (sig)
206
+ sigs.add(sig);
207
+ if (arith.operator === '+' || arith.operator === '*') {
208
+ const commuted = `(${expressionSignature(right)}${arith.operator}${expressionSignature(left)})`;
209
+ if (commuted)
210
+ sigs.add(commuted);
211
+ }
212
+ }
213
+ /**
214
+ * Recognise an addition overflow guard from a relational predicate.
215
+ * Accepted shapes (commutative on the addition operands):
216
+ * (a + b) >= a, (a + b) >= b, (a + b) > a, (a + b) > b
217
+ * a <= (a + b), b <= (a + b), a < (a + b), b < (a + b)
218
+ * Rejects ineffective predicates like `(a + b) > 0`.
219
+ */
220
+ function recognizeAdditionOverflowGuard(pred, sigs, isUnsigned) {
221
+ if (!pred || pred.type !== 'BinaryOperation')
222
+ return;
223
+ const op = pred.operator;
224
+ const lhs = unwrapTuple(pred.left);
225
+ const rhs = unwrapTuple(pred.right);
226
+ if (op === '>=' || op === '>') {
227
+ if (isArithmeticBinaryOp(lhs) && lhs.operator === '+') {
228
+ if (exprEquals(lhs.left, rhs) || exprEquals(lhs.right, rhs)) {
229
+ addCommutativeArithmeticSig(lhs, sigs, isUnsigned);
230
+ }
231
+ }
232
+ }
233
+ if (op === '<=' || op === '<') {
234
+ if (isArithmeticBinaryOp(rhs) && rhs.operator === '+') {
235
+ if (exprEquals(rhs.left, lhs) || exprEquals(rhs.right, lhs)) {
236
+ addCommutativeArithmeticSig(rhs, sigs, isUnsigned);
237
+ }
238
+ }
239
+ }
240
+ }
241
+ /**
242
+ * Recognise a subtraction underflow guard.
243
+ *
244
+ * Pre-checks (no `-` in the predicate, the eventual `a - b` is constructed):
245
+ * a >= b, a > b, b <= a, b < a
246
+ *
247
+ * Post-checks (the subtraction itself appears in the predicate):
248
+ * (a - b) <= a, (a - b) < a, a >= (a - b), a > (a - b)
249
+ *
250
+ * Rejects ineffective predicates like `(a - b) >= 0` (always true on uint).
251
+ */
252
+ function recognizeSubtractionUnderflowGuard(pred, sigs, isUnsigned) {
253
+ if (!pred || pred.type !== 'BinaryOperation')
254
+ return;
255
+ const op = pred.operator;
256
+ const lhs = unwrapTuple(pred.left);
257
+ const rhs = unwrapTuple(pred.right);
258
+ // Post-check forms first — they take precedence when `-` appears.
259
+ if (op === '<=' || op === '<') {
260
+ if (isArithmeticBinaryOp(lhs) && lhs.operator === '-') {
261
+ if (exprEquals(lhs.left, rhs)) {
262
+ addCommutativeArithmeticSig(lhs, sigs, isUnsigned);
263
+ }
264
+ return;
265
+ }
266
+ }
267
+ if (op === '>=' || op === '>') {
268
+ if (isArithmeticBinaryOp(rhs) && rhs.operator === '-') {
269
+ if (exprEquals(rhs.left, lhs)) {
270
+ addCommutativeArithmeticSig(rhs, sigs, isUnsigned);
271
+ }
272
+ return;
273
+ }
274
+ }
275
+ // Pre-check forms: a >= b, a > b → guard for a - b. The eventual `a - b`
276
+ // is unsigned-safe under this predicate ONLY when both operands are
277
+ // declared unsigned; for signed integers, `int256.max >= -1` holds yet
278
+ // `int256.max - (-1)` still overflows.
279
+ if (op === '>=' || op === '>') {
280
+ if (!isArithmeticBinaryOp(lhs) && !isArithmeticBinaryOp(rhs)) {
281
+ if (!isUnsigned(lhs) || !isUnsigned(rhs))
282
+ return;
283
+ const ls = expressionSignature(lhs);
284
+ const rs = expressionSignature(rhs);
285
+ if (ls && rs)
286
+ sigs.add(`(${ls}-${rs})`);
287
+ }
288
+ return;
289
+ }
290
+ // b <= a, b < a → guard for a - b (operands swapped).
291
+ if (op === '<=' || op === '<') {
292
+ if (!isArithmeticBinaryOp(lhs) && !isArithmeticBinaryOp(rhs)) {
293
+ if (!isUnsigned(lhs) || !isUnsigned(rhs))
294
+ return;
295
+ const ls = expressionSignature(lhs);
296
+ const rs = expressionSignature(rhs);
297
+ if (ls && rs)
298
+ sigs.add(`(${rs}-${ls})`);
299
+ }
300
+ }
301
+ }
302
+ /**
303
+ * Recognise a multiplication overflow guard. Two accepted shapes:
304
+ * (a * b) <= MAX, (a * b) < MAX, MAX >= (a * b), MAX > (a * b)
305
+ * a == 0 || (a * b) / a == b (and commutative variants)
306
+ * Rejects ineffective predicates like `(a * b) != 0`.
307
+ */
308
+ function recognizeMultiplicationOverflowGuard(pred, sigs, isUnsigned) {
309
+ if (!pred || pred.type !== 'BinaryOperation')
310
+ return;
311
+ const op = pred.operator;
312
+ const lhs = unwrapTuple(pred.left);
313
+ const rhs = unwrapTuple(pred.right);
314
+ if (op === '<=' || op === '<') {
315
+ if (isArithmeticBinaryOp(lhs) && lhs.operator === '*') {
316
+ addCommutativeArithmeticSig(lhs, sigs, isUnsigned);
317
+ return;
318
+ }
319
+ }
320
+ if (op === '>=' || op === '>') {
321
+ if (isArithmeticBinaryOp(rhs) && rhs.operator === '*') {
322
+ addCommutativeArithmeticSig(rhs, sigs, isUnsigned);
323
+ }
324
+ }
325
+ }
326
+ /**
327
+ * Recognise the SafeMath multiplication guard `a == 0 || (a * b) / a == b`,
328
+ * accepting both orderings of the `||` and the equality, plus the commutative
329
+ * `b * a`. Returns true if a guard signature was added.
330
+ */
331
+ function recognizeMultiplicationOrGuard(orPred, sigs, isUnsigned) {
332
+ if (!orPred || orPred.type !== 'BinaryOperation' || orPred.operator !== '||')
333
+ return false;
334
+ const sides = [unwrapTuple(orPred.left), unwrapTuple(orPred.right)];
335
+ let zeroVar = null;
336
+ let divEq = null;
337
+ for (const side of sides) {
338
+ if (side?.type === 'BinaryOperation' && side.operator === '==') {
339
+ const sl = unwrapTuple(side.left);
340
+ const sr = unwrapTuple(side.right);
341
+ if (isZeroLiteral(sr)) {
342
+ zeroVar = sl;
343
+ continue;
344
+ }
345
+ if (isZeroLiteral(sl)) {
346
+ zeroVar = sr;
347
+ continue;
348
+ }
349
+ }
350
+ divEq = side;
351
+ }
352
+ if (!zeroVar || !divEq)
353
+ return false;
354
+ if (divEq.type !== 'BinaryOperation' || divEq.operator !== '==')
355
+ return false;
356
+ // One side of `==` must be a `/` over a `*`; the other side is the partner operand.
357
+ const eqSides = [unwrapTuple(divEq.left), unwrapTuple(divEq.right)];
358
+ let divExpr = null;
359
+ let partner = null;
360
+ for (const s of eqSides) {
361
+ if (s?.type === 'BinaryOperation' && s.operator === '/')
362
+ divExpr = s;
363
+ else
364
+ partner = s;
365
+ }
366
+ if (!divExpr || !partner)
367
+ return false;
368
+ const mul = unwrapTuple(divExpr.left);
369
+ const divisor = unwrapTuple(divExpr.right);
370
+ if (!isArithmeticBinaryOp(mul) || mul.operator !== '*')
371
+ return false;
372
+ if (!exprEquals(divisor, zeroVar))
373
+ return false;
374
+ // Partner must equal the OTHER multiplicand.
375
+ if (exprEquals(divisor, mul.left) && exprEquals(partner, mul.right)) {
376
+ addCommutativeArithmeticSig(mul, sigs, isUnsigned);
377
+ return true;
378
+ }
379
+ if (exprEquals(divisor, mul.right) && exprEquals(partner, mul.left)) {
380
+ addCommutativeArithmeticSig(mul, sigs, isUnsigned);
381
+ return true;
382
+ }
383
+ return false;
384
+ }
385
+ /**
386
+ * Walk the top-level boolean shape of a `require`/`assert` argument and emit
387
+ * guard signatures for the recognised overflow/underflow predicates. Combines
388
+ * sides of `&&` (each side stands as its own guard); `||` is only honoured for
389
+ * the SafeMath multiplication pattern.
390
+ */
391
+ function collectGuardSignatures(arg, sigs, isUnsigned) {
392
+ arg = unwrapTuple(arg);
393
+ if (!arg || typeof arg !== 'object')
394
+ return;
395
+ if (arg.type === 'StringLiteral')
396
+ return;
397
+ if (arg.type === 'BinaryOperation' && arg.operator === '&&') {
398
+ collectGuardSignatures(arg.left, sigs, isUnsigned);
399
+ collectGuardSignatures(arg.right, sigs, isUnsigned);
400
+ return;
401
+ }
402
+ if (arg.type === 'BinaryOperation' && arg.operator === '||') {
403
+ recognizeMultiplicationOrGuard(arg, sigs, isUnsigned);
404
+ return;
405
+ }
406
+ recognizeAdditionOverflowGuard(arg, sigs, isUnsigned);
407
+ recognizeSubtractionUnderflowGuard(arg, sigs, isUnsigned);
408
+ recognizeMultiplicationOverflowGuard(arg, sigs, isUnsigned);
409
+ }
410
+ function isRequireFunctionCall(node) {
411
+ if (!node || node.type !== 'FunctionCall')
412
+ return false;
413
+ const callee = node.expression;
414
+ if (!callee)
415
+ return false;
416
+ if (callee.type === 'Identifier') {
417
+ const name = callee.name || '';
418
+ return name === 'require' || name === 'assert';
419
+ }
420
+ return false;
421
+ }
422
+ //# sourceMappingURL=integer-overflow-helpers.js.map
@@ -0,0 +1,9 @@
1
+ export interface LoopCallStackEnrichment {
2
+ callPath: string;
3
+ messageSuffix: string;
4
+ }
5
+ export declare function enrichLoopCallStack(finding: {
6
+ message: string;
7
+ callPath?: string;
8
+ }, callPath: string | null): void;
9
+ export declare function loopCallPathForFunction(contractNode: any, targetFunctionNode: any): string | null;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enrichLoopCallStack = enrichLoopCallStack;
4
+ exports.loopCallPathForFunction = loopCallPathForFunction;
5
+ const MAX_CALL_DEPTH = 16;
6
+ function enrichLoopCallStack(finding, callPath) {
7
+ if (!callPath)
8
+ return;
9
+ finding.callPath = callPath;
10
+ finding.message = `${finding.message} Loop call stack: ${callPath}`;
11
+ }
12
+ function loopCallPathForFunction(contractNode, targetFunctionNode) {
13
+ const targetName = functionName(targetFunctionNode);
14
+ if (!targetName)
15
+ return null;
16
+ const functions = collectFunctions(contractNode);
17
+ if (!functions.has(targetName))
18
+ return null;
19
+ const ancestorStarts = Array.from(functions.values()).filter((fn) => fn.name !== targetName && fn.reachableFromOutside && canReach(fn.name, targetName, functions));
20
+ const starts = ancestorStarts.length > 0
21
+ ? ancestorStarts
22
+ : Array.from(functions.values()).filter((fn) => fn.name === targetName && fn.reachableFromOutside);
23
+ for (const start of starts) {
24
+ const path = findPath(start.name, targetName, functions);
25
+ if (path)
26
+ return path.join(' -> ');
27
+ }
28
+ return null;
29
+ }
30
+ function collectFunctions(contractNode) {
31
+ const functions = new Map();
32
+ for (const node of contractNode?.subNodes || []) {
33
+ if (node?.type !== 'FunctionDefinition' || !node.body)
34
+ continue;
35
+ const name = functionName(node);
36
+ if (!name)
37
+ continue;
38
+ functions.set(name, {
39
+ name,
40
+ node,
41
+ calls: collectSameContractCalls(node.body),
42
+ reachableFromOutside: isExternallyReachable(node),
43
+ });
44
+ }
45
+ return functions;
46
+ }
47
+ function findPath(start, target, functions) {
48
+ const queue = [[start]];
49
+ const seen = new Set();
50
+ while (queue.length > 0) {
51
+ const path = queue.shift();
52
+ const current = path[path.length - 1];
53
+ if (current === target)
54
+ return path;
55
+ if (seen.has(current))
56
+ continue;
57
+ seen.add(current);
58
+ if (path.length >= MAX_CALL_DEPTH)
59
+ continue;
60
+ const fn = functions.get(current);
61
+ if (!fn)
62
+ continue;
63
+ for (const callee of fn.calls) {
64
+ if (!functions.has(callee))
65
+ continue;
66
+ if (path.includes(callee) && callee !== target)
67
+ continue;
68
+ queue.push([...path, callee]);
69
+ }
70
+ }
71
+ return null;
72
+ }
73
+ function canReach(start, target, functions) {
74
+ return findPath(start, target, functions) !== null;
75
+ }
76
+ function collectSameContractCalls(root) {
77
+ const calls = [];
78
+ const visit = (node) => {
79
+ if (!node || typeof node !== 'object')
80
+ return;
81
+ if (node.type === 'FunctionCall') {
82
+ const name = sameContractCallName(node);
83
+ if (name)
84
+ calls.push(name);
85
+ }
86
+ for (const child of childNodes(node))
87
+ visit(child);
88
+ };
89
+ visit(root);
90
+ return calls;
91
+ }
92
+ function sameContractCallName(call) {
93
+ const expr = call?.expression;
94
+ if (expr?.type === 'Identifier')
95
+ return String(expr.name || '') || null;
96
+ if (expr?.type === 'MemberAccess' && expr.memberName && expr.expression?.type === 'Identifier' && expr.expression.name === 'this') {
97
+ return String(expr.memberName);
98
+ }
99
+ return null;
100
+ }
101
+ function functionName(node) {
102
+ const name = String(node?.name || '');
103
+ if (name)
104
+ return name;
105
+ if (node?.isConstructor || String(node?.kind || '').toLowerCase() === 'constructor')
106
+ return '<constructor>';
107
+ return null;
108
+ }
109
+ function isExternallyReachable(node) {
110
+ if (node?.isConstructor || String(node?.kind || '').toLowerCase() === 'constructor')
111
+ return false;
112
+ const visibility = String(node?.visibility || '').toLowerCase();
113
+ return visibility === 'public' || visibility === 'external' || visibility === 'default' || visibility === '';
114
+ }
115
+ function childNodes(node) {
116
+ const children = [];
117
+ for (const [key, value] of Object.entries(node || {})) {
118
+ if (key === 'loc' || key === 'range')
119
+ continue;
120
+ if (Array.isArray(value)) {
121
+ for (const item of value) {
122
+ if (item && typeof item === 'object')
123
+ children.push(item);
124
+ }
125
+ }
126
+ else if (value && typeof value === 'object') {
127
+ children.push(value);
128
+ }
129
+ }
130
+ return children;
131
+ }
132
+ //# sourceMappingURL=loop-call-stack.js.map
@@ -0,0 +1,5 @@
1
+ export declare const AMM_SPOT_SOURCES: ReadonlySet<string>;
2
+ export declare const TWAP_CALLS: ReadonlySet<string>;
3
+ export declare const SINK_CALL_NAMES: Set<string>;
4
+ export declare const LIQUIDITY_WITHDRAWAL_CALL_NAMES: Set<string>;
5
+ export declare function isLiquidityWithdrawalCall(callNode: any, getCalleeName: (expr: any) => string): boolean;