@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,754 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BridgeForgedProofDetector = void 0;
4
+ const RULE_ID = 'bridge-forged-proof';
5
+ const PAT_CALLER_CONTROLLED_ROOT = `${RULE_ID}/caller-controlled-root`;
6
+ const PAT_UNTRUSTED_HEADER_ROOT = `${RULE_ID}/untrusted-header-root`;
7
+ const PAT_MISSING_HEADER_AUTH = `${RULE_ID}/missing-header-authenticity`;
8
+ const PAT_UNAUTH_OPTIMISTIC = `${RULE_ID}/unauthenticated-optimistic-root`;
9
+ const PAT_UNTRUSTED_BLOCKHASH = `${RULE_ID}/untrusted-blockhash`;
10
+ const SOURCE = 'x-2026-05-04-polygon-bridge-forged-proof';
11
+ const BRIDGE_WITHDRAWAL_NAME = /(withdraw|release|unlock|redeem|exit|claim|mint|finaliz|execute|prove)/i;
12
+ const PROOF_PARAM_RE = /^(.*proof.*|.*header.*|.*root.*|.*receipt.*|.*log.*|.*blockhash.*|.*block_hash.*)$/i;
13
+ const HEADER_PARAM_RE = /header/i;
14
+ const BLOCKHASH_PARAM_RE = /^block.*hash$|^blockhash$/i;
15
+ const ROOT_PARAM_RE = /root$/i;
16
+ const ROOT_MEMBER_RE = /^(root|receipts?Root|txRoot|transactionsRoot|stateRoot|blockHash)$/i;
17
+ const HEADER_MEMBER_RE = /header|block/i;
18
+ const TX_RE = /tx/i;
19
+ const VERIFY_NAME_RE = /^_?verify/i;
20
+ const PROPOSER_NAME_RE = /^propose/i;
21
+ const ACCESS_CONTROL_MODIFIER = /^(only|require|restricted)/i;
22
+ const ACCESS_CONTROL_MODIFIER_NAMES = new Set([
23
+ 'onlyowner', 'onlyowners', 'onlyrole', 'onlyadmin', 'onlyauthorized',
24
+ 'authorized', 'auth', 'onlyoperator', 'onlyoperators', 'onlyprotocol',
25
+ 'onlygovernance', 'onlygovernor', 'onlyguardian', 'onlymanager',
26
+ 'onlytrusted', 'onlytimelock', 'onlyrelayer', 'onlybridge', 'onlysigner',
27
+ 'onlysigners', 'onlyproposer', 'onlyproposers', 'onlycommittee',
28
+ ]);
29
+ class BridgeForgedProofDetector {
30
+ id = RULE_ID;
31
+ patternKey = RULE_ID;
32
+ supportedAstKinds = ['parser', 'solc'];
33
+ scanAst(ast, file, sourceText) {
34
+ if (!ast || typeof ast !== 'object')
35
+ return [];
36
+ const findings = [];
37
+ const lineOffsets = buildLineOffsets(sourceText);
38
+ for (const contract of collectContracts(ast)) {
39
+ if (isInterfaceLike(contract))
40
+ continue;
41
+ const stateMappingNames = collectStateMappingNames(contract);
42
+ const stateVariableNames = collectStateVariableNames(contract);
43
+ const proposerInfo = collectProposers(contract);
44
+ const contractName = getName(contract) || '<anonymous>';
45
+ for (const fn of getContractFunctions(contract)) {
46
+ if (!isExternallyReachable(fn))
47
+ continue;
48
+ const body = getFunctionBody(fn);
49
+ if (!body)
50
+ continue;
51
+ const fnName = getName(fn) || '';
52
+ if (!fnName || !BRIDGE_WITHDRAWAL_NAME.test(fnName))
53
+ continue;
54
+ const params = getParameters(fn)
55
+ .map(p => ({ name: getName(p), node: p }))
56
+ .filter(p => !!p.name);
57
+ if (params.length === 0)
58
+ continue;
59
+ const proofLikeParams = params.filter(p => PROOF_PARAM_RE.test(p.name));
60
+ if (proofLikeParams.length === 0)
61
+ continue;
62
+ const paramNames = new Set(params.map(p => p.name));
63
+ const headerParams = new Set(params.filter(p => HEADER_PARAM_RE.test(p.name)).map(p => p.name));
64
+ const blockHashParams = new Set(params.filter(p => BLOCKHASH_PARAM_RE.test(p.name)).map(p => p.name));
65
+ const rootParams = new Set(params.filter(p => ROOT_PARAM_RE.test(p.name)).map(p => p.name));
66
+ const verifyCalls = collectVerifyCalls(body);
67
+ if (verifyCalls.length === 0)
68
+ continue;
69
+ const verifyCall = verifyCalls[0];
70
+ const calleeName = getCalleeName(verifyCall);
71
+ const args = getCallArguments(verifyCall);
72
+ const rootArg = args[1];
73
+ if (!rootArg)
74
+ continue;
75
+ const localAssignments = collectLocalAssignments(body);
76
+ const rootClassification = classifyRoot(rootArg, paramNames, stateMappingNames, stateVariableNames, localAssignments, headerParams);
77
+ if (rootClassification.kind === 'state')
78
+ continue;
79
+ if (rootClassification.kind === 'unknown')
80
+ continue;
81
+ if (rootClassification.kind === 'function-call')
82
+ continue;
83
+ const consensusBoundParams = new Set();
84
+ for (const h of headerParams)
85
+ consensusBoundParams.add(h);
86
+ for (const b of blockHashParams)
87
+ consensusBoundParams.add(b);
88
+ if (rootClassification.kind === 'param' && rootClassification.paramName) {
89
+ consensusBoundParams.add(rootClassification.paramName);
90
+ }
91
+ if (hasTrustedSourceCheck(body, stateMappingNames, consensusBoundParams))
92
+ continue;
93
+ const blockHashCheckPresent = headerParams.size > 0 && blockHashParams.size > 0 &&
94
+ hasUntrustedBlockHashCheck(body, headerParams, blockHashParams);
95
+ const optimisticPresent = rootClassification.kind === 'param' &&
96
+ rootClassification.paramName !== undefined &&
97
+ rootParams.has(rootClassification.paramName) &&
98
+ hasOptimisticDelayCheck(body, stateMappingNames, paramNames) &&
99
+ hasUnauthenticatedProposer(proposerInfo);
100
+ let pattern;
101
+ if (blockHashCheckPresent) {
102
+ pattern = PAT_UNTRUSTED_BLOCKHASH;
103
+ }
104
+ else if (optimisticPresent) {
105
+ pattern = PAT_UNAUTH_OPTIMISTIC;
106
+ }
107
+ else if (rootClassification.kind === 'header-derived') {
108
+ pattern = PAT_UNTRUSTED_HEADER_ROOT;
109
+ }
110
+ else if (TX_RE.test(calleeName) && headerParams.size === 0) {
111
+ pattern = PAT_MISSING_HEADER_AUTH;
112
+ }
113
+ else if (rootClassification.kind === 'param') {
114
+ pattern = PAT_CALLER_CONTROLLED_ROOT;
115
+ }
116
+ else {
117
+ continue;
118
+ }
119
+ const loc = getLoc(verifyCall, lineOffsets) || getLoc(fn, lineOffsets) || { line: 0, column: 0 };
120
+ findings.push({
121
+ file,
122
+ contract: contractName,
123
+ 'function': fnName,
124
+ line: loc.line,
125
+ endLine: loc.line,
126
+ column: loc.column,
127
+ pattern,
128
+ confidence: 'high',
129
+ ruleId: RULE_ID,
130
+ severity: 'critical',
131
+ message: messageFor(pattern, contractName, fnName),
132
+ rationale: rationaleFor(pattern),
133
+ suggestedFix: remediationFor(pattern),
134
+ contractName,
135
+ functionName: fnName,
136
+ sourceLocation: { line: loc.line, column: loc.column },
137
+ findingId: '',
138
+ contractHash: '',
139
+ source: SOURCE,
140
+ provenance: SOURCE,
141
+ });
142
+ }
143
+ }
144
+ return findings;
145
+ }
146
+ }
147
+ exports.BridgeForgedProofDetector = BridgeForgedProofDetector;
148
+ function messageFor(pattern, contractName, fnName) {
149
+ switch (pattern) {
150
+ case PAT_CALLER_CONTROLLED_ROOT:
151
+ return `Bridge withdrawal in '${contractName}.${fnName}' verifies a Merkle proof against a caller-supplied root without binding it to a trusted checkpoint or block header.`;
152
+ case PAT_UNTRUSTED_HEADER_ROOT:
153
+ return `Bridge withdrawal in '${contractName}.${fnName}' derives the proof root from a caller-supplied block header without authenticating the header against trusted consensus.`;
154
+ case PAT_MISSING_HEADER_AUTH:
155
+ return `Bridge withdrawal in '${contractName}.${fnName}' validates a transaction or log proof but never anchors the underlying root to an authenticated block header.`;
156
+ case PAT_UNAUTH_OPTIMISTIC:
157
+ return `Bridge withdrawal in '${contractName}.${fnName}' relies on an optimistic delay against a root proposed by an unauthenticated function, leaving consensus binding to time alone.`;
158
+ case PAT_UNTRUSTED_BLOCKHASH:
159
+ return `Bridge withdrawal in '${contractName}.${fnName}' compares a caller-supplied block hash with a hash of caller-supplied header bytes — both inputs are attacker-controlled.`;
160
+ }
161
+ return `Bridge withdrawal in '${contractName}.${fnName}' is missing required proof verification controls.`;
162
+ }
163
+ function rationaleFor(pattern) {
164
+ switch (pattern) {
165
+ case PAT_CALLER_CONTROLLED_ROOT:
166
+ return 'Mirrors the Polygon bridge forged-proof shape: any caller can pass an arbitrary Merkle root and a self-consistent proof of an unrelated leaf, bypassing source-chain consensus and unlocking funds.';
167
+ case PAT_UNTRUSTED_HEADER_ROOT:
168
+ return 'Computing the proof root from a caller-supplied header without checking the header is anchored on chain lets an attacker forge a header that recovers any root they choose.';
169
+ case PAT_MISSING_HEADER_AUTH:
170
+ return 'Transaction- or log-style proofs must terminate at a root carried by an authenticated block header. Without that anchor, attackers can fabricate proofs against fictional roots.';
171
+ case PAT_UNAUTH_OPTIMISTIC:
172
+ return 'Optimistic finality requires the proposer to be a trusted relayer or staked actor. When any address can call propose-root and the only check is a delay, the delay only changes when the forged proof unlocks, not whether it does.';
173
+ case PAT_UNTRUSTED_BLOCKHASH:
174
+ return 'Hashing a caller-supplied header and comparing it against a caller-supplied block hash is self-consistent for any input; the bridge has not bound the header to authenticated consensus.';
175
+ }
176
+ return 'Bridge withdrawal accepts externally supplied proof data without binding it to authenticated source-chain consensus.';
177
+ }
178
+ function remediationFor(pattern) {
179
+ switch (pattern) {
180
+ case PAT_CALLER_CONTROLLED_ROOT:
181
+ return 'Constrain the proof root to a trusted set: `require(trustedRoots[root], ...)` against a mapping populated only by an access-controlled relayer or signer-set.';
182
+ case PAT_UNTRUSTED_HEADER_ROOT:
183
+ return 'Require `validHeaderHash[keccak256(header)]` (or equivalent canonical-header check) before deriving any root from the header bytes.';
184
+ case PAT_MISSING_HEADER_AUTH:
185
+ return 'Bind the transaction/log proof to a block-header-authenticated receipt or transaction root before accepting it for withdrawal.';
186
+ case PAT_UNAUTH_OPTIMISTIC:
187
+ return 'Restrict the proposer to a vetted relayer set (modifier or signature threshold), and treat the delay only as a fraud-proof window, not as the source of authenticity.';
188
+ case PAT_UNTRUSTED_BLOCKHASH:
189
+ return 'Either accept only `blockhash(n)` from an authenticated relayer-supplied checkpoint, or require `validHeaderHash[blockHash]` against trusted storage; do not compare two caller-controlled values.';
190
+ }
191
+ return 'Bind every withdrawal proof to a trusted, access-controlled source of source-chain consensus before releasing funds.';
192
+ }
193
+ function collectVerifyCalls(body) {
194
+ const out = [];
195
+ walk(body, node => {
196
+ if (!isNode(node, 'FunctionCall'))
197
+ return;
198
+ const callee = unwrapCallOptions(getCallExpression(node));
199
+ if (isNode(callee, 'Identifier') && VERIFY_NAME_RE.test(String(callee.name || ''))) {
200
+ out.push(node);
201
+ }
202
+ else if (isNode(callee, 'MemberAccess') && VERIFY_NAME_RE.test(String(callee.memberName || ''))) {
203
+ out.push(node);
204
+ }
205
+ });
206
+ return out;
207
+ }
208
+ function getCalleeName(call) {
209
+ const callee = unwrapCallOptions(getCallExpression(call));
210
+ if (!callee)
211
+ return '';
212
+ if (isNode(callee, 'Identifier'))
213
+ return String(callee.name || '');
214
+ if (isNode(callee, 'MemberAccess'))
215
+ return String(callee.memberName || '');
216
+ return '';
217
+ }
218
+ function getCallExpression(call) {
219
+ return call?.expression ?? null;
220
+ }
221
+ function getCallArguments(call) {
222
+ if (Array.isArray(call?.arguments))
223
+ return call.arguments;
224
+ if (Array.isArray(call?.args))
225
+ return call.args;
226
+ return [];
227
+ }
228
+ function unwrapCallOptions(expr) {
229
+ let cur = expr;
230
+ while (cur && (isNode(cur, 'NameValueExpression') || isNode(cur, 'FunctionCallOptions'))) {
231
+ cur = cur.expression;
232
+ }
233
+ return cur;
234
+ }
235
+ function classifyRoot(expr, paramNames, stateMappingNames, stateVariableNames, localAssignments, headerParams) {
236
+ if (!expr)
237
+ return { kind: 'unknown' };
238
+ if (isNode(expr, 'Identifier')) {
239
+ const name = String(expr.name || '');
240
+ if (paramNames.has(name))
241
+ return { kind: 'param', paramName: name };
242
+ if (stateMappingNames.has(name))
243
+ return { kind: 'state' };
244
+ const assigns = localAssignments.get(name) || [];
245
+ for (const value of assigns) {
246
+ const sub = classifyRoot(value, paramNames, stateMappingNames, stateVariableNames, localAssignments, headerParams);
247
+ if (sub.kind === 'header-derived')
248
+ return sub;
249
+ if (sub.kind === 'state')
250
+ return sub;
251
+ if (sub.kind === 'param')
252
+ return sub;
253
+ }
254
+ if (assigns.length === 0) {
255
+ // Bare identifier that is neither param, state mapping, nor a tracked
256
+ // local — probably a state variable read of a non-mapping (e.g.,
257
+ // `bytes32 public allowlistRoot`). Treat as trusted storage.
258
+ return { kind: 'state' };
259
+ }
260
+ return { kind: 'unknown' };
261
+ }
262
+ if (isNode(expr, 'FunctionCall')) {
263
+ if (callContainsHeaderParam(expr, headerParams)) {
264
+ return { kind: 'header-derived' };
265
+ }
266
+ return { kind: 'function-call' };
267
+ }
268
+ if (isNode(expr, 'MemberAccess')) {
269
+ const memberName = String(expr.memberName || '');
270
+ const baseName = memberAccessBaseIdentifierName(expr);
271
+ if (baseName && paramNames.has(baseName)) {
272
+ if (!ROOT_MEMBER_RE.test(memberName))
273
+ return { kind: 'unknown' };
274
+ if (headerParams.has(baseName) || memberAccessLooksHeaderDerived(expr)) {
275
+ return { kind: 'header-derived' };
276
+ }
277
+ return { kind: 'param', paramName: baseName };
278
+ }
279
+ if (baseName && stateVariableNames.has(baseName))
280
+ return { kind: 'state' };
281
+ if (baseName && stateMappingNames.has(baseName))
282
+ return { kind: 'state' };
283
+ }
284
+ return { kind: 'unknown' };
285
+ }
286
+ function memberAccessBaseIdentifierName(expr) {
287
+ let cur = expr;
288
+ while (cur && isNode(cur, 'MemberAccess')) {
289
+ cur = cur.expression;
290
+ }
291
+ if (cur && isNode(cur, 'IndexAccess'))
292
+ return rootIdentifierName(cur);
293
+ if (cur && isNode(cur, 'Identifier'))
294
+ return String(cur.name || '');
295
+ return '';
296
+ }
297
+ function memberAccessLooksHeaderDerived(expr) {
298
+ let cur = expr;
299
+ while (cur && isNode(cur, 'MemberAccess')) {
300
+ if (HEADER_MEMBER_RE.test(String(cur.memberName || '')))
301
+ return true;
302
+ cur = cur.expression;
303
+ }
304
+ return false;
305
+ }
306
+ function callContainsHeaderParam(call, headerParams) {
307
+ if (headerParams.size === 0)
308
+ return false;
309
+ return walkAny(call, node => {
310
+ if (!isNode(node, 'Identifier'))
311
+ return false;
312
+ return headerParams.has(String(node.name || ''));
313
+ });
314
+ }
315
+ function collectLocalAssignments(body) {
316
+ const out = new Map();
317
+ walk(body, node => {
318
+ if (isNode(node, 'VariableDeclarationStatement')) {
319
+ const decls = Array.isArray(node.variables) ? node.variables :
320
+ Array.isArray(node.declarations) ? node.declarations : [];
321
+ const init = node.initialValue ?? node.initialvalue ?? null;
322
+ if (init && decls.length === 1 && decls[0]?.name) {
323
+ addAssignment(out, String(decls[0].name), init);
324
+ }
325
+ return;
326
+ }
327
+ if (isNode(node, 'BinaryOperation') && String(node.operator || '') === '=') {
328
+ const left = node.left ?? node.leftExpression ?? node.leftHandSide;
329
+ const right = node.right ?? node.rightExpression ?? node.rightHandSide;
330
+ if (isNode(left, 'Identifier') && right) {
331
+ addAssignment(out, String(left.name || ''), right);
332
+ }
333
+ return;
334
+ }
335
+ if (isNode(node, 'Assignment')) {
336
+ const left = node.leftHandSide ?? node.left;
337
+ const right = node.rightHandSide ?? node.right;
338
+ if (isNode(left, 'Identifier') && right) {
339
+ addAssignment(out, String(left.name || ''), right);
340
+ }
341
+ }
342
+ });
343
+ return out;
344
+ }
345
+ function addAssignment(map, name, value) {
346
+ if (!name)
347
+ return;
348
+ const prev = map.get(name);
349
+ if (prev)
350
+ prev.push(value);
351
+ else
352
+ map.set(name, [value]);
353
+ }
354
+ function hasTrustedSourceCheck(body, stateMappingNames, consensusBoundParams) {
355
+ if (consensusBoundParams.size === 0)
356
+ return false;
357
+ return walkAny(body, node => {
358
+ if (!isNode(node, 'FunctionCall'))
359
+ return false;
360
+ const callee = unwrapCallOptions(getCallExpression(node));
361
+ if (!isNode(callee, 'Identifier'))
362
+ return false;
363
+ const name = String(callee.name || '').toLowerCase();
364
+ if (name !== 'require' && name !== 'assert')
365
+ return false;
366
+ const args = getCallArguments(node);
367
+ const condition = args[0];
368
+ if (!condition)
369
+ return false;
370
+ if (containsBlockMember(condition))
371
+ return false;
372
+ return conditionLooksLikeTrustedMappingCheck(condition, stateMappingNames, consensusBoundParams);
373
+ });
374
+ }
375
+ function conditionLooksLikeTrustedMappingCheck(condition, stateMappingNames, consensusBoundParams) {
376
+ if (!condition)
377
+ return false;
378
+ if (isNode(condition, 'IndexAccess')) {
379
+ return isStateMappingIndexedByParam(condition, stateMappingNames, consensusBoundParams);
380
+ }
381
+ if (isNode(condition, 'BinaryOperation')) {
382
+ const op = String(condition.operator || '');
383
+ if (op === '&&' || op === '||') {
384
+ const left = condition.left ?? condition.leftExpression ?? condition.leftHandSide;
385
+ const right = condition.right ?? condition.rightExpression ?? condition.rightHandSide;
386
+ return conditionLooksLikeTrustedMappingCheck(left, stateMappingNames, consensusBoundParams) ||
387
+ conditionLooksLikeTrustedMappingCheck(right, stateMappingNames, consensusBoundParams);
388
+ }
389
+ return false;
390
+ }
391
+ // Negated mapping accesses such as `require(!processed[leaf])` are replay /
392
+ // consumed-message guards, not consensus bindings, so they must not suppress
393
+ // the forged-proof finding even when the mapping happens to be keyed by the
394
+ // root/header.
395
+ return false;
396
+ }
397
+ function isStateMappingIndexedByParam(indexAccess, stateMappingNames, paramNames) {
398
+ const baseName = rootIdentifierName(indexAccess);
399
+ if (!baseName || !stateMappingNames.has(baseName))
400
+ return false;
401
+ return indexExpressionReferencesParam(indexAccess, paramNames);
402
+ }
403
+ function indexExpressionReferencesParam(node, paramNames) {
404
+ return walkAny(node, n => {
405
+ if (!isNode(n, 'Identifier'))
406
+ return false;
407
+ return paramNames.has(String(n.name || ''));
408
+ });
409
+ }
410
+ function rootIdentifierName(node) {
411
+ let cur = node;
412
+ while (cur && isNode(cur, 'IndexAccess')) {
413
+ cur = cur.base ?? cur.baseExpression;
414
+ }
415
+ if (cur && isNode(cur, 'Identifier'))
416
+ return String(cur.name || '');
417
+ if (cur && isNode(cur, 'MemberAccess'))
418
+ return String(cur.memberName || '');
419
+ return '';
420
+ }
421
+ function containsBlockMember(expr) {
422
+ return walkAny(expr, node => {
423
+ if (!isNode(node, 'MemberAccess'))
424
+ return false;
425
+ const inner = node.expression;
426
+ if (!inner)
427
+ return false;
428
+ if (isNode(inner, 'Identifier') && String(inner.name || '') === 'block')
429
+ return true;
430
+ return false;
431
+ });
432
+ }
433
+ function hasUntrustedBlockHashCheck(body, headerParams, blockHashParams) {
434
+ return walkAny(body, node => {
435
+ if (!isNode(node, 'FunctionCall'))
436
+ return false;
437
+ const callee = unwrapCallOptions(getCallExpression(node));
438
+ if (!isNode(callee, 'Identifier'))
439
+ return false;
440
+ const name = String(callee.name || '').toLowerCase();
441
+ if (name !== 'require' && name !== 'assert')
442
+ return false;
443
+ const cond = getCallArguments(node)[0];
444
+ if (!cond || !isNode(cond, 'BinaryOperation'))
445
+ return false;
446
+ if (String(cond.operator || '') !== '==' && String(cond.operator || '') !== '!=')
447
+ return false;
448
+ const left = cond.left ?? cond.leftExpression ?? cond.leftHandSide;
449
+ const right = cond.right ?? cond.rightExpression ?? cond.rightHandSide;
450
+ return sidesMatchKeccakHeaderVsBlockHash(left, right, headerParams, blockHashParams) ||
451
+ sidesMatchKeccakHeaderVsBlockHash(right, left, headerParams, blockHashParams);
452
+ });
453
+ }
454
+ function sidesMatchKeccakHeaderVsBlockHash(hashSide, paramSide, headerParams, blockHashParams) {
455
+ if (!isFunctionCallNamed(hashSide, 'keccak256'))
456
+ return false;
457
+ const args = getCallArguments(hashSide);
458
+ const usesHeader = args.some(arg => isParamRefIn(arg, headerParams));
459
+ if (!usesHeader)
460
+ return false;
461
+ return isNode(paramSide, 'Identifier') && blockHashParams.has(String(paramSide.name || ''));
462
+ }
463
+ function isFunctionCallNamed(node, name) {
464
+ if (!isNode(node, 'FunctionCall'))
465
+ return false;
466
+ const callee = unwrapCallOptions(getCallExpression(node));
467
+ if (!callee)
468
+ return false;
469
+ if (isNode(callee, 'Identifier'))
470
+ return String(callee.name || '') === name;
471
+ return false;
472
+ }
473
+ function isParamRefIn(expr, params) {
474
+ if (!expr)
475
+ return false;
476
+ if (isNode(expr, 'Identifier'))
477
+ return params.has(String(expr.name || ''));
478
+ return walkAny(expr, n => isNode(n, 'Identifier') && params.has(String(n.name || '')));
479
+ }
480
+ function hasOptimisticDelayCheck(body, stateMappingNames, paramNames) {
481
+ return walkAny(body, node => {
482
+ if (!isNode(node, 'FunctionCall'))
483
+ return false;
484
+ const callee = unwrapCallOptions(getCallExpression(node));
485
+ if (!isNode(callee, 'Identifier'))
486
+ return false;
487
+ const name = String(callee.name || '').toLowerCase();
488
+ if (name !== 'require' && name !== 'assert')
489
+ return false;
490
+ const cond = getCallArguments(node)[0];
491
+ if (!cond)
492
+ return false;
493
+ if (!containsBlockMember(cond))
494
+ return false;
495
+ return walkAny(cond, n => {
496
+ if (!isNode(n, 'IndexAccess'))
497
+ return false;
498
+ return isStateMappingIndexedByParam(n, stateMappingNames, paramNames);
499
+ });
500
+ });
501
+ }
502
+ function collectProposers(contract) {
503
+ const unauth = [];
504
+ for (const fn of getContractFunctions(contract)) {
505
+ if (!isExternallyReachable(fn))
506
+ continue;
507
+ const name = getName(fn) || '';
508
+ if (!PROPOSER_NAME_RE.test(name))
509
+ continue;
510
+ if (hasAccessControlGuard(fn))
511
+ continue;
512
+ unauth.push(name);
513
+ }
514
+ return { unauthenticatedNames: unauth };
515
+ }
516
+ function hasUnauthenticatedProposer(info) {
517
+ return info.unauthenticatedNames.length > 0;
518
+ }
519
+ function hasAccessControlGuard(fn) {
520
+ for (const m of fn?.modifiers || []) {
521
+ const n = getModifierName(m).toLowerCase();
522
+ if (ACCESS_CONTROL_MODIFIER_NAMES.has(n))
523
+ return true;
524
+ if (ACCESS_CONTROL_MODIFIER.test(n))
525
+ return true;
526
+ }
527
+ const body = getFunctionBody(fn);
528
+ if (!body)
529
+ return false;
530
+ return walkAny(body, node => {
531
+ if (!isNode(node, 'FunctionCall'))
532
+ return false;
533
+ const callee = unwrapCallOptions(getCallExpression(node));
534
+ if (!isNode(callee, 'Identifier'))
535
+ return false;
536
+ const callName = String(callee.name || '').toLowerCase();
537
+ if (callName !== 'require' && callName !== 'assert')
538
+ return false;
539
+ const cond = getCallArguments(node)[0];
540
+ if (!cond)
541
+ return false;
542
+ return walkAny(cond, n => {
543
+ if (!isNode(n, 'MemberAccess'))
544
+ return false;
545
+ if (String(n.memberName || '') !== 'sender')
546
+ return false;
547
+ const inner = n.expression;
548
+ return isNode(inner, 'Identifier') && String(inner.name || '') === 'msg';
549
+ });
550
+ });
551
+ }
552
+ function getModifierName(modifier) {
553
+ if (!modifier)
554
+ return '';
555
+ if (typeof modifier === 'string')
556
+ return modifier;
557
+ if (typeof modifier.name === 'string')
558
+ return modifier.name;
559
+ if (modifier.name && typeof modifier.name === 'object') {
560
+ if (typeof modifier.name.name === 'string')
561
+ return modifier.name.name;
562
+ if (typeof modifier.name.namePath === 'string')
563
+ return modifier.name.namePath;
564
+ }
565
+ if (modifier.modifierName) {
566
+ const inner = modifier.modifierName;
567
+ if (typeof inner === 'string')
568
+ return inner;
569
+ if (inner && typeof inner.name === 'string')
570
+ return inner.name;
571
+ }
572
+ return '';
573
+ }
574
+ function collectStateMappingNames(contract) {
575
+ const out = new Set();
576
+ for (const member of getContractMembers(contract)) {
577
+ if (isNode(member, 'StateVariableDeclaration')) {
578
+ for (const variable of member.variables || []) {
579
+ if (variable?.name && isMappingType(variable.typeName))
580
+ out.add(String(variable.name));
581
+ }
582
+ }
583
+ else if (isNode(member, 'VariableDeclaration') && member.stateVariable === true) {
584
+ if (member.name && isMappingType(member.typeName))
585
+ out.add(String(member.name));
586
+ }
587
+ }
588
+ return out;
589
+ }
590
+ function collectStateVariableNames(contract) {
591
+ const out = new Set();
592
+ for (const member of getContractMembers(contract)) {
593
+ if (isNode(member, 'StateVariableDeclaration')) {
594
+ for (const variable of member.variables || []) {
595
+ if (variable?.name)
596
+ out.add(String(variable.name));
597
+ }
598
+ }
599
+ else if (isNode(member, 'VariableDeclaration') && member.stateVariable === true) {
600
+ if (member.name)
601
+ out.add(String(member.name));
602
+ }
603
+ }
604
+ return out;
605
+ }
606
+ function isMappingType(typeName) {
607
+ if (!typeName || typeof typeName !== 'object')
608
+ return false;
609
+ if (isNode(typeName, 'Mapping'))
610
+ return true;
611
+ if (typeof typeName.typeString === 'string' && typeName.typeString.startsWith('mapping('))
612
+ return true;
613
+ return false;
614
+ }
615
+ function isExternallyReachable(fn) {
616
+ if (!fn)
617
+ return false;
618
+ if (fn.isConstructor === true)
619
+ return false;
620
+ const kind = String(fn.kind || '').toLowerCase();
621
+ if (kind === 'constructor')
622
+ return false;
623
+ const visibility = String(fn.visibility || '').toLowerCase();
624
+ if (visibility === 'public' || visibility === 'external')
625
+ return true;
626
+ if (kind === 'fallback' || kind === 'receive')
627
+ return true;
628
+ return false;
629
+ }
630
+ function isInterfaceLike(contract) {
631
+ const kind = String(contract?.kind || contract?.contractKind || '').toLowerCase();
632
+ return kind === 'interface' || kind === 'library';
633
+ }
634
+ function getFunctionBody(fn) {
635
+ return fn?.body || null;
636
+ }
637
+ function getName(node) {
638
+ return typeof node?.name === 'string' ? node.name : '';
639
+ }
640
+ function getParameters(fn) {
641
+ if (Array.isArray(fn?.parameters))
642
+ return fn.parameters;
643
+ if (Array.isArray(fn?.parameters?.parameters))
644
+ return fn.parameters.parameters;
645
+ return [];
646
+ }
647
+ function getContractFunctions(contract) {
648
+ return getContractMembers(contract).filter(node => isNode(node, 'FunctionDefinition'));
649
+ }
650
+ function getContractMembers(contract) {
651
+ if (!contract || typeof contract !== 'object')
652
+ return [];
653
+ if (Array.isArray(contract.subNodes))
654
+ return contract.subNodes;
655
+ if (Array.isArray(contract.nodes))
656
+ return contract.nodes;
657
+ return [];
658
+ }
659
+ function collectContracts(ast) {
660
+ const out = [];
661
+ walkContracts(ast, out);
662
+ return out;
663
+ }
664
+ function walkContracts(node, out) {
665
+ if (!node || typeof node !== 'object')
666
+ return;
667
+ if (isNode(node, 'ContractDefinition')) {
668
+ out.push(node);
669
+ return;
670
+ }
671
+ for (const child of childrenOf(node))
672
+ walkContracts(child, out);
673
+ }
674
+ function walk(node, visit) {
675
+ if (!node || typeof node !== 'object')
676
+ return;
677
+ visit(node);
678
+ for (const child of childrenOf(node))
679
+ walk(child, visit);
680
+ }
681
+ function walkAny(node, predicate) {
682
+ if (!node || typeof node !== 'object')
683
+ return false;
684
+ if (predicate(node))
685
+ return true;
686
+ for (const child of childrenOf(node)) {
687
+ if (walkAny(child, predicate))
688
+ return true;
689
+ }
690
+ return false;
691
+ }
692
+ function childrenOf(node) {
693
+ if (!node || typeof node !== 'object')
694
+ return [];
695
+ const out = [];
696
+ for (const [key, value] of Object.entries(node)) {
697
+ if (key === 'loc' || key === 'src' || key === 'range' || key === 'typeDescriptions' ||
698
+ key === 'id' || key === 'scope')
699
+ continue;
700
+ if (Array.isArray(value)) {
701
+ for (const item of value)
702
+ if (item && typeof item === 'object')
703
+ out.push(item);
704
+ }
705
+ else if (value && typeof value === 'object') {
706
+ out.push(value);
707
+ }
708
+ }
709
+ return out;
710
+ }
711
+ function isNode(node, kind) {
712
+ return node?.type === kind || node?.nodeType === kind;
713
+ }
714
+ function buildLineOffsets(sourceText) {
715
+ if (sourceText === undefined)
716
+ return undefined;
717
+ const offsets = [0];
718
+ let byteOffset = 0;
719
+ for (const ch of sourceText) {
720
+ byteOffset += Buffer.byteLength(ch, 'utf8');
721
+ if (ch === '\n')
722
+ offsets.push(byteOffset);
723
+ }
724
+ return offsets;
725
+ }
726
+ function getLoc(node, lineOffsets) {
727
+ if (node?.loc?.start) {
728
+ return { line: node.loc.start.line || 0, column: node.loc.start.column || 0 };
729
+ }
730
+ if (!node?.src || !lineOffsets)
731
+ return undefined;
732
+ const [offsetRaw] = String(node.src).split(':');
733
+ const offset = Number(offsetRaw);
734
+ if (!Number.isFinite(offset) || offset < 0)
735
+ return undefined;
736
+ return byteOffsetToLineColumn(offset, lineOffsets);
737
+ }
738
+ function byteOffsetToLineColumn(byteOffset, lineOffsets) {
739
+ let low = 0;
740
+ let high = lineOffsets.length - 1;
741
+ let lineIdx = 0;
742
+ while (low <= high) {
743
+ const mid = Math.floor((low + high) / 2);
744
+ if (lineOffsets[mid] <= byteOffset) {
745
+ lineIdx = mid;
746
+ low = mid + 1;
747
+ }
748
+ else {
749
+ high = mid - 1;
750
+ }
751
+ }
752
+ return { line: lineIdx + 1, column: byteOffset - lineOffsets[lineIdx] };
753
+ }
754
+ //# sourceMappingURL=bridge-forged-proof.js.map