{
  "reviewedAt": "2026-09-21",
  "reviewType": "Internal source and local verification review; not independent certification",
  "sourceFingerprint": "f4946ac5bddf4a8fe6b7ea6bc4982163d0d8c0274cf9f44955404ac835fbf3a0",
  "note": "The source list defines the snapshot, not exhaustive path coverage. Regenerating this file does not execute tests. Review assertions require revalidation after changes.",
  "checks": [
    {
      "id": "C-00",
      "title": "Pons and USDG fork integration",
      "area": "Contracts",
      "status": "Passed",
      "detail": "The local mainnet-fork test launches through the real Pons integration, creates a USDG market, reaches graduation, resolves the market and checks redemption. The test uses forked chain state and does not send mainnet transactions.",
      "evidence": "PonsForkTest: one integration test passed with RH_FORK enabled. This does not verify a production deployment or the worker/indexer end-to-end."
    },
    {
      "id": "C-01",
      "title": "Collateral and fee accounting",
      "area": "Contracts",
      "status": "Passed",
      "detail": "The tested trading and settlement sequences keep share backing separate from protocol fees, creator fees, LP fees and dispute bonds. Fee withdrawals pay their designated recipients.",
      "evidence": "37 prediction contract tests, including a 2,000-run accounting fuzz test and treasury-only buy/sell fee withdrawal."
    },
    {
      "id": "C-02",
      "title": "Transaction permissions and reentrancy",
      "area": "Contracts",
      "status": "Passed",
      "detail": "Market resolution is restricted to its resolver and disputed outcomes to the active arbitrator. Reentrant trading is rejected in the malicious-receiver test. Factory-created clones are initialized within the creation transaction.",
      "evidence": "Contract source review; unauthorized-resolution, reentrancy and market-creation tests."
    },
    {
      "id": "C-03",
      "title": "Emergency pause and settlement exits",
      "area": "Contracts",
      "status": "Passed",
      "detail": "Paused markets reject new trading and the factory rejects new market funding. Merge, eligible liquidity withdrawals, disputes, finalization and redemption remain available under their normal rules.",
      "evidence": "Pause/exits and paused-factory funding regression tests."
    },
    {
      "id": "C-04",
      "title": "Resolution lifecycle and supported metrics",
      "area": "Contracts",
      "status": "Passed",
      "detail": "Tests cover dispute bonds, arbitration timeout, missing proposals, graduation and price proofs. Repeated identical touch proofs cannot extend a dispute window. The unsupported liquidity-history metric cannot accept new deposits. Signed metric reports reject contradictory threshold answers, future data blocks, missing evidence hashes and YES observations after the measurement window.",
      "evidence": "Prediction contract lifecycle, oracle-proof, unsupported-metric and signed-report consistency tests."
    },
    {
      "id": "C-05",
      "title": "Bounded fees and treasury deployment policy",
      "area": "Contracts",
      "status": "Passed",
      "detail": "Prediction trading fees are capped at 3%. Deployment preflight requires prediction fees to use the launcher's treasury wallet and allocates the entire prediction fee to it. Existing market fee terms are fixed; the factory owner can change the treasury destination and future-market defaults.",
      "evidence": "Fee-cap and treasury payout tests; deployment script source review. The live factory feeConfig() returns 100 / 0 / 0 / 10000 and treasury() returns the launcher fee recipient (D-01)."
    },
    {
      "id": "D-01",
      "title": "Mainnet deployment matches the reviewed configuration",
      "area": "Contracts",
      "status": "Passed",
      "detail": "All seven contracts are deployed on Robinhood Chain (4663) and wired as reviewed: the launcher points at the live Pons V2 factory with an immutable 2.00% creator tax and treasury recipient; the router points at the Uniswap V4 PoolManager; the factory points at the launcher and uses a 1.00% prediction fee paid 100% to the treasury; USDG is the only collateral (25 USDG minimum liquidity, 0.01 USDG minimum trade, 50 USDG dispute bond); all three resolvers are approved with the correct market class and point back at the factory; the metric reporter is an authorised signer. Every deployment transaction succeeded.",
      "evidence": "Onchain reads on 2026-09-21 against the addresses in contracts/deployments/robinhood-4663*.json and the broadcast receipts (L2 blocks 68,511,191 to 68,513,039). Launcher quoteFees(): 300 bps total trade fee, including the 200 bps creator tax."
    },
    {
      "id": "D-02",
      "title": "Chainlink feeds not enabled at deployment",
      "area": "Contracts",
      "status": "Medium",
      "detail": "The deployment enabled no Chainlink feeds on the PriceOracleResolver, so new price markets revert with FeedNotEnabled. Token markets, manual markets, trading and settlement are unaffected and no funds are at risk. Cause: blank PREDICTION_CRYPTO_FEEDS / PREDICTION_EQUITY_FEEDS values in the deployment environment were read as empty lists instead of defaults. The deploy script now treats blank values as unset and refuses to deploy with no feeds. Mitigated on the site: the market form now checks each feed onchain and blocks price markets whose feed is disabled, with an explanation, instead of letting the wallet transaction revert. Open until the factory owner calls setFeed for BTC/USD, ETH/USD and RHNVDA/USD; this needs the owner key and cannot be done in code.",
      "evidence": "PriceOracleResolver.feeds() still returned disabled for all three proxies when rechecked on 2026-09-21; each setFeed call simulates successfully from the owner. The Contracts documentation chapter shows the live status."
    },
    {
      "id": "D-03",
      "title": "Owner and guardian held by one wallet",
      "area": "Operations",
      "status": "High",
      "detail": "One externally owned wallet, which is also the deployer, is the owner of the launcher and the factory (and therefore governs all three resolvers) and is the guardian of both. Compromise of that key allows pausing launches and trading, redirecting treasury revenue including fees already accrued in markets, changing fees and windows for future markets within the contract caps, approving new resolvers, and installing a new arbitrator after the 2-day timelock. Because the guardian is the same key, the guardian cannot act as an independent check by cancelling a hostile arbitrator or guardian change. The arbitrator is also a single externally owned wallet. No role can move the USDG that backs shares. Fix, which needs the owner key and cannot be done in code: create a multisig; call transferOwnership(multisig) on the launcher and the factory and acceptOwnership() from the multisig; call setGuardian(newGuardian) on the launcher and proposeGuardian(newGuardian) on the factory (executable after 3 days); proposeArbitrator(multisigArbitrator) on the factory (executable after 2 days).",
      "evidence": "Rechecked on 2026-09-21: owner() and guardian() on both contracts return the same address, which has no contract code; arbitrator() returns a different address with no contract code; no ownership, guardian or arbitrator change is pending."
    },
    {
      "id": "D-04",
      "title": "Contract source verification on Blockscout",
      "area": "Operations",
      "status": "Pending",
      "detail": "Blockscout verification status could not be confirmed from the review environment, whose requests were blocked by a bot challenge. Users should be able to read verified source for every Predictr contract.",
      "evidence": "Blockscout API requests returned a challenge page. Verification commands are listed in DEPLOYMENT_REPORT.md section J."
    },
    {
      "id": "W-06",
      "title": "Chain-backed documentation degrades safely",
      "area": "Web and API",
      "status": "Passed",
      "detail": "The fees chapter returned a server error in production because its chain client depended on the full server environment and was created outside its error handling. Chain reads now need only the RPC URL, every fee source is read independently, and a failed read shows a fallback instead of an error page.",
      "evidence": "Production /docs/fees returned HTTP 500 before the fix and HTTP 200 after it was deployed; /api/health now reports the RPC as reachable in production."
    },
    {
      "id": "O-02",
      "title": "Production database unavailable",
      "area": "Operations",
      "status": "High",
      "detail": "The production web service cannot use its database, so market listings (the Markets tab), market registration, rate limiting, the worker heartbeat and the admin dashboard fail. The chain connection now works. The health endpoint now reports which step fails as dbFailedAt: config (DATABASE_URL missing), connect (database unreachable, wrong credentials, or TLS required but DATABASE_SSL is not set to require), or schema (connected but migrations not applied; run node packages/db/dist/migrate.js). Fixing it needs access to the Railway project.",
      "evidence": "On 2026-09-21 https://predictr.markets/api/health returned HTTP 503 with db false, rpc true and about 124 ms latency, and /api/markets returned HTTP 500. The deployed JavaScript bundle contains all seven contract addresses."
    },
    {
      "id": "W-01",
      "title": "Wallet transaction safeguards",
      "area": "Web and API",
      "status": "Passed",
      "detail": "Wallet writes use network selection, simulation and receipt confirmation. Token and market trades submit minimum outputs. Market liquidity additions submit a nonzero pool-share minimum and disable submission without a usable quote.",
      "evidence": "Transaction and trade-panel source review; contract slippage regression; TypeScript checks."
    },
    {
      "id": "W-02",
      "title": "Request sizes and pagination",
      "area": "Web and API",
      "status": "Passed",
      "detail": "Upload and metadata bodies have byte and read-time limits, including chunked requests. Shared hourly and daily submission budgets apply before per-IP counters and body parsing; counters saturate instead of overflowing. Public listing APIs reject malformed or out-of-range pagination and token-trade APIs reject invalid date cursors.",
      "evidence": "Request-limit unit tests, local HTTP rejection checks and a Postgres concurrency/rotating-IP/overflow/window-reset regression."
    },
    {
      "id": "W-03",
      "title": "Raster upload validation",
      "area": "Web and API",
      "status": "Passed",
      "detail": "Uploads accept only PNG, JPEG, WebP and GIF. Detected dimensions, animation frame count and total pixels are bounded; SVG and unparseable image headers are rejected. Images are served with nosniff and a restrictive image response policy.",
      "evidence": "Raster-format, truncated-input, JPEG/WebP dimension and valid-image regression tests; upload and image-response source review."
    },
    {
      "id": "W-04",
      "title": "Market text and specification binding",
      "area": "Web and API",
      "status": "Passed",
      "detail": "Template text is generated on the server. Registration requires the complete regenerated spec to match the submitted spec, including manual dispute-window terms. Discovery requires both metadata and spec hashes to match the indexed contract event.",
      "evidence": "Metadata and discovery source review; malformed-spec and mismatched-manual-spec HTTP checks."
    },
    {
      "id": "W-05",
      "title": "Administrative access and response headers",
      "area": "Web and API",
      "status": "Passed",
      "detail": "Administrative pages and actions check credentials, with the dashboard disabled when credentials are absent. Administrative writes require the configured origin. Response policies deny framing and MIME sniffing; production HTTPS termination remains a deployment check.",
      "evidence": "Proxy and handler source review; local unauthorized-admin, cross-origin and security-header checks."
    },
    {
      "id": "K-01",
      "title": "Oracle history boundary handling",
      "area": "Worker",
      "status": "Passed",
      "detail": "The tested scanner includes rounds exactly at the window start and searches across feed phases. Transport errors, exhausted scan limits, missing current-phase rounds and missing intermediate phases stop the scan rather than providing evidence for a NO proposal.",
      "evidence": "Oracle-history regression tests; keeper and resolver source review."
    },
    {
      "id": "O-01",
      "title": "Builds, types and dependency advisories",
      "area": "Operations",
      "status": "Passed",
      "detail": "The reviewed web and worker compile, typecheck and pass the recorded regression suite. npm reports no known advisories for the reviewed application dependency lockfile. Advisory scanning does not establish that dependencies are free of vulnerabilities.",
      "evidence": "Production web/worker builds, workspace typecheck, 14 request/image/oracle regressions and one Postgres rate-limit regression, npm audit. Dependency results are a dated snapshot."
    },
    {
      "id": "R-03",
      "title": "Manipulable metrics and liquidity exposure",
      "area": "Contracts",
      "status": "Medium",
      "detail": "Funded participants can influence volume, holder and trader targets. Thin pools expose providers to informed trading and adverse price movement. Token creators and LPs receive no prediction trading fees under the deployment defaults. A pool-share minimum does not freeze the mix of YES and NO received when adding liquidity.",
      "evidence": "Metric definitions, pool mechanics and published market rules. This is an economic design risk, not a promise of fee income or returns."
    },
    {
      "id": "R-07",
      "title": "Indexed data and price latency",
      "area": "Worker",
      "status": "Low",
      "detail": "Discovery and portfolio summaries can lag chain activity or temporarily reflect stale data during reorg recovery. Trading reads contracts directly, but users must still review wallet prompts. This review inspects the indexer and rollback code without certifying production recovery behavior.",
      "evidence": "Indexer checkpoints, event-derived rebuilds and live trade-panel reads; production recovery rehearsal remains pending."
    },
    {
      "id": "R-08",
      "title": "External fee policy changes",
      "area": "Contracts",
      "status": "Low",
      "detail": "Pons can change fee policy and redirect token creator-fee recipients under its own controls. Predictr's launcher rejects mismatched curve/hook fee models, which can stop new launches. Treasury revenue and launch availability therefore depend on Pons policy.",
      "evidence": "Launcher quote checks and Pons-event monitoring source review."
    },
    {
      "id": "V-01",
      "title": "Independent security assessment",
      "area": "Operations",
      "status": "Pending",
      "detail": "No independent auditor's report or certification is supplied for this source snapshot. This page is an internal development review and is not a substitute for an independent assessment.",
      "evidence": "No independent report verified."
    },
    {
      "id": "V-02",
      "title": "Production deployment and operating readiness",
      "area": "Operations",
      "status": "Pending",
      "detail": "Deployed bytecode, addresses and wiring are verified (D-01). Still open: price feeds (D-02), separation of owner, guardian and arbitrator keys (D-03), source verification (D-04), the production server environment (O-02), backups and active monitoring.",
      "evidence": "Onchain checks on 2026-09-21; production health endpoint; production backups and monitoring were not inspected."
    },
    {
      "id": "V-03",
      "title": "Production end-to-end and browser verification",
      "area": "Operations",
      "status": "Pending",
      "detail": "Real wallet interactions, responsive visual checks and the deployed launch-to-indexing-to-settlement flow have not been exercised for this release. HTTP rendering checks do not verify wallet behavior or visual layout.",
      "evidence": "Local page/API responses are checked; connected-browser and production transaction evidence is not available."
    }
  ],
  "files": [
    {
      "path": "apps/web/next.config.ts",
      "sha256": "21592c9ae9ebb8a8022c82dfeb56696ccc3325ae9c662d5adb3c5f0ce2447208"
    },
    {
      "path": "apps/web/package.json",
      "sha256": "e1326d3b54882db4ca06b1b8d34c7a495bb659866ca0561279ee7cf5067790c9"
    },
    {
      "path": "apps/web/src/app/about/fees/page.tsx",
      "sha256": "ce553c58d4e045a8d6d95b8ff4f8673fdde522e73a571c4c45912595ef27fb4e"
    },
    {
      "path": "apps/web/src/app/about/markets/page.tsx",
      "sha256": "6ae89801003c6a65ecce9ad001027ab57dce4db5a8464d11becbb537c1b1f90a"
    },
    {
      "path": "apps/web/src/app/about/risks/page.tsx",
      "sha256": "c4557dfe430df5cc9d61b7b144ad307cf824fe70be4fa56857576c2acd8e12df"
    },
    {
      "path": "apps/web/src/app/admin/AdminActions.tsx",
      "sha256": "4de32184d445b842650b28c0c25661acedf154da3700b6ec0009d84788adf8f0"
    },
    {
      "path": "apps/web/src/app/admin/page.tsx",
      "sha256": "b575cfb9c5e3c7248d534874ab42f935d55e148009c23f0f867dfb2f42d7f1d9"
    },
    {
      "path": "apps/web/src/app/api/admin/alerts/[id]/ack/route.ts",
      "sha256": "d66d9da1eb6bf64509109aa88a6b0da5b79c5838617d630180f59efc52e1c066"
    },
    {
      "path": "apps/web/src/app/api/admin/jobs/[id]/retry/route.ts",
      "sha256": "6bee1b09c5c70c5d6de2e20142a3082813da902ed4ff100169b67ca904defd6d"
    },
    {
      "path": "apps/web/src/app/api/fees/pending/route.ts",
      "sha256": "477e020f8d581083f91b61ef71ae983dee24ce4c5459e49d9250d4e033d2a6a7"
    },
    {
      "path": "apps/web/src/app/api/health/route.ts",
      "sha256": "158cc9a6934b73ae9bb256a9c9ff756670d807f8613bcb1d33153709d76cfa95"
    },
    {
      "path": "apps/web/src/app/api/images/[hash]/route.ts",
      "sha256": "bcc6cc5472d19ed2fea87ff39c948fd8f60b6fab772413501afaae60f1b4b8e9"
    },
    {
      "path": "apps/web/src/app/api/images/route.ts",
      "sha256": "4aed2dbfcee15f04c8c9c5e7c0a520cd466ff48466b92256730934ad3ca3ed55"
    },
    {
      "path": "apps/web/src/app/api/markets/[address]/holders/route.ts",
      "sha256": "e355dcdfec1dc9488dc2bb2a73ffe6aefa4cedd49e0fc89b0818bcb888021769"
    },
    {
      "path": "apps/web/src/app/api/markets/[address]/route.ts",
      "sha256": "c992860bf9e017e57eab4cf1eaf94bb5b5bbf778013cef684cd98452b2d0e997"
    },
    {
      "path": "apps/web/src/app/api/markets/[address]/series/route.ts",
      "sha256": "911c64dafe27d7106a27c14ca70bfe8c806b8295cd98fae6c3e773e8e7a1cf93"
    },
    {
      "path": "apps/web/src/app/api/markets/[address]/trades/route.ts",
      "sha256": "09b9d729074b66de60d479893d6230d20cb682d001f67dfb8a9bc1a1826f9697"
    },
    {
      "path": "apps/web/src/app/api/markets/metadata/route.ts",
      "sha256": "d025b92f84be762e0730f470864f9c4f9a79e375a28ca4300ddd97a8c29fedc8"
    },
    {
      "path": "apps/web/src/app/api/markets/route.ts",
      "sha256": "7397910a4781e4b859ec98b8e1c18201a70414853157544be5f0d35142f0d922"
    },
    {
      "path": "apps/web/src/app/api/portfolio/[wallet]/route.ts",
      "sha256": "c95934237269bf3cbfa4b66aec4ce3cc5680a984c0112baa8a94a71e6afa433b"
    },
    {
      "path": "apps/web/src/app/api/search/route.ts",
      "sha256": "fb43adc5d8b2c867d10e0dc1d7627ab1ee8a88caecdb90f0ce75f3ce75ac5ed8"
    },
    {
      "path": "apps/web/src/app/api/tokens/[address]/holders/route.ts",
      "sha256": "9ce67f0e1f910cbb7e76b59f1370ba7a7c1736abb7d6019ce2db55d323d7f734"
    },
    {
      "path": "apps/web/src/app/api/tokens/[address]/route.ts",
      "sha256": "74cd73368735c60b8417a04e2159a9f3733f62ed39821011695c7a077e1930b3"
    },
    {
      "path": "apps/web/src/app/api/tokens/[address]/trades/route.ts",
      "sha256": "94e4ef35f4f736692789a42ce97f9262a9c96470883bc6588f3fe3b2ea7824e5"
    },
    {
      "path": "apps/web/src/app/api/tokens/route.ts",
      "sha256": "85d55e8876796723a6160296283080ce0131539469c3a1a1253ccd1fdc346338"
    },
    {
      "path": "apps/web/src/app/audit/page.tsx",
      "sha256": "ca5ed03b46f6608e83dc48834f518af6ac26d21985b15dd483e5a715568fd9b0"
    },
    {
      "path": "apps/web/src/app/docs/[[...slug]]/page.tsx",
      "sha256": "0035c5f3d74bdbc33224367b8d82d37d886631a6cc7b2783c8a5c5c32e6d3d34"
    },
    {
      "path": "apps/web/src/app/error.tsx",
      "sha256": "cc92e6fefd85314815706c17e6e9623d0b057076b5471b9aae8ff6b955a7cf49"
    },
    {
      "path": "apps/web/src/app/explore/page.tsx",
      "sha256": "45adbb58770c49bdd075b44d56023650238383e64a146a3d0c3c0e1a0f9b6c1d"
    },
    {
      "path": "apps/web/src/app/launch/LaunchForm.tsx",
      "sha256": "8de0ea8d43e2be257d0800ce016de035db8648ce95ed30312f2be25805d864ba"
    },
    {
      "path": "apps/web/src/app/launch/page.tsx",
      "sha256": "282a07a6d00b5eed7efb8b79ee7f37d7689ac7427f34cd20ff7d428e5c20ffc1"
    },
    {
      "path": "apps/web/src/app/layout.tsx",
      "sha256": "61ec0c0e38b6a7db7a9d73cb2ecbe4bef12c5c88dcca748fe49cb8de38c56056"
    },
    {
      "path": "apps/web/src/app/market/[address]/page.tsx",
      "sha256": "2c310d8063bc16ade77c0f96caed597922533b38e13c1dd397b3669541a8eee7"
    },
    {
      "path": "apps/web/src/app/market/new/NewMarketForm.tsx",
      "sha256": "fbd1ad4c60e873912be59e968f3d7c82cc09f05f57ea126192ae79f9deca3bec"
    },
    {
      "path": "apps/web/src/app/market/new/page.tsx",
      "sha256": "cc88fb7a110bba786d01878f47cd7217020c561d22d29aeb856989cd228290d6"
    },
    {
      "path": "apps/web/src/app/markets/page.tsx",
      "sha256": "a2f5d97d127f2d1d9184382337dd95173ec71059bca664ae9336aefbaea7542a"
    },
    {
      "path": "apps/web/src/app/not-found.tsx",
      "sha256": "7266b2d515dd2faad90d2b57194a43438b6e2f5968bd058aa2e86ce3de874401"
    },
    {
      "path": "apps/web/src/app/page.tsx",
      "sha256": "104a7fd2737db330dba90b41be0f62e7e69a414ea7ab6181b58312c8f79e4504"
    },
    {
      "path": "apps/web/src/app/portfolio/page.tsx",
      "sha256": "5daba0dbac7c00fcf4b191a76c85fa397731e5533ee028a01b2c5fda1dc9132c"
    },
    {
      "path": "apps/web/src/app/portfolio/PortfolioView.tsx",
      "sha256": "8b215d6819ec9cc13635438a16ee83bc0c8bfe70bac190a35df83b0c5c47647f"
    },
    {
      "path": "apps/web/src/app/token/[address]/page.tsx",
      "sha256": "eb09734dc038cea1727afbe2b44293a616190503006e90fd4ac9a5b087289e0b"
    },
    {
      "path": "apps/web/src/components/AmbientField.tsx",
      "sha256": "391551acd4575032eaf0acc35abea92d61f92d15e9269260b6989d647cb0db3a"
    },
    {
      "path": "apps/web/src/components/AuditReport.tsx",
      "sha256": "665d53681148303072ba715783ae90bc72beae165ae304d4247f119c9e85e4d3"
    },
    {
      "path": "apps/web/src/components/Brand.tsx",
      "sha256": "cca5768b617fe13ec82bc244936220fd64cb559c45729e20d51f3ee932edd45b"
    },
    {
      "path": "apps/web/src/components/docs/chapters.ts",
      "sha256": "d198023a45aa775da6af2f02d1c56cd0962e558951f14b5ff472565a2185638e"
    },
    {
      "path": "apps/web/src/components/docs/ContractsContent.tsx",
      "sha256": "ca940867bb0960497ee5eeda0c73226aac33adf14451a735e56dbd1bcdbe618e"
    },
    {
      "path": "apps/web/src/components/docs/FeesContent.tsx",
      "sha256": "004279058661da85b0b263d95fa25ed6d9b80dfb23c98c6b35243ea2785863ad"
    },
    {
      "path": "apps/web/src/components/docs/ResolutionContent.tsx",
      "sha256": "ee4c979b1efafe68c3e0be15ba49eb43e4ef0fc257648e3f418c138825427eef"
    },
    {
      "path": "apps/web/src/components/docs/RisksContent.tsx",
      "sha256": "96ca35cc50e8cc777419e0b43de0694325adbe3ffa5f2d040ebdf6aec5e2f45b"
    },
    {
      "path": "apps/web/src/components/Footer.tsx",
      "sha256": "153e26b5497d33be8d217f61075c81303f72b6a638a55bb42c2d7d8c2db8446e"
    },
    {
      "path": "apps/web/src/components/Header.tsx",
      "sha256": "3c4c68e44197f98d5d2352420bc6a947e157b89d46c481d6bb381bccc0a14856"
    },
    {
      "path": "apps/web/src/components/market/MarketActivity.tsx",
      "sha256": "44333018b304af13bbf26846f03db4af28bcaae354e0e78cecc3d9e69fc35c89"
    },
    {
      "path": "apps/web/src/components/market/MarketBuilder.tsx",
      "sha256": "87dcd56726fea8b5b21ec1ec3209053e4c207651ffc0ecbfa1767705d9574e2c"
    },
    {
      "path": "apps/web/src/components/market/MarketCard.tsx",
      "sha256": "04f322162b3d24f13b5e4d13d80d7152e9a5415a5483e55d19fb4bafb6f1b134"
    },
    {
      "path": "apps/web/src/components/market/MarketChart.tsx",
      "sha256": "a6bee809277c4e5a4a1ee0a02cbbb3c6514ad6de540baba13b156159d2dcde46"
    },
    {
      "path": "apps/web/src/components/market/MarketClient.tsx",
      "sha256": "e7e84efb02aaa8d17f8c6259a17b782ecaf1edcaf7cd7864b5b4ccd3472123ed"
    },
    {
      "path": "apps/web/src/components/market/MarketTradePanel.tsx",
      "sha256": "38579402a20cd00dd43ebd7347e2e5173208d988c59a563cdd7631068e40da85"
    },
    {
      "path": "apps/web/src/components/PageTransition.tsx",
      "sha256": "3ef032430603e33ac2de96ecb922b30d977fc42429f1e030f84fd932bc2b3f30"
    },
    {
      "path": "apps/web/src/components/Providers.tsx",
      "sha256": "2dbe2767837649f4e4f0a3ff34eab7d8f216e34c3985216011a4c14ad787ac01"
    },
    {
      "path": "apps/web/src/components/Search.tsx",
      "sha256": "858173791ee24f39c3bcf661434cd43cd54de3f719391a3298edc6059c62f753"
    },
    {
      "path": "apps/web/src/components/token/Activity.tsx",
      "sha256": "15c577f52fd05a2186195ac1461388b7e0a1c0b76a712f4c32b3d87ea3aca081"
    },
    {
      "path": "apps/web/src/components/token/FeeBreakdown.tsx",
      "sha256": "e70118452bd0c56d25c1eb2b4cf241ae0c8aec48ceb20382c036caf82b411bba"
    },
    {
      "path": "apps/web/src/components/token/PriceChart.tsx",
      "sha256": "aa04e4f16107fa0c77f7f784d507c514f7b03ec99ef47960e4bb4c609b1ea779"
    },
    {
      "path": "apps/web/src/components/token/TokenCard.tsx",
      "sha256": "aa31a96a068d7f07be99478d27872f634209980642c9816618622cf9f93aebe6"
    },
    {
      "path": "apps/web/src/components/token/TokenClient.tsx",
      "sha256": "6a6c6d8b5448ef7c2128001586fc60e12eeafcab4f91e66e144b4adfcde66b58"
    },
    {
      "path": "apps/web/src/components/token/TradePanel.tsx",
      "sha256": "72702bc3b7696989364b8919c8e2a3d8fe2916764cedd01df0952db36aca2215"
    },
    {
      "path": "apps/web/src/components/ui/AssetIcon.tsx",
      "sha256": "17ebfe0ed25267540ab7c7c4b35b223eec1b487244f12dbd579aeef0826d74ae"
    },
    {
      "path": "apps/web/src/components/ui/client.tsx",
      "sha256": "5c4aedf9a6bd694d7dbff0cdea9df12c0e56e14a83508a7cdcf6946867a8535f"
    },
    {
      "path": "apps/web/src/components/ui/primitives.tsx",
      "sha256": "4b82e48ab3ec0c588a0ed6cee4abe8fad45ff81f379179119da2aafb1ccb9156"
    },
    {
      "path": "apps/web/src/components/ui/TxStatus.tsx",
      "sha256": "62da269b1ffdf7508f9c6bb1b21eb33b937a300d04772dfb79519e49dc93e262"
    },
    {
      "path": "apps/web/src/components/wallet/WalletButton.tsx",
      "sha256": "8b8d5d44aa084da328abcb8038cb4a50c658eda62709a0c97971f512927516c7"
    },
    {
      "path": "apps/web/src/lib/audit.ts",
      "sha256": "1a9a00332df85666f98376cd0464fa1272eab41a93a2f75a45e7b3126439ab85"
    },
    {
      "path": "apps/web/src/lib/client/api.ts",
      "sha256": "2a0ed77d1b078a9680d4adf6989b6e9fc3387ab29df777105a38ea216a3403a9"
    },
    {
      "path": "apps/web/src/lib/client/tx.ts",
      "sha256": "107b112af367639acca44a5d78677224baaa7ff5214b07d07eb93bd43c9cd995"
    },
    {
      "path": "apps/web/src/lib/client/wagmi.ts",
      "sha256": "6cc93243bd0e69d25029c426b730c96e680f9cfabd4719bdda78933b95eec44c"
    },
    {
      "path": "apps/web/src/lib/config.ts",
      "sha256": "ba7bee4234dabbbf6ac5795115005c155b93cc965ca9bb9ea4f3de9f858a99cf"
    },
    {
      "path": "apps/web/src/lib/image-validation.ts",
      "sha256": "25224b1a15c35c1d862e83e1a3534178bd80570c43535381b93650b35dd12ac7"
    },
    {
      "path": "apps/web/src/lib/rate-limit.ts",
      "sha256": "9efd48abf3974e2ce678dd0935b8511efb79b0db924588df2220fe752af643f1"
    },
    {
      "path": "apps/web/src/lib/request-validation.ts",
      "sha256": "4706c6bef66717cc61256ad42a40bb0a22ce72f18d2b5e82051bd662e90b3fb2"
    },
    {
      "path": "apps/web/src/lib/server/admin.ts",
      "sha256": "4d0b40f4628ff2e6e9d2c7a4891d31a3f1706c7f822b7158d97709267bc00718"
    },
    {
      "path": "apps/web/src/lib/server/chain.ts",
      "sha256": "af5639ac493275680e84f982fd985f5eb02a9cad59c9335fe9b4c19c60becd8e"
    },
    {
      "path": "apps/web/src/lib/server/crypto.ts",
      "sha256": "22b5dda1b87d5c87883164ac1ddaab0c2c66cbfbc1a379fb04e6cf4bc0b51956"
    },
    {
      "path": "apps/web/src/lib/server/db.ts",
      "sha256": "88f18aee75e1974157ea78f6fc272a13e62d71587e965ab15d7b2b83a265876a"
    },
    {
      "path": "apps/web/src/lib/server/env.ts",
      "sha256": "6ca3c44e04f113b16fefa097bcd0195d95da09b21c4520fe916811846212de8b"
    },
    {
      "path": "apps/web/src/lib/server/http.ts",
      "sha256": "d9cb276c899e3c4e4d30effd22c841304ef3e26b5fa4cce4693a37e5e0ffc46a"
    },
    {
      "path": "apps/web/src/lib/server/infra.ts",
      "sha256": "a6a6c9144826ec8820edbecf55750300653d2c82b5614133c3feef0030eaae36"
    },
    {
      "path": "apps/web/src/lib/server/marketMetadata.ts",
      "sha256": "55e1b027825f72d1bed7a00a75dd2a05a53c7a2e30df9fd79d996724e258aa62"
    },
    {
      "path": "apps/web/src/lib/server/prices.ts",
      "sha256": "123ab93065786a923d9f44345b3c992a2cfbd1cef0cbad8d97b456a9cb461a59"
    },
    {
      "path": "apps/web/src/lib/server/queries.ts",
      "sha256": "ad0c1deda0bca0c385ba2fba9852aac8b291ba52f39724445cfb30c00f2bb19a"
    },
    {
      "path": "apps/web/src/lib/server/rateLimit.ts",
      "sha256": "05f2e5c0cde411d200ed2f651d385e2e4330208a0347d76ea7a4381c6dc8f30c"
    },
    {
      "path": "apps/web/src/proxy.ts",
      "sha256": "11ddd03ce383291143d05b0757db7b732a52198c3c1572908075c538d7e856fa"
    },
    {
      "path": "apps/worker/package.json",
      "sha256": "c7adfa18ee1f6a6671b0606ae2955ed1085dce3af5c047e95210921d52b4f8c9"
    },
    {
      "path": "apps/worker/src/context.ts",
      "sha256": "4ec6d07bf077fd59d8720eab7083f4dbcb6ac9f013a35f862cd37f890c43a54d"
    },
    {
      "path": "apps/worker/src/env.ts",
      "sha256": "bbb5200be3500db46d2d0d2c673f31f29491eed8a68c08ccaab41a109ce1e466"
    },
    {
      "path": "apps/worker/src/indexer/logs.ts",
      "sha256": "01e8ce23d443e69500572f8b96224d43130b61ee7a70426968d3fb0d2409de38"
    },
    {
      "path": "apps/worker/src/indexer/pipeline.ts",
      "sha256": "522712400261354ab8ff06951f7866c90545051c676131c742e41fcd6a961d35"
    },
    {
      "path": "apps/worker/src/indexer/reorg.ts",
      "sha256": "da03e346f6a4071ca90ba07a9bdd5747f84c28f74ecd93a92f7cabcd11e6978c"
    },
    {
      "path": "apps/worker/src/indexer/run.ts",
      "sha256": "674c54c2ee086773c6997bdfd2491fa5e43271e61e18b34ca69f1ddbb0e7032c"
    },
    {
      "path": "apps/worker/src/jobs/execute.ts",
      "sha256": "f3d4d8be671c6dbcbfb778ce9da8d3cb0bd5456d3d796e9ef679e0ada50820ec"
    },
    {
      "path": "apps/worker/src/jobs/queue.ts",
      "sha256": "1926beb4fb53660eaaa7fa02291828346b8738c4ab7c0610e6fc129c8c504101"
    },
    {
      "path": "apps/worker/src/keeper/scan.ts",
      "sha256": "aaf201b642bd3f2382cac935970371489ff54f5d1429099439674d9b8b69ed8c"
    },
    {
      "path": "apps/worker/src/main.ts",
      "sha256": "fc865d6abbd3faa9d2fd5ed1301587721d1fc44d4d534c4c7f3b4f4b3ace7907"
    },
    {
      "path": "apps/worker/src/predictions/chainlink.ts",
      "sha256": "cd7dd089208c4f4ba7e2ebf9a1651bb01f9ec45e5069ed4e2d04e074db6c6773"
    },
    {
      "path": "apps/worker/src/predictions/indexer.ts",
      "sha256": "56e9917d182543664e688556583cc4dd9e94dd5818c2f959ca67366e65766631"
    },
    {
      "path": "apps/worker/src/predictions/keeper.ts",
      "sha256": "8dc396bb8e315609265b82253e8c4d60785d1993ed8d7576c1bc0962ab293861"
    },
    {
      "path": "apps/worker/src/predictions/metrics.ts",
      "sha256": "aa9b9a570827254ce865a7ac8c25f08d9f7f18e0b542ff97671c47171a2b394a"
    },
    {
      "path": "apps/worker/src/predictions/stats.ts",
      "sha256": "238ea121d2994a346ba65b38263f6e560f5842d643c555916e58a4a8ab8087e6"
    },
    {
      "path": "apps/worker/src/stats/refresh.ts",
      "sha256": "8de6abaf80acd722712c29f8f1aca86272b34661401f5d6a4a4e29d719d31000"
    },
    {
      "path": "contracts/script/DeployGuards.sol",
      "sha256": "111b76b4323f5ba6decf8a1ed6152284f03bbfbbd5c4fc980fa83b9278c8b43e"
    },
    {
      "path": "contracts/script/DeployNamesake.s.sol",
      "sha256": "c7f49387902c839cdcb5aa31f8884f0802ad8d2dc9e6b4a6319d193d25ec13a3"
    },
    {
      "path": "contracts/script/DeployPredictionMarkets.s.sol",
      "sha256": "42ef30b00ac2186c18415d511af04c0f45563b08d1a04c7c372dd2a88404205b"
    },
    {
      "path": "contracts/script/rehearsal/LocalRehearsal.s.sol",
      "sha256": "43eb5c1d8260df2fb34d0003702c1f23f2b339018d80e17563ee94efd1771192"
    },
    {
      "path": "contracts/script/rehearsal/RehearsalMocks.sol",
      "sha256": "c256f14e0b1c3d4582d01cd09f0a83b0c8d48ad3b27ab8c6e61f0efc0323c802"
    },
    {
      "path": "contracts/src/interfaces/IPonsV2.sol",
      "sha256": "dbd0536ba5077313ea29fab8f2793f36734e72fa265cb0bb1ef7e83a27badee7"
    },
    {
      "path": "contracts/src/NamesakeLauncher.sol",
      "sha256": "ec79d32355428c791da6613a3fd0b433f89dd82d8eb70cce69bae3db87109613"
    },
    {
      "path": "contracts/src/NamesakeV4Router.sol",
      "sha256": "7498bb87d959e135ee7a145e7abb1495fee0117d13e4274d5a9254d4daba1978"
    },
    {
      "path": "contracts/src/predictions/interfaces/IPredictionMarket.sol",
      "sha256": "b7b66e458c0f0d1d785ca4ce11d04a92a02306afe960d9c34c09d87fa7e32306"
    },
    {
      "path": "contracts/src/predictions/interfaces/IResolutionAdapter.sol",
      "sha256": "509eb7d63b77d91de544a2dc02c979fc4e440b480605d9bfffff6a819db9f3f5"
    },
    {
      "path": "contracts/src/predictions/MarketMath.sol",
      "sha256": "5173f7b87a4cec34f0f5109ad3dc1e25ebd71dd852ecc88a33a3c623d6047f30"
    },
    {
      "path": "contracts/src/predictions/PredictionMarket.sol",
      "sha256": "c4f66875a6d2583e7563df5f2d34e9c6d3bef4028e98ebb1c7b7c4026192aced"
    },
    {
      "path": "contracts/src/predictions/PredictionMarketFactory.sol",
      "sha256": "7e2e36c431a8a0fc6a2b7fe3e8ff8f2aa836484e21c1e494055f6063b92977e1"
    },
    {
      "path": "contracts/src/predictions/resolvers/ManualResolver.sol",
      "sha256": "a82b717e9b4c3a58c072e9879005d3458a87f57523c24cca56ae2240daa319fa"
    },
    {
      "path": "contracts/src/predictions/resolvers/OnchainMetricResolver.sol",
      "sha256": "f087042aadb4aeb4cd9e936b36daf1e3d5ea8bb89e378b2c56380474883e532d"
    },
    {
      "path": "contracts/src/predictions/resolvers/PriceOracleResolver.sol",
      "sha256": "ce89b4bcad34195dda8a042f07d3bbfb3c3d1c62071c2acb3e091424da576621"
    },
    {
      "path": "contracts/src/predictions/resolvers/ResolverBase.sol",
      "sha256": "42cab4a19480789a9553e1fed9ef30586afb5a3461d4ac249268acc80ba16665"
    },
    {
      "path": "contracts/test/predictions/Mocks.sol",
      "sha256": "2378b96ff7ab4024e090a47335dc9491fdefb61df8dd643387599f28244c3aa7"
    },
    {
      "path": "contracts/test/predictions/PonsFork.t.sol",
      "sha256": "b761d4a511865ebe36eeb4bbeedfe688691a5b74bd04c8aa67c643dc471e03f3"
    },
    {
      "path": "contracts/test/predictions/PredictionMarket.t.sol",
      "sha256": "fa71dd2c78fdd9685767328b8f5ee2c0a031f08d9c76d6ff7c2f8e3e127de96d"
    },
    {
      "path": "Dockerfile.web",
      "sha256": "5f832621dc5478c128c4a8ebd974bc49597b054db415b588266a7e96f650379a"
    },
    {
      "path": "Dockerfile.worker",
      "sha256": "c3909397beb282b0653b9d3772f42fc84dae14c7609795f8a7bb192050104f67"
    },
    {
      "path": "package-lock.json",
      "sha256": "d79384f4dd100396e443fa8692c234c5f766a9bd653f8f18cb9d441b18360d23"
    },
    {
      "path": "package.json",
      "sha256": "e4d0cb0d6d0a3adffd5fd8d4ccf39af8b27343d96f37155d87683a1310381a28"
    },
    {
      "path": "packages/db/src/index.ts",
      "sha256": "9de1c954964c2af65f0be927186af2ce23ccab3ba0071706cf3798ac36bcde35"
    },
    {
      "path": "packages/db/src/migrate.ts",
      "sha256": "b4fbd84e7e4061202eadc558e2b136faa827eca4c306dea4e429e01e388e4145"
    },
    {
      "path": "packages/db/src/schema.ts",
      "sha256": "d12832859620a8a78b8c8b58dac638194d55f98a1b7bb8c7385ab77f3221693d"
    },
    {
      "path": "packages/shared/src/abis/generated/index.ts",
      "sha256": "5e82e77d1c23a50c7e7c7930544d3524633a94e8bd6387865d6f7b6080f4944f"
    },
    {
      "path": "packages/shared/src/abis/generated/ManualResolver.ts",
      "sha256": "7490b15d491ebbe6be8e8e20ae58c2e1b4188b33bf3c1605376a53e48282ffb5"
    },
    {
      "path": "packages/shared/src/abis/generated/NamesakeLauncher.ts",
      "sha256": "35229222685ba5add7b7e8c4de1ae1a4c713c8bd18cd3f0925c4bd5ddeedd2f5"
    },
    {
      "path": "packages/shared/src/abis/generated/NamesakeV4Router.ts",
      "sha256": "f2094f61a987331eff0b0e6510e191f3dd2320e5aada9d79309867d909185317"
    },
    {
      "path": "packages/shared/src/abis/generated/OnchainMetricResolver.ts",
      "sha256": "3bcbb52fb0da8c12df8034de79e0b57aadbb041dab4d530a8231081a29c69a34"
    },
    {
      "path": "packages/shared/src/abis/generated/PredictionMarket.ts",
      "sha256": "c7e778f566c09795c0543e406db063eb2f51a39c6bd5110b1835750730cac06e"
    },
    {
      "path": "packages/shared/src/abis/generated/PredictionMarketFactory.ts",
      "sha256": "d37fa14afa523d4d8faa1559a76300be82c8da4635bf1b4dba28fa17e7854443"
    },
    {
      "path": "packages/shared/src/abis/generated/PriceOracleResolver.ts",
      "sha256": "c1453c5f76b60eb345e28f2976af9dcc3c97f08e3ddd8a70ff24ad9ff6274962"
    },
    {
      "path": "packages/shared/src/abis/pons.ts",
      "sha256": "89457070e5e68f0150b759e19d4244d133971ecb6e27673dfd05a5182321201c"
    },
    {
      "path": "packages/shared/src/chain.ts",
      "sha256": "b8b9fc3ca93ec9246897b98438a6f739311af5bc334f4815ea01a9f5036bbe12"
    },
    {
      "path": "packages/shared/src/config.ts",
      "sha256": "a5054581e84943d6bf19fa7ff571cb8d77a3a8abff6a5241861d3f3e91749ba7"
    },
    {
      "path": "packages/shared/src/curve.ts",
      "sha256": "3cd9a30646f38431fae6e537226539e7af9daf12a2c6e799d6faeb2f05652429"
    },
    {
      "path": "packages/shared/src/fees.ts",
      "sha256": "42260f59a25030408c2d049befb10265edfaac0a288359b1087ca30236b796e7"
    },
    {
      "path": "packages/shared/src/format.ts",
      "sha256": "d59e377a6cfc02d5f5081a2062e18e2e94b51b72526ae4bf3977351bd267319a"
    },
    {
      "path": "packages/shared/src/index.ts",
      "sha256": "4a02d730aab73fd784381e3e7feb64c70ef673eac7e932305252d6e4263f324f"
    },
    {
      "path": "packages/shared/src/markets.ts",
      "sha256": "39d9950825e5ae7578811eb36abb3bee6559672b547f4f3c5e4eba15ad2fb9f1"
    },
    {
      "path": "packages/shared/src/templates.ts",
      "sha256": "6fc58bb3465dd0f7611ad5929202c9e922e17b6c550ea40cc1aa77bc64fa607a"
    },
    {
      "path": "packages/shared/src/v4.ts",
      "sha256": "15ecf019f880e5b7eb1c65b94dde648a426fa7024180f420c92944f15d19e88b"
    },
    {
      "path": "scripts/audit-snapshot.ts",
      "sha256": "faf63a35d3d4f7e9746fc2b10745d334f36bae866b589df5d7ace5140844776d"
    },
    {
      "path": "scripts/export-abis.mjs",
      "sha256": "a8ffbfe47f09435bbe1a29ef6fea1658a530f728653d83a8e321fe51ce234f62"
    },
    {
      "path": "scripts/rate-limit.test.ts",
      "sha256": "6083beebe3fcd5581b2b9069529813df802f3ce3ae496b6d8b418b68c99a3a6c"
    },
    {
      "path": "scripts/security-http.ts",
      "sha256": "b345fdf29bbff11fad1bc4f978c01823dc51c3393409b45b780126f047150771"
    },
    {
      "path": "scripts/security.test.ts",
      "sha256": "bc3a7cb89a9db088c03b5dff849eb9486d14d8b507a85546f1d7abafbecdf62a"
    }
  ]
}
