uups-checker 1.0.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/.gitmodules +6 -0
- package/AIFI_AUDIT.md +220 -0
- package/ALL_AUDITS_SUMMARY.md +366 -0
- package/ALPHA_PROXY_CRITICAL_FINDING.md +136 -0
- package/ALPHA_PROXY_FINAL_ANALYSIS.md +213 -0
- package/ALPHA_PROXY_FINAL_VERDICT.md +233 -0
- package/ALPHA_PROXY_SELFDESTRUCT_EXPLOIT.md +161 -0
- package/ARIA-foundry-test.txt +9 -0
- package/ARIA-mythril-analysis.txt +20 -0
- package/ARIA-slither-analysis.txt +38 -0
- package/ARIA_AI_SECURITY_AUDIT.md +290 -0
- package/ARIA_VERIFIED_AUDIT.md +259 -0
- package/ARIA_VERIFIED_slither.txt +76 -0
- package/ARIVA_source.txt +1 -0
- package/ARK_AUDIT.md +349 -0
- package/BANANA_AUDIT.md +365 -0
- package/BAS_AUDIT.md +451 -0
- package/BAS_TOKEN_AUDIT.md +235 -0
- package/BCE_EXPLOIT_ANALYSIS.md +165 -0
- package/BEEFY_BNB_CHAIN_ANALYSIS.md +488 -0
- package/BEEFY_MONAD_ANALYSIS.md +239 -0
- package/BEEFY_STAKING_ANALYSIS.md +136 -0
- package/BEEFY_XVS_WBNB_ACTUAL_FINDINGS.md +223 -0
- package/BEEFY_XVS_WBNB_CRITICAL_FINDINGS.md +269 -0
- package/BLOCKSEC_ATTACK_KNOWLEDGE_BASE.md +771 -0
- package/BRISE_ANALYSIS.txt +31 -0
- package/BRISE_BSC_DAPPS.txt +68 -0
- package/BRISE_EXPLOITS_FOUND.md +98 -0
- package/BRISE_REAL_EXPLOITS.md +115 -0
- package/BRISE_WHITEHAT_REPORT.md +162 -0
- package/BRISEstake_Analysis.txt +95 -0
- package/BSCSLOCKTOKEN_CRITICAL_FINDING.md +240 -0
- package/BSW_BISWAP_SECURITY_AUDIT.md +330 -0
- package/BTCST_FINAL_VERDICT.md +319 -0
- package/BTCST_MINING_REBASE_ANALYSIS.md +229 -0
- package/BTCST_ROUNDING_DEEP_DIVE.md +293 -0
- package/BTCST_ROUNDING_FINAL_VERDICT.md +9 -0
- package/BTCST_SECURITY_ANALYSIS.md +391 -0
- package/BTR_AUDIT.md +210 -0
- package/BeamBridge-analysis.md +226 -0
- package/BeamToken-analysis.md +201 -0
- package/BitgertSwap_Investigation.txt +107 -0
- package/CEEK_STAKING_ANALYSIS.md +0 -0
- package/CHAINBASE_AUDIT.md +422 -0
- package/COMPLETE_AUDIT_SUMMARY.md +342 -0
- package/CORRECTED_ANALYSIS.txt +115 -0
- package/DBXEN_COMPARISON_SUMMARY.md +232 -0
- package/DBXEN_EXPLOIT_ANALYSIS.md +530 -0
- package/DOPFairLaunch_raw.json +29 -0
- package/DOPFairLaunch_source.txt +0 -0
- package/DOP_BRIDGE_FINAL_ANALYSIS.txt +86 -0
- package/DOP_BUSD_LP_ANALYSIS.txt +44 -0
- package/DOP_FAIRLAUNCH_ANALYSIS.txt +61 -0
- package/DOP_FAIRLAUNCH_FINAL_VERDICT.txt +113 -0
- package/DOP_STAKING_CONTRACT_ANALYSIS.txt +67 -0
- package/DSYNC_ECOSYSTEM_ANALYSIS.md +221 -0
- package/DSyncStaking-exploit-analysis.md +153 -0
- package/DSyncVault-analysis.md +120 -0
- package/DUSD_PROXY_AUDIT.md +407 -0
- package/DXSALE_LOCK_AUDIT.md +0 -0
- package/DXSaleLock_bytecode.txt +1 -0
- package/ECHIDNA_QUICK_START.md +101 -0
- package/ELEPHANT_ECOSYSTEM_AUDIT_PLAN.md +159 -0
- package/ELEPHANT_ECOSYSTEM_COMPREHENSIVE_AUDIT.md +427 -0
- package/ELEPHANT_SECURITY_ANALYSIS.md +209 -0
- package/ELEPHANT_VULNERABILITIES_EXPLAINED.md +455 -0
- package/EXPLOIT_FIX.md +300 -0
- package/EXPLOIT_INSTRUCTIONS.md +273 -0
- package/EXPLOIT_SUMMARY.md +285 -0
- package/EXPLOIT_SUMMARY.txt +175 -0
- package/FALCON_FINANCE_AUDIT.md +258 -0
- package/FANDOM_AUDIT.md +359 -0
- package/FEE_ON_TRANSFER_ANALYSIS.md +228 -0
- package/FINAL_AUDIT_REPORT.md +0 -0
- package/FOLIO_PROXY_AUDIT.md +299 -0
- package/FOT_EXPLOIT_RESULTS.txt +110 -0
- package/FOT_TOKENS_AUDITED.md +103 -0
- package/HEGIC-mythril-analysis.txt +39 -0
- package/HEGIC_COMPLETE_ANALYSIS.md +343 -0
- package/HOTCROSS_SWAP_EXPLOIT_ANALYSIS.md +123 -0
- package/ICECREAMSWAP_EXPLOITS.md +259 -0
- package/IMMUNEFI_REPORT.md +314 -0
- package/KCCPAD_EXPLOIT_GUIDE.md +285 -0
- package/KEL_CEL_EXPLOIT_ANALYSIS.md +0 -0
- package/KOGE_AUDIT.md +328 -0
- package/LENDFLARE_ANALYSIS.md +239 -0
- package/LENDFLARE_ECHIDNA_GUIDE.md +356 -0
- package/LENDFLARE_EXPLOIT_INSTRUCTIONS.md +297 -0
- package/LENDFLARE_EXPLOIT_SUMMARY.md +292 -0
- package/LENDFLARE_FLASHLOAN_GUIDE.md +383 -0
- package/LENDFLARE_FUZZING_RESULTS.md +252 -0
- package/LENDFLARE_HONEYPOT_BYPASS_ANALYSIS.md +420 -0
- package/LENDFLARE_MANUAL_FUZZING.md +324 -0
- package/LENDFLARE_MYTHRIL_ANALYSIS.md +339 -0
- package/LENDFLARE_V3_BYPASS.md +296 -0
- package/LFTDECOMPILE.txt +14478 -0
- package/LFT_ACCOUNTING_ANALYSIS.md +0 -0
- package/LFT_ACCOUNTING_BUG_ANALYSIS.md +426 -0
- package/LFT_BACKDOOR_DEEP_DIVE.md +0 -0
- package/LFT_CRITICAL_EXPLOIT_CONFIRMED.md +428 -0
- package/LFT_EXPLOIT_VISUAL.md +253 -0
- package/LFT_QUICK_SUMMARY.md +124 -0
- package/LFT_REVERSE_EXPLOIT_ANALYSIS.md +521 -0
- package/MGO_AUDIT_REPORT.md +420 -0
- package/MYTHRIL_FINAL_REPORT.md +306 -0
- package/MYTHRIL_SLITHER_SUMMARY.md +244 -0
- package/NETX_MIGRATION_AUDIT.md +0 -0
- package/NPM_PUBLISH_GUIDE.md +0 -0
- package/NRV_CRITICAL_EXPLOIT.txt +143 -0
- package/NetX_Analysis.txt +76 -0
- package/NetX_Migration_bytecode.txt +1 -0
- package/NetX_Migration_source.txt +0 -0
- package/NetX_Token_source.txt +0 -0
- package/NetxWhitehatRescue +22 -0
- package/OILER_ATTACK_VISUAL.md +351 -0
- package/OILER_BLOCKSEC_TEST_RESULTS.md +421 -0
- package/OILER_DEEP_ANALYSIS.md +212 -0
- package/OILER_FINAL_EXPLOIT_REPORT.md +241 -0
- package/OILER_FINAL_VERDICT.md +339 -0
- package/OILER_REENTRANCY_EXPLAINED.md +638 -0
- package/OILER_REENTRANCY_FINAL_SUMMARY.md +391 -0
- package/OILER_REENTRANCY_REALITY_CHECK.md +393 -0
- package/OILER_REENTRANCY_STEP_BY_STEP.md +597 -0
- package/OILER_STAKING_MAINNET_ANALYSIS.md +366 -0
- package/OILER_STAKING_SECURITY_ANALYSIS.md +409 -0
- package/PANCAKESWAP_UNDERFLOW_HUNTING.md +317 -0
- package/POLS_MULTICHAIN_AUDIT.md +0 -0
- package/POSI_STAKING_AUDIT.md +0 -0
- package/PROXY2_SECURITY_ANALYSIS.md +0 -0
- package/Proxy2TACS +29748 -0
- package/QUICK_START.md +240 -0
- package/RAMP_SECURITY_ANALYSIS.md +0 -0
- package/README.md +238 -0
- package/REAUDIT_MASTER_LIST.txt +15 -0
- package/RING_analysis.txt +212 -0
- package/RPC +4 -0
- package/RULES.txt +20 -0
- package/SIREN_AUDIT.md +186 -0
- package/SYNC_EXPLOIT_README.md +0 -0
- package/SYNC_TOKEN_EXPLOIT_REPORT.md +224 -0
- package/TLM_raw.html +0 -0
- package/TLM_raw.txt +0 -0
- package/TLM_response.json +1 -0
- package/TRADOOR_AUDIT.md +253 -0
- package/TRUNK_AUDIT.md +285 -0
- package/UNIBASE_AUDIT.md +241 -0
- package/UNLOCK_ANALYSIS.md +0 -0
- package/UNLOCK_EXPLOIT.md +49 -0
- package/UNLOCK_EXPLOIT_ANALYSIS.md +0 -0
- package/UPS +232 -0
- package/UUPSCHECKER +208 -0
- package/VAULT_PROXY_AUDIT.md +457 -0
- package/VAULT_PROXY_FINAL_VERDICT.md +0 -0
- package/VERIFIED_EXPLOITS_FINAL.txt +146 -0
- package/WKEYDAO2_AUDIT.md +245 -0
- package/WSG_AUDIT.md +0 -0
- package/XFI_DEEP_ANALYSIS.md +327 -0
- package/YOOSHI_EXPLOIT_GUIDE.md +119 -0
- package/YSDAO_EXPLOIT_GUIDE.md +0 -0
- package/agent-4-bundle.md +22490 -0
- package/alpha-proxy-echidna.txt +1 -0
- package/alpha-proxy-fuzz-results.txt +81 -0
- package/alpha-proxy-mythril.txt +2 -0
- package/analyze-btcst-farm.js +54 -0
- package/analyze-dxsale-lock.js +75 -0
- package/analyze-elephant.js +69 -0
- package/analyze-fara-rewards.js +109 -0
- package/analyze-fara-storage.js +83 -0
- package/analyze-lft-transaction.js +158 -0
- package/analyze-lock-bytecode.js +59 -0
- package/analyze-shegic.js +0 -0
- package/analyze-staking-abi.js +0 -0
- package/analyze-sxp.js +57 -0
- package/analyze-tlm.js +76 -0
- package/analyze-trumpet.js +98 -0
- package/analyze-unlimited-nft.js +108 -0
- package/analyze_elephant.sh +27 -0
- package/analyze_vault.sh +32 -0
- package/aria-bytecode.txt +1 -0
- package/aria_response.json +1 -0
- package/ark_temp/README.md +66 -0
- package/ark_temp/lib/forge-std/.gitattributes +1 -0
- package/ark_temp/lib/forge-std/.github/CODEOWNERS +1 -0
- package/ark_temp/lib/forge-std/.github/dependabot.yml +6 -0
- package/ark_temp/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/ark_temp/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/ark_temp/lib/forge-std/CONTRIBUTING.md +193 -0
- package/ark_temp/lib/forge-std/LICENSE-APACHE +203 -0
- package/ark_temp/lib/forge-std/LICENSE-MIT +25 -0
- package/ark_temp/lib/forge-std/README.md +314 -0
- package/ark_temp/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/ark_temp/lib/forge-std/package.json +16 -0
- package/ark_temp/lib/forge-std/scripts/vm.py +636 -0
- package/audits/AiFi-security-audit-20260326.md +499 -0
- package/audits/BasedAI-Brains-security-audit-20260324.md +651 -0
- package/audits/BinanceAlphaWallet-pashov-ai-audit-report-20260324-170000.md +362 -0
- package/audits/DGToken-security-audit-20260324.md +376 -0
- package/audits/DSyncStaking-audit-part1.md +161 -0
- package/audits/DSyncStaking-security-audit-20260324.md +547 -0
- package/audits/DecompiledERC20-security-audit-20260325.md +397 -0
- package/audits/DegenVC-security-audit-20260324.md +585 -0
- package/audits/DelreyInu-security-audit-20260324.md +463 -0
- package/audits/DestraNetwork-security-audit-20260324.md +705 -0
- package/audits/DomiToken-security-audit-20260324.md +514 -0
- package/audits/LendFlareToken-security-audit-20260325.md +197 -0
- package/audits/LockReleaseTokenPool-security-audit-20260324.md +482 -0
- package/audits/MOG-pashov-ai-audit-report-20260324-164900.md +229 -0
- package/audits/PAALAI-security-audit-20260324.md +475 -0
- package/audits/PAR-security-audit-20260325.md +311 -0
- package/audits/PepeCoinStaking-security-audit-20260324.md +358 -0
- package/audits/StakingPool-security-audit-20260324.md +517 -0
- package/audits/SyncToken-security-audit-20260324.md +778 -0
- package/audits/UndeadToken-decompiled-security-audit-20260324.md +485 -0
- package/audits/UnknownToken-decompiled-security-audit-20260324.md +647 -0
- package/audits/XFIStaking-security-audit-20260324.md +682 -0
- package/audits/Xfinance-security-audit-20260324.md +463 -0
- package/audits/basedAIFarm-security-audit-20260324.md +330 -0
- package/audits/pepeCoin-security-audit-20260324.md +462 -0
- package/bin/ups +232 -0
- package/binance-wallet-exploit/.env.example +2 -0
- package/binance-wallet-exploit/EXECUTIVE_SUMMARY.md +272 -0
- package/binance-wallet-exploit/EXPLOIT_SUMMARY.md +104 -0
- package/binance-wallet-exploit/FINAL_ANALYSIS.md +326 -0
- package/binance-wallet-exploit/FLASHLOAN_ATTACK.md +292 -0
- package/binance-wallet-exploit/HONEYPOT_REPORT.md +526 -0
- package/binance-wallet-exploit/INVESTIGATION_COMPLETE.md +362 -0
- package/binance-wallet-exploit/LENDFLARE_EXPLOIT.md +219 -0
- package/binance-wallet-exploit/LENDFLARE_FINAL_ATTACK.md +307 -0
- package/binance-wallet-exploit/LENDFLARE_REAL_EXPLOIT.md +286 -0
- package/binance-wallet-exploit/LENDFLARE_RUGPULL.md +269 -0
- package/binance-wallet-exploit/LFT_ANALYSIS.md +206 -0
- package/binance-wallet-exploit/QUICK_START.md +75 -0
- package/binance-wallet-exploit/README.md +195 -0
- package/binance-wallet-exploit/REAL_TX_EXPLOIT_ANALYSIS.md +271 -0
- package/binance-wallet-exploit/REMIX_INSTRUCTIONS.md +223 -0
- package/binance-wallet-exploit/TEST_RESULTS.md +203 -0
- package/binance-wallet-exploit/cache/solidity-files-cache.json +1 -0
- package/binance-wallet-exploit/cache/test-failures +1 -0
- package/binance-wallet-exploit/lib/forge-std/.gitattributes +1 -0
- package/binance-wallet-exploit/lib/forge-std/.github/CODEOWNERS +1 -0
- package/binance-wallet-exploit/lib/forge-std/.github/dependabot.yml +6 -0
- package/binance-wallet-exploit/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/binance-wallet-exploit/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/binance-wallet-exploit/lib/forge-std/CONTRIBUTING.md +193 -0
- package/binance-wallet-exploit/lib/forge-std/LICENSE-APACHE +203 -0
- package/binance-wallet-exploit/lib/forge-std/LICENSE-MIT +25 -0
- package/binance-wallet-exploit/lib/forge-std/README.md +314 -0
- package/binance-wallet-exploit/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/binance-wallet-exploit/lib/forge-std/package.json +16 -0
- package/binance-wallet-exploit/lib/forge-std/scripts/vm.py +636 -0
- package/binance-wallet-exploit/out/build-info/1e9aa7e86cf56962.json +1 -0
- package/binance-wallet-exploit/out/build-info/6f56f10e9d7b56eb.json +1 -0
- package/binance-wallet-exploit/out/build-info/7edba961ff697a24.json +1 -0
- package/binance-wallet-exploit/out/build-info/8c27fe3efea2f2e7.json +1 -0
- package/binance-wallet-exploit/out/build-info/978b680daffec63a.json +1 -0
- package/binance-wallet-exploit/out/build-info/9806b900b5672d0c.json +1 -0
- package/binance-wallet-exploit/out/build-info/b4b9ff36e9b3fc27.json +1 -0
- package/binance-wallet-exploit/out/build-info/b6f4df9ae05c0812.json +1 -0
- package/binance-wallet-exploit/out/build-info/c88dbc86551f7b5c.json +1 -0
- package/binance-wallet-exploit/out/build-info/e9657504010623db.json +1 -0
- package/cache/fuzz/failures/ARIAVerifiedFuzzTest/testFuzz_ApprovalRaceCondition +1 -0
- package/cache/fuzz/failures/HotCrossSwapFuzzTest/testFuzz_DirectTransferExploit +1 -0
- package/cache/fuzz/failures/HotCrossSwapFuzzTest/testFuzz_LargeSwapDrain +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_ApprovalExploit +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_BalanceManipulation +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_RateManipulation +1 -0
- package/cache/fuzz/failures/LendFlareFuzz/testFuzz_StorageManipulation +1 -0
- package/cache/fuzz/failures/PARFuzzTest/testFuzz_OverflowTransfer +1 -0
- package/cache/fuzz/failures/PARFuzzTest/testFuzz_Transfer +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_FrontrunAddfunds +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_RewardOverflow +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_RoundingExploit +1 -0
- package/cache/fuzz/failures/XFIDeepFuzz/testFuzz_WithdrawLimit +1 -0
- package/cache/solidity-files-cache.json +1 -0
- package/cache/test-failures +1 -0
- package/calculate-elephant-flashloan.js +195 -0
- package/check-address-approval.js +112 -0
- package/check-alpha-proxy.js +42 -0
- package/check-arbitrage.js +155 -0
- package/check-aria-token.js +47 -0
- package/check-ark.sh +20 -0
- package/check-btcst-mining.js +75 -0
- package/check-btcst-pools.js +163 -0
- package/check-btcst.js +88 -0
- package/check-caller.js +26 -0
- package/check-ceek-lp.js +73 -0
- package/check-ceek.js +47 -0
- package/check-dxsale-address.js +35 -0
- package/check-fara-exploit-timing.js +56 -0
- package/check-fara-real-exploit.js +73 -0
- package/check-flashloan-limits.js +129 -0
- package/check-kel-cel-pool.js +91 -0
- package/check-lax-staking.js +41 -0
- package/check-lendflare.js +165 -0
- package/check-lft-accounting.js +109 -0
- package/check-lft-roles.js +165 -0
- package/check-lock-time.js +47 -0
- package/check-min-stake.js +73 -0
- package/check-mystery-contract.js +52 -0
- package/check-next-token.js +50 -0
- package/check-nora-lock.js +67 -0
- package/check-oiler-approvals.js +116 -0
- package/check-oiler-proxy.js +73 -0
- package/check-oiler-staking.js +117 -0
- package/check-proxy-simple.js +71 -0
- package/check-recent-stakes.js +54 -0
- package/check-shegic-holdings.js +67 -0
- package/check-snowcrash-ecosystem.js +83 -0
- package/check-sync-lp.js +97 -0
- package/check-sync-stake.js +42 -0
- package/check-tlm.js +37 -0
- package/check-token-pools.js +146 -0
- package/check-trunk-depeg.js +181 -0
- package/check-tusd-decimals.js +58 -0
- package/check-user-storage-deep.js +81 -0
- package/check-welephant-pools.js +130 -0
- package/check-xfi-pool.js +75 -0
- package/check-zypher.js +32 -0
- package/check_proxy.sh +36 -0
- package/compare-tlm-chains.js +90 -0
- package/contract_0x05f2.html +6025 -0
- package/contract_0x3720.html +6361 -0
- package/contract_0x928e.html +5606 -0
- package/contract_0xc42d.html +5304 -0
- package/contract_page.html +5789 -0
- package/decode-stake-tx.js +50 -0
- package/deep-analyze-lock.js +82 -0
- package/dune_uups_proxy_query.sql +42 -0
- package/dune_uups_vulnerable_query.sql +0 -0
- package/echidna/alpha-proxy.yaml +14 -0
- package/echidna/elephant.yaml +7 -0
- package/echidna/lendflare.yaml +42 -0
- package/echidna.config.yaml +12 -0
- package/elephant_raw.json +1 -0
- package/eps_raw.json +1 -0
- package/exploit/.github/workflows/test.yml +38 -0
- package/exploit/.gitmodules +3 -0
- package/exploit/README.md +66 -0
- package/exploit/foundry.lock +8 -0
- package/exploit/lib/forge-std/.gitattributes +1 -0
- package/exploit/lib/forge-std/.github/CODEOWNERS +1 -0
- package/exploit/lib/forge-std/.github/dependabot.yml +6 -0
- package/exploit/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/exploit/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/exploit/lib/forge-std/CONTRIBUTING.md +193 -0
- package/exploit/lib/forge-std/LICENSE-APACHE +203 -0
- package/exploit/lib/forge-std/LICENSE-MIT +25 -0
- package/exploit/lib/forge-std/README.md +314 -0
- package/exploit/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/exploit/lib/forge-std/package.json +16 -0
- package/exploit/lib/forge-std/scripts/vm.py +636 -0
- package/exploit_analysis.txt +51 -0
- package/extract_contract.py +21 -0
- package/extract_elephant_contracts.py +24 -0
- package/fara-staking-bytecode.txt +1 -0
- package/fara-staking-raw.txt +1 -0
- package/fetch-aria.js +46 -0
- package/fetch-contract.js +50 -0
- package/fetch-shegic-source.js +86 -0
- package/fetch-snowcrash.js +44 -0
- package/fetch-staking-source.js +53 -0
- package/fetch-tlm.js +60 -0
- package/fetch_elephant_source.py +32 -0
- package/find-ceek-staking.js +21 -0
- package/find-exploit-tx.js +88 -0
- package/find-oiler-holders.js +100 -0
- package/find-tlm-holder.js +36 -0
- package/find-vulnerable-fund.js +94 -0
- package/foundry.lock +8 -0
- package/fuzz-all.sh +53 -0
- package/get-aria-contract.py +40 -0
- package/get-lft-holders.js +89 -0
- package/get-tlm-source.sh +8 -0
- package/harvest_txs.json +1 -0
- package/lft-bytecode-raw.txt +1 -0
- package/lft-bytecode.json +1 -0
- package/lft-impl.bin +1 -0
- package/lft-implementation-bytecode.txt +1 -0
- package/lib/forge-std/.gitattributes +1 -0
- package/lib/forge-std/.github/CODEOWNERS +1 -0
- package/lib/forge-std/.github/dependabot.yml +6 -0
- package/lib/forge-std/.github/workflows/ci.yml +125 -0
- package/lib/forge-std/.github/workflows/sync.yml +36 -0
- package/lib/forge-std/CONTRIBUTING.md +193 -0
- package/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/forge-std/README.md +314 -0
- package/lib/forge-std/RELEASE_CHECKLIST.md +12 -0
- package/lib/forge-std/package.json +16 -0
- package/lib/forge-std/scripts/vm.py +636 -0
- package/lib/openzeppelin-contracts/.changeset/config.json +12 -0
- package/lib/openzeppelin-contracts/.codecov.yml +12 -0
- package/lib/openzeppelin-contracts/.editorconfig +21 -0
- package/lib/openzeppelin-contracts/.eslintrc +20 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml +4 -0
- package/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
- package/lib/openzeppelin-contracts/.github/PULL_REQUEST_TEMPLATE.md +20 -0
- package/lib/openzeppelin-contracts/.github/actions/gas-compare/action.yml +49 -0
- package/lib/openzeppelin-contracts/.github/actions/setup/action.yml +21 -0
- package/lib/openzeppelin-contracts/.github/actions/storage-layout/action.yml +55 -0
- package/lib/openzeppelin-contracts/.github/workflows/actionlint.yml +18 -0
- package/lib/openzeppelin-contracts/.github/workflows/changeset.yml +28 -0
- package/lib/openzeppelin-contracts/.github/workflows/checks.yml +118 -0
- package/lib/openzeppelin-contracts/.github/workflows/docs.yml +19 -0
- package/lib/openzeppelin-contracts/.github/workflows/formal-verification.yml +68 -0
- package/lib/openzeppelin-contracts/.github/workflows/release-cycle.yml +214 -0
- package/lib/openzeppelin-contracts/.github/workflows/upgradeable.yml +34 -0
- package/lib/openzeppelin-contracts/.gitmodules +7 -0
- package/lib/openzeppelin-contracts/.mocharc.js +4 -0
- package/lib/openzeppelin-contracts/.prettierrc +15 -0
- package/lib/openzeppelin-contracts/.solcover.js +13 -0
- package/lib/openzeppelin-contracts/CHANGELOG.md +972 -0
- package/lib/openzeppelin-contracts/CODE_OF_CONDUCT.md +73 -0
- package/lib/openzeppelin-contracts/CONTRIBUTING.md +36 -0
- package/lib/openzeppelin-contracts/GUIDELINES.md +148 -0
- package/lib/openzeppelin-contracts/LICENSE +22 -0
- package/lib/openzeppelin-contracts/README.md +107 -0
- package/lib/openzeppelin-contracts/RELEASING.md +45 -0
- package/lib/openzeppelin-contracts/SECURITY.md +42 -0
- package/lib/openzeppelin-contracts/audits/2017-03.md +292 -0
- package/lib/openzeppelin-contracts/audits/2018-10.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-Checkpoints.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2022-10-ERC4626.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-05-v4.9.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/2023-10-v5.0.pdf +0 -0
- package/lib/openzeppelin-contracts/audits/README.md +17 -0
- package/lib/openzeppelin-contracts/certora/Makefile +54 -0
- package/lib/openzeppelin-contracts/certora/README.md +60 -0
- package/lib/openzeppelin-contracts/certora/diff/access_manager_AccessManager.sol.patch +97 -0
- package/lib/openzeppelin-contracts/certora/reports/2021-10.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-03.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/reports/2022-05.pdf +0 -0
- package/lib/openzeppelin-contracts/certora/run.js +160 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControl.spec +119 -0
- package/lib/openzeppelin-contracts/certora/specs/AccessControlDefaultAdminRules.spec +464 -0
- package/lib/openzeppelin-contracts/certora/specs/DoubleEndedQueue.spec +300 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20.spec +352 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20FlashMint.spec +55 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC20Wrapper.spec +198 -0
- package/lib/openzeppelin-contracts/certora/specs/ERC721.spec +679 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableMap.spec +333 -0
- package/lib/openzeppelin-contracts/certora/specs/EnumerableSet.spec +246 -0
- package/lib/openzeppelin-contracts/certora/specs/Initializable.spec +165 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable.spec +77 -0
- package/lib/openzeppelin-contracts/certora/specs/Ownable2Step.spec +108 -0
- package/lib/openzeppelin-contracts/certora/specs/Pausable.spec +96 -0
- package/lib/openzeppelin-contracts/certora/specs/TimelockController.spec +274 -0
- package/lib/openzeppelin-contracts/certora/specs/helpers/helpers.spec +7 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControl.spec +8 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IAccessControlDefaultAdminRules.spec +36 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC20.spec +11 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC2612.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashBorrower.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC3156FlashLender.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC5313.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721.spec +17 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IERC721Receiver.spec +3 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable.spec +5 -0
- package/lib/openzeppelin-contracts/certora/specs/methods/IOwnable2Step.spec +7 -0
- package/lib/openzeppelin-contracts/certora/specs.json +86 -0
- package/lib/openzeppelin-contracts/contracts/access/README.adoc +43 -0
- package/lib/openzeppelin-contracts/contracts/finance/README.adoc +14 -0
- package/lib/openzeppelin-contracts/contracts/governance/README.adoc +167 -0
- package/lib/openzeppelin-contracts/contracts/interfaces/README.adoc +82 -0
- package/lib/openzeppelin-contracts/contracts/metatx/README.adoc +12 -0
- package/lib/openzeppelin-contracts/contracts/package.json +32 -0
- package/lib/openzeppelin-contracts/contracts/proxy/README.adoc +87 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC1155/README.adoc +41 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC20/README.adoc +67 -0
- package/lib/openzeppelin-contracts/contracts/token/ERC721/README.adoc +67 -0
- package/lib/openzeppelin-contracts/contracts/token/common/README.adoc +10 -0
- package/lib/openzeppelin-contracts/contracts/utils/README.adoc +88 -0
- package/lib/openzeppelin-contracts/contracts/vendor/compound/LICENSE +11 -0
- package/lib/openzeppelin-contracts/docs/README.md +16 -0
- package/lib/openzeppelin-contracts/docs/antora.yml +7 -0
- package/lib/openzeppelin-contracts/docs/config.js +21 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3a.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-3b.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack-6.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-attack.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-deposit.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-mint.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-linear.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglog.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/erc4626-rate-loglogext.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png +0 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc +23 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/access-control.adoc +204 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/backwards-compatibility.adoc +48 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crowdsales.adoc +11 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/drafts.adoc +19 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc1155.adoc +145 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20-supply.adoc +71 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc20.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc4626.adoc +214 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/erc721.adoc +79 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/extending-contracts.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/faq.adoc +13 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/governance.adoc +240 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/index.adoc +79 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/tokens.adoc +31 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/upgradeable.adoc +77 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/utilities.adoc +185 -0
- package/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc +15 -0
- package/lib/openzeppelin-contracts/docs/templates/contract.hbs +111 -0
- package/lib/openzeppelin-contracts/docs/templates/helpers.js +46 -0
- package/lib/openzeppelin-contracts/docs/templates/page.hbs +4 -0
- package/lib/openzeppelin-contracts/docs/templates/properties.js +64 -0
- package/lib/openzeppelin-contracts/hardhat/env-artifacts.js +24 -0
- package/lib/openzeppelin-contracts/hardhat/env-contract.js +25 -0
- package/lib/openzeppelin-contracts/hardhat/ignore-unreachable-warnings.js +45 -0
- package/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js +6 -0
- package/lib/openzeppelin-contracts/hardhat/task-test-get-files.js +25 -0
- package/lib/openzeppelin-contracts/hardhat.config.js +131 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/LICENSE +661 -0
- package/lib/openzeppelin-contracts/lib/erc4626-tests/README.md +116 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.github/workflows/ci.yml +92 -0
- package/lib/openzeppelin-contracts/lib/forge-std/.gitmodules +3 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-APACHE +203 -0
- package/lib/openzeppelin-contracts/lib/forge-std/LICENSE-MIT +25 -0
- package/lib/openzeppelin-contracts/lib/forge-std/README.md +250 -0
- package/lib/openzeppelin-contracts/lib/forge-std/package.json +16 -0
- package/lib/openzeppelin-contracts/logo.svg +15 -0
- package/lib/openzeppelin-contracts/netlify.toml +3 -0
- package/lib/openzeppelin-contracts/package-lock.json +16544 -0
- package/lib/openzeppelin-contracts/package.json +96 -0
- package/lib/openzeppelin-contracts/remappings.txt +1 -0
- package/lib/openzeppelin-contracts/renovate.json +4 -0
- package/lib/openzeppelin-contracts/requirements.txt +1 -0
- package/lib/openzeppelin-contracts/scripts/checks/compare-layout.js +20 -0
- package/lib/openzeppelin-contracts/scripts/checks/compareGasReports.js +243 -0
- package/lib/openzeppelin-contracts/scripts/checks/extract-layout.js +38 -0
- package/lib/openzeppelin-contracts/scripts/checks/generation.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/checks/inheritance-ordering.js +54 -0
- package/lib/openzeppelin-contracts/scripts/gen-nav.js +41 -0
- package/lib/openzeppelin-contracts/scripts/generate/format-lines.js +16 -0
- package/lib/openzeppelin-contracts/scripts/generate/run.js +49 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.js +247 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.opts.js +17 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/Checkpoints.t.js +146 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableMap.js +283 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/EnumerableSet.js +250 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/SafeCast.js +126 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/StorageSlot.js +78 -0
- package/lib/openzeppelin-contracts/scripts/generate/templates/conversion.js +30 -0
- package/lib/openzeppelin-contracts/scripts/git-user-config.sh +6 -0
- package/lib/openzeppelin-contracts/scripts/helpers.js +37 -0
- package/lib/openzeppelin-contracts/scripts/prepack.sh +23 -0
- package/lib/openzeppelin-contracts/scripts/prepare-docs.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/format-changelog.js +33 -0
- package/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js +15 -0
- package/lib/openzeppelin-contracts/scripts/release/update-comment.js +34 -0
- package/lib/openzeppelin-contracts/scripts/release/version.sh +11 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/exit-prerelease.sh +8 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/github-release.js +48 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/integrity-check.sh +20 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/pack.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/publish.sh +26 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/rerun.js +7 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/set-changesets-pr-title.js +17 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/start.sh +35 -0
- package/lib/openzeppelin-contracts/scripts/release/workflow/state.js +112 -0
- package/lib/openzeppelin-contracts/scripts/remove-ignored-artifacts.js +45 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/index.js +84 -0
- package/lib/openzeppelin-contracts/scripts/solhint-custom/package.json +5 -0
- package/lib/openzeppelin-contracts/scripts/update-docs-branch.js +65 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/README.md +21 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-apply.sh +19 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/patch-save.sh +18 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile-onto.sh +54 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/transpile.sh +47 -0
- package/lib/openzeppelin-contracts/scripts/upgradeable/upgradeable.patch +360 -0
- package/lib/openzeppelin-contracts/slither.config.json +5 -0
- package/lib/openzeppelin-contracts/solhint.config.js +20 -0
- package/mythril-lft-output.txt +1 -0
- package/mythril-lft-symbolic.txt +18 -0
- package/mythril-lft.sh +20 -0
- package/mythril-symbolic-output.txt +1 -0
- package/mythril-symbolic.sh +42 -0
- package/out/build-info/0026b78428192979.json +1 -0
- package/out/build-info/03c4fc3b88486eba.json +1 -0
- package/out/build-info/0540afa9b9a5c5a6.json +1 -0
- package/out/build-info/081932f505bc08b9.json +1 -0
- package/out/build-info/0da104ba0d6642d5.json +1 -0
- package/out/build-info/197281971dbb5f23.json +1 -0
- package/out/build-info/197e7e332832a232.json +1 -0
- package/out/build-info/1a1cab9136eb5f94.json +1 -0
- package/out/build-info/1b320204eb162aa2.json +1 -0
- package/out/build-info/1e03f94398052674.json +1 -0
- package/out/build-info/22ac085949602937.json +1 -0
- package/out/build-info/234ef37453a9fa64.json +1 -0
- package/out/build-info/2447db7b1878fa8e.json +1 -0
- package/out/build-info/25568daeb484f5ff.json +1 -0
- package/out/build-info/27465853244c49ce.json +1 -0
- package/out/build-info/2c57a9e0f087453b.json +1 -0
- package/out/build-info/3c62ae7de8da68c4.json +1 -0
- package/out/build-info/3e771ae109e97bb3.json +1 -0
- package/out/build-info/460499bc0a3465c4.json +1 -0
- package/out/build-info/47ce37e50a4f115e.json +1 -0
- package/out/build-info/4fcce5c63cf427d6.json +1 -0
- package/out/build-info/4fd0a53fe63fddbb.json +1 -0
- package/out/build-info/50f1247db9d769cc.json +1 -0
- package/out/build-info/5317d0181a7a5e02.json +1 -0
- package/out/build-info/594df509275ceb5b.json +1 -0
- package/out/build-info/61983ac3f6141719.json +1 -0
- package/out/build-info/638c4548307122fe.json +1 -0
- package/out/build-info/67c2c43bdb7c0ded.json +1 -0
- package/out/build-info/777f42643aad37b7.json +1 -0
- package/out/build-info/7d7856f19e845354.json +1 -0
- package/out/build-info/83976260b6f71e94.json +1 -0
- package/out/build-info/83c23882000b963d.json +1 -0
- package/out/build-info/84b2cce8f70b36be.json +1 -0
- package/out/build-info/8bc13d31d7c3206a.json +1 -0
- package/out/build-info/8e183bd4d9d8cf88.json +1 -0
- package/out/build-info/94bfe1e7cafa8ff5.json +1 -0
- package/out/build-info/99ec7d5e8d8ff360.json +1 -0
- package/out/build-info/9ac044b29daa7d5e.json +1 -0
- package/out/build-info/9b203227ff5d2e63.json +1 -0
- package/out/build-info/9d18c5872c4282dd.json +1 -0
- package/out/build-info/9f77f04f33baf9a3.json +1 -0
- package/out/build-info/a6e1caf974787982.json +1 -0
- package/out/build-info/a94b6348867a62d6.json +1 -0
- package/out/build-info/ad93721947a8b195.json +1 -0
- package/out/build-info/b42daddb5aa4b19f.json +1 -0
- package/out/build-info/bf13512ae899f7e8.json +1 -0
- package/out/build-info/c39f86c20a548c4a.json +1 -0
- package/out/build-info/cb12bb975a2f4e65.json +1 -0
- package/out/build-info/d0c6788fadc2aa60.json +1 -0
- package/out/build-info/d2726bf94ed5b845.json +1 -0
- package/out/build-info/d4eb00da50cce5cb.json +1 -0
- package/out/build-info/db931924a3bc8bdd.json +1 -0
- package/out/build-info/e1a503d49bc77401.json +1 -0
- package/out/build-info/efe5396f8892ce77.json +1 -0
- package/out/build-info/f536d90ced745969.json +1 -0
- package/out/build-info/fed38823c7019b82.json +1 -0
- package/package.json +51 -0
- package/page.html +5384 -0
- package/pancakeswap-simple-tvl.sql +15 -0
- package/pancakeswap-top-pools.sql +29 -0
- package/pancakeswap-tvl-optimized.sql +57 -0
- package/pancakeswap-tvl-query.sql +60 -0
- package/pancakeswap-underflow-hunting.sql +51 -0
- package/pancakeswap-vulnerability-queries.sql +200 -0
- package/posi_page.html +6369 -0
- package/posi_response.json +29 -0
- package/proxy_page.html +500 -0
- package/run_mythril_elephant.sh +18 -0
- package/sHEGIC-bytecode.bin +6 -0
- package/sHEGIC-mythril-analysis.txt +1 -0
- package/sHEGIC-mythril-full.txt +134 -0
- package/sHEGIC_ANALYSIS.md +135 -0
- package/sHEGIC_EXPLOIT_ANALYSIS.md +317 -0
- package/sHEGIC_MYTHRIL_ANALYSIS.md +361 -0
- package/scrape-snowcrash.js +28 -0
- package/scripts/yooshi_drain.sh +154 -0
- package/shi_raw.json +1 -0
- package/temp.json +1 -0
- package/temp_harvest.json +1 -0
- package/temp_pika.json +1 -0
- package/temp_posi.json +1 -0
- package/temp_response.json +1 -0
- package/test-lft-hidden-balance.js +108 -0
- package/test-xfi-exploit.js +140 -0
- package/trunk-liquidity-rescue.js +164 -0
- package/vBABY_page.html +6153 -0
- package/vBABY_response.json +29 -0
- package/wsg_response.json +1 -0
- package/yooldo_page.html +10371 -0
|
@@ -0,0 +1,647 @@
|
|
|
1
|
+
# Unknown Token (Decompiled) Security Audit Report
|
|
2
|
+
|
|
3
|
+
**Contract**: Unknown ERC20 Token (Decompiled Bytecode)
|
|
4
|
+
**Type**: ERC20 Token with Minting, Burning, Pausing, Capped Supply, Role-Based Access Control
|
|
5
|
+
**Compiler**: Solidity 0.6.6
|
|
6
|
+
**Decompiled**: March 12, 2026
|
|
7
|
+
**Audit Date**: March 24, 2026
|
|
8
|
+
**Auditor**: Kiro AI Security Analysis
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Executive Summary
|
|
13
|
+
|
|
14
|
+
**Risk Level**: 🔴 **CRITICAL** (Arbitrary Cap Manipulation)
|
|
15
|
+
|
|
16
|
+
This is a decompiled ERC20 token based on OpenZeppelin's ERC20PresetMinterPauser with a capped supply mechanism. However, it contains a **CRITICAL VULNERABILITY** that allows MINTER_ROLE holders to arbitrarily change the supply cap, effectively making the "capped" supply meaningless.
|
|
17
|
+
|
|
18
|
+
**Key Characteristics**:
|
|
19
|
+
1. **CRITICAL FLAW**: `changeCap()` function allows unlimited cap increases
|
|
20
|
+
2. **ROLE-BASED**: Uses OpenZeppelin AccessControl (MINTER_ROLE, PAUSER_ROLE, DEFAULT_ADMIN_ROLE)
|
|
21
|
+
3. **PAUSABLE**: Can pause all transfers
|
|
22
|
+
4. **MINTABLE**: MINTER_ROLE can mint new tokens
|
|
23
|
+
5. **BURNABLE**: Anyone can burn their own tokens
|
|
24
|
+
6. **CAPPED**: Has a supply cap (but it's bypassable via changeCap)
|
|
25
|
+
|
|
26
|
+
**Purpose**: Appears to be a managed token with supply controls, but the controls are broken.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Contract Overview
|
|
31
|
+
|
|
32
|
+
**Token Details**:
|
|
33
|
+
- **Name**: Unknown (stored in `_name`)
|
|
34
|
+
- **Symbol**: Unknown (stored in `_symbol`)
|
|
35
|
+
- **Decimals**: Stored in `_decimals` (likely 18)
|
|
36
|
+
- **Total Supply**: Variable (mintable up to cap)
|
|
37
|
+
- **Cap**: Variable (can be changed by MINTER_ROLE)
|
|
38
|
+
|
|
39
|
+
**Architecture**:
|
|
40
|
+
- Based on OpenZeppelin ERC20PresetMinterPauser
|
|
41
|
+
- Custom `changeCap()` function added
|
|
42
|
+
- Role-based access control
|
|
43
|
+
- Pausable transfers
|
|
44
|
+
- Capped supply (but bypassable)
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## CRITICAL VULNERABILITIES
|
|
49
|
+
|
|
50
|
+
### 🔴 CRITICAL #1: Arbitrary Supply Cap Manipulation
|
|
51
|
+
|
|
52
|
+
**Severity**: CRITICAL
|
|
53
|
+
**Function**: `changeCap(uint256)`
|
|
54
|
+
**Impact**: Complete bypass of supply cap mechanism
|
|
55
|
+
|
|
56
|
+
**Vulnerable Code**:
|
|
57
|
+
```solidity
|
|
58
|
+
function changeCap(uint256 varg0) public payable {
|
|
59
|
+
require(msg.data.length - 4 >= 32);
|
|
60
|
+
require(bool(_getRoleAdmin[keccak256('MINTER_ROLE')].field1[msg.sender]),
|
|
61
|
+
Error('ERC20PresetMinterPauser: must have minter role to mint'));
|
|
62
|
+
_cap = varg0; // ❌ NO VALIDATION - Can set to ANY value
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**The Problem**:
|
|
67
|
+
1. MINTER_ROLE can call `changeCap()` with ANY value
|
|
68
|
+
2. No check that new cap >= current supply
|
|
69
|
+
3. No check that new cap >= old cap
|
|
70
|
+
4. No maximum cap limit
|
|
71
|
+
5. Can set cap to `type(uint256).max` (infinite supply)
|
|
72
|
+
6. Can even set cap BELOW current supply (breaks invariants)
|
|
73
|
+
|
|
74
|
+
**Attack Scenario**:
|
|
75
|
+
```solidity
|
|
76
|
+
// Initial state: cap = 1,000,000 tokens
|
|
77
|
+
// Current supply: 500,000 tokens
|
|
78
|
+
|
|
79
|
+
// Attacker with MINTER_ROLE:
|
|
80
|
+
changeCap(type(uint256).max); // Set cap to maximum uint256
|
|
81
|
+
mint(attacker, 1e30); // Mint 1 trillion trillion tokens
|
|
82
|
+
// Supply cap is now meaningless
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Impact**:
|
|
86
|
+
- **UNLIMITED INFLATION**: Minter can create infinite tokens
|
|
87
|
+
- **RUG PULL RISK**: Minter can mint unlimited tokens and dump
|
|
88
|
+
- **FALSE ADVERTISING**: Token claims to be "capped" but isn't
|
|
89
|
+
- **INVESTOR DECEPTION**: Users think supply is limited
|
|
90
|
+
- **COMPLETE CENTRALIZATION**: Minter has god-mode powers
|
|
91
|
+
|
|
92
|
+
**Why This is Critical**:
|
|
93
|
+
The entire purpose of a "capped" token is to limit supply. This function completely defeats that purpose. It's like having a "fixed supply" token where the owner can change the supply at will.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### 🔴 CRITICAL #2: Cap Can Be Set Below Current Supply
|
|
98
|
+
|
|
99
|
+
**Severity**: HIGH
|
|
100
|
+
**Function**: `changeCap(uint256)`
|
|
101
|
+
**Impact**: Breaks contract invariants, potential DoS
|
|
102
|
+
|
|
103
|
+
**The Problem**:
|
|
104
|
+
```solidity
|
|
105
|
+
function changeCap(uint256 varg0) public payable {
|
|
106
|
+
_cap = varg0; // ❌ No check: varg0 >= _totalSupply
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Attack Scenario**:
|
|
111
|
+
```solidity
|
|
112
|
+
// Current state:
|
|
113
|
+
// _totalSupply = 1,000,000
|
|
114
|
+
// _cap = 2,000,000
|
|
115
|
+
|
|
116
|
+
// Malicious/incompetent MINTER_ROLE:
|
|
117
|
+
changeCap(500000); // Set cap BELOW current supply
|
|
118
|
+
|
|
119
|
+
// Now: _totalSupply (1M) > _cap (500K)
|
|
120
|
+
// This breaks the fundamental invariant: totalSupply <= cap
|
|
121
|
+
|
|
122
|
+
// Result: No more minting possible (DoS)
|
|
123
|
+
mint(user, 1); // ❌ REVERTS: "ERC20Capped: cap exceeded"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Impact**:
|
|
127
|
+
- **DENIAL OF SERVICE**: No more minting possible
|
|
128
|
+
- **BROKEN INVARIANTS**: totalSupply > cap (should never happen)
|
|
129
|
+
- **LOGIC ERRORS**: Contract in invalid state
|
|
130
|
+
- **POTENTIAL EXPLOITS**: Other functions may assume totalSupply <= cap
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## HIGH SEVERITY ISSUES
|
|
135
|
+
|
|
136
|
+
### 🟠 HIGH #1: Extreme Centralization - MINTER_ROLE
|
|
137
|
+
|
|
138
|
+
**Severity**: HIGH
|
|
139
|
+
**Impact**: Complete control over token supply
|
|
140
|
+
|
|
141
|
+
**The Problem**:
|
|
142
|
+
MINTER_ROLE can:
|
|
143
|
+
1. Mint unlimited tokens (via changeCap + mint)
|
|
144
|
+
2. Change the supply cap arbitrarily
|
|
145
|
+
3. Mint to any address
|
|
146
|
+
4. Dilute all holders
|
|
147
|
+
|
|
148
|
+
**This is essentially an "owner can mint infinite tokens" vulnerability.**
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 🟠 HIGH #2: Extreme Centralization - PAUSER_ROLE
|
|
153
|
+
|
|
154
|
+
**Severity**: HIGH
|
|
155
|
+
**Impact**: Can freeze all token transfers
|
|
156
|
+
|
|
157
|
+
**The Problem**:
|
|
158
|
+
```solidity
|
|
159
|
+
function pause() public payable {
|
|
160
|
+
require(bool(_getRoleAdmin[keccak256('PAUSER_ROLE')].field1[msg.sender]),
|
|
161
|
+
Error('ERC20PresetMinterPauser: must have pauser role to pause'));
|
|
162
|
+
require(!_paused, Error('Pausable: paused'));
|
|
163
|
+
_paused = 1;
|
|
164
|
+
emit Paused(msg.sender);
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
PAUSER_ROLE can:
|
|
169
|
+
1. Pause all transfers indefinitely
|
|
170
|
+
2. Lock all tokens (no one can transfer)
|
|
171
|
+
3. Prevent users from selling
|
|
172
|
+
4. Manipulate markets (pause before bad news)
|
|
173
|
+
|
|
174
|
+
**Attack Scenario**:
|
|
175
|
+
```solidity
|
|
176
|
+
// PAUSER_ROLE sees users trying to sell
|
|
177
|
+
pause(); // Freeze all transfers
|
|
178
|
+
// Users cannot sell, price crashes
|
|
179
|
+
unpause(); // Unfreeze after damage done
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### 🟠 HIGH #3: Role Admin Can Grant Themselves Any Role
|
|
185
|
+
|
|
186
|
+
**Severity**: HIGH
|
|
187
|
+
**Impact**: Single point of failure
|
|
188
|
+
|
|
189
|
+
**The Problem**:
|
|
190
|
+
DEFAULT_ADMIN_ROLE can:
|
|
191
|
+
1. Grant themselves MINTER_ROLE
|
|
192
|
+
2. Grant themselves PAUSER_ROLE
|
|
193
|
+
3. Grant any role to any address
|
|
194
|
+
4. Revoke roles from others
|
|
195
|
+
|
|
196
|
+
**This means a single compromised admin key = complete control.**
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## MEDIUM SEVERITY ISSUES
|
|
201
|
+
|
|
202
|
+
### 🟡 MEDIUM #1: No Role Renunciation for Admin
|
|
203
|
+
|
|
204
|
+
**Severity**: MEDIUM
|
|
205
|
+
**Impact**: Cannot fully decentralize
|
|
206
|
+
|
|
207
|
+
**The Problem**:
|
|
208
|
+
- DEFAULT_ADMIN_ROLE cannot be renounced for all roles
|
|
209
|
+
- No way to make the contract fully decentralized
|
|
210
|
+
- Admin always has ultimate control
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
### 🟡 MEDIUM #2: No Events for Cap Changes
|
|
215
|
+
|
|
216
|
+
**Severity**: MEDIUM
|
|
217
|
+
**Impact**: Lack of transparency
|
|
218
|
+
|
|
219
|
+
**The Problem**:
|
|
220
|
+
```solidity
|
|
221
|
+
function changeCap(uint256 varg0) public payable {
|
|
222
|
+
_cap = varg0; // ❌ No event emitted
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Impact**:
|
|
227
|
+
- Users cannot easily detect cap changes
|
|
228
|
+
- No on-chain audit trail
|
|
229
|
+
- Harder to monitor for malicious behavior
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Code Analysis
|
|
234
|
+
|
|
235
|
+
### Contract Structure
|
|
236
|
+
|
|
237
|
+
This appears to be based on OpenZeppelin's ERC20PresetMinterPauser with a custom `changeCap()` function added:
|
|
238
|
+
|
|
239
|
+
```solidity
|
|
240
|
+
// Standard OpenZeppelin components:
|
|
241
|
+
- ERC20 (base token functionality)
|
|
242
|
+
- AccessControl (role-based permissions)
|
|
243
|
+
- ERC20Pausable (pausable transfers)
|
|
244
|
+
- ERC20Capped (supply cap - but broken by changeCap)
|
|
245
|
+
|
|
246
|
+
// Custom addition:
|
|
247
|
+
- changeCap() function (CRITICAL VULNERABILITY)
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### Key Functions Analysis
|
|
253
|
+
|
|
254
|
+
#### 1. mint() - Controlled Minting
|
|
255
|
+
|
|
256
|
+
```solidity
|
|
257
|
+
function mint(address to, uint256 amount) public payable {
|
|
258
|
+
require(bool(_getRoleAdmin[keccak256('MINTER_ROLE')].field1[msg.sender]),
|
|
259
|
+
Error('ERC20PresetMinterPauser: must have minter role to mint'));
|
|
260
|
+
require(to, Error('ERC20: mint to the zero address'));
|
|
261
|
+
0x144c(amount, to, 0); // Checks pause and cap
|
|
262
|
+
v0 = _SafeAdd(amount, _totalSupply);
|
|
263
|
+
_totalSupply = v0;
|
|
264
|
+
v1 = _SafeAdd(amount, _balanceOf[to]);
|
|
265
|
+
_balanceOf[to] = v1;
|
|
266
|
+
emit Transfer(0, to, amount);
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Analysis**:
|
|
271
|
+
- ✅ Requires MINTER_ROLE
|
|
272
|
+
- ✅ Checks zero address
|
|
273
|
+
- ✅ Checks cap (via 0x144c)
|
|
274
|
+
- ✅ Checks pause status
|
|
275
|
+
- ❌ But cap can be changed arbitrarily via changeCap()
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
#### 2. changeCap() - THE CRITICAL VULNERABILITY
|
|
280
|
+
|
|
281
|
+
```solidity
|
|
282
|
+
function changeCap(uint256 varg0) public payable {
|
|
283
|
+
require(msg.data.length - 4 >= 32);
|
|
284
|
+
require(bool(_getRoleAdmin[keccak256('MINTER_ROLE')].field1[msg.sender]),
|
|
285
|
+
Error('ERC20PresetMinterPauser: must have minter role to mint'));
|
|
286
|
+
_cap = varg0; // ❌❌❌ CRITICAL: No validation
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**What's Wrong**:
|
|
291
|
+
1. ❌ No check: `varg0 >= _totalSupply`
|
|
292
|
+
2. ❌ No check: `varg0 >= _cap` (can decrease)
|
|
293
|
+
3. ❌ No maximum cap limit
|
|
294
|
+
4. ❌ No event emitted
|
|
295
|
+
5. ❌ No timelock or delay
|
|
296
|
+
6. ❌ No multi-sig requirement
|
|
297
|
+
7. ❌ Can be called repeatedly
|
|
298
|
+
|
|
299
|
+
**This function should NOT exist, or should have strict validation.**
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
#### 3. pause() / unpause() - Transfer Control
|
|
304
|
+
|
|
305
|
+
```solidity
|
|
306
|
+
function pause() public payable {
|
|
307
|
+
require(bool(_getRoleAdmin[keccak256('PAUSER_ROLE')].field1[msg.sender]),
|
|
308
|
+
Error('ERC20PresetMinterPauser: must have pauser role to pause'));
|
|
309
|
+
require(!_paused, Error('Pausable: paused'));
|
|
310
|
+
_paused = 1;
|
|
311
|
+
emit Paused(msg.sender);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
function unpause() public payable {
|
|
315
|
+
require(bool(_getRoleAdmin[keccak256('PAUSER_ROLE')].field1[msg.sender]),
|
|
316
|
+
Error('ERC20PresetMinterPauser: must have pauser role to unpause'));
|
|
317
|
+
require(_paused, Error('Pausable: not paused'));
|
|
318
|
+
_paused = 0;
|
|
319
|
+
emit Unpaused(msg.sender);
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Analysis**:
|
|
324
|
+
- ✅ Proper role checks
|
|
325
|
+
- ✅ Emits events
|
|
326
|
+
- ✅ State validation
|
|
327
|
+
- ❌ But gives PAUSER_ROLE too much power
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
#### 4. burn() / burnFrom() - Token Burning
|
|
332
|
+
|
|
333
|
+
```solidity
|
|
334
|
+
function burn(uint256 amount) public payable {
|
|
335
|
+
0x1290(amount, msg.sender);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function burnFrom(address account, uint256 amount) public payable {
|
|
339
|
+
v0 = _SafeSub('ERC20: burn amount exceeds allowance', amount, _allowance[account][msg.sender]);
|
|
340
|
+
0xcca(v0, msg.sender, account);
|
|
341
|
+
0x1290(amount, account);
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Analysis**:
|
|
346
|
+
- ✅ Anyone can burn their own tokens
|
|
347
|
+
- ✅ Can burn from others with allowance
|
|
348
|
+
- ✅ Proper checks
|
|
349
|
+
- ✅ Reduces total supply
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
### Internal Function Analysis
|
|
354
|
+
|
|
355
|
+
#### 0x144c() - Before Token Transfer Hook
|
|
356
|
+
|
|
357
|
+
```solidity
|
|
358
|
+
function 0x144c(uint256 varg0, uint256 varg1, address varg2) private {
|
|
359
|
+
require(!_paused, Error('ERC20Pausable: token transfer while paused'));
|
|
360
|
+
if (varg2) {
|
|
361
|
+
return ;
|
|
362
|
+
} else {
|
|
363
|
+
v0 = _SafeAdd(varg0, _totalSupply);
|
|
364
|
+
require(v0 <= _cap, Error('ERC20Capped: cap exceeded'));
|
|
365
|
+
return ;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Analysis**:
|
|
371
|
+
- ✅ Checks pause status
|
|
372
|
+
- ✅ Checks cap on minting (when varg2 == 0)
|
|
373
|
+
- ✅ Proper validation
|
|
374
|
+
- ❌ But cap can be changed via changeCap()
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Risk Assessment
|
|
379
|
+
|
|
380
|
+
### Rug Pull Risk: 🔴 CRITICAL
|
|
381
|
+
- MINTER_ROLE can mint unlimited tokens via changeCap()
|
|
382
|
+
- Can dump infinite tokens on market
|
|
383
|
+
- Can dilute all holders to zero
|
|
384
|
+
- **This is a rug pull waiting to happen**
|
|
385
|
+
|
|
386
|
+
### Centralization Risk: 🔴 CRITICAL
|
|
387
|
+
- DEFAULT_ADMIN_ROLE has complete control
|
|
388
|
+
- MINTER_ROLE can create infinite supply
|
|
389
|
+
- PAUSER_ROLE can freeze all transfers
|
|
390
|
+
- Single compromised key = total loss
|
|
391
|
+
|
|
392
|
+
### Smart Contract Risk: 🔴 CRITICAL
|
|
393
|
+
- changeCap() function is fundamentally broken
|
|
394
|
+
- No validation on cap changes
|
|
395
|
+
- Can set cap below current supply
|
|
396
|
+
- Breaks contract invariants
|
|
397
|
+
|
|
398
|
+
### Market Risk: 🔴 CRITICAL
|
|
399
|
+
- "Capped supply" is false advertising
|
|
400
|
+
- Supply can be inflated at any time
|
|
401
|
+
- Investors are being deceived
|
|
402
|
+
- Regulatory risk (securities fraud?)
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## Comparison to Other Tokens
|
|
407
|
+
|
|
408
|
+
### vs. DomiToken (Previous Audit)
|
|
409
|
+
- ❌ **MUCH WORSE**: DomiToken has no owner, this has god-mode roles
|
|
410
|
+
- ❌ **MUCH WORSE**: DomiToken has fixed supply, this has unlimited
|
|
411
|
+
- ❌ **MUCH WORSE**: DomiToken is safe, this is a rug pull risk
|
|
412
|
+
|
|
413
|
+
### vs. PAAL AI (Previous Audit)
|
|
414
|
+
- ❌ **SIMILAR**: Both have hidden backdoors
|
|
415
|
+
- ❌ **SIMILAR**: Both have centralization risks
|
|
416
|
+
- ❌ **WORSE**: This can inflate supply, PAAL "only" had tax manipulation
|
|
417
|
+
|
|
418
|
+
### vs. XFI Staking (Previous Audit)
|
|
419
|
+
- ❌ **DIFFERENT**: XFI Staking had double-counting bug, this has intentional backdoor
|
|
420
|
+
- ❌ **WORSE**: This affects the token itself, not just staking
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Exploitability Assessment
|
|
425
|
+
|
|
426
|
+
### Can MINTER_ROLE Exploit This?
|
|
427
|
+
|
|
428
|
+
**YES - EASILY**:
|
|
429
|
+
|
|
430
|
+
```solidity
|
|
431
|
+
// Step 1: Increase cap to maximum
|
|
432
|
+
changeCap(type(uint256).max);
|
|
433
|
+
|
|
434
|
+
// Step 2: Mint unlimited tokens
|
|
435
|
+
mint(attacker, 1e30); // 1 trillion trillion tokens
|
|
436
|
+
|
|
437
|
+
// Step 3: Dump on market
|
|
438
|
+
// Sell tokens, crash price, profit
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
**This is trivial to exploit and requires no special skills.**
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
### Can PAUSER_ROLE Exploit This?
|
|
446
|
+
|
|
447
|
+
**YES**:
|
|
448
|
+
|
|
449
|
+
```solidity
|
|
450
|
+
// Market manipulation:
|
|
451
|
+
pause(); // Freeze all transfers
|
|
452
|
+
// Wait for panic, price crashes
|
|
453
|
+
unpause(); // Unfreeze
|
|
454
|
+
// Buy cheap tokens
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
### Can DEFAULT_ADMIN_ROLE Exploit This?
|
|
460
|
+
|
|
461
|
+
**YES - COMPLETE CONTROL**:
|
|
462
|
+
|
|
463
|
+
```solidity
|
|
464
|
+
// Grant themselves all roles
|
|
465
|
+
grantRole(MINTER_ROLE, admin);
|
|
466
|
+
grantRole(PAUSER_ROLE, admin);
|
|
467
|
+
|
|
468
|
+
// Now has all powers
|
|
469
|
+
changeCap(type(uint256).max);
|
|
470
|
+
mint(admin, 1e30);
|
|
471
|
+
pause();
|
|
472
|
+
// Complete control
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
## Recommendations
|
|
478
|
+
|
|
479
|
+
### CRITICAL - Fix changeCap()
|
|
480
|
+
|
|
481
|
+
**Option 1: Remove the function entirely** (RECOMMENDED)
|
|
482
|
+
```solidity
|
|
483
|
+
// Delete changeCap() function
|
|
484
|
+
// Make cap immutable after deployment
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Option 2: Add strict validation**
|
|
488
|
+
```solidity
|
|
489
|
+
function changeCap(uint256 newCap) public {
|
|
490
|
+
require(hasRole(MINTER_ROLE, msg.sender), "Must have minter role");
|
|
491
|
+
require(newCap >= _totalSupply, "Cap cannot be below current supply");
|
|
492
|
+
require(newCap >= _cap, "Cap can only increase");
|
|
493
|
+
require(newCap <= _cap * 2, "Cap cannot more than double");
|
|
494
|
+
require(block.timestamp >= lastCapChange + 30 days, "Must wait 30 days");
|
|
495
|
+
|
|
496
|
+
uint256 oldCap = _cap;
|
|
497
|
+
_cap = newCap;
|
|
498
|
+
lastCapChange = block.timestamp;
|
|
499
|
+
|
|
500
|
+
emit CapChanged(oldCap, newCap, msg.sender);
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
**Option 3: Use timelock + multi-sig**
|
|
505
|
+
```solidity
|
|
506
|
+
// Require 2-of-3 multi-sig + 7 day timelock for cap changes
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
### HIGH - Reduce Centralization
|
|
512
|
+
|
|
513
|
+
1. **Use Multi-Sig for Admin Roles**
|
|
514
|
+
- Require 3-of-5 multi-sig for DEFAULT_ADMIN_ROLE
|
|
515
|
+
- Require 2-of-3 multi-sig for MINTER_ROLE
|
|
516
|
+
|
|
517
|
+
2. **Add Timelocks**
|
|
518
|
+
- 7-day timelock for role grants
|
|
519
|
+
- 3-day timelock for pause
|
|
520
|
+
- 30-day timelock for cap changes
|
|
521
|
+
|
|
522
|
+
3. **Limit Minting**
|
|
523
|
+
- Max mint per transaction
|
|
524
|
+
- Max mint per day
|
|
525
|
+
- Cooldown between mints
|
|
526
|
+
|
|
527
|
+
4. **Add Transparency**
|
|
528
|
+
- Emit events for all role changes
|
|
529
|
+
- Emit events for cap changes
|
|
530
|
+
- Emit events for pause/unpause
|
|
531
|
+
|
|
532
|
+
---
|
|
533
|
+
|
|
534
|
+
### MEDIUM - Add Safety Features
|
|
535
|
+
|
|
536
|
+
1. **Emergency Stop**
|
|
537
|
+
- Separate emergency pause (different from regular pause)
|
|
538
|
+
- Requires multiple signatures
|
|
539
|
+
- Time-limited (auto-unpause after 7 days)
|
|
540
|
+
|
|
541
|
+
2. **Role Renunciation**
|
|
542
|
+
- Allow admin to renounce all roles
|
|
543
|
+
- Make contract fully decentralized
|
|
544
|
+
|
|
545
|
+
3. **Audit Trail**
|
|
546
|
+
- Log all privileged operations
|
|
547
|
+
- Make role changes transparent
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
## Code Quality Assessment
|
|
552
|
+
|
|
553
|
+
**Rating**: 🟡 **MEDIUM** (Standard OpenZeppelin, but with critical custom addition)
|
|
554
|
+
|
|
555
|
+
**Strengths**:
|
|
556
|
+
- ✅ Based on OpenZeppelin (trusted base)
|
|
557
|
+
- ✅ Uses AccessControl (role-based permissions)
|
|
558
|
+
- ✅ Pausable (emergency stop)
|
|
559
|
+
- ✅ Burnable (deflationary option)
|
|
560
|
+
- ✅ Proper SafeMath (Solidity 0.6.6)
|
|
561
|
+
|
|
562
|
+
**Critical Weaknesses**:
|
|
563
|
+
- ❌ changeCap() function is fundamentally broken
|
|
564
|
+
- ❌ No validation on cap changes
|
|
565
|
+
- ❌ Extreme centralization
|
|
566
|
+
- ❌ False advertising (claims to be "capped")
|
|
567
|
+
|
|
568
|
+
---
|
|
569
|
+
|
|
570
|
+
## Conclusion
|
|
571
|
+
|
|
572
|
+
**VERDICT**: 🔴 **DO NOT USE - CRITICAL VULNERABILITIES**
|
|
573
|
+
|
|
574
|
+
This token has a **CRITICAL VULNERABILITY** that allows MINTER_ROLE to arbitrarily change the supply cap, effectively giving them the ability to mint unlimited tokens. This completely defeats the purpose of having a "capped" supply.
|
|
575
|
+
|
|
576
|
+
**Key Issues**:
|
|
577
|
+
1. 🔴 **CRITICAL**: changeCap() allows unlimited supply inflation
|
|
578
|
+
2. 🔴 **CRITICAL**: Cap can be set below current supply (breaks invariants)
|
|
579
|
+
3. 🔴 **HIGH**: Extreme centralization (MINTER_ROLE = god mode)
|
|
580
|
+
4. 🔴 **HIGH**: PAUSER_ROLE can freeze all transfers
|
|
581
|
+
5. 🔴 **HIGH**: Single admin key = complete control
|
|
582
|
+
|
|
583
|
+
**For Users**: **DO NOT BUY THIS TOKEN**
|
|
584
|
+
- The "capped supply" is false advertising
|
|
585
|
+
- MINTER_ROLE can inflate supply at any time
|
|
586
|
+
- High rug pull risk
|
|
587
|
+
- Extreme centralization
|
|
588
|
+
- No investor protection
|
|
589
|
+
|
|
590
|
+
**For Developers**: **DO NOT DEPLOY THIS CONTRACT**
|
|
591
|
+
- Remove changeCap() function entirely
|
|
592
|
+
- Or add strict validation + timelock + multi-sig
|
|
593
|
+
- Reduce centralization
|
|
594
|
+
- Add transparency features
|
|
595
|
+
- Consider making cap immutable
|
|
596
|
+
|
|
597
|
+
**Exploitability**: **TRIVIAL**
|
|
598
|
+
- Any MINTER_ROLE holder can exploit this
|
|
599
|
+
- No special skills required
|
|
600
|
+
- Can mint unlimited tokens in seconds
|
|
601
|
+
- High probability of exploitation
|
|
602
|
+
|
|
603
|
+
**Comparison**: This is **one of the most dangerous tokens** we've audited, similar to PAAL AI in terms of centralization risk, but worse because it affects the core token supply mechanism.
|
|
604
|
+
|
|
605
|
+
---
|
|
606
|
+
|
|
607
|
+
**Audit Complete** ✓
|
|
608
|
+
|
|
609
|
+
**RECOMMENDATION**: 🔴 **DO NOT USE - CRITICAL VULNERABILITIES**
|
|
610
|
+
|
|
611
|
+
This token should not be used in its current form. The changeCap() function is a critical vulnerability that allows unlimited supply inflation. If you encounter this token, **DO NOT INVEST**.
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## Technical Details
|
|
616
|
+
|
|
617
|
+
### Function Signatures
|
|
618
|
+
|
|
619
|
+
Key functions identified:
|
|
620
|
+
- `0x800edb9d` = `changeCap(uint256)` ⚠️ CRITICAL VULNERABILITY
|
|
621
|
+
- `0x40c10f19` = `mint(address,uint256)`
|
|
622
|
+
- `0x8456cb59` = `pause()`
|
|
623
|
+
- `0x3f4ba83a` = `unpause()`
|
|
624
|
+
- `0x42966c68` = `burn(uint256)`
|
|
625
|
+
- `0x79cc6790` = `burnFrom(address,uint256)`
|
|
626
|
+
- `0x355274ea` = `cap()`
|
|
627
|
+
|
|
628
|
+
### Roles
|
|
629
|
+
|
|
630
|
+
- `DEFAULT_ADMIN_ROLE` = `0x00` (bytes32(0))
|
|
631
|
+
- `MINTER_ROLE` = `keccak256("MINTER_ROLE")`
|
|
632
|
+
- `PAUSER_ROLE` = `keccak256("PAUSER_ROLE")`
|
|
633
|
+
|
|
634
|
+
### Storage Layout
|
|
635
|
+
|
|
636
|
+
- STORAGE[0] = Role data (AccessControl)
|
|
637
|
+
- STORAGE[1] = Balances mapping
|
|
638
|
+
- STORAGE[2] = Allowances mapping
|
|
639
|
+
- STORAGE[3] = Total supply
|
|
640
|
+
- STORAGE[4] = Token name
|
|
641
|
+
- STORAGE[5] = Token symbol
|
|
642
|
+
- STORAGE[6] = Decimals (byte 0) + Paused (byte 1)
|
|
643
|
+
- STORAGE[7] = Cap ⚠️ Can be changed arbitrarily
|
|
644
|
+
|
|
645
|
+
---
|
|
646
|
+
|
|
647
|
+
**This is a high-risk token with critical vulnerabilities. Avoid at all costs.** 🔴
|