@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.
- package/LICENSE +201 -0
- package/README.md +190 -0
- package/dist/api.d.ts +89 -0
- package/dist/api.js +33 -0
- package/dist/ast/resolve-return-names.d.ts +2 -0
- package/dist/ast/resolve-return-names.js +199 -0
- package/dist/ast/solc-walker.d.ts +17 -0
- package/dist/ast/solc-walker.js +497 -0
- package/dist/ast/storage-layout.d.ts +21 -0
- package/dist/ast/storage-layout.js +64 -0
- package/dist/cli.d.ts +65 -0
- package/dist/cli.js +755 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +284 -0
- package/dist/dedup/files.d.ts +1 -0
- package/dist/dedup/files.js +74 -0
- package/dist/dedup/findings.d.ts +41 -0
- package/dist/dedup/findings.js +211 -0
- package/dist/detectors/_common/access-control.d.ts +204 -0
- package/dist/detectors/_common/access-control.js +377 -0
- package/dist/detectors/_common/ast.d.ts +139 -0
- package/dist/detectors/_common/ast.js +239 -0
- package/dist/detectors/_common/compiler-profile.d.ts +14 -0
- package/dist/detectors/_common/compiler-profile.js +66 -0
- package/dist/detectors/_common/dataflow.d.ts +75 -0
- package/dist/detectors/_common/dataflow.js +57 -0
- package/dist/detectors/_common/fhe.d.ts +7 -0
- package/dist/detectors/_common/fhe.js +40 -0
- package/dist/detectors/_common/integer-overflow-helpers.d.ts +58 -0
- package/dist/detectors/_common/integer-overflow-helpers.js +422 -0
- package/dist/detectors/_common/loop-call-stack.d.ts +9 -0
- package/dist/detectors/_common/loop-call-stack.js +132 -0
- package/dist/detectors/_common/oracle.d.ts +5 -0
- package/dist/detectors/_common/oracle.js +64 -0
- package/dist/detectors/_common/price-rate.d.ts +116 -0
- package/dist/detectors/_common/price-rate.js +446 -0
- package/dist/detectors/_common/source-text.d.ts +11 -0
- package/dist/detectors/_common/source-text.js +82 -0
- package/dist/detectors/_common/weighted-pool-invariant.d.ts +21 -0
- package/dist/detectors/_common/weighted-pool-invariant.js +105 -0
- package/dist/detectors/aave-v2-reentrancy.d.ts +7 -0
- package/dist/detectors/aave-v2-reentrancy.js +286 -0
- package/dist/detectors/access-control.d.ts +103 -0
- package/dist/detectors/access-control.js +983 -0
- package/dist/detectors/add-reentrancy-on-weth-contract.d.ts +7 -0
- package/dist/detectors/add-reentrancy-on-weth-contract.js +536 -0
- package/dist/detectors/ai-generated-randomness.d.ts +32 -0
- package/dist/detectors/ai-generated-randomness.js +239 -0
- package/dist/detectors/amm-spot-oracle-manipulation.d.ts +52 -0
- package/dist/detectors/amm-spot-oracle-manipulation.js +420 -0
- package/dist/detectors/analyzing-the-uniswap-v3-exploit.d.ts +26 -0
- package/dist/detectors/analyzing-the-uniswap-v3-exploit.js +279 -0
- package/dist/detectors/any-token-is-destroyed.d.ts +34 -0
- package/dist/detectors/any-token-is-destroyed.js +527 -0
- package/dist/detectors/anyswap-anytoken-permit-allowance-drain.d.ts +7 -0
- package/dist/detectors/anyswap-anytoken-permit-allowance-drain.js +524 -0
- package/dist/detectors/anyswap-insufficient-token-validation.d.ts +24 -0
- package/dist/detectors/anyswap-insufficient-token-validation.js +342 -0
- package/dist/detectors/approval-based-drain.d.ts +7 -0
- package/dist/detectors/approval-based-drain.js +772 -0
- package/dist/detectors/arbitrary-account-balance-transfer.d.ts +7 -0
- package/dist/detectors/arbitrary-account-balance-transfer.js +485 -0
- package/dist/detectors/arbitrary-address-spoofing-attack.d.ts +7 -0
- package/dist/detectors/arbitrary-address-spoofing-attack.js +444 -0
- package/dist/detectors/arbitrary-address-spoofing.d.ts +9 -0
- package/dist/detectors/arbitrary-address-spoofing.js +657 -0
- package/dist/detectors/arbitrary-call-error.d.ts +127 -0
- package/dist/detectors/arbitrary-call-error.js +1163 -0
- package/dist/detectors/arbitrary-call.d.ts +4 -0
- package/dist/detectors/arbitrary-call.js +11 -0
- package/dist/detectors/arbitrary-delegatecall-target.d.ts +35 -0
- package/dist/detectors/arbitrary-delegatecall-target.js +554 -0
- package/dist/detectors/arbitrary-recipient-no-access-control.d.ts +7 -0
- package/dist/detectors/arbitrary-recipient-no-access-control.js +638 -0
- package/dist/detectors/arbitrary-storage-proof-forgery.d.ts +35 -0
- package/dist/detectors/arbitrary-storage-proof-forgery.js +340 -0
- package/dist/detectors/arbitrary-transfer-from.d.ts +38 -0
- package/dist/detectors/arbitrary-transfer-from.js +339 -0
- package/dist/detectors/arbitrum-cross-chain-message-replay.d.ts +22 -0
- package/dist/detectors/arbitrum-cross-chain-message-replay.js +477 -0
- package/dist/detectors/avs-slashing-without-quorum-check.d.ts +50 -0
- package/dist/detectors/avs-slashing-without-quorum-check.js +386 -0
- package/dist/detectors/bad-debt-propagation.d.ts +13 -0
- package/dist/detectors/bad-debt-propagation.js +480 -0
- package/dist/detectors/bad-k-value-verification.d.ts +7 -0
- package/dist/detectors/bad-k-value-verification.js +512 -0
- package/dist/detectors/bad-randomness-zero-blockhash.d.ts +29 -0
- package/dist/detectors/bad-randomness-zero-blockhash.js +115 -0
- package/dist/detectors/balancer-flash-loan-manipulation.d.ts +33 -0
- package/dist/detectors/balancer-flash-loan-manipulation.js +178 -0
- package/dist/detectors/balancer-pause-guard.d.ts +33 -0
- package/dist/detectors/balancer-pause-guard.js +307 -0
- package/dist/detectors/balancer-weighted-pool-flash-loan.d.ts +42 -0
- package/dist/detectors/balancer-weighted-pool-flash-loan.js +275 -0
- package/dist/detectors/batch-transfer-overflow.d.ts +7 -0
- package/dist/detectors/batch-transfer-overflow.js +465 -0
- package/dist/detectors/beneficiary-validation.d.ts +7 -0
- package/dist/detectors/beneficiary-validation.js +696 -0
- package/dist/detectors/borrow-behalf-consent.d.ts +7 -0
- package/dist/detectors/borrow-behalf-consent.js +400 -0
- package/dist/detectors/break-continue-scope.d.ts +7 -0
- package/dist/detectors/break-continue-scope.js +194 -0
- package/dist/detectors/bridge-accounting-bypass.d.ts +65 -0
- package/dist/detectors/bridge-accounting-bypass.js +449 -0
- package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.d.ts +43 -0
- package/dist/detectors/bridge-business-logic-flaw-incorrect-acc.js +394 -0
- package/dist/detectors/bridge-collateral-drain.d.ts +7 -0
- package/dist/detectors/bridge-collateral-drain.js +630 -0
- package/dist/detectors/bridge-forged-proof.d.ts +7 -0
- package/dist/detectors/bridge-forged-proof.js +754 -0
- package/dist/detectors/bridge-missing-message-nonce.d.ts +57 -0
- package/dist/detectors/bridge-missing-message-nonce.js +638 -0
- package/dist/detectors/bridge-swap-metapool-attack.d.ts +20 -0
- package/dist/detectors/bridge-swap-metapool-attack.js +230 -0
- package/dist/detectors/business-logic-flaw-flashloan-price-mani.d.ts +7 -0
- package/dist/detectors/business-logic-flaw-flashloan-price-mani.js +353 -0
- package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.d.ts +7 -0
- package/dist/detectors/business-logic-flaw-incorrect-recipient-balance.js +403 -0
- package/dist/detectors/business-logic-flaw.d.ts +21 -0
- package/dist/detectors/business-logic-flaw.js +339 -0
- package/dist/detectors/business-logic.d.ts +17 -0
- package/dist/detectors/business-logic.js +22 -0
- package/dist/detectors/bypassed-insolvency-check.d.ts +30 -0
- package/dist/detectors/bypassed-insolvency-check.js +232 -0
- package/dist/detectors/bytecode-divergence-risk.d.ts +32 -0
- package/dist/detectors/bytecode-divergence-risk.js +150 -0
- package/dist/detectors/cache-array-length.d.ts +30 -0
- package/dist/detectors/cache-array-length.js +177 -0
- package/dist/detectors/cache-storage-reads.d.ts +46 -0
- package/dist/detectors/cache-storage-reads.js +323 -0
- package/dist/detectors/calldata-secret-access-control.d.ts +36 -0
- package/dist/detectors/calldata-secret-access-control.js +446 -0
- package/dist/detectors/capital-cross-contract-reentrancy.d.ts +34 -0
- package/dist/detectors/capital-cross-contract-reentrancy.js +481 -0
- package/dist/detectors/cartel-custom-approval-logic.d.ts +7 -0
- package/dist/detectors/cartel-custom-approval-logic.js +407 -0
- package/dist/detectors/ccip-receiver-missing-replay-guard.d.ts +22 -0
- package/dist/detectors/ccip-receiver-missing-replay-guard.js +413 -0
- package/dist/detectors/chain-coupling-risk.d.ts +8 -0
- package/dist/detectors/chain-coupling-risk.js +203 -0
- package/dist/detectors/chainlink-deprecated-function.d.ts +7 -0
- package/dist/detectors/chainlink-deprecated-function.js +205 -0
- package/dist/detectors/chainlink-tx-origin.d.ts +7 -0
- package/dist/detectors/chainlink-tx-origin.js +363 -0
- package/dist/detectors/check-effects-interactions.d.ts +39 -0
- package/dist/detectors/check-effects-interactions.js +783 -0
- package/dist/detectors/check-permit-missing-chainid.d.ts +27 -0
- package/dist/detectors/check-permit-missing-chainid.js +456 -0
- package/dist/detectors/classic-reentrancy.d.ts +93 -0
- package/dist/detectors/classic-reentrancy.js +645 -0
- package/dist/detectors/coinbase-morpho-wethloan-policy.d.ts +29 -0
- package/dist/detectors/coinbase-morpho-wethloan-policy.js +368 -0
- package/dist/detectors/compoundv2-inflation-attack.d.ts +7 -0
- package/dist/detectors/compoundv2-inflation-attack.js +675 -0
- package/dist/detectors/constructor-address-validation.d.ts +24 -0
- package/dist/detectors/constructor-address-validation.js +335 -0
- package/dist/detectors/constructor-interface-no-address-validation.d.ts +32 -0
- package/dist/detectors/constructor-interface-no-address-validation.js +283 -0
- package/dist/detectors/cross-chain-arbitrary-call.d.ts +7 -0
- package/dist/detectors/cross-chain-arbitrary-call.js +601 -0
- package/dist/detectors/cross-chain-input-validation.d.ts +31 -0
- package/dist/detectors/cross-chain-input-validation.js +347 -0
- package/dist/detectors/cross-chain-intent-replay.d.ts +38 -0
- package/dist/detectors/cross-chain-intent-replay.js +453 -0
- package/dist/detectors/cross-chain-intent-stale-resolution.d.ts +7 -0
- package/dist/detectors/cross-chain-intent-stale-resolution.js +463 -0
- package/dist/detectors/cross-chain-message-order-dependency.d.ts +8 -0
- package/dist/detectors/cross-chain-message-order-dependency.js +472 -0
- package/dist/detectors/cross-chain-message-replay.d.ts +8 -0
- package/dist/detectors/cross-chain-message-replay.js +568 -0
- package/dist/detectors/cross-chain-messaging.d.ts +7 -0
- package/dist/detectors/cross-chain-messaging.js +663 -0
- package/dist/detectors/cross-chain-msg-truncation.d.ts +7 -0
- package/dist/detectors/cross-chain-msg-truncation.js +453 -0
- package/dist/detectors/cross-chain-truncation.d.ts +7 -0
- package/dist/detectors/cross-chain-truncation.js +422 -0
- package/dist/detectors/cross-contract-integer-overflow.d.ts +76 -0
- package/dist/detectors/cross-contract-integer-overflow.js +554 -0
- package/dist/detectors/cross-contract-reentrancy-trusted-callee.d.ts +39 -0
- package/dist/detectors/cross-contract-reentrancy-trusted-callee.js +385 -0
- package/dist/detectors/cross-contract-reentrancy.d.ts +63 -0
- package/dist/detectors/cross-contract-reentrancy.js +631 -0
- package/dist/detectors/cross-function-reentrancy.d.ts +37 -0
- package/dist/detectors/cross-function-reentrancy.js +648 -0
- package/dist/detectors/cross-protocol-contagion.d.ts +20 -0
- package/dist/detectors/cross-protocol-contagion.js +445 -0
- package/dist/detectors/cross-protocol-oracle-collateral.d.ts +38 -0
- package/dist/detectors/cross-protocol-oracle-collateral.js +487 -0
- package/dist/detectors/cross-vm-reentrancy.d.ts +7 -0
- package/dist/detectors/cross-vm-reentrancy.js +484 -0
- package/dist/detectors/decimals-mismatch.d.ts +89 -0
- package/dist/detectors/decimals-mismatch.js +451 -0
- package/dist/detectors/deferred-state-update.d.ts +16 -0
- package/dist/detectors/deferred-state-update.js +35 -0
- package/dist/detectors/deflationary-token.d.ts +27 -0
- package/dist/detectors/deflationary-token.js +751 -0
- package/dist/detectors/delegate-transfer-unrestricted-caller.d.ts +44 -0
- package/dist/detectors/delegate-transfer-unrestricted-caller.js +410 -0
- package/dist/detectors/delegatecall-fallback-reentrancy-bypass.d.ts +14 -0
- package/dist/detectors/delegatecall-fallback-reentrancy-bypass.js +241 -0
- package/dist/detectors/delegatecall-in-loops.d.ts +7 -0
- package/dist/detectors/delegatecall-in-loops.js +129 -0
- package/dist/detectors/delegatecall-init-owner-mutator.d.ts +8 -0
- package/dist/detectors/delegatecall-init-owner-mutator.js +655 -0
- package/dist/detectors/delegatecall-init.d.ts +7 -0
- package/dist/detectors/delegatecall-init.js +769 -0
- package/dist/detectors/delegatecall-untrusted-implementation.d.ts +41 -0
- package/dist/detectors/delegatecall-untrusted-implementation.js +888 -0
- package/dist/detectors/delegated-authorization-bypass.d.ts +7 -0
- package/dist/detectors/delegated-authorization-bypass.js +370 -0
- package/dist/detectors/denial-of-service.d.ts +117 -0
- package/dist/detectors/denial-of-service.js +947 -0
- package/dist/detectors/division-before-multiplication.d.ts +7 -0
- package/dist/detectors/division-before-multiplication.js +303 -0
- package/dist/detectors/dn404-mirror-access-control.d.ts +26 -0
- package/dist/detectors/dn404-mirror-access-control.js +315 -0
- package/dist/detectors/doge-flashloan.d.ts +29 -0
- package/dist/detectors/doge-flashloan.js +329 -0
- package/dist/detectors/donate-inflation-exchangerate-roundin.d.ts +7 -0
- package/dist/detectors/donate-inflation-exchangerate-roundin.js +621 -0
- package/dist/detectors/donation-share-inflation.d.ts +24 -0
- package/dist/detectors/donation-share-inflation.js +466 -0
- package/dist/detectors/dont-let-eth-get-rekt.d.ts +84 -0
- package/dist/detectors/dont-let-eth-get-rekt.js +1151 -0
- package/dist/detectors/dos-unbounded-loop-external-call-revert.d.ts +37 -0
- package/dist/detectors/dos-unbounded-loop-external-call-revert.js +541 -0
- package/dist/detectors/eip1167-proxy-reentrancy.d.ts +7 -0
- package/dist/detectors/eip1167-proxy-reentrancy.js +508 -0
- package/dist/detectors/eip4626-vault-reentrancy.d.ts +32 -0
- package/dist/detectors/eip4626-vault-reentrancy.js +312 -0
- package/dist/detectors/eip5792-auth-replay.d.ts +45 -0
- package/dist/detectors/eip5792-auth-replay.js +519 -0
- package/dist/detectors/eip712-domain-separator.d.ts +42 -0
- package/dist/detectors/eip712-domain-separator.js +524 -0
- package/dist/detectors/eip712-signature-verification.d.ts +49 -0
- package/dist/detectors/eip712-signature-verification.js +689 -0
- package/dist/detectors/eip7702-auth-replay.d.ts +7 -0
- package/dist/detectors/eip7702-auth-replay.js +768 -0
- package/dist/detectors/eip7702-cross-chain-replay.d.ts +27 -0
- package/dist/detectors/eip7702-cross-chain-replay.js +307 -0
- package/dist/detectors/eip7702-delegated-eoa-approval-race.d.ts +39 -0
- package/dist/detectors/eip7702-delegated-eoa-approval-race.js +413 -0
- package/dist/detectors/eip7702-delegation-reentrancy.d.ts +21 -0
- package/dist/detectors/eip7702-delegation-reentrancy.js +705 -0
- package/dist/detectors/eip7702-delegation-risk.d.ts +7 -0
- package/dist/detectors/eip7702-delegation-risk.js +745 -0
- package/dist/detectors/eip7702-eoa-assumption.d.ts +57 -0
- package/dist/detectors/eip7702-eoa-assumption.js +461 -0
- package/dist/detectors/erc1155-batch-missing-per-id-approval.d.ts +23 -0
- package/dist/detectors/erc1155-batch-missing-per-id-approval.js +343 -0
- package/dist/detectors/erc1155-reentrancy.d.ts +31 -0
- package/dist/detectors/erc1155-reentrancy.js +217 -0
- package/dist/detectors/erc1271-stub-implementation.d.ts +21 -0
- package/dist/detectors/erc1271-stub-implementation.js +268 -0
- package/dist/detectors/erc20-safe-wrapper-return-unchecked.d.ts +43 -0
- package/dist/detectors/erc20-safe-wrapper-return-unchecked.js +368 -0
- package/dist/detectors/erc20-unchecked-non-standard-return.d.ts +55 -0
- package/dist/detectors/erc20-unchecked-non-standard-return.js +454 -0
- package/dist/detectors/erc2612-permit-frontrunning.d.ts +23 -0
- package/dist/detectors/erc2612-permit-frontrunning.js +246 -0
- package/dist/detectors/erc2771-context-spoofing.d.ts +41 -0
- package/dist/detectors/erc2771-context-spoofing.js +510 -0
- package/dist/detectors/erc4337-validation-storage-access.d.ts +35 -0
- package/dist/detectors/erc4337-validation-storage-access.js +232 -0
- package/dist/detectors/erc4626-totalassets-stub.d.ts +17 -0
- package/dist/detectors/erc4626-totalassets-stub.js +216 -0
- package/dist/detectors/erc6909-balance-overflow.d.ts +7 -0
- package/dist/detectors/erc6909-balance-overflow.js +688 -0
- package/dist/detectors/erc6909-operator-scope.d.ts +49 -0
- package/dist/detectors/erc6909-operator-scope.js +494 -0
- package/dist/detectors/erc721-unchecked-transfer.d.ts +38 -0
- package/dist/detectors/erc721-unchecked-transfer.js +364 -0
- package/dist/detectors/erc7579-module-install-without-threshold.d.ts +40 -0
- package/dist/detectors/erc7579-module-install-without-threshold.js +338 -0
- package/dist/detectors/erc7683-fill-validation.d.ts +53 -0
- package/dist/detectors/erc7683-fill-validation.js +758 -0
- package/dist/detectors/erc7683-intent-resolution.d.ts +7 -0
- package/dist/detectors/erc7683-intent-resolution.js +457 -0
- package/dist/detectors/erc777-callback-reentrancy.d.ts +8 -0
- package/dist/detectors/erc777-callback-reentrancy.js +439 -0
- package/dist/detectors/erc777-reentrancy.d.ts +7 -0
- package/dist/detectors/erc777-reentrancy.js +488 -0
- package/dist/detectors/erc777-tokens-to-send-reentrancy.d.ts +47 -0
- package/dist/detectors/erc777-tokens-to-send-reentrancy.js +674 -0
- package/dist/detectors/estuary-token-flaw.d.ts +16 -0
- package/dist/detectors/estuary-token-flaw.js +547 -0
- package/dist/detectors/euler-debt-token-manipulation.d.ts +32 -0
- package/dist/detectors/euler-debt-token-manipulation.js +347 -0
- package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.d.ts +29 -0
- package/dist/detectors/exploiting-a-vulnerability-in-curve-fina.js +210 -0
- package/dist/detectors/fallback-delegatecall-reentrancy.d.ts +14 -0
- package/dist/detectors/fallback-delegatecall-reentrancy.js +236 -0
- package/dist/detectors/farm-business-logic-flaw-lack-of-access.d.ts +7 -0
- package/dist/detectors/farm-business-logic-flaw-lack-of-access.js +665 -0
- package/dist/detectors/fee-mechanism-exploitation.d.ts +20 -0
- package/dist/detectors/fee-mechanism-exploitation.js +400 -0
- package/dist/detectors/fee-on-transfer-balance-mismatch.d.ts +49 -0
- package/dist/detectors/fee-on-transfer-balance-mismatch.js +394 -0
- package/dist/detectors/fhe-encrypted-input-validation.d.ts +29 -0
- package/dist/detectors/fhe-encrypted-input-validation.js +210 -0
- package/dist/detectors/fhe-handle-leakage.d.ts +44 -0
- package/dist/detectors/fhe-handle-leakage.js +315 -0
- package/dist/detectors/fhe-oz-pattern-misuse.d.ts +26 -0
- package/dist/detectors/fhe-oz-pattern-misuse.js +311 -0
- package/dist/detectors/fhe-state-leakage.d.ts +8 -0
- package/dist/detectors/fhe-state-leakage.js +400 -0
- package/dist/detectors/fi-bridges.d.ts +33 -0
- package/dist/detectors/fi-bridges.js +428 -0
- package/dist/detectors/finance-access-control-price-oracle-man.d.ts +9 -0
- package/dist/detectors/finance-access-control-price-oracle-man.js +640 -0
- package/dist/detectors/finance-bridge-address0safetransferfrom.d.ts +8 -0
- package/dist/detectors/finance-bridge-address0safetransferfrom.js +574 -0
- package/dist/detectors/finance-business-logic-in-mint.d.ts +54 -0
- package/dist/detectors/finance-business-logic-in-mint.js +687 -0
- package/dist/detectors/finance-erc667-reentrancy.d.ts +7 -0
- package/dist/detectors/finance-erc667-reentrancy.js +509 -0
- package/dist/detectors/finance-flashloan-price-oracle-manipul.d.ts +7 -0
- package/dist/detectors/finance-flashloan-price-oracle-manipul.js +546 -0
- package/dist/detectors/finance-flashloan-reentrancy.d.ts +7 -0
- package/dist/detectors/finance-flashloan-reentrancy.js +547 -0
- package/dist/detectors/finance-swap-metapool-attack.d.ts +19 -0
- package/dist/detectors/finance-swap-metapool-attack.js +321 -0
- package/dist/detectors/flashloan-price-manipulation.d.ts +7 -0
- package/dist/detectors/flashloan-price-manipulation.js +950 -0
- package/dist/detectors/flashloan-reentrancy-rari.d.ts +28 -0
- package/dist/detectors/flashloan-reentrancy-rari.js +577 -0
- package/dist/detectors/flashloan-reentrancy.d.ts +7 -0
- package/dist/detectors/flashloan-reentrancy.js +383 -0
- package/dist/detectors/flashloan-token-migrate.d.ts +7 -0
- package/dist/detectors/flashloan-token-migrate.js +274 -0
- package/dist/detectors/force-fed-eth-state-corruption.d.ts +32 -0
- package/dist/detectors/force-fed-eth-state-corruption.js +293 -0
- package/dist/detectors/free-mint-bug.d.ts +41 -0
- package/dist/detectors/free-mint-bug.js +483 -0
- package/dist/detectors/front-running-orderbook-state-update.d.ts +37 -0
- package/dist/detectors/front-running-orderbook-state-update.js +471 -0
- package/dist/detectors/front-running-shared-collateral-write.d.ts +41 -0
- package/dist/detectors/front-running-shared-collateral-write.js +508 -0
- package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.d.ts +30 -0
- package/dist/detectors/fusion-v1-settlement-arbitrary-yul-calld.js +354 -0
- package/dist/detectors/generalized-frontrunning.d.ts +7 -0
- package/dist/detectors/generalized-frontrunning.js +836 -0
- package/dist/detectors/governance-flash-loan.d.ts +62 -0
- package/dist/detectors/governance-flash-loan.js +452 -0
- package/dist/detectors/governance-flashloan-vote.d.ts +41 -0
- package/dist/detectors/governance-flashloan-vote.js +272 -0
- package/dist/detectors/halborn-security-report-aave-v3.d.ts +6 -0
- package/dist/detectors/halborn-security-report-aave-v3.js +357 -0
- package/dist/detectors/incorrect-access-control.d.ts +26 -0
- package/dist/detectors/incorrect-access-control.js +328 -0
- package/dist/detectors/incorrect-burn-accounting.d.ts +10 -0
- package/dist/detectors/incorrect-burn-accounting.js +387 -0
- package/dist/detectors/incorrect-dividends-calculation.d.ts +27 -0
- package/dist/detectors/incorrect-dividends-calculation.js +524 -0
- package/dist/detectors/incorrect-dividends.d.ts +27 -0
- package/dist/detectors/incorrect-dividends.js +485 -0
- package/dist/detectors/incorrect-input-validation.d.ts +23 -0
- package/dist/detectors/incorrect-input-validation.js +312 -0
- package/dist/detectors/incorrect-signature-verification.d.ts +26 -0
- package/dist/detectors/incorrect-signature-verification.js +530 -0
- package/dist/detectors/infinite-loop.d.ts +7 -0
- package/dist/detectors/infinite-loop.js +440 -0
- package/dist/detectors/infinite-number-of-loans.d.ts +13 -0
- package/dist/detectors/infinite-number-of-loans.js +565 -0
- package/dist/detectors/inheritance-override.d.ts +26 -0
- package/dist/detectors/inheritance-override.js +320 -0
- package/dist/detectors/initialization-access-control.d.ts +8 -0
- package/dist/detectors/initialization-access-control.js +659 -0
- package/dist/detectors/insecure-randomness.d.ts +73 -0
- package/dist/detectors/insecure-randomness.js +610 -0
- package/dist/detectors/insufficient-access-control-trusted-param.d.ts +39 -0
- package/dist/detectors/insufficient-access-control-trusted-param.js +356 -0
- package/dist/detectors/insufficient-dvn-threshold.d.ts +32 -0
- package/dist/detectors/insufficient-dvn-threshold.js +585 -0
- package/dist/detectors/integer-overflow-detector.d.ts +45 -0
- package/dist/detectors/integer-overflow-detector.js +284 -0
- package/dist/detectors/integer-overflow.d.ts +95 -0
- package/dist/detectors/integer-overflow.js +344 -0
- package/dist/detectors/integer-underflow.d.ts +7 -0
- package/dist/detectors/integer-underflow.js +422 -0
- package/dist/detectors/intent-settlement-balance-manipulation.d.ts +22 -0
- package/dist/detectors/intent-settlement-balance-manipulation.js +548 -0
- package/dist/detectors/l1-to-l2-message-reentrancy.d.ts +7 -0
- package/dist/detectors/l1-to-l2-message-reentrancy.js +545 -0
- package/dist/detectors/l2-withdrawal-validation.d.ts +8 -0
- package/dist/detectors/l2-withdrawal-validation.js +303 -0
- package/dist/detectors/lack-of-access-control.d.ts +7 -0
- package/dist/detectors/lack-of-access-control.js +425 -0
- package/dist/detectors/lack-of-calldata-validation.d.ts +16 -0
- package/dist/detectors/lack-of-calldata-validation.js +914 -0
- package/dist/detectors/lack-of-input-validation-reentrancy.d.ts +7 -0
- package/dist/detectors/lack-of-input-validation-reentrancy.js +637 -0
- package/dist/detectors/lack-of-slippage-control.d.ts +7 -0
- package/dist/detectors/lack-of-slippage-control.js +513 -0
- package/dist/detectors/lack-of-slippage-protection.d.ts +7 -0
- package/dist/detectors/lack-of-slippage-protection.js +474 -0
- package/dist/detectors/lack-of-validation-data.d.ts +23 -0
- package/dist/detectors/lack-of-validation-data.js +391 -0
- package/dist/detectors/lack-of-validation-pool.d.ts +7 -0
- package/dist/detectors/lack-of-validation-pool.js +492 -0
- package/dist/detectors/lack-of-validation-userdata.d.ts +7 -0
- package/dist/detectors/lack-of-validation-userdata.js +583 -0
- package/dist/detectors/lack-of-validation.d.ts +27 -0
- package/dist/detectors/lack-of-validation.js +609 -0
- package/dist/detectors/layerzero-dvn-quorum-missing.d.ts +22 -0
- package/dist/detectors/layerzero-dvn-quorum-missing.js +464 -0
- package/dist/detectors/layerzero-v2-unverified-origin.d.ts +40 -0
- package/dist/detectors/layerzero-v2-unverified-origin.js +368 -0
- package/dist/detectors/liquidation-accounting-desync.d.ts +14 -0
- package/dist/detectors/liquidation-accounting-desync.js +145 -0
- package/dist/detectors/liquidation-gain-manipulation.d.ts +42 -0
- package/dist/detectors/liquidation-gain-manipulation.js +606 -0
- package/dist/detectors/liquidation-price-rounding-advantage.d.ts +26 -0
- package/dist/detectors/liquidation-price-rounding-advantage.js +283 -0
- package/dist/detectors/liquidity-poisoning.d.ts +25 -0
- package/dist/detectors/liquidity-poisoning.js +339 -0
- package/dist/detectors/loans-malicious-proposal-price-oracle.d.ts +44 -0
- package/dist/detectors/loans-malicious-proposal-price-oracle.js +813 -0
- package/dist/detectors/logic-flaw.d.ts +186 -0
- package/dist/detectors/logic-flaw.js +3356 -0
- package/dist/detectors/manipulation-of-funds.d.ts +31 -0
- package/dist/detectors/manipulation-of-funds.js +304 -0
- package/dist/detectors/merkl-unsafe-claim-callback.d.ts +22 -0
- package/dist/detectors/merkl-unsafe-claim-callback.js +94 -0
- package/dist/detectors/mev-boost-timestamp.d.ts +7 -0
- package/dist/detectors/mev-boost-timestamp.js +318 -0
- package/dist/detectors/mev-merge-exploit.d.ts +29 -0
- package/dist/detectors/mev-merge-exploit.js +397 -0
- package/dist/detectors/mev-sandwich-vulnerability.d.ts +24 -0
- package/dist/detectors/mev-sandwich-vulnerability.js +648 -0
- package/dist/detectors/mev-slot-manipulation.d.ts +36 -0
- package/dist/detectors/mev-slot-manipulation.js +691 -0
- package/dist/detectors/mevbot-insufficient-validation.d.ts +48 -0
- package/dist/detectors/mevbot-insufficient-validation.js +574 -0
- package/dist/detectors/migration-rebalance-without-bound.d.ts +7 -0
- package/dist/detectors/migration-rebalance-without-bound.js +514 -0
- package/dist/detectors/mint-hardcoded-asset-parity.d.ts +31 -0
- package/dist/detectors/mint-hardcoded-asset-parity.js +356 -0
- package/dist/detectors/miscalculation-on-spendallowance.d.ts +7 -0
- package/dist/detectors/miscalculation-on-spendallowance.js +188 -0
- package/dist/detectors/misconfiguration.d.ts +27 -0
- package/dist/detectors/misconfiguration.js +410 -0
- package/dist/detectors/missing-access-control-caller-supplied-auth.d.ts +7 -0
- package/dist/detectors/missing-access-control-caller-supplied-auth.js +550 -0
- package/dist/detectors/missing-access-control-receiver-payout.d.ts +7 -0
- package/dist/detectors/missing-access-control-receiver-payout.js +460 -0
- package/dist/detectors/missing-access-control-role-or-transferfrom.d.ts +7 -0
- package/dist/detectors/missing-access-control-role-or-transferfrom.js +663 -0
- package/dist/detectors/missing-access-control.d.ts +19 -0
- package/dist/detectors/missing-access-control.js +781 -0
- package/dist/detectors/missing-sequencer-uptime-check.d.ts +30 -0
- package/dist/detectors/missing-sequencer-uptime-check.js +348 -0
- package/dist/detectors/missing-storage-gap.d.ts +19 -0
- package/dist/detectors/missing-storage-gap.js +193 -0
- package/dist/detectors/missing-swap-deadline-slippage.d.ts +31 -0
- package/dist/detectors/missing-swap-deadline-slippage.js +231 -0
- package/dist/detectors/missing-zk-proof-verification.d.ts +60 -0
- package/dist/detectors/missing-zk-proof-verification.js +547 -0
- package/dist/detectors/my-experience-with-yearn-finance.d.ts +7 -0
- package/dist/detectors/my-experience-with-yearn-finance.js +552 -0
- package/dist/detectors/network-bridge-ronin.d.ts +7 -0
- package/dist/detectors/network-bridge-ronin.js +408 -0
- package/dist/detectors/network-bridge.d.ts +7 -0
- package/dist/detectors/network-bridge.js +444 -0
- package/dist/detectors/network-underflow.d.ts +7 -0
- package/dist/detectors/network-underflow.js +517 -0
- package/dist/detectors/nft-denial-of-service.d.ts +7 -0
- package/dist/detectors/nft-denial-of-service.js +223 -0
- package/dist/detectors/nft-marketplace-order-reentrancy.d.ts +7 -0
- package/dist/detectors/nft-marketplace-order-reentrancy.js +427 -0
- package/dist/detectors/nft-token-standard-access-control.d.ts +7 -0
- package/dist/detectors/nft-token-standard-access-control.js +455 -0
- package/dist/detectors/oracle-manipulation-amm-spot-price.d.ts +42 -0
- package/dist/detectors/oracle-manipulation-amm-spot-price.js +321 -0
- package/dist/detectors/oracle-manipulation-liquidity-withdrawal.d.ts +27 -0
- package/dist/detectors/oracle-manipulation-liquidity-withdrawal.js +192 -0
- package/dist/detectors/oracle-manipulation.d.ts +90 -0
- package/dist/detectors/oracle-manipulation.js +1023 -0
- package/dist/detectors/oracle-vortex-manipulation.d.ts +30 -0
- package/dist/detectors/oracle-vortex-manipulation.js +473 -0
- package/dist/detectors/overpriced-asset-in-oracle.d.ts +41 -0
- package/dist/detectors/overpriced-asset-in-oracle.js +420 -0
- package/dist/detectors/oz-access-control-roles.d.ts +33 -0
- package/dist/detectors/oz-access-control-roles.js +359 -0
- package/dist/detectors/pair-manipulation-transfer-hook.d.ts +38 -0
- package/dist/detectors/pair-manipulation-transfer-hook.js +366 -0
- package/dist/detectors/parameter-access-control.d.ts +47 -0
- package/dist/detectors/parameter-access-control.js +511 -0
- package/dist/detectors/parameter-manipulation.d.ts +7 -0
- package/dist/detectors/parameter-manipulation.js +505 -0
- package/dist/detectors/parity-multisig-delegatecall.d.ts +7 -0
- package/dist/detectors/parity-multisig-delegatecall.js +707 -0
- package/dist/detectors/permissionless-claim-amm-spot-pricing.d.ts +7 -0
- package/dist/detectors/permissionless-claim-amm-spot-pricing.js +351 -0
- package/dist/detectors/permit-future-dated-deadline.d.ts +31 -0
- package/dist/detectors/permit-future-dated-deadline.js +339 -0
- package/dist/detectors/phishing-attack-bybit.d.ts +37 -0
- package/dist/detectors/phishing-attack-bybit.js +513 -0
- package/dist/detectors/post-insolvency-check.d.ts +7 -0
- package/dist/detectors/post-insolvency-check.js +277 -0
- package/dist/detectors/precision-loss-vulnerability.d.ts +7 -0
- package/dist/detectors/precision-loss-vulnerability.js +472 -0
- package/dist/detectors/precision-truncation.d.ts +8 -0
- package/dist/detectors/precision-truncation.js +425 -0
- package/dist/detectors/price-dependency-veth.d.ts +41 -0
- package/dist/detectors/price-dependency-veth.js +588 -0
- package/dist/detectors/price-feed-verification.d.ts +7 -0
- package/dist/detectors/price-feed-verification.js +557 -0
- package/dist/detectors/price-manipulation-reentrancy.d.ts +32 -0
- package/dist/detectors/price-manipulation-reentrancy.js +445 -0
- package/dist/detectors/price-manipulation-via-reentranc.d.ts +7 -0
- package/dist/detectors/price-manipulation-via-reentranc.js +569 -0
- package/dist/detectors/price-oracle-manipulation.d.ts +25 -0
- package/dist/detectors/price-oracle-manipulation.js +530 -0
- package/dist/detectors/project-instant-rewards-unlocked.d.ts +6 -0
- package/dist/detectors/project-instant-rewards-unlocked.js +462 -0
- package/dist/detectors/protocol-reentrancy.d.ts +7 -0
- package/dist/detectors/protocol-reentrancy.js +457 -0
- package/dist/detectors/proxy-init-race.d.ts +11 -0
- package/dist/detectors/proxy-init-race.js +634 -0
- package/dist/detectors/proxy-storage-slot-collision.d.ts +7 -0
- package/dist/detectors/proxy-storage-slot-collision.js +135 -0
- package/dist/detectors/public-internal-function.d.ts +39 -0
- package/dist/detectors/public-internal-function.js +233 -0
- package/dist/detectors/quote-silent-zero.d.ts +25 -0
- package/dist/detectors/quote-silent-zero.js +156 -0
- package/dist/detectors/readonly-reentrancy.d.ts +9 -0
- package/dist/detectors/readonly-reentrancy.js +108 -0
- package/dist/detectors/receipt-redemption-missing-validation.d.ts +31 -0
- package/dist/detectors/receipt-redemption-missing-validation.js +453 -0
- package/dist/detectors/reentrancy-balance.d.ts +36 -0
- package/dist/detectors/reentrancy-balance.js +577 -0
- package/dist/detectors/reentrancy-business-logic-game.d.ts +36 -0
- package/dist/detectors/reentrancy-business-logic-game.js +616 -0
- package/dist/detectors/reentrancy-on-sell-nft.d.ts +23 -0
- package/dist/detectors/reentrancy-on-sell-nft.js +510 -0
- package/dist/detectors/reflection-token-balance-desync.d.ts +28 -0
- package/dist/detectors/reflection-token-balance-desync.js +246 -0
- package/dist/detectors/registry-engine.d.ts +34 -0
- package/dist/detectors/registry-engine.js +388 -0
- package/dist/detectors/rollup-unvalidated-state-update.d.ts +35 -0
- package/dist/detectors/rollup-unvalidated-state-update.js +286 -0
- package/dist/detectors/s-horizon-bridge-private-key-compromis.d.ts +8 -0
- package/dist/detectors/s-horizon-bridge-private-key-compromis.js +615 -0
- package/dist/detectors/share-price-manipulation.d.ts +7 -0
- package/dist/detectors/share-price-manipulation.js +653 -0
- package/dist/detectors/signature-replay.d.ts +30 -0
- package/dist/detectors/signature-replay.js +367 -0
- package/dist/detectors/simpleswap-unverified-approval.d.ts +27 -0
- package/dist/detectors/simpleswap-unverified-approval.js +198 -0
- package/dist/detectors/single-spot-oracle-collateral-valuation.d.ts +22 -0
- package/dist/detectors/single-spot-oracle-collateral-valuation.js +419 -0
- package/dist/detectors/skim-token-balance.d.ts +7 -0
- package/dist/detectors/skim-token-balance.js +788 -0
- package/dist/detectors/sky-oft-governance-payload.d.ts +7 -0
- package/dist/detectors/sky-oft-governance-payload.js +515 -0
- package/dist/detectors/sky-oft-governance-truncation.d.ts +32 -0
- package/dist/detectors/sky-oft-governance-truncation.js +377 -0
- package/dist/detectors/solana-evm-bridge-truncation.d.ts +7 -0
- package/dist/detectors/solana-evm-bridge-truncation.js +638 -0
- package/dist/detectors/solhint-unchecked-low-level-call.d.ts +74 -0
- package/dist/detectors/solhint-unchecked-low-level-call.js +463 -0
- package/dist/detectors/stablecoin-pair-spot-oracle.d.ts +7 -0
- package/dist/detectors/stablecoin-pair-spot-oracle.js +364 -0
- package/dist/detectors/staked-rate-as-oracle.d.ts +44 -0
- package/dist/detectors/staked-rate-as-oracle.js +497 -0
- package/dist/detectors/stale-oracle.d.ts +63 -0
- package/dist/detectors/stale-oracle.js +649 -0
- package/dist/detectors/starkware-proof-validation-gap.d.ts +18 -0
- package/dist/detectors/starkware-proof-validation-gap.js +629 -0
- package/dist/detectors/steth-transfer-reentrancy.d.ts +8 -0
- package/dist/detectors/steth-transfer-reentrancy.js +317 -0
- package/dist/detectors/storage-collision-malicious-proposal.d.ts +27 -0
- package/dist/detectors/storage-collision-malicious-proposal.js +386 -0
- package/dist/detectors/timestamp-manipulation.d.ts +49 -0
- package/dist/detectors/timestamp-manipulation.js +383 -0
- package/dist/detectors/token-access-control.d.ts +7 -0
- package/dist/detectors/token-access-control.js +544 -0
- package/dist/detectors/token-incorrect-signature-verification.d.ts +23 -0
- package/dist/detectors/token-incorrect-signature-verification.js +434 -0
- package/dist/detectors/token-transfer-logic-flaw.d.ts +33 -0
- package/dist/detectors/token-transfer-logic-flaw.js +267 -0
- package/dist/detectors/transfer-double-debit-pool-recipient.d.ts +7 -0
- package/dist/detectors/transfer-double-debit-pool-recipient.js +542 -0
- package/dist/detectors/treasury-reentrancy.d.ts +7 -0
- package/dist/detectors/treasury-reentrancy.js +442 -0
- package/dist/detectors/tstore-poison.d.ts +32 -0
- package/dist/detectors/tstore-poison.js +417 -0
- package/dist/detectors/tstore-race-condition.d.ts +7 -0
- package/dist/detectors/tstore-race-condition.js +632 -0
- package/dist/detectors/types.d.ts +85 -0
- package/dist/detectors/types.js +20 -0
- package/dist/detectors/unauthorized-payer-transferfrom.d.ts +66 -0
- package/dist/detectors/unauthorized-payer-transferfrom.js +339 -0
- package/dist/detectors/unauthorized-transferfrom-shell.d.ts +7 -0
- package/dist/detectors/unauthorized-transferfrom-shell.js +504 -0
- package/dist/detectors/unauthorized-transferfrom.d.ts +16 -0
- package/dist/detectors/unauthorized-transferfrom.js +838 -0
- package/dist/detectors/unbound-zk-verifier-input.d.ts +7 -0
- package/dist/detectors/unbound-zk-verifier-input.js +445 -0
- package/dist/detectors/unbounded-share-price-collateral-oracle.d.ts +48 -0
- package/dist/detectors/unbounded-share-price-collateral-oracle.js +566 -0
- package/dist/detectors/uncapped-reward-emission.d.ts +7 -0
- package/dist/detectors/uncapped-reward-emission.js +493 -0
- package/dist/detectors/unchecked-call-forwarding.d.ts +31 -0
- package/dist/detectors/unchecked-call-forwarding.js +330 -0
- package/dist/detectors/unchecked-external-call-unconditional-state-mutation.d.ts +18 -0
- package/dist/detectors/unchecked-external-call-unconditional-state-mutation.js +311 -0
- package/dist/detectors/unchecked-external-call.d.ts +66 -0
- package/dist/detectors/unchecked-external-call.js +389 -0
- package/dist/detectors/unchecked-oft-return.d.ts +13 -0
- package/dist/detectors/unchecked-oft-return.js +118 -0
- package/dist/detectors/unguarded-governance-execution.d.ts +35 -0
- package/dist/detectors/unguarded-governance-execution.js +422 -0
- package/dist/detectors/unguarded-governance-executor.d.ts +35 -0
- package/dist/detectors/unguarded-governance-executor.js +349 -0
- package/dist/detectors/unindexed-event-address.d.ts +7 -0
- package/dist/detectors/unindexed-event-address.js +268 -0
- package/dist/detectors/uninitialized-implementation.d.ts +27 -0
- package/dist/detectors/uninitialized-implementation.js +333 -0
- package/dist/detectors/uninitialized-storage-pointer.d.ts +7 -0
- package/dist/detectors/uninitialized-storage-pointer.js +110 -0
- package/dist/detectors/uniswap-skim-token-balance-attack.d.ts +8 -0
- package/dist/detectors/uniswap-skim-token-balance-attack.js +331 -0
- package/dist/detectors/uniswap-v4-hook-state-manipulation.d.ts +7 -0
- package/dist/detectors/uniswap-v4-hook-state-manipulation.js +296 -0
- package/dist/detectors/unprotected-admin-or-fund-sink.d.ts +7 -0
- package/dist/detectors/unprotected-admin-or-fund-sink.js +643 -0
- package/dist/detectors/unprotected-dex-swap.d.ts +43 -0
- package/dist/detectors/unprotected-dex-swap.js +334 -0
- package/dist/detectors/unprotected-initializer.d.ts +7 -0
- package/dist/detectors/unprotected-initializer.js +707 -0
- package/dist/detectors/unprotected-pair-initializer.d.ts +22 -0
- package/dist/detectors/unprotected-pair-initializer.js +359 -0
- package/dist/detectors/unprotected-upgrade-function.d.ts +7 -0
- package/dist/detectors/unprotected-upgrade-function.js +180 -0
- package/dist/detectors/unreachable-code-0.8.28.d.ts +19 -0
- package/dist/detectors/unreachable-code-0.8.28.js +206 -0
- package/dist/detectors/unsafe-proxy-storage.d.ts +7 -0
- package/dist/detectors/unsafe-proxy-storage.js +436 -0
- package/dist/detectors/unsafe-transient-storage.d.ts +7 -0
- package/dist/detectors/unsafe-transient-storage.js +1052 -0
- package/dist/detectors/unsafe-tx-origin.d.ts +9 -0
- package/dist/detectors/unsafe-tx-origin.js +179 -0
- package/dist/detectors/unsigned-validity-window.d.ts +20 -0
- package/dist/detectors/unsigned-validity-window.js +220 -0
- package/dist/detectors/unvalidated-interface-address.d.ts +25 -0
- package/dist/detectors/unvalidated-interface-address.js +377 -0
- package/dist/detectors/uups-uninitialized-storage.d.ts +9 -0
- package/dist/detectors/uups-uninitialized-storage.js +366 -0
- package/dist/detectors/v2-error-k-value-attack.d.ts +33 -0
- package/dist/detectors/v2-error-k-value-attack.js +276 -0
- package/dist/detectors/v2-k-invariant-bypass.d.ts +33 -0
- package/dist/detectors/v2-k-invariant-bypass.js +283 -0
- package/dist/detectors/v4-hook-reentrancy.d.ts +9 -0
- package/dist/detectors/v4-hook-reentrancy.js +488 -0
- package/dist/detectors/vault-inflation-rounding.d.ts +23 -0
- package/dist/detectors/vault-inflation-rounding.js +477 -0
- package/dist/detectors/vault-share-price-manipulation.d.ts +7 -0
- package/dist/detectors/vault-share-price-manipulation.js +332 -0
- package/dist/detectors/vortex-interaction-guard.d.ts +45 -0
- package/dist/detectors/vortex-interaction-guard.js +275 -0
- package/dist/detectors/vortex-protocol-reentrancy-guard.d.ts +27 -0
- package/dist/detectors/vortex-protocol-reentrancy-guard.js +408 -0
- package/dist/detectors/vulnerable-price-dependency.d.ts +41 -0
- package/dist/detectors/vulnerable-price-dependency.js +473 -0
- package/dist/detectors/weak-random-mint.d.ts +37 -0
- package/dist/detectors/weak-random-mint.js +271 -0
- package/dist/detectors/withdraw-be-to-withdraw.d.ts +26 -0
- package/dist/detectors/withdraw-be-to-withdraw.js +329 -0
- package/dist/detectors/wrong-function-visibility.d.ts +29 -0
- package/dist/detectors/wrong-function-visibility.js +147 -0
- package/dist/detectors/wrong-price-calculation.d.ts +42 -0
- package/dist/detectors/wrong-price-calculation.js +387 -0
- package/dist/detectors/yearn-vault-v2-share-price-manipulation.d.ts +32 -0
- package/dist/detectors/yearn-vault-v2-share-price-manipulation.js +248 -0
- package/dist/detectors/zero-fee.d.ts +7 -0
- package/dist/detectors/zero-fee.js +596 -0
- package/dist/detectors/zetachain-gateway-hack-analysis.d.ts +7 -0
- package/dist/detectors/zetachain-gateway-hack-analysis.js +629 -0
- package/dist/detectors/zk-rollup-da-gap.d.ts +8 -0
- package/dist/detectors/zk-rollup-da-gap.js +322 -0
- package/dist/detectors/zksync-batch-validation.d.ts +8 -0
- package/dist/detectors/zksync-batch-validation.js +461 -0
- package/dist/detectors/zksync-era-rollup-state-update.d.ts +60 -0
- package/dist/detectors/zksync-era-rollup-state-update.js +360 -0
- package/dist/detectors/zksync-simulation-drift.d.ts +35 -0
- package/dist/detectors/zksync-simulation-drift.js +309 -0
- package/dist/exit-codes.d.ts +15 -0
- package/dist/exit-codes.js +18 -0
- package/dist/formatters/github-actions.d.ts +2 -0
- package/dist/formatters/github-actions.js +61 -0
- package/dist/formatters/sarif.d.ts +24 -0
- package/dist/formatters/sarif.js +670 -0
- package/dist/formatters/text.d.ts +14 -0
- package/dist/formatters/text.js +152 -0
- package/dist/fp-rates.json +70 -0
- package/dist/identity/diff-baseline.d.ts +16 -0
- package/dist/identity/diff-baseline.js +152 -0
- package/dist/identity/hashing.d.ts +39 -0
- package/dist/identity/hashing.js +96 -0
- package/dist/index.d.ts +174 -0
- package/dist/index.js +358 -0
- package/dist/parallel-scan.d.ts +66 -0
- package/dist/parallel-scan.js +227 -0
- package/dist/registry.d.ts +17 -0
- package/dist/registry.js +118 -0
- package/dist/rules/glob.d.ts +5 -0
- package/dist/rules/glob.js +76 -0
- package/dist/rules/suppressions.d.ts +23 -0
- package/dist/rules/suppressions.js +136 -0
- package/dist/rules/tiers.d.ts +23 -0
- package/dist/rules/tiers.js +341 -0
- package/dist/scan-worker.d.ts +1 -0
- package/dist/scan-worker.js +61 -0
- package/dist/scan.d.ts +24 -0
- package/dist/scan.js +558 -0
- package/dist/semantic/contracts.d.ts +10 -0
- package/dist/semantic/contracts.js +141 -0
- package/dist/semantic/diagnostics.d.ts +29 -0
- package/dist/semantic/diagnostics.js +25 -0
- package/dist/semantic/eog.d.ts +56 -0
- package/dist/semantic/eog.js +545 -0
- package/dist/semantic/imports.d.ts +88 -0
- package/dist/semantic/imports.js +246 -0
- package/dist/semantic/index.d.ts +2 -0
- package/dist/semantic/index.js +8 -0
- package/dist/semantic/inheritance.d.ts +33 -0
- package/dist/semantic/inheritance.js +137 -0
- package/dist/semantic/model.d.ts +95 -0
- package/dist/semantic/model.js +232 -0
- package/dist/semantic/taint-tracker.d.ts +49 -0
- package/dist/semantic/taint-tracker.js +410 -0
- package/dist/semantic/types.d.ts +119 -0
- package/dist/semantic/types.js +18 -0
- package/dist/severity.d.ts +10 -0
- package/dist/severity.js +78 -0
- package/package.json +52 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LIQUIDITY_WITHDRAWAL_CALL_NAMES = exports.SINK_CALL_NAMES = exports.TWAP_CALLS = exports.AMM_SPOT_SOURCES = void 0;
|
|
4
|
+
exports.isLiquidityWithdrawalCall = isLiquidityWithdrawalCall;
|
|
5
|
+
const price_rate_1 = require("./price-rate");
|
|
6
|
+
exports.AMM_SPOT_SOURCES = price_rate_1.AMM_SPOT_SOURCE_CALL_NAMES;
|
|
7
|
+
exports.TWAP_CALLS = price_rate_1.TWAP_PRICE_SOURCE_CALL_NAMES;
|
|
8
|
+
exports.SINK_CALL_NAMES = new Set([
|
|
9
|
+
'liquidate',
|
|
10
|
+
'_liquidate',
|
|
11
|
+
'swap',
|
|
12
|
+
'_swap',
|
|
13
|
+
'mint',
|
|
14
|
+
'_mint',
|
|
15
|
+
'borrow',
|
|
16
|
+
'_borrow',
|
|
17
|
+
'redeem',
|
|
18
|
+
'_redeem',
|
|
19
|
+
'seize',
|
|
20
|
+
'_seize',
|
|
21
|
+
'close',
|
|
22
|
+
'_close',
|
|
23
|
+
'forceLiquidation',
|
|
24
|
+
'_forceLiquidation',
|
|
25
|
+
]);
|
|
26
|
+
exports.LIQUIDITY_WITHDRAWAL_CALL_NAMES = new Set([
|
|
27
|
+
'removeliquidity',
|
|
28
|
+
'remove_liquidity',
|
|
29
|
+
]);
|
|
30
|
+
function isLiquidityWithdrawalCall(callNode, getCalleeName) {
|
|
31
|
+
if (!callNode || typeof callNode !== 'object')
|
|
32
|
+
return false;
|
|
33
|
+
const calleeName = getCalleeName(callNode.expression);
|
|
34
|
+
if (!calleeName)
|
|
35
|
+
return false;
|
|
36
|
+
const lowerName = calleeName.toLowerCase();
|
|
37
|
+
if (exports.LIQUIDITY_WITHDRAWAL_CALL_NAMES.has(lowerName)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
if (lowerName === 'burn') {
|
|
41
|
+
const args = callNode.arguments || [];
|
|
42
|
+
if (args.length === 3)
|
|
43
|
+
return true;
|
|
44
|
+
let receiver = getReceiverName(callNode.expression);
|
|
45
|
+
// Handle NamedArgs where callNode is functionally identical but parser wraps it differently.
|
|
46
|
+
// In parser AST, arguments can be name-value lists. We just check receiver.
|
|
47
|
+
if (receiver && (receiver.includes('pool') || receiver.includes('pair'))) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
function getReceiverName(expr) {
|
|
54
|
+
if (!expr || typeof expr !== 'object')
|
|
55
|
+
return null;
|
|
56
|
+
if (expr.type === 'NameValueExpression' || expr.type === 'FunctionCallOptions') {
|
|
57
|
+
return getReceiverName(expr.expression);
|
|
58
|
+
}
|
|
59
|
+
if (expr.type === 'MemberAccess' && expr.expression?.type === 'Identifier') {
|
|
60
|
+
return expr.expression.name?.toLowerCase() || null;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=oracle.js.map
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared structural predicates for price/rate dependency reasoning.
|
|
3
|
+
*
|
|
4
|
+
* Detectors that flag single-source price or rate dependencies (the "veth pattern")
|
|
5
|
+
* need to identify: (1) price/rate signal sources, (2) critical value-transfer sinks,
|
|
6
|
+
* and (3) guard expressions that mitigate the dependency. This module provides the
|
|
7
|
+
* structural vocabulary for all three so the heuristics stay consistent and the
|
|
8
|
+
* rule-id vocabulary is captured in one place.
|
|
9
|
+
*
|
|
10
|
+
* Design notes for callers:
|
|
11
|
+
* - `isPriceSourceCall` / `isPriceSourceCalleeName` identify external oracle-style
|
|
12
|
+
* calls that return a price or rate. The set covers Chainlink, Pyth, and common
|
|
13
|
+
* custom oracle patterns.
|
|
14
|
+
* - `isPriceRateVariableName` identifies state-variable name shapes that suggest
|
|
15
|
+
* the variable holds a price or rate value (anchored / camel-case-prefixed
|
|
16
|
+
* patterns).
|
|
17
|
+
* - `isPriceRateLikeIdentifier` is a broader, camel-case-token-aware variant
|
|
18
|
+
* suitable for local variables and same-contract helper-function names
|
|
19
|
+
* (e.g. `currentRedeemRate`, `oraclePrice`, `stakedExchangeRate`).
|
|
20
|
+
* - `isCriticalValueTransferFunctionName` identifies function names whose bodies
|
|
21
|
+
* typically contain value movement (transfer, mint, burn, swap, redeem,
|
|
22
|
+
* withdraw).
|
|
23
|
+
* - `isFreshnessGuard` recognises timestamp-based staleness checks — both the
|
|
24
|
+
* immediate-comparison shape and the additive-tolerance shape
|
|
25
|
+
* (`updatedAt + MAX_AGE >= block.timestamp`).
|
|
26
|
+
* - `isSanityBoundGuard` recognises require/if conditions that bound a price
|
|
27
|
+
* or rate value (min/max, deviation from TWAP, etc.).
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Callee names of price/rate oracle calls that return a single scalar value
|
|
31
|
+
* (as opposed to TWAP or multi-source aggregators). Covers Chainlink basic,
|
|
32
|
+
* Pyth, and common custom oracle shapes.
|
|
33
|
+
*/
|
|
34
|
+
export declare const PRICE_SOURCE_CALL_NAMES: ReadonlySet<string>;
|
|
35
|
+
/**
|
|
36
|
+
* AMM calls that expose same-block spot state. These are not TWAP or
|
|
37
|
+
* aggregation APIs by themselves; callers must add their own time averaging,
|
|
38
|
+
* bounded-deviation check, or independent-source aggregation before using the
|
|
39
|
+
* value in protocol accounting.
|
|
40
|
+
*/
|
|
41
|
+
export declare const AMM_SPOT_SOURCE_CALL_NAMES: ReadonlySet<string>;
|
|
42
|
+
/**
|
|
43
|
+
* Scalar spot-price call vocabulary shared by spot-manipulation detectors.
|
|
44
|
+
* The set intentionally includes raw AMM reads, raw aggregator answers, and
|
|
45
|
+
* custom getPrice-style oracles, while excluding TWAP/median helper names.
|
|
46
|
+
*/
|
|
47
|
+
export declare const SPOT_PRICE_SOURCE_CALL_NAMES: ReadonlySet<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Calls that are commonly used to derive or fetch a time-weighted/reference
|
|
50
|
+
* price instead of a raw spot quote.
|
|
51
|
+
*/
|
|
52
|
+
export declare const TWAP_PRICE_SOURCE_CALL_NAMES: ReadonlySet<string>;
|
|
53
|
+
/**
|
|
54
|
+
* State-variable name patterns that suggest the variable holds a price or
|
|
55
|
+
* exchange rate value sourced from an external system (not a governance-set
|
|
56
|
+
* constant). Used as a stricter filter than `isPriceRateLikeIdentifier`.
|
|
57
|
+
*/
|
|
58
|
+
export declare const PRICE_RATE_VARIABLE_PATTERNS: RegExp[];
|
|
59
|
+
/**
|
|
60
|
+
* Function names whose bodies are expected to contain critical value-transfer
|
|
61
|
+
* logic (token movement, share minting/burning, collateral settlement). Used
|
|
62
|
+
* by detectors to decide whether a function is value-transfer-shaped.
|
|
63
|
+
*/
|
|
64
|
+
export declare const CRITICAL_VALUE_TRANSFER_NAMES: ReadonlySet<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Fields commonly used to track the freshness of a price or rate feed.
|
|
67
|
+
* Used to detect staleness checks: `require(updatedAt + maxAge >= block.timestamp)`.
|
|
68
|
+
*/
|
|
69
|
+
export declare const FRESHNESS_FIELD_NAMES: ReadonlySet<string>;
|
|
70
|
+
/**
|
|
71
|
+
* Recognized freshness guard modifier names. A function decorated with one of
|
|
72
|
+
* these is considered to have equivalent protection to an inline freshness check.
|
|
73
|
+
*/
|
|
74
|
+
export declare const RECOGNIZED_FRESHNESS_MODIFIER_NAMES: ReadonlySet<string>;
|
|
75
|
+
export declare function isPriceSourceCall(node: any): boolean;
|
|
76
|
+
export declare function isPriceSourceCalleeName(name: string): boolean;
|
|
77
|
+
export declare function isPriceRateVariableName(name: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Camel-case-token-aware identifier matcher. Splits the name on underscores
|
|
80
|
+
* and lower→upper transitions, lower-cases each token, and returns true when
|
|
81
|
+
* any token is in `PRICE_RATE_TOKEN_VOCAB`. Catches both state vars (`rate`,
|
|
82
|
+
* `redeemRate`) and helper / local names (`currentRedeemRate`, `oraclePrice`).
|
|
83
|
+
*/
|
|
84
|
+
export declare function isPriceRateLikeIdentifier(name: string): boolean;
|
|
85
|
+
export declare function isCriticalValueTransferFunctionName(name: string): boolean;
|
|
86
|
+
export declare function isFreshnessFieldName(name: string): boolean;
|
|
87
|
+
export declare function isRecognizedFreshnessModifierName(name: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Does the condition validate the freshness of a price or rate signal via a
|
|
90
|
+
* timestamp-based staleness guard?
|
|
91
|
+
*
|
|
92
|
+
* Recognised structurally as: the condition references `block.timestamp`
|
|
93
|
+
* AND mentions a known freshness field (`updatedAt`, `lastUpdate`,
|
|
94
|
+
* `publishTime`, ...) anywhere in the expression tree. Covers
|
|
95
|
+
* `updatedAt + MAX_AGE >= block.timestamp`
|
|
96
|
+
* `block.timestamp - updatedAt <= MAX_AGE`
|
|
97
|
+
* `lastUpdate + maxAge > block.timestamp`
|
|
98
|
+
* and require/if wrappings of the same.
|
|
99
|
+
*/
|
|
100
|
+
export declare function isFreshnessGuard(condition: any): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Does the condition validate a price or rate against a min/max bound,
|
|
103
|
+
* a deviation check against a TWAP/reference, or any other sanity constraint?
|
|
104
|
+
* These are distinct from freshness checks and provide a different mitigation.
|
|
105
|
+
*/
|
|
106
|
+
export declare function isSanityBoundGuard(condition: any, priceSymbolNames?: string[]): boolean;
|
|
107
|
+
export declare function getCalleeName(expr: any): string;
|
|
108
|
+
/**
|
|
109
|
+
* Split an identifier into lower-cased camel-case / snake-case tokens.
|
|
110
|
+
*
|
|
111
|
+
* `redeemRate` -> ['redeem', 'rate']
|
|
112
|
+
* `current_redeem_rate` -> ['current', 'redeem', 'rate']
|
|
113
|
+
* `getOraclePrice` -> ['get', 'oracle', 'price']
|
|
114
|
+
* `RATE_LIMIT` -> ['rate', 'limit']
|
|
115
|
+
*/
|
|
116
|
+
export declare function splitCamelTokens(name: string): string[];
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared structural predicates for price/rate dependency reasoning.
|
|
4
|
+
*
|
|
5
|
+
* Detectors that flag single-source price or rate dependencies (the "veth pattern")
|
|
6
|
+
* need to identify: (1) price/rate signal sources, (2) critical value-transfer sinks,
|
|
7
|
+
* and (3) guard expressions that mitigate the dependency. This module provides the
|
|
8
|
+
* structural vocabulary for all three so the heuristics stay consistent and the
|
|
9
|
+
* rule-id vocabulary is captured in one place.
|
|
10
|
+
*
|
|
11
|
+
* Design notes for callers:
|
|
12
|
+
* - `isPriceSourceCall` / `isPriceSourceCalleeName` identify external oracle-style
|
|
13
|
+
* calls that return a price or rate. The set covers Chainlink, Pyth, and common
|
|
14
|
+
* custom oracle patterns.
|
|
15
|
+
* - `isPriceRateVariableName` identifies state-variable name shapes that suggest
|
|
16
|
+
* the variable holds a price or rate value (anchored / camel-case-prefixed
|
|
17
|
+
* patterns).
|
|
18
|
+
* - `isPriceRateLikeIdentifier` is a broader, camel-case-token-aware variant
|
|
19
|
+
* suitable for local variables and same-contract helper-function names
|
|
20
|
+
* (e.g. `currentRedeemRate`, `oraclePrice`, `stakedExchangeRate`).
|
|
21
|
+
* - `isCriticalValueTransferFunctionName` identifies function names whose bodies
|
|
22
|
+
* typically contain value movement (transfer, mint, burn, swap, redeem,
|
|
23
|
+
* withdraw).
|
|
24
|
+
* - `isFreshnessGuard` recognises timestamp-based staleness checks — both the
|
|
25
|
+
* immediate-comparison shape and the additive-tolerance shape
|
|
26
|
+
* (`updatedAt + MAX_AGE >= block.timestamp`).
|
|
27
|
+
* - `isSanityBoundGuard` recognises require/if conditions that bound a price
|
|
28
|
+
* or rate value (min/max, deviation from TWAP, etc.).
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.RECOGNIZED_FRESHNESS_MODIFIER_NAMES = exports.FRESHNESS_FIELD_NAMES = exports.CRITICAL_VALUE_TRANSFER_NAMES = exports.PRICE_RATE_VARIABLE_PATTERNS = exports.TWAP_PRICE_SOURCE_CALL_NAMES = exports.SPOT_PRICE_SOURCE_CALL_NAMES = exports.AMM_SPOT_SOURCE_CALL_NAMES = exports.PRICE_SOURCE_CALL_NAMES = void 0;
|
|
32
|
+
exports.isPriceSourceCall = isPriceSourceCall;
|
|
33
|
+
exports.isPriceSourceCalleeName = isPriceSourceCalleeName;
|
|
34
|
+
exports.isPriceRateVariableName = isPriceRateVariableName;
|
|
35
|
+
exports.isPriceRateLikeIdentifier = isPriceRateLikeIdentifier;
|
|
36
|
+
exports.isCriticalValueTransferFunctionName = isCriticalValueTransferFunctionName;
|
|
37
|
+
exports.isFreshnessFieldName = isFreshnessFieldName;
|
|
38
|
+
exports.isRecognizedFreshnessModifierName = isRecognizedFreshnessModifierName;
|
|
39
|
+
exports.isFreshnessGuard = isFreshnessGuard;
|
|
40
|
+
exports.isSanityBoundGuard = isSanityBoundGuard;
|
|
41
|
+
exports.getCalleeName = getCalleeName;
|
|
42
|
+
exports.splitCamelTokens = splitCamelTokens;
|
|
43
|
+
const ast_1 = require("./ast");
|
|
44
|
+
/**
|
|
45
|
+
* Callee names of price/rate oracle calls that return a single scalar value
|
|
46
|
+
* (as opposed to TWAP or multi-source aggregators). Covers Chainlink basic,
|
|
47
|
+
* Pyth, and common custom oracle shapes.
|
|
48
|
+
*/
|
|
49
|
+
exports.PRICE_SOURCE_CALL_NAMES = new Set([
|
|
50
|
+
'latestAnswer',
|
|
51
|
+
'latestRoundData',
|
|
52
|
+
'getPrice',
|
|
53
|
+
'getPriceUnsafe',
|
|
54
|
+
'getRate',
|
|
55
|
+
'redeemRate',
|
|
56
|
+
'exchangeRate',
|
|
57
|
+
'convertToAssets',
|
|
58
|
+
'convertToShares',
|
|
59
|
+
'getAmountOut',
|
|
60
|
+
'getAmountIn',
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* AMM calls that expose same-block spot state. These are not TWAP or
|
|
64
|
+
* aggregation APIs by themselves; callers must add their own time averaging,
|
|
65
|
+
* bounded-deviation check, or independent-source aggregation before using the
|
|
66
|
+
* value in protocol accounting.
|
|
67
|
+
*/
|
|
68
|
+
exports.AMM_SPOT_SOURCE_CALL_NAMES = new Set([
|
|
69
|
+
'getReserves',
|
|
70
|
+
'slot0',
|
|
71
|
+
'getAmountsOut',
|
|
72
|
+
'getAmountOut',
|
|
73
|
+
]);
|
|
74
|
+
/**
|
|
75
|
+
* Scalar spot-price call vocabulary shared by spot-manipulation detectors.
|
|
76
|
+
* The set intentionally includes raw AMM reads, raw aggregator answers, and
|
|
77
|
+
* custom getPrice-style oracles, while excluding TWAP/median helper names.
|
|
78
|
+
*/
|
|
79
|
+
exports.SPOT_PRICE_SOURCE_CALL_NAMES = new Set([
|
|
80
|
+
'getReserves',
|
|
81
|
+
'slot0',
|
|
82
|
+
'spotPrice',
|
|
83
|
+
'latestRoundData',
|
|
84
|
+
'latestAnswer',
|
|
85
|
+
'getPrice',
|
|
86
|
+
'getPriceUnsafe',
|
|
87
|
+
'getExpectedRate',
|
|
88
|
+
'getAmountOut',
|
|
89
|
+
'getAmountsOut',
|
|
90
|
+
'price0CumulativeLast',
|
|
91
|
+
'price1CumulativeLast',
|
|
92
|
+
]);
|
|
93
|
+
/**
|
|
94
|
+
* Calls that are commonly used to derive or fetch a time-weighted/reference
|
|
95
|
+
* price instead of a raw spot quote.
|
|
96
|
+
*/
|
|
97
|
+
exports.TWAP_PRICE_SOURCE_CALL_NAMES = new Set([
|
|
98
|
+
'observe',
|
|
99
|
+
'consult',
|
|
100
|
+
'getTimeWeightedPrices',
|
|
101
|
+
'getAveragePrice',
|
|
102
|
+
'getTwap',
|
|
103
|
+
'getTWAP',
|
|
104
|
+
'twap',
|
|
105
|
+
]);
|
|
106
|
+
/**
|
|
107
|
+
* State-variable name patterns that suggest the variable holds a price or
|
|
108
|
+
* exchange rate value sourced from an external system (not a governance-set
|
|
109
|
+
* constant). Used as a stricter filter than `isPriceRateLikeIdentifier`.
|
|
110
|
+
*/
|
|
111
|
+
exports.PRICE_RATE_VARIABLE_PATTERNS = [
|
|
112
|
+
/^(rate|exchangeRate|redeemRate|price|spotPrice|fairPrice|oraclePrice)$/i,
|
|
113
|
+
/^(price|rate|exchange)[A-Z]/,
|
|
114
|
+
/[A-Z](Price|Rate|Exchange)([A-Z]|$)/,
|
|
115
|
+
];
|
|
116
|
+
/**
|
|
117
|
+
* Lower-case camel-case tokens that mark an identifier as price/rate-like.
|
|
118
|
+
* Combined with `splitCamelTokens`, this catches helper names like
|
|
119
|
+
* `currentRedeemRate` or `getOraclePrice` without inflating the variable-name
|
|
120
|
+
* patterns above.
|
|
121
|
+
*/
|
|
122
|
+
const PRICE_RATE_TOKEN_VOCAB = new Set([
|
|
123
|
+
'rate', 'price', 'exchange',
|
|
124
|
+
]);
|
|
125
|
+
/**
|
|
126
|
+
* Function names whose bodies are expected to contain critical value-transfer
|
|
127
|
+
* logic (token movement, share minting/burning, collateral settlement). Used
|
|
128
|
+
* by detectors to decide whether a function is value-transfer-shaped.
|
|
129
|
+
*/
|
|
130
|
+
exports.CRITICAL_VALUE_TRANSFER_NAMES = new Set([
|
|
131
|
+
'transfer',
|
|
132
|
+
'transferFrom',
|
|
133
|
+
'safeTransfer',
|
|
134
|
+
'safeTransferFrom',
|
|
135
|
+
'mint',
|
|
136
|
+
'burn',
|
|
137
|
+
'redeem',
|
|
138
|
+
'withdraw',
|
|
139
|
+
'deposit',
|
|
140
|
+
'swap',
|
|
141
|
+
'liquidate',
|
|
142
|
+
'flashLoan',
|
|
143
|
+
'sendValue',
|
|
144
|
+
]);
|
|
145
|
+
/**
|
|
146
|
+
* Fields commonly used to track the freshness of a price or rate feed.
|
|
147
|
+
* Used to detect staleness checks: `require(updatedAt + maxAge >= block.timestamp)`.
|
|
148
|
+
*/
|
|
149
|
+
exports.FRESHNESS_FIELD_NAMES = new Set([
|
|
150
|
+
'updatedAt',
|
|
151
|
+
'updated_at',
|
|
152
|
+
'publishTime',
|
|
153
|
+
'publish_time',
|
|
154
|
+
'lastUpdate',
|
|
155
|
+
'lastupdate',
|
|
156
|
+
'lastUpdated',
|
|
157
|
+
'blockTimestampLast',
|
|
158
|
+
'roundTimestamp',
|
|
159
|
+
]);
|
|
160
|
+
/**
|
|
161
|
+
* Recognized freshness guard modifier names. A function decorated with one of
|
|
162
|
+
* these is considered to have equivalent protection to an inline freshness check.
|
|
163
|
+
*/
|
|
164
|
+
exports.RECOGNIZED_FRESHNESS_MODIFIER_NAMES = new Set([
|
|
165
|
+
'whenpricefresh',
|
|
166
|
+
'whenoraclefresh',
|
|
167
|
+
'onlywhenpricefresh',
|
|
168
|
+
'onlywhenoraclefresh',
|
|
169
|
+
'requirefresh',
|
|
170
|
+
'requirepricefresh',
|
|
171
|
+
'validrate',
|
|
172
|
+
'validprice',
|
|
173
|
+
'onlyvalidrate',
|
|
174
|
+
'onlyvalidprice',
|
|
175
|
+
]);
|
|
176
|
+
function isPriceSourceCall(node) {
|
|
177
|
+
if (!node || !(0, ast_1.isNode)(node, 'FunctionCall'))
|
|
178
|
+
return false;
|
|
179
|
+
const name = getCalleeName(node.expression);
|
|
180
|
+
return exports.PRICE_SOURCE_CALL_NAMES.has(name);
|
|
181
|
+
}
|
|
182
|
+
function isPriceSourceCalleeName(name) {
|
|
183
|
+
return exports.PRICE_SOURCE_CALL_NAMES.has(name);
|
|
184
|
+
}
|
|
185
|
+
function isPriceRateVariableName(name) {
|
|
186
|
+
if (!name)
|
|
187
|
+
return false;
|
|
188
|
+
return exports.PRICE_RATE_VARIABLE_PATTERNS.some(p => p.test(name));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Camel-case-token-aware identifier matcher. Splits the name on underscores
|
|
192
|
+
* and lower→upper transitions, lower-cases each token, and returns true when
|
|
193
|
+
* any token is in `PRICE_RATE_TOKEN_VOCAB`. Catches both state vars (`rate`,
|
|
194
|
+
* `redeemRate`) and helper / local names (`currentRedeemRate`, `oraclePrice`).
|
|
195
|
+
*/
|
|
196
|
+
function isPriceRateLikeIdentifier(name) {
|
|
197
|
+
if (!name)
|
|
198
|
+
return false;
|
|
199
|
+
for (const token of splitCamelTokens(name)) {
|
|
200
|
+
if (PRICE_RATE_TOKEN_VOCAB.has(token))
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
function isCriticalValueTransferFunctionName(name) {
|
|
206
|
+
if (!name)
|
|
207
|
+
return false;
|
|
208
|
+
if (exports.CRITICAL_VALUE_TRANSFER_NAMES.has(name))
|
|
209
|
+
return true;
|
|
210
|
+
for (const token of splitCamelTokens(name)) {
|
|
211
|
+
if (token === 'mint' || token === 'burn' || token === 'redeem' ||
|
|
212
|
+
token === 'withdraw' || token === 'swap' || token === 'liquidate' ||
|
|
213
|
+
token === 'deposit') {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
function isFreshnessFieldName(name) {
|
|
220
|
+
return exports.FRESHNESS_FIELD_NAMES.has(name);
|
|
221
|
+
}
|
|
222
|
+
function isRecognizedFreshnessModifierName(name) {
|
|
223
|
+
return exports.RECOGNIZED_FRESHNESS_MODIFIER_NAMES.has(name.toLowerCase());
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Does the condition validate the freshness of a price or rate signal via a
|
|
227
|
+
* timestamp-based staleness guard?
|
|
228
|
+
*
|
|
229
|
+
* Recognised structurally as: the condition references `block.timestamp`
|
|
230
|
+
* AND mentions a known freshness field (`updatedAt`, `lastUpdate`,
|
|
231
|
+
* `publishTime`, ...) anywhere in the expression tree. Covers
|
|
232
|
+
* `updatedAt + MAX_AGE >= block.timestamp`
|
|
233
|
+
* `block.timestamp - updatedAt <= MAX_AGE`
|
|
234
|
+
* `lastUpdate + maxAge > block.timestamp`
|
|
235
|
+
* and require/if wrappings of the same.
|
|
236
|
+
*/
|
|
237
|
+
function isFreshnessGuard(condition) {
|
|
238
|
+
if (!condition || typeof condition !== 'object')
|
|
239
|
+
return false;
|
|
240
|
+
if ((0, ast_1.isNode)(condition, 'FunctionCall')) {
|
|
241
|
+
const callee = getCalleeName(condition.expression);
|
|
242
|
+
if (callee === 'require' || callee === 'assert') {
|
|
243
|
+
const arg = (condition.arguments || [])[0];
|
|
244
|
+
return isFreshnessGuard(arg);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const containsBlockTimestamp = walkAny(condition, (n) => isBlockMemberAccess(n, 'timestamp'));
|
|
248
|
+
if (!containsBlockTimestamp)
|
|
249
|
+
return false;
|
|
250
|
+
const containsFreshnessField = walkAny(condition, (n) => {
|
|
251
|
+
if ((0, ast_1.isNode)(n, 'Identifier') && exports.FRESHNESS_FIELD_NAMES.has(n.name || ''))
|
|
252
|
+
return true;
|
|
253
|
+
if ((0, ast_1.isNode)(n, 'MemberAccess') && exports.FRESHNESS_FIELD_NAMES.has(n.memberName || ''))
|
|
254
|
+
return true;
|
|
255
|
+
return false;
|
|
256
|
+
});
|
|
257
|
+
if (!containsFreshnessField)
|
|
258
|
+
return false;
|
|
259
|
+
const containsMath = walkAny(condition, (n) => (0, ast_1.isNode)(n, 'BinaryOperation') && ['+', '-'].includes(n.operator));
|
|
260
|
+
if (!containsMath)
|
|
261
|
+
return false;
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Does the condition validate a price or rate against a min/max bound,
|
|
266
|
+
* a deviation check against a TWAP/reference, or any other sanity constraint?
|
|
267
|
+
* These are distinct from freshness checks and provide a different mitigation.
|
|
268
|
+
*/
|
|
269
|
+
function isSanityBoundGuard(condition, priceSymbolNames = []) {
|
|
270
|
+
if (!condition || typeof condition !== 'object')
|
|
271
|
+
return false;
|
|
272
|
+
if ((0, ast_1.isNode)(condition, 'FunctionCall')) {
|
|
273
|
+
const callee = getCalleeName(condition.expression);
|
|
274
|
+
if (callee === 'require' || callee === 'assert') {
|
|
275
|
+
const arg = (condition.arguments || [])[0];
|
|
276
|
+
if (arg && isSanityBoundGuard(arg, priceSymbolNames))
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if ((0, ast_1.isNode)(condition, 'BinaryOperation') && condition.operator === '&&') {
|
|
281
|
+
if (isTwoSidedReferenceBoundGuard(condition, priceSymbolNames))
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
if ((0, ast_1.isNode)(condition, 'BinaryOperation') && (condition.operator === '&&' || condition.operator === '||')) {
|
|
285
|
+
if (isSanityBoundGuard(condition.left || condition.leftExpression, priceSymbolNames))
|
|
286
|
+
return true;
|
|
287
|
+
if (isSanityBoundGuard(condition.right || condition.rightExpression, priceSymbolNames))
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
if ((0, ast_1.isNode)(condition, 'BinaryOperation') && ['<', '<=', '>', '>=', '==', '!='].includes(condition.operator)) {
|
|
291
|
+
const names = extractAllNames(condition);
|
|
292
|
+
const lowerNames = names.map(n => n.toLowerCase());
|
|
293
|
+
const hasBoundTerm = lowerNames.some(n => ['min', 'max', 'bound', 'floor', 'ceiling', 'cap', 'limit', 'deviation', 'delta', 'spread', 'tolerance'].some(t => n.includes(t)));
|
|
294
|
+
const hasReferenceTerm = lowerNames.some(n => ['last', 'old', 'prior', 'twap', 'avg', 'average', 'reference', 'median', 'trusted', 'expected', 'fair', 'nominal'].some(t => n.includes(t)));
|
|
295
|
+
if (hasBoundTerm && hasReferenceTerm)
|
|
296
|
+
return true;
|
|
297
|
+
if (hasBoundTerm && priceSymbolNames.some(p => names.includes(p)))
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
function isTwoSidedReferenceBoundGuard(condition, priceSymbolNames) {
|
|
303
|
+
if (priceSymbolNames.length === 0)
|
|
304
|
+
return false;
|
|
305
|
+
let hasUpperBound = false;
|
|
306
|
+
let hasLowerBound = false;
|
|
307
|
+
for (const comparison of flattenAndConditions(condition)) {
|
|
308
|
+
if (!(0, ast_1.isNode)(comparison, 'BinaryOperation'))
|
|
309
|
+
continue;
|
|
310
|
+
if (!['<', '<=', '>', '>='].includes(comparison.operator))
|
|
311
|
+
continue;
|
|
312
|
+
const left = comparison.left || comparison.leftExpression;
|
|
313
|
+
const right = comparison.right || comparison.rightExpression;
|
|
314
|
+
const leftHasPrice = containsAnyName(left, priceSymbolNames);
|
|
315
|
+
const rightHasPrice = containsAnyName(right, priceSymbolNames);
|
|
316
|
+
if (leftHasPrice === rightHasPrice)
|
|
317
|
+
continue;
|
|
318
|
+
const referenceSide = leftHasPrice ? right : left;
|
|
319
|
+
if (!containsReferenceTerm(referenceSide))
|
|
320
|
+
continue;
|
|
321
|
+
if (!containsArithmetic(referenceSide))
|
|
322
|
+
continue;
|
|
323
|
+
if (leftHasPrice) {
|
|
324
|
+
if (comparison.operator === '<' || comparison.operator === '<=')
|
|
325
|
+
hasUpperBound = true;
|
|
326
|
+
if (comparison.operator === '>' || comparison.operator === '>=')
|
|
327
|
+
hasLowerBound = true;
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
if (comparison.operator === '<' || comparison.operator === '<=')
|
|
331
|
+
hasLowerBound = true;
|
|
332
|
+
if (comparison.operator === '>' || comparison.operator === '>=')
|
|
333
|
+
hasUpperBound = true;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return hasUpperBound && hasLowerBound;
|
|
337
|
+
}
|
|
338
|
+
function flattenAndConditions(node) {
|
|
339
|
+
if ((0, ast_1.isNode)(node, 'BinaryOperation') && node.operator === '&&') {
|
|
340
|
+
return [
|
|
341
|
+
...flattenAndConditions(node.left || node.leftExpression),
|
|
342
|
+
...flattenAndConditions(node.right || node.rightExpression),
|
|
343
|
+
];
|
|
344
|
+
}
|
|
345
|
+
return [node];
|
|
346
|
+
}
|
|
347
|
+
function containsAnyName(node, names) {
|
|
348
|
+
const wanted = new Set(names);
|
|
349
|
+
return walkAny(node, (n) => {
|
|
350
|
+
if ((0, ast_1.isNode)(n, 'Identifier') && wanted.has(n.name || ''))
|
|
351
|
+
return true;
|
|
352
|
+
if ((0, ast_1.isNode)(n, 'MemberAccess') && wanted.has(n.memberName || ''))
|
|
353
|
+
return true;
|
|
354
|
+
return false;
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
function containsReferenceTerm(node) {
|
|
358
|
+
const names = extractAllNames(node).map(n => n.toLowerCase());
|
|
359
|
+
return names.some(n => ['last', 'old', 'prior', 'twap', 'avg', 'average', 'reference', 'median', 'trusted', 'expected', 'fair', 'nominal'].some(t => n.includes(t)));
|
|
360
|
+
}
|
|
361
|
+
function containsArithmetic(node) {
|
|
362
|
+
return walkAny(node, (n) => (0, ast_1.isNode)(n, 'BinaryOperation') && ['+', '-', '*', '/', '%'].includes(n.operator));
|
|
363
|
+
}
|
|
364
|
+
function isBlockMemberAccess(node, member) {
|
|
365
|
+
if (!node)
|
|
366
|
+
return false;
|
|
367
|
+
return (0, ast_1.isNode)(node, 'MemberAccess') &&
|
|
368
|
+
node.expression?.type === 'Identifier' &&
|
|
369
|
+
node.expression.name === 'block' &&
|
|
370
|
+
node.memberName === member;
|
|
371
|
+
}
|
|
372
|
+
function extractAllNames(node) {
|
|
373
|
+
const names = [];
|
|
374
|
+
walk(node, n => {
|
|
375
|
+
if ((0, ast_1.isNode)(n, 'Identifier') && n.name)
|
|
376
|
+
names.push(n.name);
|
|
377
|
+
if ((0, ast_1.isNode)(n, 'MemberAccess') && n.memberName)
|
|
378
|
+
names.push(n.memberName);
|
|
379
|
+
});
|
|
380
|
+
return names;
|
|
381
|
+
}
|
|
382
|
+
function walk(node, visitor) {
|
|
383
|
+
if (!node || typeof node !== 'object')
|
|
384
|
+
return;
|
|
385
|
+
visitor(node);
|
|
386
|
+
for (const child of childNodes(node))
|
|
387
|
+
walk(child, visitor);
|
|
388
|
+
}
|
|
389
|
+
function walkAny(node, predicate) {
|
|
390
|
+
if (!node || typeof node !== 'object')
|
|
391
|
+
return false;
|
|
392
|
+
if (predicate(node))
|
|
393
|
+
return true;
|
|
394
|
+
for (const child of childNodes(node)) {
|
|
395
|
+
if (walkAny(child, predicate))
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
function childNodes(node) {
|
|
401
|
+
const children = [];
|
|
402
|
+
for (const [key, value] of Object.entries(node)) {
|
|
403
|
+
if (key === 'loc' || key === 'range' || key === 'src')
|
|
404
|
+
continue;
|
|
405
|
+
if (Array.isArray(value)) {
|
|
406
|
+
for (const item of value) {
|
|
407
|
+
if (item && typeof item === 'object')
|
|
408
|
+
children.push(item);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else if (value && typeof value === 'object') {
|
|
412
|
+
children.push(value);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return children;
|
|
416
|
+
}
|
|
417
|
+
function getCalleeName(expr) {
|
|
418
|
+
if (!expr || typeof expr !== 'object')
|
|
419
|
+
return '';
|
|
420
|
+
if ((0, ast_1.isNode)(expr, 'Identifier'))
|
|
421
|
+
return expr.name || '';
|
|
422
|
+
if ((0, ast_1.isNode)(expr, 'MemberAccess'))
|
|
423
|
+
return expr.memberName || '';
|
|
424
|
+
return '';
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Split an identifier into lower-cased camel-case / snake-case tokens.
|
|
428
|
+
*
|
|
429
|
+
* `redeemRate` -> ['redeem', 'rate']
|
|
430
|
+
* `current_redeem_rate` -> ['current', 'redeem', 'rate']
|
|
431
|
+
* `getOraclePrice` -> ['get', 'oracle', 'price']
|
|
432
|
+
* `RATE_LIMIT` -> ['rate', 'limit']
|
|
433
|
+
*/
|
|
434
|
+
function splitCamelTokens(name) {
|
|
435
|
+
if (!name)
|
|
436
|
+
return [];
|
|
437
|
+
const spaced = name
|
|
438
|
+
.replace(/_/g, ' ')
|
|
439
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
440
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2');
|
|
441
|
+
return spaced
|
|
442
|
+
.toLowerCase()
|
|
443
|
+
.split(/\s+/)
|
|
444
|
+
.filter(t => t.length > 0);
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=price-rate.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source-text helpers for detectors that need to look at raw Solidity text.
|
|
3
|
+
*
|
|
4
|
+
* Several detectors fall back to source-text inspection when the AST shape
|
|
5
|
+
* varies between parsers or when a structural predicate would be too
|
|
6
|
+
* expensive. The risk of source-text matching is well-known: regexes that
|
|
7
|
+
* see commented-out code or string literals will match content that would
|
|
8
|
+
* never execute. `stripCommentsAndStrings` neutralizes both. New detectors
|
|
9
|
+
* should prefer AST predicates; this helper exists for the legacy paths.
|
|
10
|
+
*/
|
|
11
|
+
export declare function stripCommentsAndStrings(input: string): string;
|