{
  "schema": "pointcast.launchpad-case-study/v1",
  "title": "Launchpad case study: a simulated coin launchpad",
  "human": "https://pointcast.xyz/case-studies/launchpad/",
  "status": "case study · simulation only",
  "author": "Claude Code for PointCast",
  "unit": "play credits",
  "standing": "Play credits only. No value, may reset. No real funds. Credits never leave this page. Nothing here is an offer or a market.",
  "nouns": "Noun art is CC0. Not a Nouns token. Not a claim on the Nouns treasury. No Nouns DAO endorsement.",
  "simulation": {
    "realFunds": false,
    "paymentProcessing": false,
    "protocolComplianceClaim": false,
    "network": "none: the simulation runs in the page and sends nothing",
    "storage": "simulation in memory; watchlist only in this browser’s local storage",
    "approvals": "headless runs refuse trades above a bot’s approval line; the live board queues them for the viewer by default",
    "viewerActions": "launch, trade, approve or decline, kill switch, policy edit and creator payout split, each a record in the run’s action log",
    "replay": "a replay link carries the scenario, seed, rules, approvals mode, configuration hash and action log in the URL hash"
  },
  "plan": "https://github.com/mhoydich/pointcast/blob/main/docs/plans/2026-10-19-launchpad-case-study.md",
  "configHash": "ba27728bf58b199d",
  "curve": {
    "preset": "classic-x100",
    "label": "Classic ×100",
    "quote": "cr",
    "supply": 1000000000,
    "soldOnCurve": 793100000,
    "heldForPool": 206900000,
    "startMarketCap": 2795.9,
    "raiseToGraduate": 8500.54,
    "endMarketCap": 41088.02,
    "priceRise": 14.7,
    "firstBuy": {
      "quote": 100,
      "tokens": 34199203,
      "afterFee": true
    },
    "creditsAtHalfTokens": 1758.67,
    "curveFeeBps": 125,
    "creatorFeeBps": 30,
    "houseFeeBps": 95,
    "migrationFee": 1.5
  },
  "poolFeeTiers": [
    {
      "tier": 1,
      "fromMarketCap": 0,
      "creatorBps": 30,
      "houseBps": 93,
      "lpBps": 2,
      "totalBps": 125
    },
    {
      "tier": 2,
      "fromMarketCap": 42000,
      "creatorBps": 95,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 120
    },
    {
      "tier": 3,
      "fromMarketCap": 147000,
      "creatorBps": 90,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 115
    },
    {
      "tier": 4,
      "fromMarketCap": 246000,
      "creatorBps": 85,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 110
    },
    {
      "tier": 5,
      "fromMarketCap": 344000,
      "creatorBps": 80,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 105
    },
    {
      "tier": 6,
      "fromMarketCap": 442000,
      "creatorBps": 75,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 100
    },
    {
      "tier": 7,
      "fromMarketCap": 982000,
      "creatorBps": 70,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 95
    },
    {
      "tier": 8,
      "fromMarketCap": 1474000,
      "creatorBps": 65,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 90
    },
    {
      "tier": 9,
      "fromMarketCap": 1965000,
      "creatorBps": 60,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 85
    },
    {
      "tier": 10,
      "fromMarketCap": 2456000,
      "creatorBps": 55,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 80
    },
    {
      "tier": 11,
      "fromMarketCap": 2947000,
      "creatorBps": 50,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 75
    },
    {
      "tier": 12,
      "fromMarketCap": 3438000,
      "creatorBps": 45,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 70
    },
    {
      "tier": 13,
      "fromMarketCap": 3930000,
      "creatorBps": 40,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 65
    },
    {
      "tier": 14,
      "fromMarketCap": 4421000,
      "creatorBps": 35,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 60
    },
    {
      "tier": 15,
      "fromMarketCap": 4912000,
      "creatorBps": 30,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 55
    },
    {
      "tier": 16,
      "fromMarketCap": 5403000,
      "creatorBps": 27.5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 52.5
    },
    {
      "tier": 17,
      "fromMarketCap": 5894000,
      "creatorBps": 25,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 50
    },
    {
      "tier": 18,
      "fromMarketCap": 6386000,
      "creatorBps": 22.5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 47.5
    },
    {
      "tier": 19,
      "fromMarketCap": 6877000,
      "creatorBps": 20,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 45
    },
    {
      "tier": 20,
      "fromMarketCap": 7368100,
      "creatorBps": 17.5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 42.5
    },
    {
      "tier": 21,
      "fromMarketCap": 7859000,
      "creatorBps": 15,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 40
    },
    {
      "tier": 22,
      "fromMarketCap": 8350000,
      "creatorBps": 12.5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 37.5
    },
    {
      "tier": 23,
      "fromMarketCap": 8840000,
      "creatorBps": 10,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 35
    },
    {
      "tier": 24,
      "fromMarketCap": 9333000,
      "creatorBps": 7.5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 32.5
    },
    {
      "tier": 25,
      "fromMarketCap": 9824000,
      "creatorBps": 5,
      "houseBps": 5,
      "lpBps": 20,
      "totalBps": 30
    }
  ],
  "rules": [
    {
      "id": "naked",
      "label": "Naked",
      "openingAuctionTicks": 0,
      "sniperFee": null,
      "earlyCap": null,
      "devLock": false
    },
    {
      "id": "auction",
      "label": "Opening auction",
      "openingAuctionTicks": 10,
      "sniperFee": null,
      "earlyCap": null,
      "devLock": false
    },
    {
      "id": "sniper-fee",
      "label": "Decaying sniper fee",
      "openingAuctionTicks": 0,
      "sniperFee": {
        "startBps": 5000,
        "ticks": 60
      },
      "earlyCap": null,
      "devLock": false
    },
    {
      "id": "fair",
      "label": "Fair launch",
      "openingAuctionTicks": 10,
      "sniperFee": {
        "startBps": 5000,
        "ticks": 60
      },
      "earlyCap": {
        "bps": 200,
        "ticks": 120
      },
      "devLock": true
    }
  ],
  "strategies": [
    {
      "id": "market-maker",
      "label": "Market maker",
      "description": "Keeps a ±4% band around the 60-tick average on the busiest coin: sells 2% of its holdings above the band, buys 20 cr below it."
    },
    {
      "id": "momentum",
      "label": "Momentum",
      "description": "Buys 30 cr when price is up 8% over 30 ticks with buys outnumbering sells 1.5 to 1; exits on a 12% trailing stop. Its buys sit above the default approval line of 25 cr."
    },
    {
      "id": "sniper",
      "label": "Sniper",
      "description": "Buys 100 cr once per coin, its priority fee inside: as an order during an opening auction, or within 60 ticks after trading opens while any sniper fee is at most 10%. Sells at 2.5× or after 300 ticks."
    },
    {
      "id": "dip-buyer",
      "label": "Dip buyer",
      "description": "Buys 20 cr when price sits 20% under its 300-tick high while holders still grow; sells at +30% over its average price."
    },
    {
      "id": "holder",
      "label": "Holder",
      "description": "Buys 20 cr of coins with a risk score under 25 once they are 30 ticks old, holds to graduation, then sells half."
    }
  ],
  "policyChecks": [
    "KILLED",
    "EXPIRED",
    "BLOCKED_COIN",
    "NOT_PERMITTED",
    "COOLDOWN",
    "RATE",
    "PER_TRADE",
    "WINDOW_CAP",
    "POSITION",
    "SLIPPAGE",
    "PRIORITY_FEE",
    "CREDITS",
    "NEEDS_APPROVAL"
  ],
  "scenarios": [
    {
      "id": "quiet-launch",
      "title": "A quiet launch",
      "summary": "One coin, a small dev buy, light neighborhood trading and three patient bots. Nothing graduates; the curve just finds a level.",
      "seed": "quiet-launch-1",
      "ticks": 1800,
      "coins": [
        {
          "symbol": "PORCH",
          "name": "Porch Night",
          "nounId": 95,
          "launchTick": 10,
          "image": "/case-studies/launchpad/coins/quiet-launch-porch.svg"
        }
      ],
      "naked": {
        "rules": "naked",
        "approvals": "deny",
        "logHash": "150a4a131a7122b0",
        "events": 565,
        "ticks": 1800,
        "coins": [
          {
            "id": "c1",
            "symbol": "PORCH",
            "name": "Porch Night",
            "nounId": 95,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2113.46,
            "marketCap": 8122.86,
            "holders": 33,
            "trades": 405,
            "volume": 9213.7,
            "creatorFees": 27.56,
            "risk": {
              "score": 3,
              "badge": "low",
              "flags": [],
              "devPct": 1.7,
              "bundlePct": 0,
              "sniperPct": 2.4,
              "top10Pct": 24.8
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 1,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 26.9
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 0,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "mm-1",
            "strategy": "market-maker",
            "label": "Market maker",
            "fills": 20,
            "refusedByPolicy": 102,
            "refusedReasons": {
              "COOLDOWN": 44,
              "POSITION": 58
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": -10.22
          }
        ],
        "houseFees": 87.28,
        "sniperFees": 0,
        "priorityFees": 0,
        "creditsConserved": true
      },
      "fair": {
        "rules": "fair",
        "approvals": "deny",
        "logHash": "00c2851e027dd21d",
        "events": 538,
        "ticks": 1800,
        "coins": [
          {
            "id": "c1",
            "symbol": "PORCH",
            "name": "Porch Night",
            "nounId": 95,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2079.69,
            "marketCap": 8015.92,
            "holders": 33,
            "trades": 395,
            "volume": 9116.64,
            "creatorFees": 27.13,
            "risk": {
              "score": 1,
              "badge": "low",
              "flags": [],
              "devPct": 1,
              "bundlePct": 0,
              "sniperPct": 0,
              "top10Pct": 24.8
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 1,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 21.63
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 0,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "mm-1",
            "strategy": "market-maker",
            "label": "Market maker",
            "fills": 12,
            "refusedByPolicy": 77,
            "refusedReasons": {
              "COOLDOWN": 26,
              "POSITION": 51
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": -15.16
          }
        ],
        "houseFees": 85.9,
        "sniperFees": 48.65,
        "priorityFees": 0,
        "creditsConserved": true
      }
    },
    {
      "id": "snipe-war",
      "title": "Snipe war",
      "summary": "Six sniper bots race for the first block of a new coin with priority fees. Run it under naked rules, then under fair rules, and compare who holds the first minute's supply.",
      "seed": "snipe-war-1",
      "ticks": 900,
      "coins": [
        {
          "symbol": "BOLT",
          "name": "Lightning Bolt",
          "nounId": 82,
          "launchTick": 5,
          "image": "/case-studies/launchpad/coins/snipe-war-bolt.svg"
        }
      ],
      "naked": {
        "rules": "naked",
        "approvals": "deny",
        "logHash": "5fec2a1e43691582",
        "events": 1019,
        "ticks": 900,
        "coins": [
          {
            "id": "c1",
            "symbol": "BOLT",
            "name": "Lightning Bolt",
            "nounId": 82,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2577.25,
            "marketCap": 9663.16,
            "holders": 41,
            "trades": 523,
            "volume": 16390.52,
            "creatorFees": 49.07,
            "risk": {
              "score": 10,
              "badge": "low",
              "flags": [],
              "devPct": 0.7,
              "bundlePct": 0,
              "sniperPct": 18.2,
              "top10Pct": 20.3
            },
            "sniperShareFirstMinute": 46.1
          }
        ],
        "bots": [
          {
            "id": "snipe-1",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 139.55
          },
          {
            "id": "snipe-2",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 137.3
          },
          {
            "id": "snipe-3",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 135.6
          },
          {
            "id": "snipe-4",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 136.27
          },
          {
            "id": "snipe-5",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 137.99
          },
          {
            "id": "snipe-6",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 138.58
          },
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 260,
            "refusedReasons": {
              "NEEDS_APPROVAL": 260
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          }
        ],
        "houseFees": 155.39,
        "sniperFees": 0,
        "priorityFees": 1.77,
        "creditsConserved": true
      },
      "fair": {
        "rules": "fair",
        "approvals": "deny",
        "logHash": "806b96bafead9e85",
        "events": 1107,
        "ticks": 900,
        "coins": [
          {
            "id": "c1",
            "symbol": "BOLT",
            "name": "Lightning Bolt",
            "nounId": 82,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2604.89,
            "marketCap": 9759.18,
            "holders": 41,
            "trades": 524,
            "volume": 15465.68,
            "creatorFees": 45.88,
            "risk": {
              "score": 1,
              "badge": "low",
              "flags": [],
              "devPct": 0.7,
              "bundlePct": 0,
              "sniperPct": 1.3,
              "top10Pct": 20.6
            },
            "sniperShareFirstMinute": 18.9
          }
        ],
        "bots": [
          {
            "id": "snipe-1",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 42.98
          },
          {
            "id": "snipe-2",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 34.97
          },
          {
            "id": "snipe-3",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 40.84
          },
          {
            "id": "snipe-4",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 36.84
          },
          {
            "id": "snipe-5",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 43.23
          },
          {
            "id": "snipe-6",
            "strategy": "sniper",
            "label": "Sniper",
            "fills": 2,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 38.94
          },
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 338,
            "refusedReasons": {
              "NEEDS_APPROVAL": 338
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          }
        ],
        "houseFees": 145.29,
        "sniperFees": 139.17,
        "priorityFees": 0.54,
        "creditsConserved": true
      }
    },
    {
      "id": "dev-dump",
      "title": "Dev dump",
      "summary": "The creator buys close to the 5% cap, four wallets it funded buy in the same tick, and four minutes later the creator sells everything. The risk panel should say so before it happens.",
      "seed": "dev-dump-1",
      "ticks": 1200,
      "coins": [
        {
          "symbol": "SLICE",
          "name": "The Slice",
          "nounId": 55,
          "launchTick": 5,
          "image": "/case-studies/launchpad/coins/dev-dump-slice.svg"
        }
      ],
      "naked": {
        "rules": "naked",
        "approvals": "deny",
        "logHash": "3a9e27d90d4f1380",
        "events": 1449,
        "ticks": 1200,
        "coins": [
          {
            "id": "c1",
            "symbol": "SLICE",
            "name": "The Slice",
            "nounId": 55,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 3509.83,
            "marketCap": 13164.93,
            "holders": 45,
            "trades": 551,
            "volume": 16615.03,
            "creatorFees": 49.71,
            "risk": {
              "score": 23,
              "badge": "high",
              "flags": [
                "DEV_DUMP",
                "BUNDLED",
                "WHALE"
              ],
              "devPct": 0,
              "bundlePct": 12.5,
              "sniperPct": 2.7,
              "top10Pct": 29.4
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 319,
            "refusedReasons": {
              "NEEDS_APPROVAL": 319
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "momentum-2",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 368,
            "refusedReasons": {
              "NEEDS_APPROVAL": 368
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 1,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 35.39
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 0,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          }
        ],
        "houseFees": 157.43,
        "sniperFees": 0,
        "priorityFees": 0,
        "creditsConserved": true
      },
      "fair": {
        "rules": "fair",
        "approvals": "deny",
        "logHash": "697bfebf1f44733c",
        "events": 1467,
        "ticks": 1200,
        "coins": [
          {
            "id": "c1",
            "symbol": "SLICE",
            "name": "The Slice",
            "nounId": 55,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 3118.98,
            "marketCap": 11631.54,
            "holders": 46,
            "trades": 546,
            "volume": 15991.38,
            "creatorFees": 47.64,
            "risk": {
              "score": 2,
              "badge": "low",
              "flags": [],
              "devPct": 1,
              "bundlePct": 0,
              "sniperPct": 0.9,
              "top10Pct": 23.9
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 318,
            "refusedReasons": {
              "NEEDS_APPROVAL": 318
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "momentum-2",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 381,
            "refusedReasons": {
              "NEEDS_APPROVAL": 381
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 1,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 34.48
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 0,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          }
        ],
        "houseFees": 150.85,
        "sniperFees": 73.15,
        "priorityFees": 0,
        "creditsConserved": true
      }
    },
    {
      "id": "graduation-run",
      "title": "Graduation run",
      "summary": "A busy coin fills its curve, graduates into a pool with the liquidity tokens burned, and keeps trading there. A second coin launches later and competes for attention.",
      "seed": "graduation-run-1",
      "ticks": 2400,
      "coins": [
        {
          "symbol": "MOON",
          "name": "Moon Room",
          "nounId": 64,
          "launchTick": 5,
          "image": "/case-studies/launchpad/coins/graduation-run-moon.svg"
        },
        {
          "symbol": "GRID",
          "name": "Microgrid",
          "nounId": 82,
          "launchTick": 1500,
          "image": "/case-studies/launchpad/coins/graduation-run-grid.svg"
        }
      ],
      "naked": {
        "rules": "naked",
        "approvals": "deny",
        "logHash": "39b6dc0fae4a5560",
        "events": 5252,
        "ticks": 2400,
        "coins": [
          {
            "id": "c1",
            "symbol": "MOON",
            "name": "Moon Room",
            "nounId": 64,
            "status": "migrated",
            "graduatedAtTick": 265,
            "creditsRaised": 8500.54,
            "marketCap": 67057.51,
            "holders": 165,
            "trades": 2629,
            "volume": 134176.18,
            "creatorFees": 1206.87,
            "risk": {
              "score": 5,
              "badge": "low",
              "flags": [],
              "devPct": 1,
              "bundlePct": 0,
              "sniperPct": 7.4,
              "top10Pct": 16.6
            },
            "sniperShareFirstMinute": 0
          },
          {
            "id": "c2",
            "symbol": "GRID",
            "name": "Microgrid",
            "nounId": 82,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2790.03,
            "marketCap": 10414.56,
            "holders": 69,
            "trades": 91,
            "volume": 2953.49,
            "creatorFees": 8.76,
            "risk": {
              "score": 3,
              "badge": "low",
              "flags": [],
              "devPct": 1,
              "bundlePct": 0,
              "sniperPct": 2.4,
              "top10Pct": 17.9
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 31,
            "refusedByPolicy": 14,
            "refusedReasons": {
              "WINDOW_CAP": 14
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 402.39
          },
          {
            "id": "momentum-2",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 1317,
            "refusedReasons": {
              "NEEDS_APPROVAL": 1317
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "mm-1",
            "strategy": "market-maker",
            "label": "Market maker",
            "fills": 188,
            "refusedByPolicy": 877,
            "refusedReasons": {
              "COOLDOWN": 664,
              "WINDOW_CAP": 213
            },
            "refusedByEngine": {
              "SLIPPAGE": 6
            },
            "queuedForApproval": 0,
            "netCredits": -10.53
          },
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 3,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 236.26
          },
          {
            "id": "holder-2",
            "strategy": "holder",
            "label": "Holder",
            "fills": 3,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 86.92
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 5,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 1.34
          }
        ],
        "houseFees": 174.09,
        "sniperFees": 0,
        "priorityFees": 0,
        "creditsConserved": true
      },
      "fair": {
        "rules": "fair",
        "approvals": "deny",
        "logHash": "524787e22a161c7e",
        "events": 5387,
        "ticks": 2400,
        "coins": [
          {
            "id": "c1",
            "symbol": "MOON",
            "name": "Moon Room",
            "nounId": 64,
            "status": "migrated",
            "graduatedAtTick": 277,
            "creditsRaised": 8500.54,
            "marketCap": 66318.99,
            "holders": 165,
            "trades": 2642,
            "volume": 133356.53,
            "creatorFees": 1195.6,
            "risk": {
              "score": 3,
              "badge": "low",
              "flags": [],
              "devPct": 0.9,
              "bundlePct": 0,
              "sniperPct": 2.8,
              "top10Pct": 15.8
            },
            "sniperShareFirstMinute": 0
          },
          {
            "id": "c2",
            "symbol": "GRID",
            "name": "Microgrid",
            "nounId": 82,
            "status": "curve",
            "graduatedAtTick": null,
            "creditsRaised": 2808.98,
            "marketCap": 10482.85,
            "holders": 75,
            "trades": 104,
            "volume": 3252.29,
            "creatorFees": 9.59,
            "risk": {
              "score": 1,
              "badge": "low",
              "flags": [],
              "devPct": 1,
              "bundlePct": 0,
              "sniperPct": 0,
              "top10Pct": 17.2
            },
            "sniperShareFirstMinute": 0
          }
        ],
        "bots": [
          {
            "id": "momentum-1",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 31,
            "refusedByPolicy": 9,
            "refusedReasons": {
              "WINDOW_CAP": 9
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 346.6
          },
          {
            "id": "momentum-2",
            "strategy": "momentum",
            "label": "Momentum",
            "fills": 0,
            "refusedByPolicy": 1348,
            "refusedReasons": {
              "NEEDS_APPROVAL": 1348
            },
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 0
          },
          {
            "id": "mm-1",
            "strategy": "market-maker",
            "label": "Market maker",
            "fills": 196,
            "refusedByPolicy": 952,
            "refusedReasons": {
              "COOLDOWN": 689,
              "WINDOW_CAP": 263
            },
            "refusedByEngine": {
              "SLIPPAGE": 3
            },
            "queuedForApproval": 0,
            "netCredits": -10.77
          },
          {
            "id": "holder-1",
            "strategy": "holder",
            "label": "Holder",
            "fills": 3,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 206.38
          },
          {
            "id": "holder-2",
            "strategy": "holder",
            "label": "Holder",
            "fills": 3,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": 92.29
          },
          {
            "id": "dip-1",
            "strategy": "dip-buyer",
            "label": "Dip buyer",
            "fills": 1,
            "refusedByPolicy": 0,
            "refusedReasons": {},
            "refusedByEngine": {},
            "queuedForApproval": 0,
            "netCredits": -10.32
          }
        ],
        "houseFees": 178.1,
        "sniperFees": 249.31,
        "priorityFees": 0,
        "creditsConserved": true
      }
    }
  ],
  "sources": [
    {
      "title": "pump-fun/pump-public-docs, program README",
      "url": "https://github.com/pump-fun/pump-public-docs/blob/main/docs/PUMP_PROGRAM_README.md",
      "note": "the curve constants copied here: 30 of virtual quote liquidity, 1,073,000,000 virtual coins, 793,100,000 coins sold on the curve"
    }
  ],
  "code": "https://github.com/mhoydich/pointcast/tree/main/src/lib/launchpad"
}