@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,781 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingAccessControlDetector = void 0;
4
+ const ast_1 = require("./_common/ast");
5
+ const RULE_ID = 'missing-access-control';
6
+ const CRITICAL_FUNCTION_NAMES = new Set([
7
+ 'mint',
8
+ 'withdraw',
9
+ 'setowner',
10
+ 'setadmin',
11
+ 'upgrade',
12
+ 'pause',
13
+ ]);
14
+ // Recognised guard modifiers come from the canonical
15
+ // `_common/ast.ts:ACCESS_CONTROL_MODIFIERS` set (currently 11 entries:
16
+ // onlyOwner, onlyOwners, onlyRole, onlyAdmin, onlyAuthorized, onlyOperator,
17
+ // onlyOperators, onlyGovernance, onlyGovernor, onlyGuardian, onlyManager).
18
+ // Previously this detector only recognised `onlyOwner` / `onlyRole`,
19
+ // which produced false positives on contracts using equally-canonical
20
+ // modifier names like `onlyAdmin` whose body lives in a base contract
21
+ // not visible to the per-file scan (a true positive there requires
22
+ // roadmap 3.3 cross-file inheritance — see the H.3 regression test).
23
+ // Custom guards (`whenNotPaused`, `requiresAuth`, …) still fall through
24
+ // to the structural body check below.
25
+ const CRITICAL_INTERNAL_MUTATOR_NAMES = new Set([
26
+ '_mint',
27
+ '_burn',
28
+ '_pause',
29
+ '_unpause',
30
+ '_upgradeto',
31
+ '_upgradetoandcall',
32
+ '_setimplementation',
33
+ '_transferownership',
34
+ '_setowner',
35
+ '_setadmin',
36
+ '_changeadmin',
37
+ ]);
38
+ const PRIVILEGED_STATE_PATTERN = /owner|admin|role|paused|pause|guardian|timelock|governor|fee|treasury|operator/i;
39
+ class MissingAccessControlDetector {
40
+ id = RULE_ID;
41
+ patternKey = RULE_ID;
42
+ supportedAstKinds = ['parser', 'solc'];
43
+ currentFile = '';
44
+ sourceText;
45
+ semantic = undefined;
46
+ findings = [];
47
+ setFile(file) {
48
+ this.currentFile = file;
49
+ this.findings = [];
50
+ }
51
+ setSourceText(sourceText) {
52
+ this.sourceText = sourceText;
53
+ }
54
+ setSemanticModel(model) {
55
+ this.semantic = model;
56
+ }
57
+ getFindings() {
58
+ return this.findings;
59
+ }
60
+ SourceUnit(ast) {
61
+ if (ast?.nodeType === 'SourceUnit') {
62
+ this.findings.push(...this.runAst(ast, this.currentFile, this.sourceText, this.semantic));
63
+ }
64
+ }
65
+ ContractDefinition(node) {
66
+ if (node?.type !== 'ContractDefinition')
67
+ return;
68
+ this.findings.push(...this.runAst(node, this.currentFile, this.sourceText, this.semantic));
69
+ }
70
+ scanAst(ast, file, sourceText, ctxArg) {
71
+ return this.runAst(ast, file, sourceText, ctxArg?.semantic);
72
+ }
73
+ runAst(ast, file, sourceText, semantic) {
74
+ if (!ast || typeof ast !== 'object')
75
+ return [];
76
+ const findings = [];
77
+ const lineOffsets = buildLineOffsets(sourceText);
78
+ // SemanticModel (roadmap 3.3) lets this detector see inherited
79
+ // critical functions across contracts — solves H.3
80
+ // When undefined, the detector behaves exactly as before (per-file
81
+ // local walk only); the cross-MRO block below is purely additive.
82
+ walkContracts(ast, contractNode => {
83
+ const contractName = getName(contractNode) || '<anonymous>';
84
+ const ctx = {
85
+ stateVariables: collectStateVariables(contractNode),
86
+ modifierBodies: collectModifierBodies(contractNode),
87
+ };
88
+ // Track function names already iterated locally so the inherited
89
+ // walk below doesn't double-fire when Derived overrides Base.fn().
90
+ const localFnNamesLower = new Set();
91
+ for (const fn of getContractMembers(contractNode, 'FunctionDefinition')) {
92
+ const functionName = getName(fn);
93
+ if (!functionName)
94
+ continue;
95
+ localFnNamesLower.add(functionName.toLowerCase());
96
+ const lname = functionName.toLowerCase();
97
+ if (!CRITICAL_FUNCTION_NAMES.has(lname))
98
+ continue;
99
+ if (!isExternallyCallable(fn))
100
+ continue;
101
+ const body = getFunctionBody(fn);
102
+ if (!body)
103
+ continue;
104
+ const params = collectParameterNames(fn);
105
+ if (!containsStateMutationOrFundTransfer(body, ctx))
106
+ continue;
107
+ if (hasRecognizedModifierGuard(fn, ctx))
108
+ continue;
109
+ if (hasInlineGuardBeforeMutation(body, ctx, params))
110
+ continue;
111
+ if (lname === 'withdraw' && isUserPullPayment(body, ctx))
112
+ continue;
113
+ const loc = getLoc(fn, lineOffsets) || { line: 0, column: 0 };
114
+ findings.push({
115
+ file,
116
+ contract: contractName,
117
+ 'function': functionName,
118
+ line: loc.line,
119
+ endLine: loc.line,
120
+ column: loc.column,
121
+ pattern: RULE_ID,
122
+ confidence: 'high',
123
+ ruleId: RULE_ID,
124
+ severity: 'high',
125
+ message: `Externally callable critical function '${functionName}' has no recognized access-control guard; ` +
126
+ `add onlyOwner, onlyRole(DEFAULT_ADMIN_ROLE), or an explicit msg.sender owner/admin require check.`,
127
+ rationale: `Critical mutator '${functionName}' is reachable by any account and lacks a recognized modifier or ` +
128
+ `inline owner/admin/role guard, matching the missing-access-control exploit class (issue #500).`,
129
+ suggestedFix: `Restrict '${functionName}' to authorized callers using onlyOwner, onlyRole(DEFAULT_ADMIN_ROLE), ` +
130
+ `or an inline require(msg.sender == owner/admin) guard before any state mutation.`,
131
+ contractName,
132
+ functionName,
133
+ sourceLocation: { line: loc.line, column: loc.column },
134
+ findingId: '',
135
+ contractHash: '',
136
+ });
137
+ }
138
+ // === SemanticModel adoption (roadmap 3.3 / H.3 fix) ===
139
+ //
140
+ // After the local walk, also check inherited critical functions.
141
+ // `inheritedFunctions(myId)` returns the MRO-deduplicated list of
142
+ // functions visible on `contractNode`, with most-derived-wins
143
+ // semantics. We skip functions already iterated locally (so
144
+ // overrides don't double-fire) and run the SAME guard checks
145
+ // against the inherited function — but using the DECLARING
146
+ // contract's modifier / state-var context, so a modifier defined
147
+ // in Base can still be resolved for Base.setAdmin.
148
+ //
149
+ // Finding loc points at the CURRENT contract's definition line
150
+ // in the current file (the surface the user can call), not at
151
+ // Base.sol (which fires separately via its own local walk when
152
+ // Base.sol is also in the scan). The finding's `function` field
153
+ // carries the inherited name so the operator can locate it.
154
+ if (semantic) {
155
+ const myId = `${file}::${contractName}`;
156
+ const myInfo = semantic.contracts.get(myId);
157
+ if (myInfo && myInfo.bases.length > 0) {
158
+ for (const inheritedFn of semantic.inheritedFunctions(myId)) {
159
+ // Functions declared locally are handled above; skip.
160
+ if (inheritedFn.contractId === myId)
161
+ continue;
162
+ const inheritedName = inheritedFn.name;
163
+ if (!inheritedName)
164
+ continue;
165
+ const inheritedLower = inheritedName.toLowerCase();
166
+ if (!CRITICAL_FUNCTION_NAMES.has(inheritedLower))
167
+ continue;
168
+ // Local override (already iterated) -- skip even if local
169
+ // walk didn't emit (it had its own reason).
170
+ if (localFnNamesLower.has(inheritedLower))
171
+ continue;
172
+ const inheritedNode = inheritedFn.node;
173
+ if (!isExternallyCallable(inheritedNode))
174
+ continue;
175
+ const declarer = semantic.contracts.get(inheritedFn.contractId);
176
+ if (!declarer || !declarer.node)
177
+ continue;
178
+ // Use the declaring contract's state-vars + modifier-bodies
179
+ // so guard checks resolve against the function's actual scope.
180
+ const declarerCtx = {
181
+ stateVariables: collectStateVariables(declarer.node),
182
+ modifierBodies: collectModifierBodies(declarer.node),
183
+ };
184
+ const body = getFunctionBody(inheritedNode);
185
+ if (!body)
186
+ continue;
187
+ const params = collectParameterNames(inheritedNode);
188
+ if (!containsStateMutationOrFundTransfer(body, declarerCtx))
189
+ continue;
190
+ if (hasRecognizedModifierGuard(inheritedNode, declarerCtx))
191
+ continue;
192
+ if (hasInlineGuardBeforeMutation(body, declarerCtx, params))
193
+ continue;
194
+ if (inheritedLower === 'withdraw' && isUserPullPayment(body, declarerCtx))
195
+ continue;
196
+ // Loc: current contract's definition line in the current file.
197
+ // Falls back to line 1 col 0 if the contract AST lacks a loc
198
+ // (defensive — line 0 is banned per docs/findings-taxonomy).
199
+ const contractLoc = getLoc(contractNode, lineOffsets) || { line: 1, column: 0 };
200
+ findings.push({
201
+ file,
202
+ contract: contractName,
203
+ 'function': inheritedName,
204
+ line: contractLoc.line,
205
+ endLine: contractLoc.line,
206
+ column: contractLoc.column,
207
+ pattern: RULE_ID,
208
+ confidence: 'high',
209
+ ruleId: RULE_ID,
210
+ severity: 'high',
211
+ message: `Externally callable critical function '${inheritedName}' inherited from ${declarer.name} ` +
212
+ `has no recognized access-control guard; add onlyOwner, onlyRole(DEFAULT_ADMIN_ROLE), or ` +
213
+ `an explicit msg.sender owner/admin require check on the inherited function or override it in ${contractName}.`,
214
+ rationale: `Critical mutator '${inheritedName}' is reachable through ${contractName}'s inheritance ` +
215
+ `from ${declarer.name} and lacks a recognized modifier or inline guard.`,
216
+ suggestedFix: `Override '${inheritedName}' in ${contractName} with a recognized access-control modifier, ` +
217
+ `or restrict access in ${declarer.name}.`,
218
+ contractName,
219
+ functionName: inheritedName,
220
+ sourceLocation: { line: contractLoc.line, column: contractLoc.column },
221
+ // Discriminator for computeFindingId: all inherited findings on
222
+ // a single derived contract share (file, line, ruleId) because
223
+ // they're anchored at the contract definition line. Without
224
+ // this, a derived contract inheriting two unguarded critical
225
+ // functions (e.g. `setOwner` + `pause`) would emit two findings
226
+ // with identical findingId and the downstream dedup engine
227
+ // would silently drop one. See the round-2 panel review
228
+ // (`dup-find-id` / `findingid-col` / `findingid-coll`) on PR
229
+ // #1999 — pinned by the inherited-multi-critical regression
230
+ // test added in the same PR.
231
+ instance_key: `${contractName}::${inheritedName}`,
232
+ findingId: '',
233
+ contractHash: '',
234
+ });
235
+ }
236
+ }
237
+ }
238
+ });
239
+ return findings;
240
+ }
241
+ }
242
+ exports.MissingAccessControlDetector = MissingAccessControlDetector;
243
+ function hasRecognizedModifierGuard(fn, ctx) {
244
+ for (const mod of fn.modifiers || []) {
245
+ const modName = getModifierInvocationName(mod);
246
+ if (!modName)
247
+ continue;
248
+ if ((0, ast_1.isAccessControlModifierName)(modName))
249
+ return true;
250
+ const body = ctx.modifierBodies.get(modName);
251
+ if (!body)
252
+ continue;
253
+ if (containsRecognizedAuthCheck(body, ctx, new Set()))
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ function hasInlineGuardBeforeMutation(body, ctx, params) {
259
+ const statements = getStatementList(body);
260
+ for (const stmt of statements) {
261
+ if (isRecognizedGuardStatement(stmt, ctx, params))
262
+ return true;
263
+ if (isMeaningfulAction(stmt))
264
+ return false;
265
+ }
266
+ return false;
267
+ }
268
+ function isRecognizedGuardStatement(stmt, ctx, params) {
269
+ if (!stmt)
270
+ return false;
271
+ const expression = isNode(stmt, 'ExpressionStatement') ? stmt.expression : null;
272
+ if (!expression)
273
+ return false;
274
+ return isRecognizedAuthCheck(expression, ctx, params);
275
+ }
276
+ function isMeaningfulAction(stmt) {
277
+ if (!stmt)
278
+ return false;
279
+ if (isNode(stmt, 'ExpressionStatement')) {
280
+ const expression = stmt.expression;
281
+ if (!expression)
282
+ return false;
283
+ if (isAssignmentExpression(expression))
284
+ return true;
285
+ if (isUnaryMutation(expression))
286
+ return true;
287
+ if (isNode(expression, 'FunctionCall')) {
288
+ const callee = (getCallExpressionName(expression) || '').toLowerCase();
289
+ if (callee === 'require' || callee === 'assert')
290
+ return false;
291
+ return true;
292
+ }
293
+ return false;
294
+ }
295
+ if (isNode(stmt, 'IfStatement') ||
296
+ isNode(stmt, 'ForStatement') ||
297
+ isNode(stmt, 'WhileStatement') ||
298
+ isNode(stmt, 'DoWhileStatement') ||
299
+ isNode(stmt, 'Return') ||
300
+ isNode(stmt, 'ReturnStatement') ||
301
+ isNode(stmt, 'EmitStatement')) {
302
+ return true;
303
+ }
304
+ if (isNode(stmt, 'VariableDeclarationStatement')) {
305
+ return false;
306
+ }
307
+ return false;
308
+ }
309
+ function containsRecognizedAuthCheck(node, ctx, params) {
310
+ if (!node || typeof node !== 'object')
311
+ return false;
312
+ if (isRecognizedAuthCheck(node, ctx, params))
313
+ return true;
314
+ for (const child of childrenOf(node)) {
315
+ if (containsRecognizedAuthCheck(child, ctx, params))
316
+ return true;
317
+ }
318
+ return false;
319
+ }
320
+ function isRecognizedAuthCheck(expr, ctx, params) {
321
+ if (!expr || !isNode(expr, 'FunctionCall'))
322
+ return false;
323
+ const callee = (getCallExpressionName(expr) || '').toLowerCase();
324
+ const args = getCallArguments(expr);
325
+ if (callee === 'require' || callee === 'assert') {
326
+ return args.some(arg => isPrivilegedSenderEquality(arg, ctx, params) || isHasRoleSenderCall(arg));
327
+ }
328
+ if (callee === '_checkrole' || callee === 'checkrole' || callee.endsWith('._checkrole')) {
329
+ return true;
330
+ }
331
+ return false;
332
+ }
333
+ function isPrivilegedSenderEquality(expr, ctx, params) {
334
+ if (!expr || !isNode(expr, 'BinaryOperation'))
335
+ return false;
336
+ if (getOperator(expr) !== '==' && getOperator(expr) !== '===')
337
+ return false;
338
+ const left = expr.left ?? expr.leftExpression;
339
+ const right = expr.right ?? expr.rightExpression;
340
+ if (isMsgSender(left) && !isMsgSender(right)) {
341
+ return isPrivilegedAuthorityReference(right, ctx, params);
342
+ }
343
+ if (isMsgSender(right) && !isMsgSender(left)) {
344
+ return isPrivilegedAuthorityReference(left, ctx, params);
345
+ }
346
+ return false;
347
+ }
348
+ function isPrivilegedAuthorityReference(expr, ctx, params) {
349
+ const root = getReferenceRoot(expr);
350
+ if (!root)
351
+ return false;
352
+ if (params.has(root))
353
+ return false;
354
+ if (!ctx.stateVariables.has(root))
355
+ return false;
356
+ return PRIVILEGED_STATE_PATTERN.test(root);
357
+ }
358
+ function isHasRoleSenderCall(expr) {
359
+ if (!expr || !isNode(expr, 'FunctionCall'))
360
+ return false;
361
+ const callee = (getCallExpressionName(expr) || '').toLowerCase();
362
+ if (callee !== 'hasrole' && !callee.endsWith('.hasrole'))
363
+ return false;
364
+ return getCallArguments(expr).some(isMsgSender);
365
+ }
366
+ function containsStateMutationOrFundTransfer(body, ctx) {
367
+ let found = false;
368
+ walk(body, node => {
369
+ if (found)
370
+ return;
371
+ if (isStateMutation(node, ctx)) {
372
+ found = true;
373
+ return;
374
+ }
375
+ if (isNode(node, 'FunctionCall')) {
376
+ if (getPayoutRecipient(node) !== null) {
377
+ found = true;
378
+ return;
379
+ }
380
+ if (isCriticalInternalMutatorCall(node)) {
381
+ found = true;
382
+ }
383
+ }
384
+ });
385
+ return found;
386
+ }
387
+ function isCriticalInternalMutatorCall(call) {
388
+ const callee = call?.expression;
389
+ if (!callee || !isNode(callee, 'Identifier'))
390
+ return false;
391
+ const name = getName(callee);
392
+ if (!name)
393
+ return false;
394
+ return CRITICAL_INTERNAL_MUTATOR_NAMES.has(name.toLowerCase());
395
+ }
396
+ function isStateMutation(node, ctx) {
397
+ if (isAssignmentExpression(node)) {
398
+ const left = node.left ?? node.leftHandSide;
399
+ const root = getReferenceRoot(left);
400
+ return !!root && ctx.stateVariables.has(root);
401
+ }
402
+ if (isUnaryMutation(node)) {
403
+ const target = node.subExpression ?? node.vSubExpression;
404
+ const root = getReferenceRoot(target);
405
+ return !!root && ctx.stateVariables.has(root);
406
+ }
407
+ return false;
408
+ }
409
+ function isUserPullPayment(body, ctx) {
410
+ let sawCallerIndexedStateWrite = false;
411
+ let sawCallerDirectedPayout = false;
412
+ let foundNonCallerIndexedStateMutation = false;
413
+ let foundForeignTransfer = false;
414
+ walk(body, node => {
415
+ if (isStateMutation(node, ctx)) {
416
+ const left = node.left ?? node.leftHandSide;
417
+ const target = left ?? node.subExpression ?? node.vSubExpression;
418
+ const root = getReferenceRoot(target);
419
+ if (root && ctx.stateVariables.has(root) && isCallerIndexedStateReference(target)) {
420
+ sawCallerIndexedStateWrite = true;
421
+ }
422
+ else {
423
+ foundNonCallerIndexedStateMutation = true;
424
+ }
425
+ }
426
+ if (isNode(node, 'FunctionCall')) {
427
+ const recipient = getPayoutRecipient(node);
428
+ if (recipient !== null) {
429
+ if (recipient === 'caller')
430
+ sawCallerDirectedPayout = true;
431
+ else
432
+ foundForeignTransfer = true;
433
+ }
434
+ }
435
+ });
436
+ return (sawCallerIndexedStateWrite &&
437
+ sawCallerDirectedPayout &&
438
+ !foundNonCallerIndexedStateMutation &&
439
+ !foundForeignTransfer);
440
+ }
441
+ function getValueTransferRecipient(call) {
442
+ const recipient = getNativeValueTransferRecipient(call);
443
+ if (recipient === 'caller')
444
+ return 'msg.sender';
445
+ if (recipient === 'other')
446
+ return 'other';
447
+ return null;
448
+ }
449
+ function getPayoutRecipient(call) {
450
+ const valueRecipient = getNativeValueTransferRecipient(call);
451
+ if (valueRecipient !== null)
452
+ return valueRecipient;
453
+ const callee = call.expression;
454
+ if (!callee || !isNode(callee, 'MemberAccess'))
455
+ return null;
456
+ if (String(callee.memberName || '').toLowerCase() !== 'transfer')
457
+ return null;
458
+ const args = getCallArguments(call);
459
+ if (args.length < 2)
460
+ return null;
461
+ return isCallerExpression(args[0]) ? 'caller' : 'other';
462
+ }
463
+ function getNativeValueTransferRecipient(call) {
464
+ const callee = call.expression;
465
+ if (!callee)
466
+ return null;
467
+ if (isNode(callee, 'MemberAccess')) {
468
+ const member = String(callee.memberName || '').toLowerCase();
469
+ if ((member === 'transfer' || member === 'send') && getCallArguments(call).length === 1) {
470
+ return resolveRecipient(callee.expression);
471
+ }
472
+ }
473
+ if (isNode(callee, 'NameValueExpression')) {
474
+ const inner = callee.expression;
475
+ if (isNode(inner, 'MemberAccess') &&
476
+ String(inner.memberName || '').toLowerCase() === 'call' &&
477
+ nameValueExpressionHasValue(callee)) {
478
+ return resolveRecipient(inner.expression);
479
+ }
480
+ }
481
+ if (isNode(callee, 'FunctionCallOptions')) {
482
+ const inner = callee.expression;
483
+ if (isNode(inner, 'MemberAccess') &&
484
+ String(inner.memberName || '').toLowerCase() === 'call' &&
485
+ nameValueExpressionHasValue(callee)) {
486
+ return resolveRecipient(inner.expression);
487
+ }
488
+ }
489
+ return null;
490
+ }
491
+ function resolveRecipient(expr) {
492
+ if (isCallerExpression(expr))
493
+ return 'caller';
494
+ if (isNode(expr, 'FunctionCall')) {
495
+ const callee = expr.expression;
496
+ if (isNode(callee, 'ElementaryTypeName') ||
497
+ isNode(callee, 'ElementaryTypeNameExpression') ||
498
+ (isNode(callee, 'Identifier') && (getName(callee) === 'address' || getName(callee) === 'payable'))) {
499
+ const args = getCallArguments(expr);
500
+ if (args.length === 1 && resolveRecipient(args[0]) === 'caller')
501
+ return 'caller';
502
+ }
503
+ }
504
+ return 'other';
505
+ }
506
+ function isCallerIndexedStateReference(expr) {
507
+ if (!expr)
508
+ return false;
509
+ if (isNode(expr, 'IndexAccess')) {
510
+ const index = expr.index ?? expr.indexExpression;
511
+ if (isCallerExpression(index))
512
+ return true;
513
+ return isCallerIndexedStateReference(expr.base ?? expr.baseExpression);
514
+ }
515
+ if (isNode(expr, 'MemberAccess')) {
516
+ return isCallerIndexedStateReference(expr.expression);
517
+ }
518
+ return false;
519
+ }
520
+ function nameValueExpressionHasValue(expr) {
521
+ const names = Array.isArray(expr.names)
522
+ ? expr.names
523
+ : Array.isArray(expr.options?.names)
524
+ ? expr.options.names
525
+ : Array.isArray(expr.arguments?.names)
526
+ ? expr.arguments.names
527
+ : [];
528
+ if (names.some(name => String(name).toLowerCase() === 'value'))
529
+ return true;
530
+ const optionEntries = Array.isArray(expr.options)
531
+ ? expr.options
532
+ : Array.isArray(expr.arguments)
533
+ ? expr.arguments
534
+ : [];
535
+ if (optionEntries.some((option) => String(option?.name || option?.keyName || '').toLowerCase() === 'value')) {
536
+ return true;
537
+ }
538
+ return false;
539
+ }
540
+ function isAssignmentExpression(expr) {
541
+ if (!expr)
542
+ return false;
543
+ if (isNode(expr, 'Assignment'))
544
+ return true;
545
+ if (isNode(expr, 'BinaryOperation')) {
546
+ const op = getOperator(expr);
547
+ return ['=', '+=', '-=', '*=', '/=', '%=', '&=', '|=', '^=', '<<=', '>>=', '>>>='].includes(op);
548
+ }
549
+ return false;
550
+ }
551
+ function isUnaryMutation(expr) {
552
+ if (!expr || !isNode(expr, 'UnaryOperation'))
553
+ return false;
554
+ const op = getOperator(expr);
555
+ return op === '++' || op === '--' || op === 'delete';
556
+ }
557
+ function isMsgSender(expr) {
558
+ if (!expr || !isNode(expr, 'MemberAccess'))
559
+ return false;
560
+ if ((expr.memberName || '') !== 'sender')
561
+ return false;
562
+ const inner = expr.expression;
563
+ return inner && isNode(inner, 'Identifier') && getName(inner) === 'msg';
564
+ }
565
+ function isCallerExpression(expr) {
566
+ if (isMsgSender(expr))
567
+ return true;
568
+ if (!expr || !isNode(expr, 'FunctionCall'))
569
+ return false;
570
+ const callee = expr.expression;
571
+ if (!callee || !isNode(callee, 'Identifier'))
572
+ return false;
573
+ return getName(callee) === '_msgSender' && getCallArguments(expr).length === 0;
574
+ }
575
+ function getReferenceRoot(expr) {
576
+ if (!expr)
577
+ return '';
578
+ if (isNode(expr, 'Identifier'))
579
+ return getName(expr);
580
+ if (isNode(expr, 'IndexAccess')) {
581
+ return getReferenceRoot(expr.base ?? expr.baseExpression);
582
+ }
583
+ if (isNode(expr, 'MemberAccess')) {
584
+ return getReferenceRoot(expr.expression);
585
+ }
586
+ return '';
587
+ }
588
+ function getCallExpressionName(call) {
589
+ if (!call)
590
+ return '';
591
+ const callee = call.expression;
592
+ if (!callee)
593
+ return '';
594
+ if (isNode(callee, 'Identifier'))
595
+ return getName(callee);
596
+ if (isNode(callee, 'MemberAccess')) {
597
+ const inner = callee.expression;
598
+ const innerName = inner ? getCallExpressionNameFromExpression(inner) : '';
599
+ const memberName = callee.memberName || '';
600
+ return innerName ? `${innerName}.${memberName}` : memberName;
601
+ }
602
+ if (isNode(callee, 'NameValueExpression')) {
603
+ return getCallExpressionName({ expression: callee.expression });
604
+ }
605
+ return '';
606
+ }
607
+ function getCallExpressionNameFromExpression(expr) {
608
+ if (!expr)
609
+ return '';
610
+ if (isNode(expr, 'Identifier'))
611
+ return getName(expr);
612
+ if (isNode(expr, 'MemberAccess')) {
613
+ const inner = expr.expression;
614
+ const innerName = inner ? getCallExpressionNameFromExpression(inner) : '';
615
+ const memberName = expr.memberName || '';
616
+ return innerName ? `${innerName}.${memberName}` : memberName;
617
+ }
618
+ return '';
619
+ }
620
+ function collectStateVariables(contractNode) {
621
+ const stateVars = new Set();
622
+ for (const member of getContractMembers(contractNode, 'StateVariableDeclaration')) {
623
+ for (const variable of member.variables || []) {
624
+ if (variable?.name)
625
+ stateVars.add(variable.name);
626
+ }
627
+ }
628
+ for (const member of getContractMembers(contractNode, 'VariableDeclaration')) {
629
+ if (member?.stateVariable && member.name)
630
+ stateVars.add(member.name);
631
+ }
632
+ return stateVars;
633
+ }
634
+ function collectModifierBodies(contractNode) {
635
+ const map = new Map();
636
+ for (const member of getContractMembers(contractNode, 'ModifierDefinition')) {
637
+ const modName = getName(member);
638
+ if (modName && member.body)
639
+ map.set(modName, member.body);
640
+ }
641
+ return map;
642
+ }
643
+ function collectParameterNames(fn) {
644
+ const params = new Set();
645
+ const list = fn.parameters?.parameters || fn.parameters || [];
646
+ for (const param of list) {
647
+ if (param?.name)
648
+ params.add(param.name);
649
+ }
650
+ return params;
651
+ }
652
+ function getContractMembers(contractNode, kind) {
653
+ const members = [];
654
+ const lists = [contractNode.subNodes, contractNode.nodes];
655
+ for (const list of lists) {
656
+ if (!Array.isArray(list))
657
+ continue;
658
+ for (const child of list) {
659
+ if (child && (child.type === kind || child.nodeType === kind)) {
660
+ members.push(child);
661
+ }
662
+ }
663
+ }
664
+ return members;
665
+ }
666
+ function getFunctionBody(fn) {
667
+ return fn?.body || null;
668
+ }
669
+ function getStatementList(body) {
670
+ if (!body)
671
+ return [];
672
+ if (Array.isArray(body.statements))
673
+ return body.statements;
674
+ return [];
675
+ }
676
+ function isExternallyCallable(fn) {
677
+ const kind = String(fn.kind || (fn.isConstructor ? 'constructor' : '') || 'function').toLowerCase();
678
+ if (kind === 'constructor')
679
+ return false;
680
+ const visibility = String(fn.visibility || '').toLowerCase();
681
+ return visibility === 'public' || visibility === 'external';
682
+ }
683
+ function getModifierInvocationName(mod) {
684
+ if (!mod)
685
+ return '';
686
+ if (mod.modifierName) {
687
+ if (typeof mod.modifierName === 'string')
688
+ return mod.modifierName;
689
+ if (mod.modifierName.name)
690
+ return String(mod.modifierName.name);
691
+ }
692
+ if (mod.name) {
693
+ if (typeof mod.name === 'string')
694
+ return mod.name;
695
+ if (mod.name.name)
696
+ return String(mod.name.name);
697
+ if (mod.name.namePath)
698
+ return String(mod.name.namePath);
699
+ }
700
+ return '';
701
+ }
702
+ function walkContracts(node, visit) {
703
+ if (!node || typeof node !== 'object')
704
+ return;
705
+ if (isNode(node, 'ContractDefinition'))
706
+ visit(node);
707
+ for (const child of childrenOf(node))
708
+ walkContracts(child, visit);
709
+ }
710
+ function walk(node, visitor) {
711
+ if (!node || typeof node !== 'object')
712
+ return;
713
+ visitor(node);
714
+ for (const child of childrenOf(node))
715
+ walk(child, visitor);
716
+ }
717
+ function childrenOf(node) {
718
+ if (!node || typeof node !== 'object')
719
+ return [];
720
+ const children = [];
721
+ for (const [key, value] of Object.entries(node)) {
722
+ if (key === 'loc' || key === 'src' || key === 'range' || key === 'typeDescriptions')
723
+ continue;
724
+ if (Array.isArray(value)) {
725
+ for (const item of value) {
726
+ if (item && typeof item === 'object')
727
+ children.push(item);
728
+ }
729
+ }
730
+ else if (value && typeof value === 'object') {
731
+ children.push(value);
732
+ }
733
+ }
734
+ return children;
735
+ }
736
+ function isNode(node, kind) {
737
+ return node?.type === kind || node?.nodeType === kind;
738
+ }
739
+ function getName(node) {
740
+ if (!node)
741
+ return '';
742
+ if (typeof node.name === 'string')
743
+ return node.name;
744
+ return '';
745
+ }
746
+ function getOperator(node) {
747
+ return String(node?.operator || '');
748
+ }
749
+ function getCallArguments(call) {
750
+ return Array.isArray(call?.arguments) ? call.arguments : [];
751
+ }
752
+ function buildLineOffsets(sourceText) {
753
+ if (sourceText === undefined)
754
+ return undefined;
755
+ const lineOffsets = [0];
756
+ let byteOffset = 0;
757
+ for (const char of sourceText) {
758
+ byteOffset += Buffer.byteLength(char, 'utf8');
759
+ if (char === '\n')
760
+ lineOffsets.push(byteOffset);
761
+ }
762
+ return lineOffsets;
763
+ }
764
+ function getLoc(node, lineOffsets) {
765
+ if (node?.loc?.start)
766
+ return { line: node.loc.start.line, column: node.loc.start.column };
767
+ if (!node?.src || !lineOffsets)
768
+ return undefined;
769
+ const offset = Number(String(node.src).split(':')[0]);
770
+ if (!Number.isFinite(offset) || offset < 0)
771
+ return undefined;
772
+ let lineIndex = 0;
773
+ for (let i = 0; i < lineOffsets.length; i++) {
774
+ if (lineOffsets[i] <= offset)
775
+ lineIndex = i;
776
+ else
777
+ break;
778
+ }
779
+ return { line: lineIndex + 1, column: offset - lineOffsets[lineIndex] };
780
+ }
781
+ //# sourceMappingURL=missing-access-control.js.map