@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,139 @@
1
+ /**
2
+ * Shared AST helpers for SolAST detectors.
3
+ *
4
+ * The detector layer has accumulated dozens of identical copies of the same
5
+ * tiny helpers (`isNode`, `getName`, `buildLineOffsets`, etc.) and the same
6
+ * literal sets (the access-control modifier list). This module exists so that
7
+ * new and migrated detectors can import a single canonical implementation
8
+ * instead of redefining their own. Behavior of each helper here is the
9
+ * common-case implementation that already shipped across the detector files
10
+ * — adopting this module preserves observable behavior.
11
+ *
12
+ * Two notes for migration:
13
+ * - `ACCESS_CONTROL_MODIFIERS` uses lower-case keys. Callers must normalize
14
+ * before lookup. This matches the most-replicated form across detectors.
15
+ * - `byteOffsetToLineColumn` is binary-search-based; some older detector
16
+ * copies use a linear scan. Outputs are identical for all valid inputs.
17
+ */
18
+ /**
19
+ * Test whether `node` carries the given AST node type. Accepts both the
20
+ * `@solidity-parser/parser` shape (`type` field) and the solc compact JSON
21
+ * shape (`nodeType` field) so detectors written against either AST produce
22
+ * the same predicate.
23
+ */
24
+ export declare function isNode(node: any, kind: string): boolean;
25
+ /**
26
+ * Best-effort name extractor for AST nodes. Most detectors that ask "what is
27
+ * this node called?" only care about the literal `name` string. The fuller
28
+ * variant (`getCallName`) is for chained member-access expressions and lives
29
+ * with the access-control logic in `src/index.ts`.
30
+ */
31
+ export declare function getName(node: any): string;
32
+ /**
33
+ * Set of guard modifier names recognized as proof of access control.
34
+ *
35
+ * Stored lower-case because the duplicated copies across detectors all
36
+ * compare with `.toLowerCase()`. Callers must lower-case the modifier name
37
+ * before lookup.
38
+ *
39
+ * NOTE: this is intentionally narrower than the per-detector regex
40
+ * `/owner|admin|role|.../` patterns some detectors use, which over-match.
41
+ * If you need that fuzzier surface, do it explicitly in the detector — don't
42
+ * widen this set silently.
43
+ */
44
+ export declare const ACCESS_CONTROL_MODIFIERS: ReadonlySet<string>;
45
+ export declare function isAccessControlModifierName(name: string): boolean;
46
+ /**
47
+ * Build a `[lineStart, ...]` byte-offset table for a Solidity source text.
48
+ * Returns undefined when `sourceText` is undefined so callers can
49
+ * conditionally short-circuit. Identical in behavior to the shape duplicated
50
+ * across many detectors.
51
+ */
52
+ export declare function buildLineOffsets(sourceText?: string): number[] | undefined;
53
+ /**
54
+ * Resolve a UTF-8 byte offset back to (line, column). Lines are 1-indexed,
55
+ * columns are 0-indexed (matching `@solidity-parser/parser` conventions).
56
+ * Binary search keeps this O(log lines) per lookup; that matters because
57
+ * solc compact JSON gives every node a `src` offset, so the conversion is
58
+ * called once per visited node.
59
+ */
60
+ export declare function byteOffsetToLineColumn(byteOffset: number, lineOffsets: number[]): {
61
+ line: number;
62
+ column: number;
63
+ };
64
+ /**
65
+ * Structured source location for emitting findings. The `line` and `endLine`
66
+ * fields are 1-based (matching `@solidity-parser/parser`'s convention).
67
+ */
68
+ export interface LocInfo {
69
+ line: number;
70
+ endLine: number;
71
+ column: number;
72
+ endColumn: number;
73
+ }
74
+ /**
75
+ * Return the most specific available source location from `node`. If `node`
76
+ * has no usable `loc.start.line`, fall back to `fallbackNode`'s loc. Throws
77
+ * if neither node carries usable location data — this surfaces malformed
78
+ * AST input immediately rather than silently emitting `line: 0`, which the
79
+ * 0.3 conformance gate fails on (review G.7, roadmap 2.14).
80
+ *
81
+ * Callers should pass the most specific available node first (typically the
82
+ * node the finding describes) and the enclosing function or contract as the
83
+ * fallback (always has `loc` unless the AST is entirely malformed):
84
+ *
85
+ * const { line, endLine, column } = assertLoc(violationNode, this.currentFunctionNode);
86
+ *
87
+ * The single-arg form is for sites where the caller has already established
88
+ * that `node` has loc — but in those cases the explicit fallback is cheap
89
+ * and worth supplying for defence-in-depth.
90
+ */
91
+ export declare function assertLoc(node: any, fallbackNode?: any): LocInfo;
92
+ /**
93
+ * Non-throwing variant of `assertLoc`. Returns the most specific available
94
+ * source location from `node`, falling back to `fallbackNode`, or `null`
95
+ * when neither carries usable location data.
96
+ *
97
+ * Use cases that legitimately need `null` rather than a throw:
98
+ *
99
+ * - **Synthetic AST nodes constructed inside a detector** for
100
+ * deduplication or summary purposes (e.g. `arbitrary-account-balance-transfer.ts`'s
101
+ * mutation/primitive nodes assembled from sub-trees). The synthetic
102
+ * node is not a real AST node, has no `loc`, and surfacing that as
103
+ * a scan crash would be wrong.
104
+ * - **Dedup-key hash components** (e.g. `cross-chain-arbitrary-call.ts`'s
105
+ * `fnStartLine` in an instance key). The value is hashed, not emitted
106
+ * in a finding; producing a less-unique key is a graceful degradation.
107
+ *
108
+ * `assertLoc` is still the right choice when emitting a finding from a
109
+ * real AST node — silent `line: 0` emissions are the bug class roadmap
110
+ * 2.14 eliminates. `tryLoc` is the explicit escape hatch for the
111
+ * legitimate cases above.
112
+ */
113
+ export declare function tryLoc(node: any, fallbackNode?: any): LocInfo | null;
114
+ /**
115
+ * Resolve a node's source location across both AST shapes — parser-style
116
+ * (`node.loc.start`) and solc compact JSON (`node.src` byte offset).
117
+ *
118
+ * Returns `LocInfo | null` mirroring `tryLoc`. Use this when a detector
119
+ * declares `supportedAstKinds: ['parser', 'solc']` and a single helper
120
+ * needs to extract location data from whichever shape the AST node
121
+ * carries. Sibling detectors today duplicate this exact body ~80 times
122
+ * as a local `getLoc(node, lineOffsets?)` helper — adopting this shared
123
+ * version drops the duplication and standardises the null-on-missing
124
+ * semantics (some local copies return `undefined`, others return `null`).
125
+ *
126
+ * Behaviour matches the local copies' fast/slow path:
127
+ * - Fast path: `node.loc.start.line >= 1` → returns the full LocInfo
128
+ * (line, endLine, column, endColumn from `node.loc`).
129
+ * - Slow path: `node.src` byte offset + `lineOffsets` → returns a
130
+ * LocInfo with `endLine === line` and `endColumn === column` since
131
+ * the solc compact JSON `src` field is the START offset only.
132
+ * - Both unavailable → null. Callers that need a hard floor should
133
+ * `?? { line: 0, column: 0, endLine: 0, endColumn: 0 }`.
134
+ *
135
+ * `lineOffsets` is required only for the slow path — call sites that
136
+ * never produce solc-AST input can pass `undefined`. The slow path is
137
+ * skipped entirely when `lineOffsets` is missing.
138
+ */
139
+ export declare function getLoc(node: any, lineOffsets?: number[]): LocInfo | null;
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ /**
3
+ * Shared AST helpers for SolAST detectors.
4
+ *
5
+ * The detector layer has accumulated dozens of identical copies of the same
6
+ * tiny helpers (`isNode`, `getName`, `buildLineOffsets`, etc.) and the same
7
+ * literal sets (the access-control modifier list). This module exists so that
8
+ * new and migrated detectors can import a single canonical implementation
9
+ * instead of redefining their own. Behavior of each helper here is the
10
+ * common-case implementation that already shipped across the detector files
11
+ * — adopting this module preserves observable behavior.
12
+ *
13
+ * Two notes for migration:
14
+ * - `ACCESS_CONTROL_MODIFIERS` uses lower-case keys. Callers must normalize
15
+ * before lookup. This matches the most-replicated form across detectors.
16
+ * - `byteOffsetToLineColumn` is binary-search-based; some older detector
17
+ * copies use a linear scan. Outputs are identical for all valid inputs.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.ACCESS_CONTROL_MODIFIERS = void 0;
21
+ exports.isNode = isNode;
22
+ exports.getName = getName;
23
+ exports.isAccessControlModifierName = isAccessControlModifierName;
24
+ exports.buildLineOffsets = buildLineOffsets;
25
+ exports.byteOffsetToLineColumn = byteOffsetToLineColumn;
26
+ exports.assertLoc = assertLoc;
27
+ exports.tryLoc = tryLoc;
28
+ exports.getLoc = getLoc;
29
+ /**
30
+ * Test whether `node` carries the given AST node type. Accepts both the
31
+ * `@solidity-parser/parser` shape (`type` field) and the solc compact JSON
32
+ * shape (`nodeType` field) so detectors written against either AST produce
33
+ * the same predicate.
34
+ */
35
+ function isNode(node, kind) {
36
+ return node?.type === kind || node?.nodeType === kind;
37
+ }
38
+ /**
39
+ * Best-effort name extractor for AST nodes. Most detectors that ask "what is
40
+ * this node called?" only care about the literal `name` string. The fuller
41
+ * variant (`getCallName`) is for chained member-access expressions and lives
42
+ * with the access-control logic in `src/index.ts`.
43
+ */
44
+ function getName(node) {
45
+ return typeof node?.name === 'string' ? node.name : '';
46
+ }
47
+ /**
48
+ * Set of guard modifier names recognized as proof of access control.
49
+ *
50
+ * Stored lower-case because the duplicated copies across detectors all
51
+ * compare with `.toLowerCase()`. Callers must lower-case the modifier name
52
+ * before lookup.
53
+ *
54
+ * NOTE: this is intentionally narrower than the per-detector regex
55
+ * `/owner|admin|role|.../` patterns some detectors use, which over-match.
56
+ * If you need that fuzzier surface, do it explicitly in the detector — don't
57
+ * widen this set silently.
58
+ */
59
+ exports.ACCESS_CONTROL_MODIFIERS = new Set([
60
+ 'onlyowner',
61
+ 'onlyowners',
62
+ 'onlyrole',
63
+ 'onlyadmin',
64
+ 'onlyauthorized',
65
+ 'onlyoperator',
66
+ 'onlyoperators',
67
+ 'onlygovernance',
68
+ 'onlygovernor',
69
+ 'onlyguardian',
70
+ 'onlymanager',
71
+ ]);
72
+ function isAccessControlModifierName(name) {
73
+ return exports.ACCESS_CONTROL_MODIFIERS.has(name.toLowerCase());
74
+ }
75
+ /**
76
+ * Build a `[lineStart, ...]` byte-offset table for a Solidity source text.
77
+ * Returns undefined when `sourceText` is undefined so callers can
78
+ * conditionally short-circuit. Identical in behavior to the shape duplicated
79
+ * across many detectors.
80
+ */
81
+ function buildLineOffsets(sourceText) {
82
+ if (sourceText === undefined)
83
+ return undefined;
84
+ const lineOffsets = [0];
85
+ let byteOffset = 0;
86
+ for (const char of sourceText) {
87
+ byteOffset += Buffer.byteLength(char, 'utf8');
88
+ if (char === '\n')
89
+ lineOffsets.push(byteOffset);
90
+ }
91
+ return lineOffsets;
92
+ }
93
+ /**
94
+ * Resolve a UTF-8 byte offset back to (line, column). Lines are 1-indexed,
95
+ * columns are 0-indexed (matching `@solidity-parser/parser` conventions).
96
+ * Binary search keeps this O(log lines) per lookup; that matters because
97
+ * solc compact JSON gives every node a `src` offset, so the conversion is
98
+ * called once per visited node.
99
+ */
100
+ function byteOffsetToLineColumn(byteOffset, lineOffsets) {
101
+ let low = 0;
102
+ let high = lineOffsets.length - 1;
103
+ let lineIndex = 0;
104
+ while (low <= high) {
105
+ const mid = Math.floor((low + high) / 2);
106
+ if (lineOffsets[mid] <= byteOffset) {
107
+ lineIndex = mid;
108
+ low = mid + 1;
109
+ }
110
+ else {
111
+ high = mid - 1;
112
+ }
113
+ }
114
+ return { line: lineIndex + 1, column: byteOffset - lineOffsets[lineIndex] };
115
+ }
116
+ function tryExtractLoc(node) {
117
+ if (!node || typeof node !== 'object')
118
+ return null;
119
+ const startLine = node.loc?.start?.line;
120
+ if (typeof startLine !== 'number' || startLine <= 0)
121
+ return null;
122
+ const endLine = typeof node.loc?.end?.line === 'number' && node.loc.end.line > 0
123
+ ? node.loc.end.line
124
+ : startLine;
125
+ const column = typeof node.loc?.start?.column === 'number' && node.loc.start.column >= 0
126
+ ? node.loc.start.column
127
+ : 0;
128
+ // endColumn falls back to startColumn when end is missing or invalid —
129
+ // mirrors the endLine→startLine fallback above and matches the inline
130
+ // `<node>.loc?.end?.column || <startColumn>` pattern the f-stream is
131
+ // draining (roadmap 2.14.f).
132
+ const endColumn = typeof node.loc?.end?.column === 'number' && node.loc.end.column >= 0
133
+ ? node.loc.end.column
134
+ : column;
135
+ return { line: startLine, endLine, column, endColumn };
136
+ }
137
+ /**
138
+ * Return the most specific available source location from `node`. If `node`
139
+ * has no usable `loc.start.line`, fall back to `fallbackNode`'s loc. Throws
140
+ * if neither node carries usable location data — this surfaces malformed
141
+ * AST input immediately rather than silently emitting `line: 0`, which the
142
+ * 0.3 conformance gate fails on (review G.7, roadmap 2.14).
143
+ *
144
+ * Callers should pass the most specific available node first (typically the
145
+ * node the finding describes) and the enclosing function or contract as the
146
+ * fallback (always has `loc` unless the AST is entirely malformed):
147
+ *
148
+ * const { line, endLine, column } = assertLoc(violationNode, this.currentFunctionNode);
149
+ *
150
+ * The single-arg form is for sites where the caller has already established
151
+ * that `node` has loc — but in those cases the explicit fallback is cheap
152
+ * and worth supplying for defence-in-depth.
153
+ */
154
+ function assertLoc(node, fallbackNode) {
155
+ const primary = tryExtractLoc(node);
156
+ if (primary)
157
+ return primary;
158
+ if (fallbackNode !== undefined) {
159
+ const fb = tryExtractLoc(fallbackNode);
160
+ if (fb)
161
+ return fb;
162
+ }
163
+ const nodeKind = node?.type ?? node?.nodeType ?? 'unknown';
164
+ const fallbackHint = fallbackNode !== undefined ? ' and fallback node has no usable loc either' : '';
165
+ throw new Error(`assertLoc: node has no usable loc.start.line (node kind ${nodeKind})${fallbackHint}`);
166
+ }
167
+ /**
168
+ * Non-throwing variant of `assertLoc`. Returns the most specific available
169
+ * source location from `node`, falling back to `fallbackNode`, or `null`
170
+ * when neither carries usable location data.
171
+ *
172
+ * Use cases that legitimately need `null` rather than a throw:
173
+ *
174
+ * - **Synthetic AST nodes constructed inside a detector** for
175
+ * deduplication or summary purposes (e.g. `arbitrary-account-balance-transfer.ts`'s
176
+ * mutation/primitive nodes assembled from sub-trees). The synthetic
177
+ * node is not a real AST node, has no `loc`, and surfacing that as
178
+ * a scan crash would be wrong.
179
+ * - **Dedup-key hash components** (e.g. `cross-chain-arbitrary-call.ts`'s
180
+ * `fnStartLine` in an instance key). The value is hashed, not emitted
181
+ * in a finding; producing a less-unique key is a graceful degradation.
182
+ *
183
+ * `assertLoc` is still the right choice when emitting a finding from a
184
+ * real AST node — silent `line: 0` emissions are the bug class roadmap
185
+ * 2.14 eliminates. `tryLoc` is the explicit escape hatch for the
186
+ * legitimate cases above.
187
+ */
188
+ function tryLoc(node, fallbackNode) {
189
+ const primary = tryExtractLoc(node);
190
+ if (primary)
191
+ return primary;
192
+ if (fallbackNode !== undefined) {
193
+ const fb = tryExtractLoc(fallbackNode);
194
+ if (fb)
195
+ return fb;
196
+ }
197
+ return null;
198
+ }
199
+ /**
200
+ * Resolve a node's source location across both AST shapes — parser-style
201
+ * (`node.loc.start`) and solc compact JSON (`node.src` byte offset).
202
+ *
203
+ * Returns `LocInfo | null` mirroring `tryLoc`. Use this when a detector
204
+ * declares `supportedAstKinds: ['parser', 'solc']` and a single helper
205
+ * needs to extract location data from whichever shape the AST node
206
+ * carries. Sibling detectors today duplicate this exact body ~80 times
207
+ * as a local `getLoc(node, lineOffsets?)` helper — adopting this shared
208
+ * version drops the duplication and standardises the null-on-missing
209
+ * semantics (some local copies return `undefined`, others return `null`).
210
+ *
211
+ * Behaviour matches the local copies' fast/slow path:
212
+ * - Fast path: `node.loc.start.line >= 1` → returns the full LocInfo
213
+ * (line, endLine, column, endColumn from `node.loc`).
214
+ * - Slow path: `node.src` byte offset + `lineOffsets` → returns a
215
+ * LocInfo with `endLine === line` and `endColumn === column` since
216
+ * the solc compact JSON `src` field is the START offset only.
217
+ * - Both unavailable → null. Callers that need a hard floor should
218
+ * `?? { line: 0, column: 0, endLine: 0, endColumn: 0 }`.
219
+ *
220
+ * `lineOffsets` is required only for the slow path — call sites that
221
+ * never produce solc-AST input can pass `undefined`. The slow path is
222
+ * skipped entirely when `lineOffsets` is missing.
223
+ */
224
+ function getLoc(node, lineOffsets) {
225
+ const primary = tryExtractLoc(node);
226
+ if (primary)
227
+ return primary;
228
+ if (!lineOffsets)
229
+ return null;
230
+ const src = node?.src;
231
+ if (typeof src !== 'string')
232
+ return null;
233
+ const offset = Number(src.split(':')[0]);
234
+ if (!Number.isFinite(offset) || offset < 0)
235
+ return null;
236
+ const { line, column } = byteOffsetToLineColumn(offset, lineOffsets);
237
+ return { line, endLine: line, column, endColumn: column };
238
+ }
239
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1,14 @@
1
+ export type SolidityArithmeticProfile = {
2
+ allowsPre08Semantics: boolean;
3
+ source: 'pragma' | 'context' | 'unknown';
4
+ raw: string;
5
+ };
6
+ /**
7
+ * Classify Solidity arithmetic semantics at the 0.8.0 checked-arithmetic
8
+ * boundary. Ambiguous or unrecognized ranges are conservative: if any branch
9
+ * can select a pre-0.8 compiler, callers should assume unchecked arithmetic is
10
+ * possible unless a detector proves otherwise.
11
+ */
12
+ export declare function classifySolidityArithmeticProfile(pragmaValues: string[], fallbackSolcVersion?: string): SolidityArithmeticProfile;
13
+ export declare function arithmeticMayWrap(profile: SolidityArithmeticProfile, uncheckedDepth: number): boolean;
14
+ export declare function pragmaAllowsPre080(pragmaValue: string): boolean;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifySolidityArithmeticProfile = classifySolidityArithmeticProfile;
4
+ exports.arithmeticMayWrap = arithmeticMayWrap;
5
+ exports.pragmaAllowsPre080 = pragmaAllowsPre080;
6
+ /**
7
+ * Classify Solidity arithmetic semantics at the 0.8.0 checked-arithmetic
8
+ * boundary. Ambiguous or unrecognized ranges are conservative: if any branch
9
+ * can select a pre-0.8 compiler, callers should assume unchecked arithmetic is
10
+ * possible unless a detector proves otherwise.
11
+ */
12
+ function classifySolidityArithmeticProfile(pragmaValues, fallbackSolcVersion) {
13
+ const solidityPragmas = pragmaValues
14
+ .map(value => String(value || '').trim())
15
+ .filter(Boolean);
16
+ if (solidityPragmas.length > 0) {
17
+ return {
18
+ allowsPre08Semantics: solidityPragmas.some(pragmaAllowsPre080),
19
+ source: 'pragma',
20
+ raw: solidityPragmas.join(' || '),
21
+ };
22
+ }
23
+ const fallback = String(fallbackSolcVersion || '').trim();
24
+ if (fallback) {
25
+ return {
26
+ allowsPre08Semantics: pragmaAllowsPre080(fallback),
27
+ source: 'context',
28
+ raw: fallback,
29
+ };
30
+ }
31
+ return { allowsPre08Semantics: true, source: 'unknown', raw: '' };
32
+ }
33
+ function arithmeticMayWrap(profile, uncheckedDepth) {
34
+ return profile.allowsPre08Semantics || uncheckedDepth > 0;
35
+ }
36
+ function pragmaAllowsPre080(pragmaValue) {
37
+ if (!pragmaValue)
38
+ return true;
39
+ const normalized = pragmaValue.replace(/^v(?=\d)/i, '').replace(/\+commit\.[a-f0-9]+/ig, '');
40
+ const branches = normalized.split('||');
41
+ for (const branch of branches) {
42
+ const tokens = branch.trim().split(/\s+/).filter(Boolean);
43
+ if (tokens.length === 0)
44
+ return true;
45
+ let lowerMinor = -1;
46
+ let sawComparator = false;
47
+ for (const token of tokens) {
48
+ const match = token.match(/^([\^~]|>=|>|<=|<|=)?\s*0\.(\d+)(?:\.(\d+))?/);
49
+ if (!match)
50
+ continue;
51
+ const op = match[1] || '=';
52
+ const minor = parseInt(match[2], 10);
53
+ if (op === '<' || op === '<=')
54
+ continue;
55
+ sawComparator = true;
56
+ if (lowerMinor < 0 || minor > lowerMinor)
57
+ lowerMinor = minor;
58
+ }
59
+ if (!sawComparator)
60
+ return true;
61
+ if (lowerMinor < 8)
62
+ return true;
63
+ }
64
+ return false;
65
+ }
66
+ //# sourceMappingURL=compiler-profile.js.map
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Dataflow primitives shared by detectors that compute fixed points
3
+ * over taint, reachability, or other monotone-over-finite-set
4
+ * lattices.
5
+ *
6
+ * Today this module exports one primitive — `runFixedPoint` — used by
7
+ * the inter-procedural taint analyses in `arbitrary-call-error`,
8
+ * `lack-of-calldata-validation`, and `halborn-security-report-aave-v3`.
9
+ * Each of those detectors used to hand-roll its own
10
+ * `for (let pass = 0; changed && pass < N; pass++)` loop, with
11
+ * different N values and (in one case) no cap at all. The audit's
12
+ * concern was the inconsistency: a copy-paste with a typo could
13
+ * silently spin forever, and there was no shared place to add
14
+ * observability or change the cap policy. This primitive collapses
15
+ * the three loops into one well-documented signature.
16
+ */
17
+ export interface FixedPointOptions {
18
+ /**
19
+ * Maximum number of `step` invocations before we give up. Default
20
+ * 32. The lattices the existing detectors use are all monotone
21
+ * over a finite set (parameter indexes, function names), so 32 is
22
+ * comfortably above any real workload — if a detector hits this
23
+ * cap, the step function is almost certainly not shrinking the
24
+ * dirty set on each iteration and that's the bug to fix, not the
25
+ * cap to raise.
26
+ */
27
+ maxPasses?: number;
28
+ /**
29
+ * Optional label used in non-convergence error messages. Pass the
30
+ * detector or analysis name so a stack trace points to which
31
+ * fixed-point failed.
32
+ */
33
+ name?: string;
34
+ /**
35
+ * When the cap is hit and `step` is still returning `true`, the
36
+ * default is to return `{ converged: false }` so the caller can
37
+ * decide what to do (some lattices are "best-effort"). Set this
38
+ * flag to throw instead — useful in tests where non-convergence
39
+ * is the bug being asserted against.
40
+ */
41
+ throwOnNonConvergence?: boolean;
42
+ }
43
+ export interface FixedPointResult {
44
+ /** Number of times `step` was invoked, i.e. the iteration count. */
45
+ passes: number;
46
+ /** True when `step` returned `false` before the cap. */
47
+ converged: boolean;
48
+ }
49
+ /**
50
+ * Run an imperative fixed-point loop. `step` is called repeatedly
51
+ * until either it returns `false` (no work was done this iteration —
52
+ * convergence) or the `maxPasses` cap is hit. `step` is responsible
53
+ * for the actual state mutations; this helper only enforces the
54
+ * loop shape.
55
+ *
56
+ * The shape `step: () => boolean` is intentional. The detectors
57
+ * mutate `Set`s and `Map`s in place, so a functional
58
+ * `(prev: T) => T` signature would force every detector to either
59
+ * deep-copy on each iteration or produce a wrapper that fakes
60
+ * immutability. Instead the caller mutates and returns whether any
61
+ * mutation actually happened — which is what the original hand-
62
+ * rolled loops already tracked via a `changed` flag.
63
+ *
64
+ * Example:
65
+ *
66
+ * const propagated = new Map<string, Set<number>>();
67
+ * runFixedPoint(() => {
68
+ * let didWork = false;
69
+ * for (const fn of functions) {
70
+ * // ... compute new tainted args, set didWork=true if added ...
71
+ * }
72
+ * return didWork;
73
+ * }, { maxPasses: 12, name: 'propagateParamTaint' });
74
+ */
75
+ export declare function runFixedPoint(step: () => boolean, opts?: FixedPointOptions): FixedPointResult;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Dataflow primitives shared by detectors that compute fixed points
4
+ * over taint, reachability, or other monotone-over-finite-set
5
+ * lattices.
6
+ *
7
+ * Today this module exports one primitive — `runFixedPoint` — used by
8
+ * the inter-procedural taint analyses in `arbitrary-call-error`,
9
+ * `lack-of-calldata-validation`, and `halborn-security-report-aave-v3`.
10
+ * Each of those detectors used to hand-roll its own
11
+ * `for (let pass = 0; changed && pass < N; pass++)` loop, with
12
+ * different N values and (in one case) no cap at all. The audit's
13
+ * concern was the inconsistency: a copy-paste with a typo could
14
+ * silently spin forever, and there was no shared place to add
15
+ * observability or change the cap policy. This primitive collapses
16
+ * the three loops into one well-documented signature.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.runFixedPoint = runFixedPoint;
20
+ /**
21
+ * Run an imperative fixed-point loop. `step` is called repeatedly
22
+ * until either it returns `false` (no work was done this iteration —
23
+ * convergence) or the `maxPasses` cap is hit. `step` is responsible
24
+ * for the actual state mutations; this helper only enforces the
25
+ * loop shape.
26
+ *
27
+ * The shape `step: () => boolean` is intentional. The detectors
28
+ * mutate `Set`s and `Map`s in place, so a functional
29
+ * `(prev: T) => T` signature would force every detector to either
30
+ * deep-copy on each iteration or produce a wrapper that fakes
31
+ * immutability. Instead the caller mutates and returns whether any
32
+ * mutation actually happened — which is what the original hand-
33
+ * rolled loops already tracked via a `changed` flag.
34
+ *
35
+ * Example:
36
+ *
37
+ * const propagated = new Map<string, Set<number>>();
38
+ * runFixedPoint(() => {
39
+ * let didWork = false;
40
+ * for (const fn of functions) {
41
+ * // ... compute new tainted args, set didWork=true if added ...
42
+ * }
43
+ * return didWork;
44
+ * }, { maxPasses: 12, name: 'propagateParamTaint' });
45
+ */
46
+ function runFixedPoint(step, opts = {}) {
47
+ const maxPasses = opts.maxPasses ?? 32;
48
+ for (let pass = 1; pass <= maxPasses; pass++) {
49
+ if (!step())
50
+ return { passes: pass, converged: true };
51
+ }
52
+ if (opts.throwOnNonConvergence) {
53
+ throw new Error(`runFixedPoint(${opts.name || 'anonymous'}) did not converge after ${maxPasses} passes`);
54
+ }
55
+ return { passes: maxPasses, converged: false };
56
+ }
57
+ //# sourceMappingURL=dataflow.js.map
@@ -0,0 +1,7 @@
1
+ export declare function isFheTypeName(typeName: string): boolean;
2
+ export declare function isFheCipherType(typeName: string, fheAliases?: Set<string>, localNonAliasFheNames?: Set<string>): boolean;
3
+ export declare function isFheNamespaceCall(node: any): boolean;
4
+ export declare function isFheNamespaceMemberCall(node: any, memberName: string): boolean;
5
+ export declare function isFheAllowCall(node: any): boolean;
6
+ export declare function isFheAllowThisCall(node: any): boolean;
7
+ export declare function isFheDecryptCall(node: any): boolean;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFheTypeName = isFheTypeName;
4
+ exports.isFheCipherType = isFheCipherType;
5
+ exports.isFheNamespaceCall = isFheNamespaceCall;
6
+ exports.isFheNamespaceMemberCall = isFheNamespaceMemberCall;
7
+ exports.isFheAllowCall = isFheAllowCall;
8
+ exports.isFheAllowThisCall = isFheAllowThisCall;
9
+ exports.isFheDecryptCall = isFheDecryptCall;
10
+ const ast_1 = require("./ast");
11
+ const FHE_NAMESPACES = new Set(['TFHE', 'FHE']);
12
+ const FHE_TYPE_RE = /^e(?:bool|uint(?:[0-9]+)?)$/;
13
+ function isFheTypeName(typeName) {
14
+ return FHE_TYPE_RE.test(typeName);
15
+ }
16
+ function isFheCipherType(typeName, fheAliases = new Set(), localNonAliasFheNames = new Set()) {
17
+ return fheAliases.has(typeName) || (isFheTypeName(typeName) && !localNonAliasFheNames.has(typeName));
18
+ }
19
+ function isFheNamespaceCall(node) {
20
+ if (!(0, ast_1.isNode)(node, 'FunctionCall'))
21
+ return false;
22
+ const callee = node.expression;
23
+ if (!(0, ast_1.isNode)(callee, 'MemberAccess'))
24
+ return false;
25
+ const receiver = callee.expression;
26
+ return !!receiver && (0, ast_1.isNode)(receiver, 'Identifier') && FHE_NAMESPACES.has(receiver.name);
27
+ }
28
+ function isFheNamespaceMemberCall(node, memberName) {
29
+ return isFheNamespaceCall(node) && node.expression?.memberName === memberName;
30
+ }
31
+ function isFheAllowCall(node) {
32
+ return isFheNamespaceMemberCall(node, 'allow');
33
+ }
34
+ function isFheAllowThisCall(node) {
35
+ return isFheNamespaceMemberCall(node, 'allowThis');
36
+ }
37
+ function isFheDecryptCall(node) {
38
+ return isFheNamespaceMemberCall(node, 'decrypt');
39
+ }
40
+ //# sourceMappingURL=fhe.js.map