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,651 @@
|
|
|
1
|
+
# BasedAI Bridge Security Audit Report
|
|
2
|
+
|
|
3
|
+
**Contract**: BasedAI Bridge (Pre-Bridge v2 Staking)
|
|
4
|
+
**Address**: 0x40359B38db010A1d0ff5E7d00CC477D5b393bd72
|
|
5
|
+
**Compiler**: Solidity 0.8.25
|
|
6
|
+
**Audit Date**: March 24, 2026
|
|
7
|
+
**Auditor**: Kiro AI Security Analysis
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Executive Summary
|
|
12
|
+
|
|
13
|
+
**Risk Level**: 🟡 **MEDIUM** (Centralization + Credit System Complexity)
|
|
14
|
+
|
|
15
|
+
This is a **pre-bridge staking contract** for BasedAI mainnet launch. Users stake tokens (PepeCoin, BasedAI, Brain NFTs) to earn credits that will be redeemable on the BasedAI L1 mainnet after launch.
|
|
16
|
+
|
|
17
|
+
**Key Characteristics**:
|
|
18
|
+
1. **TEMPORARY CONTRACT**: Designed for pre-mainnet staking only
|
|
19
|
+
2. **CREDIT SYSTEM**: Tracks rewards off-chain style (not actual tokens)
|
|
20
|
+
3. **CENTRALIZED**: Single owner with significant control
|
|
21
|
+
4. **PAUSABLE**: Emergency stop functionality
|
|
22
|
+
5. **COMPLEX LOGIC**: Credit recovery, Brain NFT staking, multiple token support
|
|
23
|
+
|
|
24
|
+
**Purpose**: Bridge users from Ethereum to BasedAI L1 by incentivizing early staking.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Contract Overview
|
|
29
|
+
|
|
30
|
+
**Architecture**:
|
|
31
|
+
- OpenZeppelin ReentrancyGuard + Pausable
|
|
32
|
+
- Multi-token staking support (ERC20 + ERC721)
|
|
33
|
+
- Credit accumulation system (time-based rewards)
|
|
34
|
+
- One-way bridge (stake now, claim on L1 later)
|
|
35
|
+
|
|
36
|
+
**Key Features**:
|
|
37
|
+
1. **Token Staking**: Stake ERC20 tokens (PepeCoin, BasedAI)
|
|
38
|
+
2. **Brain NFT Staking**: Stake Brain NFTs for bonus credits
|
|
39
|
+
3. **Credit Accumulation**: Earn credits over time based on stake amount and rate
|
|
40
|
+
4. **Mainnet Trigger**: Owner finalizes all scores when mainnet launches
|
|
41
|
+
5. **Withdrawal**: Users can unstake before mainnet launch
|
|
42
|
+
6. **Credit Recovery**: Special 30-day window for credit recovery
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## CRITICAL FINDINGS
|
|
47
|
+
|
|
48
|
+
### 🔴 CRITICAL #1: Owner Can Manipulate Credits
|
|
49
|
+
**Severity**: CRITICAL
|
|
50
|
+
**Function**: `setCreditsForAddress()`
|
|
51
|
+
|
|
52
|
+
```solidity
|
|
53
|
+
function setCreditsForAddress(address _user, uint256 _credits) external onlyOwner {
|
|
54
|
+
credits[_user] = _credits;
|
|
55
|
+
emit CreditsUpdated(_user, _credits);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**The Risk**:
|
|
60
|
+
- Owner can set ANY user's credits to ANY value
|
|
61
|
+
- No limits, no checks, no transparency
|
|
62
|
+
- Can inflate or deflate credits arbitrarily
|
|
63
|
+
- Directly impacts mainnet rewards
|
|
64
|
+
|
|
65
|
+
**Impact**: Owner can manipulate reward distribution unfairly.
|
|
66
|
+
|
|
67
|
+
**Mitigation**:
|
|
68
|
+
- This is likely for emergency corrections or migrations
|
|
69
|
+
- Requires trust in BasedAI team
|
|
70
|
+
- Should be monitored via events
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### 🔴 CRITICAL #2: Mainnet Trigger is Irreversible
|
|
75
|
+
**Severity**: CRITICAL
|
|
76
|
+
**Function**: `triggerMainnetLive()`
|
|
77
|
+
|
|
78
|
+
```solidity
|
|
79
|
+
function triggerMainnetLive() external onlyOwner {
|
|
80
|
+
mainnetLive = true;
|
|
81
|
+
for (uint i = 0; i < stakers.length; i++) {
|
|
82
|
+
finalScores[stakers[i]] = getCredits(stakers[i]) + credits[stakers[i]];
|
|
83
|
+
finalScores[stakers[i]] += lastKnownCredits[stakers[i]];
|
|
84
|
+
emit FinalScoreRecorded(stakers[i], finalScores[stakers[i]]);
|
|
85
|
+
}
|
|
86
|
+
emit MainnetActivated();
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**The Risk**:
|
|
91
|
+
- Once triggered, scores are FROZEN forever
|
|
92
|
+
- No way to undo or correct errors
|
|
93
|
+
- Users can no longer stake or withdraw
|
|
94
|
+
- If triggered prematurely, users lose opportunity
|
|
95
|
+
|
|
96
|
+
**Impact**: Premature trigger locks all users out permanently.
|
|
97
|
+
|
|
98
|
+
**Potential Issue**: Gas limit risk if `stakers.length` is very large.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 🟡 HIGH #3: Brain NFT Staking Creates Phantom Tokens
|
|
103
|
+
**Severity**: HIGH
|
|
104
|
+
**Function**: `stakeBrain()`
|
|
105
|
+
|
|
106
|
+
```solidity
|
|
107
|
+
function stakeBrain(uint256 _tokenId) external whenNotPaused nonReentrant {
|
|
108
|
+
require(brainNFT.ownerOf(_tokenId) == msg.sender, "Not the owner of the Brain");
|
|
109
|
+
require(!mainnetLive, "Mainnet is live!");
|
|
110
|
+
brainNFT.transferFrom(msg.sender, address(this), _tokenId);
|
|
111
|
+
uint256 currentRate = tokenConfigs[address(pepeCoin)].initialRate;
|
|
112
|
+
|
|
113
|
+
uint256[] memory brainIds = new uint256[](1);
|
|
114
|
+
brainIds[0] = _tokenId;
|
|
115
|
+
|
|
116
|
+
_addStake(msg.sender, address(pepeCoin), 100000 * (10 ** 18), brainIds, currentRate);
|
|
117
|
+
emit BrainStaked(msg.sender, _tokenId, block.timestamp, currentRate);
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**The Risk**:
|
|
122
|
+
- Staking a Brain NFT creates a stake of **100,000 PepeCoin** (100k tokens!)
|
|
123
|
+
- But NO actual PepeCoin is transferred
|
|
124
|
+
- This is "phantom" stake for credit calculation only
|
|
125
|
+
- Could confuse users or create accounting issues
|
|
126
|
+
|
|
127
|
+
**Impact**: Phantom stakes could cause confusion in credit calculations.
|
|
128
|
+
|
|
129
|
+
**Analysis**: This appears intentional - Brain NFTs are worth 100k PepeCoin equivalent in credits. But it's unusual.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### 🟡 HIGH #4: Credit Calculation Precision Loss
|
|
134
|
+
**Severity**: HIGH
|
|
135
|
+
**Function**: `calculateCredits()`
|
|
136
|
+
|
|
137
|
+
```solidity
|
|
138
|
+
function calculateCredits(Stake memory stake) private view returns (uint256) {
|
|
139
|
+
uint256 durationInSeconds = block.timestamp - stake.timestamp;
|
|
140
|
+
uint256 accruedCredits = (stake.amount / stake.rate) * durationInSeconds / 86400;
|
|
141
|
+
return accruedCredits;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**The Risk**:
|
|
146
|
+
- Division before multiplication causes precision loss
|
|
147
|
+
- `stake.amount / stake.rate` truncates first
|
|
148
|
+
- Then multiplies by time
|
|
149
|
+
- Users lose fractional credits
|
|
150
|
+
|
|
151
|
+
**Example**:
|
|
152
|
+
- Stake 100 tokens at rate 500
|
|
153
|
+
- 100 / 500 = 0 (truncated!)
|
|
154
|
+
- 0 * time / 86400 = 0 credits
|
|
155
|
+
- User earns NOTHING
|
|
156
|
+
|
|
157
|
+
**Impact**: Small stakes earn zero credits due to rounding.
|
|
158
|
+
|
|
159
|
+
**Fix**: Should be `(stake.amount * durationInSeconds) / (stake.rate * 86400)`
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### 🟡 HIGH #5: Withdraw Function Doesn't Clear Stakes Properly
|
|
164
|
+
**Severity**: HIGH
|
|
165
|
+
**Function**: `withdraw()`
|
|
166
|
+
|
|
167
|
+
```solidity
|
|
168
|
+
function withdraw() external whenNotPaused nonReentrant {
|
|
169
|
+
uint256 totalStaked = 0;
|
|
170
|
+
uint256 stakeCount = stakes[msg.sender].length;
|
|
171
|
+
|
|
172
|
+
// make sure the users credits are calculated.
|
|
173
|
+
if (block.timestamp - startTime <= 30 days) {
|
|
174
|
+
// Store any previous credit balances
|
|
175
|
+
lastKnownCredits[msg.sender] = credits[msg.sender];
|
|
176
|
+
// Update the credit table to the latest
|
|
177
|
+
updateCredits(msg.sender);
|
|
178
|
+
// Combine the old and new updated credits
|
|
179
|
+
lastKnownCredits[msg.sender] += credits[msg.sender];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
for (uint i = stakeCount; i > 0; i--) {
|
|
183
|
+
uint index = i - 1;
|
|
184
|
+
Stake storage stake = stakes[msg.sender][index];
|
|
185
|
+
totalStaked += stake.amount;
|
|
186
|
+
|
|
187
|
+
// If it is a Brain they can only withdraw the Brain
|
|
188
|
+
if (stake.brainIds.length == 0) {
|
|
189
|
+
IERC20(stake.tokenAddress).transfer(msg.sender, stake.amount);
|
|
190
|
+
emit Withdrawn(msg.sender, stake.amount);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Transfer any Brain NFTs back to the user
|
|
194
|
+
for (uint j = 0; j < stake.brainIds.length; j++) {
|
|
195
|
+
brainNFT.transferFrom(address(this), msg.sender, stake.brainIds[j]);
|
|
196
|
+
emit BrainWithdrawn(msg.sender, stake.brainIds[j]);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
stakes[msg.sender][index] = stakes[msg.sender][stakes[msg.sender].length - 1];
|
|
200
|
+
stakes[msg.sender].pop();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
require(totalStaked > 0, "Nothing to remove from BasedAI bridge");
|
|
204
|
+
credits[msg.sender] = 0;
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Issues**:
|
|
209
|
+
1. **Phantom Token Problem**: Brain stakes add 100k to `totalStaked` but no tokens are transferred
|
|
210
|
+
2. **Credit Reset**: Sets `credits[msg.sender] = 0` but keeps `lastKnownCredits`
|
|
211
|
+
3. **Partial Withdrawal**: No way to withdraw specific stakes, must withdraw all
|
|
212
|
+
|
|
213
|
+
**Impact**: Confusing withdrawal behavior, especially with Brain NFTs.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### 🟡 MEDIUM #6: 30-Day Credit Recovery Window
|
|
218
|
+
**Severity**: MEDIUM
|
|
219
|
+
**Functions**: `stake()`, `withdraw()`
|
|
220
|
+
|
|
221
|
+
```solidity
|
|
222
|
+
// In stake():
|
|
223
|
+
if (block.timestamp - startTime <= 30 days) {
|
|
224
|
+
credits[msg.sender] += lastKnownCredits[msg.sender];
|
|
225
|
+
lastKnownCredits[msg.sender] = 0;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// In withdraw():
|
|
229
|
+
if (block.timestamp - startTime <= 30 days) {
|
|
230
|
+
lastKnownCredits[msg.sender] = credits[msg.sender];
|
|
231
|
+
updateCredits(msg.sender);
|
|
232
|
+
lastKnownCredits[msg.sender] += credits[msg.sender];
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**The Risk**:
|
|
237
|
+
- Complex credit recovery logic only works in first 30 days
|
|
238
|
+
- After 30 days, `lastKnownCredits` are lost if you withdraw
|
|
239
|
+
- Users might not understand this mechanic
|
|
240
|
+
- Could lead to unexpected credit loss
|
|
241
|
+
|
|
242
|
+
**Impact**: Users who withdraw after 30 days lose their `lastKnownCredits`.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
### 🟡 MEDIUM #7: Owner Can Recover All Tokens
|
|
247
|
+
**Severity**: MEDIUM
|
|
248
|
+
**Function**: `recoverERC20()`, `recoverERC721()`
|
|
249
|
+
|
|
250
|
+
```solidity
|
|
251
|
+
function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner {
|
|
252
|
+
require(tokenAddress != pepeCoinAddress, "Unable to remove prebriged PepeCoin");
|
|
253
|
+
IERC20(tokenAddress).transfer(owner, tokenAmount);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function recoverERC721(address tokenAddress, uint256 tokenId) external onlyOwner {
|
|
257
|
+
IERC721(tokenAddress).transferFrom(address(this), owner, tokenId);
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**The Risk**:
|
|
262
|
+
- Owner can recover ANY token except PepeCoin
|
|
263
|
+
- Can recover Brain NFTs (!)
|
|
264
|
+
- Can recover other staked tokens (BasedAI, etc.)
|
|
265
|
+
- Only PepeCoin is protected
|
|
266
|
+
|
|
267
|
+
**Impact**: Owner can drain non-PepeCoin stakes.
|
|
268
|
+
|
|
269
|
+
**Mitigation**: Likely for emergency recovery, but requires trust.
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### 🟡 MEDIUM #8: No Transfer of Ownership
|
|
274
|
+
**Severity**: MEDIUM
|
|
275
|
+
**Issue**: Missing functionality
|
|
276
|
+
|
|
277
|
+
**The Risk**:
|
|
278
|
+
- Owner is set in constructor to `msg.sender`
|
|
279
|
+
- No way to transfer ownership
|
|
280
|
+
- If owner key is lost, contract is stuck
|
|
281
|
+
- No multi-sig or timelock
|
|
282
|
+
|
|
283
|
+
**Impact**: Single point of failure for contract management.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
### 🟢 POSITIVE #9: Reentrancy Protection
|
|
288
|
+
**Severity**: INFORMATIONAL
|
|
289
|
+
|
|
290
|
+
```solidity
|
|
291
|
+
contract BasedAIBridge is ReentrancyGuard, Pausable {
|
|
292
|
+
// ...
|
|
293
|
+
function stake(address tokenAddress, uint256 _amount) external whenNotPaused nonReentrant {
|
|
294
|
+
// ...
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function withdraw() external whenNotPaused nonReentrant {
|
|
298
|
+
// ...
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Good**: All critical functions use `nonReentrant` modifier.
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
### 🟢 POSITIVE #10: Pausable Emergency Stop
|
|
308
|
+
**Severity**: INFORMATIONAL
|
|
309
|
+
|
|
310
|
+
```solidity
|
|
311
|
+
function pause() external onlyOwner {
|
|
312
|
+
_pause();
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function unpause() external onlyOwner {
|
|
316
|
+
_unpause();
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**Good**: Owner can pause in emergency, preventing new stakes/withdrawals.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Detailed Function Analysis
|
|
325
|
+
|
|
326
|
+
### Stake Function
|
|
327
|
+
|
|
328
|
+
```solidity
|
|
329
|
+
function stake(address tokenAddress, uint256 _amount) external whenNotPaused nonReentrant {
|
|
330
|
+
require(_amount > 0, "Amount must be greater than zero");
|
|
331
|
+
require(tokenConfigs[tokenAddress].isSupported, "Token is not supported for staking");
|
|
332
|
+
require(!mainnetLive, "Mainnet is live!");
|
|
333
|
+
|
|
334
|
+
IERC20(tokenAddress).transferFrom(msg.sender, address(this), _amount);
|
|
335
|
+
uint256 currentRate = tokenConfigs[tokenAddress].initialRate;
|
|
336
|
+
|
|
337
|
+
uint256[] memory brainIds = new uint256[](0);
|
|
338
|
+
|
|
339
|
+
if (block.timestamp - startTime <= 30 days) {
|
|
340
|
+
credits[msg.sender] += lastKnownCredits[msg.sender];
|
|
341
|
+
lastKnownCredits[msg.sender] = 0;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
_addStake(msg.sender, tokenAddress, _amount, brainIds, currentRate);
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**Good**:
|
|
349
|
+
- Checks amount > 0
|
|
350
|
+
- Checks token is supported
|
|
351
|
+
- Checks mainnet not live
|
|
352
|
+
- Uses `nonReentrant`
|
|
353
|
+
- Transfers tokens first (CEI pattern)
|
|
354
|
+
|
|
355
|
+
**Issues**:
|
|
356
|
+
- Uses `initialRate` instead of `getCurrentRate()` (rate never increases!)
|
|
357
|
+
- Credit recovery logic is complex
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
### Credit Calculation
|
|
362
|
+
|
|
363
|
+
```solidity
|
|
364
|
+
function calculateCredits(Stake memory stake) private view returns (uint256) {
|
|
365
|
+
uint256 durationInSeconds = block.timestamp - stake.timestamp;
|
|
366
|
+
uint256 accruedCredits = (stake.amount / stake.rate) * durationInSeconds / 86400;
|
|
367
|
+
return accruedCredits;
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Formula**: `credits = (amount / rate) * days`
|
|
372
|
+
|
|
373
|
+
**Example** (PepeCoin at rate 500):
|
|
374
|
+
- Stake 10,000 tokens for 10 days
|
|
375
|
+
- Credits = (10,000 / 500) * 10 = 20 * 10 = 200 credits
|
|
376
|
+
|
|
377
|
+
**Issue**: Division before multiplication loses precision for small amounts.
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
### Brain NFT Staking
|
|
382
|
+
|
|
383
|
+
```solidity
|
|
384
|
+
function stakeBrain(uint256 _tokenId) external whenNotPaused nonReentrant {
|
|
385
|
+
require(brainNFT.ownerOf(_tokenId) == msg.sender, "Not the owner of the Brain");
|
|
386
|
+
require(!mainnetLive, "Mainnet is live!");
|
|
387
|
+
brainNFT.transferFrom(msg.sender, address(this), _tokenId);
|
|
388
|
+
uint256 currentRate = tokenConfigs[address(pepeCoin)].initialRate;
|
|
389
|
+
|
|
390
|
+
uint256[] memory brainIds = new uint256[](1);
|
|
391
|
+
brainIds[0] = _tokenId;
|
|
392
|
+
|
|
393
|
+
_addStake(msg.sender, address(pepeCoin), 100000 * (10 ** 18), brainIds, currentRate);
|
|
394
|
+
emit BrainStaked(msg.sender, _tokenId, block.timestamp, currentRate);
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Mechanics**:
|
|
399
|
+
- User stakes Brain NFT
|
|
400
|
+
- Creates phantom stake of 100,000 PepeCoin
|
|
401
|
+
- Earns credits as if they staked 100k tokens
|
|
402
|
+
- On withdraw, gets Brain NFT back (not tokens)
|
|
403
|
+
|
|
404
|
+
**Credits Earned** (at rate 500):
|
|
405
|
+
- Per day: (100,000 * 10^18 / 500) / 86400 = ~2.3 * 10^15 credits per second
|
|
406
|
+
- Per day: ~2 * 10^20 credits
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Exploitability Assessment
|
|
411
|
+
|
|
412
|
+
### Can External Attackers Exploit This?
|
|
413
|
+
|
|
414
|
+
**NO** - External attackers cannot exploit this contract because:
|
|
415
|
+
- Reentrancy protection on all critical functions
|
|
416
|
+
- Pausable for emergency stop
|
|
417
|
+
- Proper access control (onlyOwner)
|
|
418
|
+
- Token transfers use standard patterns
|
|
419
|
+
- No obvious overflow/underflow issues (Solidity 0.8+)
|
|
420
|
+
|
|
421
|
+
### Can Owner Exploit This?
|
|
422
|
+
|
|
423
|
+
**YES** - Owner has significant control:
|
|
424
|
+
|
|
425
|
+
1. **Manipulate Credits**: `setCreditsForAddress()` can set any user's credits
|
|
426
|
+
2. **Trigger Mainnet Early**: Lock all users out prematurely
|
|
427
|
+
3. **Recover Tokens**: Drain non-PepeCoin tokens and NFTs
|
|
428
|
+
4. **Pause Contract**: Prevent withdrawals indefinitely
|
|
429
|
+
5. **Add Malicious Tokens**: Add tokens with manipulated rates
|
|
430
|
+
|
|
431
|
+
### Can Users Lose Funds?
|
|
432
|
+
|
|
433
|
+
**YES** - Users can lose funds through:
|
|
434
|
+
|
|
435
|
+
1. **Precision Loss**: Small stakes earn zero credits
|
|
436
|
+
2. **Premature Mainnet**: If triggered early, can't withdraw
|
|
437
|
+
3. **Credit Loss**: Withdrawing after 30 days loses `lastKnownCredits`
|
|
438
|
+
4. **Owner Actions**: Owner can manipulate credits or recover tokens
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Risk Summary
|
|
443
|
+
|
|
444
|
+
| Risk Category | Level | Details |
|
|
445
|
+
|--------------|-------|---------|
|
|
446
|
+
| **Rug Pull Risk** | 🟡 MEDIUM | Owner can recover tokens, manipulate credits |
|
|
447
|
+
| **Centralization** | 🔴 HIGH | Single owner with god-mode powers |
|
|
448
|
+
| **Credit System** | 🟡 MEDIUM | Complex logic, precision loss, manipulation risk |
|
|
449
|
+
| **Mainnet Trigger** | 🔴 HIGH | Irreversible, gas limit risk, premature trigger |
|
|
450
|
+
| **Withdrawal** | 🟡 MEDIUM | Complex logic, credit loss after 30 days |
|
|
451
|
+
| **Reentrancy** | 🟢 EXCELLENT | Proper protection |
|
|
452
|
+
| **Pausable** | 🟢 EXCELLENT | Emergency stop capability |
|
|
453
|
+
| **Code Quality** | 🟢 GOOD | Clean, uses OpenZeppelin |
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Comparison to Other Audited Contracts
|
|
458
|
+
|
|
459
|
+
**vs. PepeCoin Staking** (previous audit):
|
|
460
|
+
- ✅ Better: Uses OpenZeppelin (ReentrancyGuard, Pausable)
|
|
461
|
+
- ✅ Better: More sophisticated credit system
|
|
462
|
+
- ❌ Similar: Centralized owner control
|
|
463
|
+
- ❌ Worse: More complex (higher bug risk)
|
|
464
|
+
|
|
465
|
+
**vs. PAAL AI Token** (previous audit):
|
|
466
|
+
- ✅ Much better: No hidden tax backdoors
|
|
467
|
+
- ✅ Better: Transparent staking mechanics
|
|
468
|
+
- ❌ Similar: High centralization
|
|
469
|
+
- ✅ Better: Proper access control
|
|
470
|
+
|
|
471
|
+
**vs. Binance Alpha Wallet** (previous audit):
|
|
472
|
+
- ❌ Worse: Less sophisticated (no multi-sig, no EIP-712)
|
|
473
|
+
- ❌ Worse: Single owner vs. role-based access
|
|
474
|
+
- ✅ Better: Simpler (less attack surface)
|
|
475
|
+
- ❌ Similar: Custodial model (trust required)
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
## Recommendations
|
|
480
|
+
|
|
481
|
+
### For Users:
|
|
482
|
+
|
|
483
|
+
1. **UNDERSTAND CREDITS**: Credits are NOT tokens, they're points for L1 mainnet
|
|
484
|
+
2. **SMALL STAKES LOSE**: Stakes under ~500 tokens earn zero credits (precision loss)
|
|
485
|
+
3. **30-DAY WINDOW**: Withdraw and restake within 30 days to recover credits
|
|
486
|
+
4. **BRAIN NFT VALUE**: Each Brain = 100k PepeCoin equivalent in credits
|
|
487
|
+
5. **MAINNET RISK**: Once mainnet triggers, you can't withdraw
|
|
488
|
+
6. **TRUST REQUIRED**: Owner can manipulate credits and recover tokens
|
|
489
|
+
|
|
490
|
+
### For BasedAI Team:
|
|
491
|
+
|
|
492
|
+
1. **FIX PRECISION LOSS**: Change credit calculation to avoid division first
|
|
493
|
+
```solidity
|
|
494
|
+
// Current (BAD):
|
|
495
|
+
uint256 accruedCredits = (stake.amount / stake.rate) * durationInSeconds / 86400;
|
|
496
|
+
|
|
497
|
+
// Fixed (GOOD):
|
|
498
|
+
uint256 accruedCredits = (stake.amount * durationInSeconds) / (stake.rate * 86400);
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
2. **ADD OWNERSHIP TRANSFER**: Implement `transferOwnership()` function
|
|
502
|
+
|
|
503
|
+
3. **USE MULTI-SIG**: Owner should be a multi-sig wallet (Gnosis Safe)
|
|
504
|
+
|
|
505
|
+
4. **ADD TIMELOCK**: Critical functions should have timelock delay
|
|
506
|
+
|
|
507
|
+
5. **GAS LIMIT PROTECTION**: Batch `triggerMainnetLive()` to avoid gas limit
|
|
508
|
+
|
|
509
|
+
6. **CLARIFY DOCUMENTATION**: Explain credit recovery window clearly
|
|
510
|
+
|
|
511
|
+
7. **REMOVE UNUSED CODE**: `getCurrentRate()` is never used (rates don't increase)
|
|
512
|
+
|
|
513
|
+
8. **ADD PARTIAL WITHDRAWAL**: Allow users to withdraw specific stakes
|
|
514
|
+
|
|
515
|
+
9. **PROTECT BRAIN NFTS**: Don't allow owner to recover staked Brain NFTs
|
|
516
|
+
|
|
517
|
+
10. **ADD EMERGENCY WITHDRAW**: Allow users to emergency withdraw if paused too long
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Code Quality Issues
|
|
522
|
+
|
|
523
|
+
### Issue #1: Unused Function
|
|
524
|
+
|
|
525
|
+
```solidity
|
|
526
|
+
function getCurrentRate(address tokenAddress) public view returns (uint256) {
|
|
527
|
+
TokenConfig storage config = tokenConfigs[tokenAddress];
|
|
528
|
+
uint256 timeElapsed = block.timestamp - startTime;
|
|
529
|
+
uint256 periods = timeElapsed / config.rateIncreaseInterval;
|
|
530
|
+
return config.initialRate + (config.rateIncreaseAmount * periods);
|
|
531
|
+
}
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
**Problem**: This function calculates increasing rates, but `stake()` uses `initialRate` directly. Rates never increase!
|
|
535
|
+
|
|
536
|
+
**Fix**: Either use `getCurrentRate()` in `stake()` or remove the function.
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
### Issue #2: Inconsistent Rate Usage
|
|
541
|
+
|
|
542
|
+
```solidity
|
|
543
|
+
// In stake():
|
|
544
|
+
uint256 currentRate = tokenConfigs[tokenAddress].initialRate;
|
|
545
|
+
|
|
546
|
+
// In stakeBrain():
|
|
547
|
+
uint256 currentRate = tokenConfigs[address(pepeCoin)].initialRate;
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
**Problem**: Always uses `initialRate`, never `getCurrentRate()`. The rate increase mechanism is broken.
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
### Issue #3: Magic Numbers
|
|
555
|
+
|
|
556
|
+
```solidity
|
|
557
|
+
_addStake(msg.sender, address(pepeCoin), 100000 * (10 ** 18), brainIds, currentRate);
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
**Problem**: Hard-coded 100,000 tokens for Brain NFT. Should be a constant.
|
|
561
|
+
|
|
562
|
+
**Fix**:
|
|
563
|
+
```solidity
|
|
564
|
+
uint256 constant BRAIN_NFT_EQUIVALENT = 100000 * (10 ** 18);
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
### Issue #4: Array Iteration in Mainnet Trigger
|
|
570
|
+
|
|
571
|
+
```solidity
|
|
572
|
+
function triggerMainnetLive() external onlyOwner {
|
|
573
|
+
mainnetLive = true;
|
|
574
|
+
for (uint i = 0; i < stakers.length; i++) {
|
|
575
|
+
finalScores[stakers[i]] = getCredits(stakers[i]) + credits[stakers[i]];
|
|
576
|
+
finalScores[stakers[i]] += lastKnownCredits[stakers[i]];
|
|
577
|
+
emit FinalScoreRecorded(stakers[i], finalScores[stakers[i]]);
|
|
578
|
+
}
|
|
579
|
+
emit MainnetActivated();
|
|
580
|
+
}
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
**Problem**: If `stakers.length` is large (thousands), this will hit gas limit and fail.
|
|
584
|
+
|
|
585
|
+
**Fix**: Batch processing or off-chain calculation with Merkle tree.
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## Conclusion
|
|
590
|
+
|
|
591
|
+
**VERDICT**: 🟡 **USE WITH CAUTION - TRUST REQUIRED**
|
|
592
|
+
|
|
593
|
+
This contract is:
|
|
594
|
+
- ✅ Well-structured with OpenZeppelin security patterns
|
|
595
|
+
- ✅ Properly protected against reentrancy
|
|
596
|
+
- ✅ Has emergency pause functionality
|
|
597
|
+
- ⚠️ Highly centralized (single owner control)
|
|
598
|
+
- ⚠️ Credit calculation has precision loss bug
|
|
599
|
+
- ⚠️ Complex credit recovery logic (30-day window)
|
|
600
|
+
- ⚠️ Mainnet trigger is irreversible and risky
|
|
601
|
+
- ⚠️ Owner can manipulate credits and recover tokens
|
|
602
|
+
|
|
603
|
+
**For Users**: This is a **PRE-BRIDGE STAKING CONTRACT** for BasedAI mainnet. You must trust:
|
|
604
|
+
1. BasedAI team won't manipulate credits
|
|
605
|
+
2. Mainnet will actually launch
|
|
606
|
+
3. Credits will be honored on L1
|
|
607
|
+
4. Owner won't recover your staked tokens
|
|
608
|
+
5. Contract won't be paused indefinitely
|
|
609
|
+
|
|
610
|
+
**For Developers**: This is a reasonably well-implemented staking contract with some bugs (precision loss, unused rate increase) and high centralization. The credit system is complex and could be simplified.
|
|
611
|
+
|
|
612
|
+
**Exploitability**: Not exploitable by external attackers, but owner has extensive control. Users must trust the BasedAI team.
|
|
613
|
+
|
|
614
|
+
**Comparison**: More sophisticated than simple staking contracts, but less secure than enterprise-grade contracts (like Chainlink CCIP). Appropriate for a temporary pre-bridge contract if users trust the team.
|
|
615
|
+
|
|
616
|
+
---
|
|
617
|
+
|
|
618
|
+
**Audit Complete** ✓
|
|
619
|
+
|
|
620
|
+
**RECOMMENDATION**: ⚠️ **TRUST REQUIRED - FIX PRECISION LOSS BUG**
|
|
621
|
+
|
|
622
|
+
This contract is safe to use if you trust the BasedAI team, but the precision loss bug should be fixed before mainnet launch. Small stakers will earn zero credits with the current implementation.
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
## Additional Notes
|
|
627
|
+
|
|
628
|
+
**BasedAI Bridge Context**:
|
|
629
|
+
- Temporary contract for pre-mainnet staking
|
|
630
|
+
- Credits are off-chain style rewards (not actual tokens)
|
|
631
|
+
- Designed to incentivize early adoption
|
|
632
|
+
- Will be replaced by actual L1 bridge after mainnet
|
|
633
|
+
|
|
634
|
+
**Trust Assumptions**:
|
|
635
|
+
- BasedAI team operates honestly
|
|
636
|
+
- Mainnet will launch as promised
|
|
637
|
+
- Credits will be honored on L1
|
|
638
|
+
- Owner won't abuse powers
|
|
639
|
+
- Contract won't be paused indefinitely
|
|
640
|
+
|
|
641
|
+
**For Maximum Security**:
|
|
642
|
+
- BasedAI should use multi-sig for owner
|
|
643
|
+
- Implement timelock for critical functions
|
|
644
|
+
- Fix precision loss bug
|
|
645
|
+
- Add batch processing for mainnet trigger
|
|
646
|
+
- Provide clear documentation on credit mechanics
|
|
647
|
+
- Regular transparency reports
|
|
648
|
+
|
|
649
|
+
---
|
|
650
|
+
|
|
651
|
+
**Note**: This audit is based on verified source code from Etherscan. The contract is live and holding user funds ($115k+ at time of audit).
|