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,778 @@
|
|
|
1
|
+
# SYNC Token Security Audit Report
|
|
2
|
+
|
|
3
|
+
**Contract**: SYNC Token
|
|
4
|
+
**Type**: ERC20 Token with Minting, Burning, Owner Control
|
|
5
|
+
**Compiler**: Solidity 0.6.0
|
|
6
|
+
**Deployment Date**: November 12, 2020
|
|
7
|
+
**Audit Date**: March 24, 2026
|
|
8
|
+
**Auditor**: Kiro AI Security Analysis
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Executive Summary
|
|
13
|
+
|
|
14
|
+
**Risk Level**: ๐ด **CRITICAL** (Unlimited Minting by Owner-Controlled Addresses)
|
|
15
|
+
|
|
16
|
+
SYNC is an ERC20 token with a **CRITICAL VULNERABILITY** that allows the owner to grant unlimited minting privileges to any address, enabling infinite token inflation and complete supply manipulation.
|
|
17
|
+
|
|
18
|
+
**Key Characteristics**:
|
|
19
|
+
1. **CRITICAL FLAW**: Owner can grant minting rights to anyone via `setMintAccess()`
|
|
20
|
+
2. **UNLIMITED MINTING**: Addresses with mint access can mint infinite tokens
|
|
21
|
+
3. **OWNER CONTROLLED**: Single owner has complete control
|
|
22
|
+
4. **INITIAL SUPPLY**: 16 million SYNC tokens
|
|
23
|
+
5. **BURNABLE**: Anyone can burn their own tokens
|
|
24
|
+
6. **NO SUPPLY CAP**: No maximum supply limit
|
|
25
|
+
|
|
26
|
+
**Purpose**: Appears to be a token for the "SYNC Powered CryptoDragons" project, but has dangerous centralization.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Contract Overview
|
|
31
|
+
|
|
32
|
+
**Token Details**:
|
|
33
|
+
- **Name**: SYNC
|
|
34
|
+
- **Symbol**: SYNC
|
|
35
|
+
- **Decimals**: 18
|
|
36
|
+
- **Initial Supply**: 16,000,000 SYNC (16 million)
|
|
37
|
+
- **Max Supply**: UNLIMITED (can mint forever)
|
|
38
|
+
- **Owner**: Has complete control over minting privileges
|
|
39
|
+
|
|
40
|
+
**Architecture**:
|
|
41
|
+
- Standard ERC20 implementation
|
|
42
|
+
- Ownable (single owner control)
|
|
43
|
+
- Custom minting system with whitelist
|
|
44
|
+
- Burn functionality
|
|
45
|
+
- ApproveAndCall pattern
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## CRITICAL VULNERABILITIES
|
|
50
|
+
|
|
51
|
+
### ๐ด CRITICAL #1: Owner Can Grant Unlimited Minting to Anyone
|
|
52
|
+
|
|
53
|
+
**Severity**: CRITICAL
|
|
54
|
+
**Functions**: `setMintAccess()` + `_mint()`
|
|
55
|
+
**Impact**: Complete control over token supply, unlimited inflation
|
|
56
|
+
|
|
57
|
+
**Vulnerable Code**:
|
|
58
|
+
```solidity
|
|
59
|
+
mapping (address => bool) public mintContracts;
|
|
60
|
+
|
|
61
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
62
|
+
mintContracts[account]=canMint; // โ Owner can whitelist ANYONE
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function _mint(address account, uint256 amount) public isMintContract {
|
|
66
|
+
require(account != address(0), "ERC20: mint to the zero address");
|
|
67
|
+
|
|
68
|
+
_totalSupply = _totalSupply.add(amount); // โ NO LIMIT
|
|
69
|
+
balances[account] = balances[account].add(amount);
|
|
70
|
+
emit Transfer(address(0), account, amount);
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**The Problem**:
|
|
75
|
+
1. Owner can call `setMintAccess(attackerAddress, true)` for ANY address
|
|
76
|
+
2. That address can then call `_mint()` with ANY amount
|
|
77
|
+
3. No maximum supply cap
|
|
78
|
+
4. No minting limits per transaction
|
|
79
|
+
5. No cooldown between mints
|
|
80
|
+
6. No timelock or delay
|
|
81
|
+
7. Can mint to any address (including owner's own address)
|
|
82
|
+
|
|
83
|
+
**Attack Scenario #1: Direct Owner Rug Pull**
|
|
84
|
+
```solidity
|
|
85
|
+
// Owner's attack:
|
|
86
|
+
setMintAccess(owner, true); // Grant themselves minting rights
|
|
87
|
+
_mint(owner, 1e30); // Mint 1 trillion trillion tokens
|
|
88
|
+
// Dump on market, crash price, profit
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Attack Scenario #2: Compromised Mint Contract**
|
|
92
|
+
```solidity
|
|
93
|
+
// Owner grants minting to a "staking contract"
|
|
94
|
+
setMintAccess(stakingContract, true);
|
|
95
|
+
|
|
96
|
+
// Later, staking contract is exploited or malicious
|
|
97
|
+
stakingContract._mint(attacker, 1e30); // Attacker mints unlimited tokens
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Attack Scenario #3: Insider Rug Pull**
|
|
101
|
+
```solidity
|
|
102
|
+
// Owner grants minting to team member
|
|
103
|
+
setMintAccess(teamMember, true);
|
|
104
|
+
|
|
105
|
+
// Team member goes rogue
|
|
106
|
+
teamMember._mint(teamMember, 1000000000 * 1e18); // Mint 1 billion tokens
|
|
107
|
+
// Sell all, crash price
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Impact**:
|
|
111
|
+
- **UNLIMITED INFLATION**: Can create infinite tokens
|
|
112
|
+
- **RUG PULL RISK**: Owner or whitelisted addresses can dump unlimited tokens
|
|
113
|
+
- **INVESTOR DECEPTION**: Users think supply is limited to 16M
|
|
114
|
+
- **COMPLETE CENTRALIZATION**: Owner has god-mode powers
|
|
115
|
+
- **SUPPLY MANIPULATION**: Can dilute all holders to zero
|
|
116
|
+
|
|
117
|
+
**Why This is Critical**:
|
|
118
|
+
This is essentially an "owner can mint infinite tokens" vulnerability with an extra step. The owner controls who can mint, and those addresses have unlimited minting power.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### ๐ด CRITICAL #2: Public _mint() Function
|
|
123
|
+
|
|
124
|
+
**Severity**: CRITICAL
|
|
125
|
+
**Function**: `_mint()`
|
|
126
|
+
**Impact**: Naming confusion, potential for mistakes
|
|
127
|
+
|
|
128
|
+
**The Problem**:
|
|
129
|
+
```solidity
|
|
130
|
+
function _mint(address account, uint256 amount) public isMintContract {
|
|
131
|
+
// โ Function is PUBLIC but named with underscore (suggests internal)
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Why This is Bad**:
|
|
136
|
+
1. **NAMING CONVENTION VIOLATION**: Functions starting with `_` are typically internal/private
|
|
137
|
+
2. **CONFUSION**: Developers might think this is internal and not properly protected
|
|
138
|
+
3. **MISLEADING**: The underscore suggests it's a helper function, not a public API
|
|
139
|
+
4. **DANGEROUS**: Public minting function should be clearly named (e.g., `mint()`)
|
|
140
|
+
|
|
141
|
+
**Correct Implementation**:
|
|
142
|
+
```solidity
|
|
143
|
+
// Should be named without underscore since it's public
|
|
144
|
+
function mint(address account, uint256 amount) public isMintContract {
|
|
145
|
+
require(account != address(0), "ERC20: mint to the zero address");
|
|
146
|
+
_totalSupply = _totalSupply.add(amount);
|
|
147
|
+
balances[account] = balances[account].add(amount);
|
|
148
|
+
emit Transfer(address(0), account, amount);
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
### ๐ด CRITICAL #3: No Maximum Supply Cap
|
|
155
|
+
|
|
156
|
+
**Severity**: CRITICAL
|
|
157
|
+
**Impact**: Infinite inflation possible
|
|
158
|
+
|
|
159
|
+
**The Problem**:
|
|
160
|
+
```solidity
|
|
161
|
+
function _mint(address account, uint256 amount) public isMintContract {
|
|
162
|
+
_totalSupply = _totalSupply.add(amount); // โ No check: _totalSupply <= MAX_SUPPLY
|
|
163
|
+
balances[account] = balances[account].add(amount);
|
|
164
|
+
emit Transfer(address(0), account, amount);
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Impact**:
|
|
169
|
+
- Can mint beyond any reasonable supply
|
|
170
|
+
- No protection against accidental over-minting
|
|
171
|
+
- No protection against malicious over-minting
|
|
172
|
+
- Supply can grow to `type(uint256).max`
|
|
173
|
+
|
|
174
|
+
**Example**:
|
|
175
|
+
```solidity
|
|
176
|
+
// Current supply: 16,000,000
|
|
177
|
+
_mint(attacker, type(uint256).max - 16000000e18); // Mint to maximum uint256
|
|
178
|
+
// Now supply is at maximum possible value
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## HIGH SEVERITY ISSUES
|
|
184
|
+
|
|
185
|
+
### ๐ HIGH #1: Extreme Centralization - Single Owner
|
|
186
|
+
|
|
187
|
+
**Severity**: HIGH
|
|
188
|
+
**Impact**: Single point of failure
|
|
189
|
+
|
|
190
|
+
**The Problem**:
|
|
191
|
+
- Single owner controls all minting privileges
|
|
192
|
+
- Owner can grant/revoke minting to anyone
|
|
193
|
+
- Owner can transfer ownership
|
|
194
|
+
- Owner can renounce ownership (but only after damage is done)
|
|
195
|
+
|
|
196
|
+
**Attack Scenarios**:
|
|
197
|
+
1. **Owner Key Compromised**: Attacker gains owner key, grants themselves minting, mints infinite tokens
|
|
198
|
+
2. **Malicious Owner**: Owner intentionally rug pulls
|
|
199
|
+
3. **Owner Coercion**: Owner is forced to grant minting to attacker
|
|
200
|
+
4. **Owner Mistake**: Owner accidentally grants minting to wrong address
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### ๐ HIGH #2: No Minting Limits
|
|
205
|
+
|
|
206
|
+
**Severity**: HIGH
|
|
207
|
+
**Impact**: Can mint unlimited tokens in single transaction
|
|
208
|
+
|
|
209
|
+
**The Problem**:
|
|
210
|
+
```solidity
|
|
211
|
+
function _mint(address account, uint256 amount) public isMintContract {
|
|
212
|
+
// โ No check: amount <= MAX_MINT_PER_TX
|
|
213
|
+
// โ No check: amount <= MAX_MINT_PER_DAY
|
|
214
|
+
// โ No cooldown between mints
|
|
215
|
+
_totalSupply = _totalSupply.add(amount);
|
|
216
|
+
balances[account] = balances[account].add(amount);
|
|
217
|
+
emit Transfer(address(0), account, amount);
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Impact**:
|
|
222
|
+
- Can mint entire supply in one transaction
|
|
223
|
+
- No rate limiting
|
|
224
|
+
- No gradual distribution
|
|
225
|
+
- Instant rug pull possible
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
### ๐ HIGH #3: No Timelock on Minting Privilege Changes
|
|
230
|
+
|
|
231
|
+
**Severity**: HIGH
|
|
232
|
+
**Impact**: Owner can instantly grant minting and rug pull
|
|
233
|
+
|
|
234
|
+
**The Problem**:
|
|
235
|
+
```solidity
|
|
236
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
237
|
+
mintContracts[account]=canMint; // โ Instant effect, no delay
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Attack Scenario**:
|
|
242
|
+
```solidity
|
|
243
|
+
// Block N: Everything looks normal
|
|
244
|
+
// Block N+1: Owner calls setMintAccess(owner, true)
|
|
245
|
+
// Block N+2: Owner calls _mint(owner, 1e30)
|
|
246
|
+
// Block N+3: Owner dumps all tokens
|
|
247
|
+
// Users have no time to react
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Better Implementation**:
|
|
251
|
+
```solidity
|
|
252
|
+
// Require 7-day timelock before minting privilege takes effect
|
|
253
|
+
mapping(address => uint256) public mintAccessGrantTime;
|
|
254
|
+
|
|
255
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
256
|
+
if (canMint) {
|
|
257
|
+
mintAccessGrantTime[account] = block.timestamp + 7 days;
|
|
258
|
+
} else {
|
|
259
|
+
mintAccessGrantTime[account] = 0;
|
|
260
|
+
}
|
|
261
|
+
mintContracts[account] = canMint;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
modifier isMintContract() {
|
|
265
|
+
require(mintContracts[msg.sender], "calling address is not allowed to mint");
|
|
266
|
+
require(block.timestamp >= mintAccessGrantTime[msg.sender], "mint access not active yet");
|
|
267
|
+
_;
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## MEDIUM SEVERITY ISSUES
|
|
274
|
+
|
|
275
|
+
### ๐ก MEDIUM #1: approveAndCall() Reentrancy Risk
|
|
276
|
+
|
|
277
|
+
**Severity**: MEDIUM
|
|
278
|
+
**Impact**: Potential reentrancy if called with malicious contract
|
|
279
|
+
|
|
280
|
+
**Vulnerable Code**:
|
|
281
|
+
```solidity
|
|
282
|
+
function approveAndCall(address spender, uint256 tokens, bytes calldata data) external returns (bool) {
|
|
283
|
+
allowed[msg.sender][spender] = tokens;
|
|
284
|
+
emit Approval(msg.sender, spender, tokens);
|
|
285
|
+
ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data); // โ External call
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**The Problem**:
|
|
291
|
+
1. Sets allowance
|
|
292
|
+
2. Emits event
|
|
293
|
+
3. Makes external call to `spender`
|
|
294
|
+
4. `spender` could be malicious contract
|
|
295
|
+
5. Could reenter and exploit
|
|
296
|
+
|
|
297
|
+
**However**: This is mitigated by the fact that:
|
|
298
|
+
- Allowance is already set before external call
|
|
299
|
+
- No state changes after external call
|
|
300
|
+
- Follows Checks-Effects-Interactions pattern
|
|
301
|
+
|
|
302
|
+
**Still risky** because:
|
|
303
|
+
- External call to untrusted contract
|
|
304
|
+
- Could be used in complex attack chains
|
|
305
|
+
- Better to use ReentrancyGuard
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
### ๐ก MEDIUM #2: No Events for Minting Privilege Changes
|
|
310
|
+
|
|
311
|
+
**Severity**: MEDIUM
|
|
312
|
+
**Impact**: Lack of transparency
|
|
313
|
+
|
|
314
|
+
**The Problem**:
|
|
315
|
+
```solidity
|
|
316
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
317
|
+
mintContracts[account]=canMint; // โ No event emitted
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Impact**:
|
|
322
|
+
- Users cannot easily detect when minting privileges are granted
|
|
323
|
+
- No on-chain audit trail
|
|
324
|
+
- Harder to monitor for malicious behavior
|
|
325
|
+
- Reduces transparency
|
|
326
|
+
|
|
327
|
+
**Fix**:
|
|
328
|
+
```solidity
|
|
329
|
+
event MintAccessChanged(address indexed account, bool canMint);
|
|
330
|
+
|
|
331
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
332
|
+
mintContracts[account] = canMint;
|
|
333
|
+
emit MintAccessChanged(account, canMint);
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
### ๐ก MEDIUM #3: No Maximum Burn Protection
|
|
340
|
+
|
|
341
|
+
**Severity**: LOW-MEDIUM
|
|
342
|
+
**Impact**: Users could accidentally burn all tokens
|
|
343
|
+
|
|
344
|
+
**The Problem**:
|
|
345
|
+
```solidity
|
|
346
|
+
function burn(uint256 amount) external {
|
|
347
|
+
require(amount != 0,"must burn more than zero");
|
|
348
|
+
require(amount <= balances[msg.sender],"insufficient balance");
|
|
349
|
+
_totalSupply = _totalSupply.sub(amount);
|
|
350
|
+
balances[msg.sender] = balances[msg.sender].sub(amount);
|
|
351
|
+
emit Transfer(msg.sender, address(0), amount);
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
**Issue**:
|
|
356
|
+
- No confirmation for large burns
|
|
357
|
+
- User could accidentally burn entire balance
|
|
358
|
+
- No "are you sure?" mechanism
|
|
359
|
+
|
|
360
|
+
**This is minor** because:
|
|
361
|
+
- User explicitly calls burn()
|
|
362
|
+
- It's their own tokens
|
|
363
|
+
- But still, a safety check would be nice
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Code Analysis
|
|
368
|
+
|
|
369
|
+
### Constructor
|
|
370
|
+
|
|
371
|
+
```solidity
|
|
372
|
+
constructor() public Ownable(){
|
|
373
|
+
balances[msg.sender] = _totalSupply;
|
|
374
|
+
emit Transfer(address(0), msg.sender, _totalSupply);
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**Analysis**:
|
|
379
|
+
- โ
Mints initial 16M tokens to deployer
|
|
380
|
+
- โ
Emits Transfer event
|
|
381
|
+
- โ
Sets owner to deployer
|
|
382
|
+
- โ
Simple and correct
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
### setMintAccess() - THE CRITICAL FUNCTION
|
|
387
|
+
|
|
388
|
+
```solidity
|
|
389
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
390
|
+
mintContracts[account]=canMint;
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Analysis**:
|
|
395
|
+
- โ No validation on `account` (could be zero address)
|
|
396
|
+
- โ No event emitted
|
|
397
|
+
- โ No timelock
|
|
398
|
+
- โ No multi-sig requirement
|
|
399
|
+
- โ Can be called repeatedly
|
|
400
|
+
- โ Instant effect
|
|
401
|
+
|
|
402
|
+
**This function is the root of all evil in this contract.**
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
### _mint() - THE DANGEROUS FUNCTION
|
|
407
|
+
|
|
408
|
+
```solidity
|
|
409
|
+
function _mint(address account, uint256 amount) public isMintContract {
|
|
410
|
+
require(account != address(0), "ERC20: mint to the zero address");
|
|
411
|
+
|
|
412
|
+
_totalSupply = _totalSupply.add(amount);
|
|
413
|
+
balances[account] = balances[account].add(amount);
|
|
414
|
+
emit Transfer(address(0), account, amount);
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**Analysis**:
|
|
419
|
+
- โ
Checks zero address
|
|
420
|
+
- โ
Uses SafeMath
|
|
421
|
+
- โ
Emits Transfer event
|
|
422
|
+
- โ No maximum supply check
|
|
423
|
+
- โ No amount limit
|
|
424
|
+
- โ No cooldown
|
|
425
|
+
- โ Public function with underscore name (confusing)
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
### Standard ERC20 Functions
|
|
430
|
+
|
|
431
|
+
```solidity
|
|
432
|
+
function transfer(address to, uint256 value) public override returns (bool)
|
|
433
|
+
function approve(address spender, uint256 value) public override returns (bool)
|
|
434
|
+
function transferFrom(address from, address to, uint256 value) public override returns (bool)
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Analysis**:
|
|
438
|
+
- โ
All standard ERC20 functions implemented correctly
|
|
439
|
+
- โ
Proper checks (zero address, sufficient balance, sufficient allowance)
|
|
440
|
+
- โ
Uses SafeMath
|
|
441
|
+
- โ
Emits events
|
|
442
|
+
- โ
No issues found
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
### burn() Function
|
|
447
|
+
|
|
448
|
+
```solidity
|
|
449
|
+
function burn(uint256 amount) external {
|
|
450
|
+
require(amount != 0,"must burn more than zero");
|
|
451
|
+
require(amount <= balances[msg.sender],"insufficient balance");
|
|
452
|
+
_totalSupply = _totalSupply.sub(amount);
|
|
453
|
+
balances[msg.sender] = balances[msg.sender].sub(amount);
|
|
454
|
+
emit Transfer(msg.sender, address(0), amount);
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
**Analysis**:
|
|
459
|
+
- โ
Anyone can burn their own tokens
|
|
460
|
+
- โ
Reduces total supply
|
|
461
|
+
- โ
Proper checks
|
|
462
|
+
- โ
Emits Transfer event
|
|
463
|
+
- โ
Deflationary mechanism
|
|
464
|
+
- โ
No issues found
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## Risk Assessment
|
|
469
|
+
|
|
470
|
+
### Rug Pull Risk: ๐ด CRITICAL
|
|
471
|
+
- Owner can grant minting to themselves or accomplices
|
|
472
|
+
- Can mint unlimited tokens instantly
|
|
473
|
+
- Can dump on market
|
|
474
|
+
- **This is a rug pull waiting to happen**
|
|
475
|
+
|
|
476
|
+
### Centralization Risk: ๐ด CRITICAL
|
|
477
|
+
- Single owner controls all minting privileges
|
|
478
|
+
- No multi-sig
|
|
479
|
+
- No timelock
|
|
480
|
+
- No governance
|
|
481
|
+
- Complete centralization
|
|
482
|
+
|
|
483
|
+
### Smart Contract Risk: ๐ด CRITICAL
|
|
484
|
+
- Unlimited minting capability
|
|
485
|
+
- No supply cap
|
|
486
|
+
- No minting limits
|
|
487
|
+
- Owner-controlled inflation
|
|
488
|
+
|
|
489
|
+
### Market Risk: ๐ด CRITICAL
|
|
490
|
+
- Supply can be inflated at any time
|
|
491
|
+
- Investors think supply is 16M, but it's unlimited
|
|
492
|
+
- False advertising
|
|
493
|
+
- High dilution risk
|
|
494
|
+
|
|
495
|
+
---
|
|
496
|
+
|
|
497
|
+
## Comparison to Other Tokens
|
|
498
|
+
|
|
499
|
+
### vs. DomiToken (Previous Audit)
|
|
500
|
+
- โ **MUCH WORSE**: DomiToken has no owner, SYNC has god-mode owner
|
|
501
|
+
- โ **MUCH WORSE**: DomiToken has fixed supply, SYNC has unlimited
|
|
502
|
+
- โ **MUCH WORSE**: DomiToken is safe, SYNC is a rug pull risk
|
|
503
|
+
|
|
504
|
+
### vs. Unknown Token Decompiled (Previous Audit)
|
|
505
|
+
- โ **SIMILAR**: Both have unlimited minting controlled by privileged roles
|
|
506
|
+
- โ **SIMILAR**: Both have no supply cap
|
|
507
|
+
- โ **SLIGHTLY BETTER**: SYNC is more transparent (not decompiled)
|
|
508
|
+
- โ **WORSE**: SYNC has single owner, Unknown had role-based system
|
|
509
|
+
|
|
510
|
+
### vs. PAAL AI (Previous Audit)
|
|
511
|
+
- โ **SIMILAR**: Both have owner backdoors
|
|
512
|
+
- โ **WORSE**: SYNC can inflate supply, PAAL "only" had tax manipulation
|
|
513
|
+
- โ **SIMILAR**: Both are high rug pull risk
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## Exploitability Assessment
|
|
518
|
+
|
|
519
|
+
### Can Owner Exploit This?
|
|
520
|
+
|
|
521
|
+
**YES - TRIVIALLY**:
|
|
522
|
+
|
|
523
|
+
```solidity
|
|
524
|
+
// Step 1: Grant yourself minting rights
|
|
525
|
+
setMintAccess(owner, true);
|
|
526
|
+
|
|
527
|
+
// Step 2: Mint unlimited tokens
|
|
528
|
+
_mint(owner, 1000000000 * 1e18); // Mint 1 billion tokens
|
|
529
|
+
|
|
530
|
+
// Step 3: Dump on market
|
|
531
|
+
// Sell tokens, crash price, profit
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
**This requires zero skill and can be done in 2 transactions.**
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
### Can Whitelisted Minter Exploit This?
|
|
539
|
+
|
|
540
|
+
**YES - EASILY**:
|
|
541
|
+
|
|
542
|
+
```solidity
|
|
543
|
+
// If owner grants minting to a contract or address
|
|
544
|
+
// That address can mint unlimited tokens
|
|
545
|
+
|
|
546
|
+
_mint(minter, type(uint256).max / 2); // Mint half of max uint256
|
|
547
|
+
// Dump on market
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
### Can External Attacker Exploit This?
|
|
553
|
+
|
|
554
|
+
**NO - Unless**:
|
|
555
|
+
1. They compromise owner's private key
|
|
556
|
+
2. They compromise a whitelisted minter's private key
|
|
557
|
+
3. They exploit a whitelisted minting contract
|
|
558
|
+
|
|
559
|
+
**But the risk is still CRITICAL because**:
|
|
560
|
+
- Single point of failure (owner key)
|
|
561
|
+
- Whitelisted contracts could be vulnerable
|
|
562
|
+
- Social engineering possible
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
## Recommendations
|
|
567
|
+
|
|
568
|
+
### CRITICAL - Fix Minting System
|
|
569
|
+
|
|
570
|
+
**Option 1: Remove minting entirely** (RECOMMENDED for decentralization)
|
|
571
|
+
```solidity
|
|
572
|
+
// Delete setMintAccess() and _mint() functions
|
|
573
|
+
// Make supply fixed at 16M
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
**Option 2: Add strict limits and controls**
|
|
577
|
+
```solidity
|
|
578
|
+
uint256 public constant MAX_SUPPLY = 100000000 * 1e18; // 100M max
|
|
579
|
+
uint256 public constant MAX_MINT_PER_TX = 100000 * 1e18; // 100K per tx
|
|
580
|
+
uint256 public constant MAX_MINT_PER_DAY = 1000000 * 1e18; // 1M per day
|
|
581
|
+
|
|
582
|
+
mapping(address => uint256) public lastMintTime;
|
|
583
|
+
mapping(address => uint256) public dailyMintAmount;
|
|
584
|
+
mapping(address => uint256) public dailyMintResetTime;
|
|
585
|
+
|
|
586
|
+
function mint(address account, uint256 amount) public isMintContract {
|
|
587
|
+
require(account != address(0), "ERC20: mint to the zero address");
|
|
588
|
+
require(amount <= MAX_MINT_PER_TX, "Exceeds max mint per transaction");
|
|
589
|
+
require(_totalSupply.add(amount) <= MAX_SUPPLY, "Exceeds max supply");
|
|
590
|
+
|
|
591
|
+
// Daily limit check
|
|
592
|
+
if (block.timestamp >= dailyMintResetTime[msg.sender] + 1 days) {
|
|
593
|
+
dailyMintAmount[msg.sender] = 0;
|
|
594
|
+
dailyMintResetTime[msg.sender] = block.timestamp;
|
|
595
|
+
}
|
|
596
|
+
require(dailyMintAmount[msg.sender].add(amount) <= MAX_MINT_PER_DAY, "Exceeds daily limit");
|
|
597
|
+
|
|
598
|
+
// Cooldown check
|
|
599
|
+
require(block.timestamp >= lastMintTime[msg.sender] + 1 hours, "Cooldown not elapsed");
|
|
600
|
+
|
|
601
|
+
_totalSupply = _totalSupply.add(amount);
|
|
602
|
+
balances[account] = balances[account].add(amount);
|
|
603
|
+
dailyMintAmount[msg.sender] = dailyMintAmount[msg.sender].add(amount);
|
|
604
|
+
lastMintTime[msg.sender] = block.timestamp;
|
|
605
|
+
|
|
606
|
+
emit Transfer(address(0), account, amount);
|
|
607
|
+
}
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
**Option 3: Use multi-sig + timelock**
|
|
611
|
+
```solidity
|
|
612
|
+
// Require 3-of-5 multi-sig for setMintAccess
|
|
613
|
+
// Require 7-day timelock before minting privilege activates
|
|
614
|
+
// Require 2-of-3 multi-sig for actual minting
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
### HIGH - Add Transparency
|
|
620
|
+
|
|
621
|
+
1. **Emit Events**:
|
|
622
|
+
```solidity
|
|
623
|
+
event MintAccessChanged(address indexed account, bool canMint);
|
|
624
|
+
event TokensMinted(address indexed minter, address indexed to, uint256 amount);
|
|
625
|
+
|
|
626
|
+
function setMintAccess(address account, bool canMint) public onlyOwner {
|
|
627
|
+
mintContracts[account] = canMint;
|
|
628
|
+
emit MintAccessChanged(account, canMint);
|
|
629
|
+
}
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
2. **Add Timelock**:
|
|
633
|
+
```solidity
|
|
634
|
+
// 7-day delay before minting privilege activates
|
|
635
|
+
// Gives users time to exit if they don't trust the new minter
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
3. **Add Minting History**:
|
|
639
|
+
```solidity
|
|
640
|
+
struct MintRecord {
|
|
641
|
+
address minter;
|
|
642
|
+
address recipient;
|
|
643
|
+
uint256 amount;
|
|
644
|
+
uint256 timestamp;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
MintRecord[] public mintHistory;
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
652
|
+
### MEDIUM - Improve Security
|
|
653
|
+
|
|
654
|
+
1. **Rename _mint() to mint()**:
|
|
655
|
+
```solidity
|
|
656
|
+
// Public functions should not start with underscore
|
|
657
|
+
function mint(address account, uint256 amount) public isMintContract {
|
|
658
|
+
// ...
|
|
659
|
+
}
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
2. **Add ReentrancyGuard to approveAndCall()**:
|
|
663
|
+
```solidity
|
|
664
|
+
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
|
|
665
|
+
|
|
666
|
+
function approveAndCall(address spender, uint256 tokens, bytes calldata data)
|
|
667
|
+
external
|
|
668
|
+
nonReentrant
|
|
669
|
+
returns (bool)
|
|
670
|
+
{
|
|
671
|
+
// ...
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
3. **Add Multi-Sig for Owner**:
|
|
676
|
+
```solidity
|
|
677
|
+
// Use Gnosis Safe or similar multi-sig wallet as owner
|
|
678
|
+
// Require multiple signatures for setMintAccess
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
---
|
|
682
|
+
|
|
683
|
+
## Code Quality Assessment
|
|
684
|
+
|
|
685
|
+
**Rating**: ๐ก **MEDIUM** (Standard code, but dangerous design)
|
|
686
|
+
|
|
687
|
+
**Strengths**:
|
|
688
|
+
- โ
Uses OpenZeppelin patterns (Ownable, SafeMath)
|
|
689
|
+
- โ
Standard ERC20 implementation
|
|
690
|
+
- โ
Clean, readable code
|
|
691
|
+
- โ
Proper error messages
|
|
692
|
+
- โ
Burn functionality
|
|
693
|
+
- โ
ApproveAndCall pattern
|
|
694
|
+
|
|
695
|
+
**Critical Weaknesses**:
|
|
696
|
+
- โ Unlimited minting capability
|
|
697
|
+
- โ Owner-controlled inflation
|
|
698
|
+
- โ No supply cap
|
|
699
|
+
- โ No minting limits
|
|
700
|
+
- โ No timelock
|
|
701
|
+
- โ Extreme centralization
|
|
702
|
+
- โ Misleading function name (_mint is public)
|
|
703
|
+
|
|
704
|
+
---
|
|
705
|
+
|
|
706
|
+
## Conclusion
|
|
707
|
+
|
|
708
|
+
**VERDICT**: ๐ด **DO NOT USE - CRITICAL VULNERABILITIES**
|
|
709
|
+
|
|
710
|
+
SYNC token has a **CRITICAL VULNERABILITY** that allows the owner to grant unlimited minting privileges to any address, enabling infinite token inflation and complete supply manipulation.
|
|
711
|
+
|
|
712
|
+
**Key Issues**:
|
|
713
|
+
1. ๐ด **CRITICAL**: Owner can grant minting to anyone via `setMintAccess()`
|
|
714
|
+
2. ๐ด **CRITICAL**: Whitelisted addresses can mint unlimited tokens
|
|
715
|
+
3. ๐ด **CRITICAL**: No maximum supply cap
|
|
716
|
+
4. ๐ด **HIGH**: No minting limits per transaction or per day
|
|
717
|
+
5. ๐ด **HIGH**: No timelock on minting privilege changes
|
|
718
|
+
6. ๐ด **HIGH**: Extreme centralization (single owner)
|
|
719
|
+
|
|
720
|
+
**For Users**: **DO NOT BUY THIS TOKEN**
|
|
721
|
+
- Owner can inflate supply at any time
|
|
722
|
+
- High rug pull risk
|
|
723
|
+
- Extreme centralization
|
|
724
|
+
- No investor protection
|
|
725
|
+
- Supply is advertised as 16M but is actually unlimited
|
|
726
|
+
|
|
727
|
+
**For Developers**: **DO NOT DEPLOY THIS CONTRACT**
|
|
728
|
+
- Remove unlimited minting capability
|
|
729
|
+
- Or add strict limits + timelock + multi-sig
|
|
730
|
+
- Add maximum supply cap
|
|
731
|
+
- Add transparency features
|
|
732
|
+
- Reduce centralization
|
|
733
|
+
|
|
734
|
+
**Exploitability**: **TRIVIAL**
|
|
735
|
+
- Owner can exploit in 2 transactions
|
|
736
|
+
- No special skills required
|
|
737
|
+
- Can mint unlimited tokens in seconds
|
|
738
|
+
- High probability of exploitation
|
|
739
|
+
|
|
740
|
+
**Comparison**: This is **one of the most dangerous tokens** we've audited, similar to the Unknown Token (decompiled) and PAAL AI in terms of centralization risk and rug pull potential.
|
|
741
|
+
|
|
742
|
+
---
|
|
743
|
+
|
|
744
|
+
**Audit Complete** โ
|
|
745
|
+
|
|
746
|
+
**RECOMMENDATION**: ๐ด **DO NOT USE - CRITICAL VULNERABILITIES**
|
|
747
|
+
|
|
748
|
+
This token should not be used in its current form. The unlimited minting capability controlled by a single owner is a critical vulnerability. If you encounter this token, **DO NOT INVEST**.
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
## Historical Context
|
|
753
|
+
|
|
754
|
+
**Deployment**: November 12, 2020
|
|
755
|
+
- Deployed during the 2020 DeFi boom
|
|
756
|
+
- Part of "SYNC Powered CryptoDragons" project
|
|
757
|
+
- Age: ~5.3 years old (as of March 2026)
|
|
758
|
+
|
|
759
|
+
**Project**: SYNC Network / CryptoDragons
|
|
760
|
+
- Appears to be a gaming/NFT project
|
|
761
|
+
- Minting was likely intended for game rewards
|
|
762
|
+
- But the implementation is dangerously centralized
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
## Final Rating
|
|
767
|
+
|
|
768
|
+
**Security**: ๐ด๐ด๐ด๐ด๐ด 0/5 (Critical vulnerabilities)
|
|
769
|
+
**Code Quality**: ๐ก๐ก๐กโชโช 3/5 (Clean code, bad design)
|
|
770
|
+
**Decentralization**: ๐ด๐ด๐ด๐ด๐ด 0/5 (Complete centralization)
|
|
771
|
+
**Transparency**: ๐ก๐กโชโชโช 2/5 (Some transparency, but missing key events)
|
|
772
|
+
**Best Practices**: ๐ก๐กโชโชโช 2/5 (Uses OpenZeppelin, but dangerous patterns)
|
|
773
|
+
|
|
774
|
+
**Overall**: ๐ด **CRITICAL RISK** - This token has critical vulnerabilities that make it unsafe for investment.
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
**This is a high-risk token with critical centralization and unlimited minting. Avoid at all costs.** ๐ด
|