STUD.com
← Objectives

Compute · Assess & Decide · Analysis & Finance

Compute a liquidation-preference waterfall (multiple, participating vs non, cap)

You get each preferred investor's exit payout and the common-shareholder (founder and employee) residual for a given exit value, computed from each investor's invested amount, preference multiple, participating-or-not, participation cap, and as-converted ownership; payouts always sum exactly to the exit.

You receive: A reviewed liquidation-preference waterfall calculator (a pure function) plus its passing held-out test report, run on your exit value and your preferred stack.

Part of Pitch Investors

What's verified: STUD verifies the ARITHMETIC of a single-tier liquidation waterfall given the exit value and the preferred stack you supply, and grades the money that actually settles: each preferred holder's payout, the common (founder and employee) payout, and the total. It checks that each preference is invested times its multiple; that each holder ELECTS the option that maximizes its own payout (a non-participating holder stands on its preference or converts to common; a participating holder participates or reverts to conversion), decided against the RESIDUAL that remains after the other holders' preferences, not against the whole exit; that a participating holder's extra take is a pro-rata share of that residual; that a participation cap limits a participant, reverting it to conversion when conversion is higher and otherwise clamping it and redistributing the excess so nothing leaks (a cap below the guaranteed preference is treated as equal to the preference); that under a shortfall the proceeds flow to preference holders by seniority; and that every payout is non-negative and the payouts sum exactly to the exit. STUD does NOT verify that your invested amounts, multiples, ownership percentages, cap, or exit value are real, that a term sheet contains these terms, or that an exit at this value will happen. Honest limits: (a) it models ONE pari-passu class of preferred (equal rank except a seniority tiebreak under a shortfall), not multiple stacked seniority tiers each with its own sub-waterfall, accrued dividends, pay-to-play, or anti-dilution; (b) the intermediate residual and preferences-drawn figures are computed internally but are NOT graded (only the per-holder payouts, common payout, and total settle money).

Opens soon

Cost20 credits
AcceptanceAutomated check against your inputs
ProtectionHeld until verified delivery

This objective is verified and ready. It opens soon, once sign-in and payments are live.

Deliverable interface

The exact vocabulary the automated check enforces: keys, tokens, entry points, and worked examples. Generated from the verification source.

{
 "constants": {},
 "entryName": "compute_liquidation_preference",
 "expectNote": "expect is the comparison-space value (your return value goes through normalize first when one is published)",
 "hiddenCaseCount": 16,
 "hiddenCaseNames": [
  "nonparticipating_converts",
  "nonparticipating_conversion_threshold",
  "participating_capped_reverts",
  "participating_capped_not_reached",
  "shortfall_senior_takes_all",
  "zero_exit_guard",
  "cap_binds_without_reverting_leak_branch",
  "two_cap_cascade",
  "election_downround_nonpart_should_stand",
  "election_senior_participation_junior_stands",
  "mixed_participating_and_nonparticipating",
  "two_participating_uncapped",
  "high_multiple_shortfall_boundary",
  "participating_cap_binds_mid_stack",
  "small_exit_multi_holder",
  "large_common_single_nonparticipating"
 ],
 "inputKeys": [
  "__common__",
  "cap",
  "capMultiple",
  "commonEquityPct",
  "equityPct",
  "exitValue",
  "id",
  "invested",
  "multiple",
  "participating",
  "preference",
  "preferredStack",
  "room",
  "seniority",
  "weight"
 ],
 "normalizeSource": "def _normalize_compute_liquidation_preference(r):\n    if not isinstance(r, dict):\n        return repr(r)\n    try:\n        payouts = r.get(\"payouts\") or {}\n        # Round to the SAME precision the reference uses (6): the grader compares\n        # normalize(submission) to the RAW reference output with exact equality.\n        return {\n            \"payouts\": {str(k): round(float(v), 6) for k, v in payouts.items()},\n            \"commonPayout\": round(float(r[\"commonPayout\"]), 6),\n            \"totalPayout\": round(float(r[\"totalPayout\"]), 6),\n        }\n    except Exception:\n        return repr(r)\n",
 "returnShapes": [
  [
   "commonPayout",
   "payouts",
   "totalPayout"
  ]
 ],
 "signature": "def compute_liquidation_preference(inp):",
 "submission": "python exposing the entry function; inp is one input object; graded on held-out cases",
 "tier": "calculator",
 "visibleCases": [
  {
   "expect": {
    "commonPayout": 54500000,
    "payouts": {
     "0": 500000,
     "1": 5000000,
     "2": 40000000
    },
    "totalPayout": 100000000
   },
   "input": {
    "commonEquityPct": 0.876,
    "exitValue": 100000000,
    "preferredStack": [
     {
      "capMultiple": 0,
      "equityPct": 0.004,
      "invested": 500000,
      "multiple": 1,
      "participating": false,
      "seniority": 1
     },
     {
      "capMultiple": 0,
      "equityPct": 0.04,
      "invested": 5000000,
      "multiple": 1,
      "participating": false,
      "seniority": 2
     },
     {
      "capMultiple": 0,
      "equityPct": 0.08,
      "invested": 20000000,
      "multiple": 2,
      "participating": false,
      "seniority": 3
     }
    ]
   },
   "name": "source_three_investor_stack_100m"
  },
  {
   "expect": {
    "commonPayout": 90250000,
    "payouts": {
     "0": 9750000
    },
    "totalPayout": 100000000
   },
   "input": {
    "commonEquityPct": 0.95,
    "exitValue": 100000000,
    "preferredStack": [
     {
      "capMultiple": 0,
      "equityPct": 0.05,
      "invested": 5000000,
      "multiple": 1,
      "participating": true,
      "seniority": 1
     }
    ]
   },
   "name": "participating_uncapped_residual"
  }
 ],
 "vocabulary": [
  "__common__",
  "cap",
  "capMultiple",
  "commonEquityPct",
  "commonPayout",
  "equityPct",
  "exitValue",
  "id",
  "inf",
  "invested",
  "multiple",
  "participating",
  "payouts",
  "preference",
  "preferredStack",
  "room",
  "seniority",
  "totalPayout",
  "weight"
 ]
}

Get early access to STUD the day it goes live.