The mechanics of
a market’s reserve.
How a fixed-supply cAsset captures value, releases inventory and gives its holders a claim on an isolated reserve.

The deployed V1 rules, explained from the contracts. Examples are illustrative, not live prices or transaction quotes. Future CATCH-token proposals are outside this specification.
01One family, one reserve
Catch is a standard for markets with their own redeemable backing. Each family has a cAsset, an underlying token, a canonical market, a liquid reserve and a separate inventory of preminted tokens available through paid release.
cGOLD holds its reserve in GLD. cSPY holds its reserve in SPY. The same relationships apply to each admitted V1 family. A holder has no claim on another family’s reserve, liquidity principal or Catch’s treasury.
A cAsset is not its underlying token, a stablecoin or direct ownership of the security or commodity the underlying may represent. Its redemption right is the contract-defined share of its own reserve.
- Your walletUnderlying or cAsset
- Canonical poolExchange at the market price
- Your walletThe quoted output
The underlying-side hook charge accrues separately. On settlement, 70% goes to this family’s reserve and 30% to treasury. No release inventory moves.
These are separate actions. A secondary trade never releases curve inventory. A redemption does not need a buyer in the pool. A primary purchase only succeeds when its own coverage and execution checks pass.
02Supply & active claims
Every family starts with exactly 1,000,000 cAssets. The one-sided genesis position receives 100,000; release custody receives 900,000. There is no later mint and no replacement supply after a burn.
- S
- Current total supply, already reduced by permanent burns.
- U
- 900,000 minus cumulative paid releases. This is the release vault’s accounting value, not its incidental token balance.
- A
- Supply entitled to participate in reserve claims, including tokens held in the pool or treasury.
Equivalently, active supply is 100,000 plus tokens released, minus tokens burned. Unreleased inventory does not claim reserve assets. The locked position’s current cAsset inventory changes as people trade; it is not an additional allocation or an amount permanently removed from active claims.
Reading the supply correctly
With no paid releases and 1,000 tokens burned, total supply is 999,000, unreleased inventory is 900,000 and active claims are 99,000. Dividing the reserve by one million would understate backing per active token.
03Backing & redemption
Let R be the actual underlying-token balance held by the family’s reserve vault. Backing per active token, N, is a ratio in underlying units, not the token’s pool price.
Redeeming q cAssets returns their pro-rata share of the reserve. The contract rounds the payout down to the underlying token’s smallest unit.

A pro-rata exit
Suppose a family’s reserve holds 50 underlying tokens against 100,000 active cAssets. Backing is 0.0005 underlying per token. Redeeming 1,000 cAssets pays 0.5 underlying, leaving 49.5 against 99,000 claims: still 0.0005 each.
Redemption normally preserves backing per remaining token, apart from rounding dust; it does not manufacture additional value. A burn without a reserve payout, or an underlying contribution without new claims, can increase this ratio. If active supply is zero, the ratio is undefined.
You approve the reserve to spend your cAssets, then redeem. It pulls and burns those tokens and sends the underlying to your recipient, subject to minimum output and delivery checks. Catch cannot pause redemption. It requires neither a USD oracle nor an open primary-release gate. Issuer transfer restrictions and chain availability can still prevent execution.
04Where value flows
The canonical market applies a 3% underlying-side hook charge. Once settled, 70% of that charge goes to the family’s reserve and 30% to treasury. Unsettled hook claims are not yet liquid backing.

100 underlying units supplied for an exact-input buy
The hook takes 3 units. Of those, 2.1 units reach the reserve and 0.9 go to treasury on settlement. The remaining 97 enter pool execution, whose own charges and price impact still apply. This is a fee example, not a token-output quote.
| Flow | Holder reserve / burn | Treasury |
|---|---|---|
| Settled hook underlying | 70% to reserve | 30% |
| Primary purchase payment | 70% to reserve | 30% |
| Collected position underlying fees | 70% to reserve | 30% |
| Collected position cAsset fees | 70% burned | 30% in cAsset |
The primary split applies to the purchase payment; it is not an extra 3% trading charge. Direct transfers of the correct underlying to the reserve also increase backing but create no depositor privilege or withdrawal right.
Integer rounding and the underlying-side fee
For a gross underlying amount, hook fee = ceil(gross × 300 / 10,000). Where the underlying leg is net of the hook, fee = ceil(net × 300 / 9,700). The appropriate form depends on swap direction and whether input or output is specified.
For settled hook and position fees, the reserve/burn share is rounded down and treasury receives the remainder. Primary purchases instead round the reserve share up. Collecting fees never releases locked liquidity principal. Other liquidity providers’ fees are not Catch revenue.
05The 64-step release curve
The 900,000-token release inventory is divided into 16 major bands, each containing four steps. Band allocation falls by approximately 10% from one band to the next. At the same time, the schedule’s pricing width doubles. Smaller allocations against larger widths produce increasing raw prices.
The width is a fixed mathematical ruler, inherited from the curve design. It is not a target for actual trading volume, and the 2% conversion used in this calculation is not an additional fee.
- Wₖ
- The step’s fixed ruler width in reference dollars.
- Qₖ
- The cAsset inventory allocated to that step.
- D
- USD per underlying token fixed at launch. It denominates the schedule; it is not a live oracle.
- pₖ
- The raw marginal price, in underlying per cAsset, before backing protection.
The first band
The first step offers about 28,718 cAssets at a raw reference price of $0.1318 per token. Divide this reference price by the family’s fixed launch denomination to express it in the underlying asset. The secondary pool’s starting price is a separate launch parameter.
| Step | cAsset allocation | Reference USD / cAsset |
|---|---|---|
| 1 | 28,718.16 | $0.131768 |
| 2 | 27,971.6 | $0.160882 |
| 3 | 27,244.44 | $0.196429 |
| 4 | 26,536.19 | $0.239829 |
Explore the remaining 60 steps
| Step | cAsset allocation | Reference USD / cAsset |
|---|---|---|
| 5 | 25,846.35 | $0.292818 |
| 6 | 25,174.44 | $0.357516 |
| 7 | 24,520 | $0.436508 |
| 8 | 23,882.57 | $0.532953 |
| 9 | 23,261.71 | $0.650707 |
| 10 | 22,656.99 | $0.794479 |
| 11 | 22,068 | $0.970017 |
| 12 | 21,494.31 | $1.18434 |
| 13 | 20,935.54 | $1.44602 |
| 14 | 20,391.29 | $1.76551 |
| 15 | 19,861.2 | $2.15559 |
| 16 | 19,344.88 | $2.63187 |
| 17 | 18,841.99 | $3.21337 |
| 18 | 18,352.16 | $3.92336 |
| 19 | 17,875.08 | $4.79021 |
| 20 | 17,410.39 | $5.84859 |
| 21 | 16,957.79 | $7.14082 |
| 22 | 16,516.95 | $8.71857 |
| 23 | 16,087.57 | $10.6449 |
| 24 | 15,669.35 | $12.9969 |
| 25 | 15,262.01 | $15.8685 |
| 26 | 14,865.25 | $19.3746 |
| 27 | 14,478.81 | $23.6554 |
| 28 | 14,102.42 | $28.8819 |
| 29 | 13,735.81 | $35.2633 |
| 30 | 13,378.73 | $43.0547 |
| 31 | 13,030.93 | $52.5675 |
| 32 | 12,692.18 | $64.1821 |
| 33 | 12,362.23 | $78.3629 |
| 34 | 12,040.86 | $95.677 |
| 35 | 11,727.84 | $116.817 |
| 36 | 11,422.96 | $142.627 |
| 37 | 11,126 | $174.14 |
| 38 | 10,836.77 | $212.616 |
| 39 | 10,555.05 | $259.592 |
| 40 | 10,280.66 | $316.949 |
| 41 | 10,013.4 | $386.977 |
| 42 | 9,753.093 | $472.479 |
| 43 | 9,499.549 | $576.872 |
| 44 | 9,252.596 | $704.33 |
| 45 | 9,012.063 | $859.95 |
| 46 | 8,777.784 | $1,049.95 |
| 47 | 8,549.594 | $1,281.94 |
| 48 | 8,327.337 | $1,565.18 |
| 49 | 8,110.857 | $1,911 |
| 50 | 7,900.005 | $2,333.23 |
| 51 | 7,694.635 | $2,848.75 |
| 52 | 7,494.603 | $3,478.17 |
| 53 | 7,299.771 | $4,246.67 |
| 54 | 7,110.005 | $5,184.96 |
| 55 | 6,925.171 | $6,330.56 |
| 56 | 6,745.143 | $7,729.28 |
| 57 | 6,569.794 | $9,437.04 |
| 58 | 6,399.004 | $11,522.1 |
| 59 | 6,232.654 | $14,067.9 |
| 60 | 6,070.628 | $17,176.2 |
| 61 | 5,912.815 | $20,971.2 |
| 62 | 5,759.104 | $25,604.7 |
| 63 | 5,609.389 | $31,262 |
| 64 | 5,463.566 | $38,169.3 |
Steps are numbered 1–64 here; the contract indexes them 0–63. The table computes the schedule with D = $1 to show reference dollars. Actual families use their own denomination and integer rounding. These are raw prices before backing protection, not executable quotes or live USD values.
06The opening condition
Before selling any release inventory, the controller checks that backing per active cAsset has reached 70% of the first raw step price. This threshold always references contract step 0, even when purchases have advanced to a later step.
The same test in every family
If a family’s first raw price is 0.01 underlying per cAsset, coverage requires 0.007 underlying of backing per active token. At 100,000 active claims, that means 700 underlying in reserve. After 1,000 burns without payouts, the same per-token threshold requires 693 underlying.
This is an illustrative denomination, not a live family quote. Changing the USD display price does not change either underlying threshold.
A repeated check, not a one-time activation
Every purchase checks again. There is no permanent “unlocked” flag and no operator override of the deployed 70% rule. Purchases can also be paused, inventory can be exhausted, or another execution check can fail.
That does not mean pool-price moves or changing USD conversions keep opening and closing the gate. They are not inputs. Under normal operation, pro-rata redemption preserves underlying backing per token; protected purchases do not dilute it; settled reserve contributions and burns without payouts can raise it. Once coverage is reached, these ordinary operations should not push it back below the threshold. External balance-changing or issuer behaviour remains a separate risk.
The exact integer boundary
Using raw 18-decimal amounts: threshold = floor(rawStepPriceUnderlying(0) × 7,000 / 10,000). Coverage passes when floor(R × 10¹⁸ / A) ≥ threshold. For A > 0, the minimum raw reserve is ceil(threshold × A / 10¹⁸). The controller also requires remaining inventory and a step index below 64.
07Pricing & crossing steps
The raw curve is only one part of the price. Because only 70% of a purchase enters the reserve while all purchased tokens become active claims, the controller imposes a non-dilutive minimum.
If q tokens are released for payment x, reserve and active supply become:
Why the protected price matters
Illustrative family: reserve 10,000 underlying, active supply 100,000, backing 0.10 each. If the raw step is 0.12, the payable price rises to approximately 0.142857 underlying. A 1,000-token purchase pays approximately 142.857; 100 enters the reserve and 42.857 goes to treasury.
The result is 10,100 underlying against 101,000 active claims: backing stays 0.10. Paying only the raw 0.12 would add just 84 to the reserve and dilute backing, so that lower price is not permitted. This example ignores integer rounding.
One purchase can cross several steps
- Read the remaining inventory in the current step and calculate its protected price.
- Buy the smaller of the affordable amount and that step’s remaining inventory.
- Deduct the rounded-up payment; update simulated reserve and active claims.
- If the step is exhausted and budget remains, advance and recalculate the next step’s protected price.
A buyer exhausting the final 100 tokens in a step, for example, pays that step’s price for those 100. Further tokens use the next step’s newly calculated price. The controller does not apply the cheaper starting price to the whole order.
Execution uses a maximum underlying input, minimum cAsset output, recipient and deadline. There is no caller-selected “maximum steps” argument; the schedule is bounded by 64 steps. The amount actually spent can be below the maximum, and unspent input stays in the wallet. A final onchain check rejects any dilution of backing. Quotes can change or fail before execution.
08USD value & premium to NAV
For presentation, let V be the indexed USD reference for one underlying token, and M the pool price in underlying per cAsset.
A pool price of 0.03 underlying with backing of 0.01 is 3× NAV, or a 200% premium. A 200% premium is not additional reserve value. When backing is zero, this ratio is undefined. The same valid USD conversion applied to both sides cancels out of the ratio.
Current reserve value and cumulative funding answer different questions. A reserve’s USD value can move with its underlying price even without an inflow. Cumulative contributions, holder redemptions and treasury receipts belong to separate flow ledgers. Neither locked pool principal nor unsettled fees should be added to liquid reserve NAV.
USD references are shared indexed data, not extra wallet RPC calls. A USDG-quoted reference assumes dollar parity; it is not proof of parity, a guaranteed dollar redemption or an oracle used by the release controller.
09Controls & dependencies
| Area | Boundary |
|---|---|
| Catch supply and curve | No post-construction mint. Fixed schedule and launch denomination. No override of the 70% coverage rule. |
| Primary release pause | Governance or Safety may pause purchases; only Governance may resume. This does not pause reserve redemption. |
| Reserve assets | Held for that family’s active claims. Treasury assets and other families are separate. |
| Underlying issuer | May retain upgrade, pause and address-blocking controls. A fixed proxy runtime alone cannot prove the implementation is unchanged. |
| Market exits | The genesis position starts one-sided. Pool depth and price impact vary; reserve backing is not a promise of pool liquidity. |
Neither this paper nor verified source is a security audit. Wallet compromise, contract defects, thin reference markets, issuer actions and chain availability remain risks. See dependencies and risks before interacting.
10Parameters & source notes
The arithmetic below is the reproducibility layer for the readable formulas. V1 uses 18-decimal cAssets and underlying tokens. Ceil and floor refer to integer arithmetic, not rounding for display.
Band weights and step allocations
For major band m = 0…15: Wₘ = 1,000,000 × 2ᵐ reference dollars. Weight starts at 10¹⁵ and each next weight is floor(previous × 9 / 10). The weight sum is 8,146,979,811,148,159. For bands 0…14, the raw token allocation is floor(900,000 × 10¹⁸ × weight / weight sum). The last band receives the exact unallocated remainder.
| Substep | Width numerator | Allocation numerator |
|---|---|---|
| 1 | 189207115002721066 | 259962535747032355 |
| 2 | 225006447370373982 | 253204483747829648 |
| 3 | 267579268134334037 | 246622115782069244 |
| 4 | Remaining band width | Remaining band allocation |
The first three products are floored. The fourth substep takes the remainder. The 64 allocations therefore total exactly 900,000 tokens.
Raw and protected prices, in contract units
- paymentUsdE6 = ceil(widthE6 × 200 / 10,000)
- paymentUnderlying = ceil(paymentUsdE6 × 10³⁰ / launchUnderlyingUsdE18)
- rawPriceE18 = ceil(paymentUnderlying × 10¹⁸ / allocation)
- protectedPriceE18 = max(rawPriceE18, ceil(R × 10,000 × 10¹⁸ / (A × 7,000)))
For each quote segment: tokens = min(step inventory, floor(available underlying × 10¹⁸ / protectedPriceE18)). Payment = ceil(tokens × protectedPriceE18 / 10¹⁸). Simulated reserve receives ceil(payment × 7,000 / 10,000) before pricing the next segment.
Execution routes the combined payment, then enforces floor(reserveAfter × activeBefore / activeAfter) ≥ reserveBefore. That final check is authoritative even if an integer-boundary quote or a changed state cannot execute.
Read the deployed implementation
The public source record (source-v1.0.2) includes exact compiler inputs and deployed-family identities. See the reproducible build guide and review and testing history. The latter distinguishes AI-assisted Pashov/EthSkills reviews across Codex and Claude sessions from a commissioned independent audit, and records the scope of the edge-case and stateful invariant tests.
All V1 families use these mechanics with their own underlying, launch denomination and contract addresses. Start at contracts and sources, choose a family from the market directory, then open its Contracts & pool section. A matching ticker alone is not an identity check.
- Release controller & curve libraryreleaseOpen · rawStepPriceUnderlying · previewBuy · buyRelease
- Reserve vaultactiveClaimSupply · redemptionUnderlying · redeem
- Fee ledger & release custodyUnderlying routing, burns, cumulative receipts and unreleased inventory
Worked deployment example: cGOLD
This appendix applies the shared rules to the first family; it does not define a separate gold-only model. cGOLD fixed D at $300 per GLD. Its exact first raw step is 0.000439227547982765 GLD per cGOLD, or approximately $0.1318 at that denomination. The roughly $0.03 pool-launch target was a separate parameter.
At 100,000 active claims the exact opening reserve is 30.7459283587935 GLD: about $9,223.78 at the launch denomination, or $12,298.37 at a hypothetical $400 display price. Both dollar figures describe the same underlying threshold, not a fixed dollar fundraising target.
These inputs were checked against the deployed-source package and admitted launch denomination. For current balances and quotes, open the cGOLD market.