The mechanics of
a market’s reserve.

Catch technical paperFamily V1 · 10 chapters

How a fixed-supply cAsset captures value, releases inventory and gives its holders a claim on an isolated reserve.

A Catch mark sculpted from pale marble spheres, above a circular plinth with a fine mint-green seam.

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.

  1. Your walletUnderlying or cAsset
  2. Canonical poolExchange at the market price
  3. 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.

(2.1)
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.

(3.1)

Redeeming q cAssets returns their pro-rata share of the reserve. The contract rounds the payout down to the underlying token’s smallest unit.

(3.2)
A marble reserve vessel releases a mint-green stream into a shallow dish while a blank disc enters a slot beside it.
The holder burns a cAsset; its share of the underlying reserve leaves with it. Illustration, not a live balance.

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.

Two streams of mint-green light run from a marble market console into one reserve vessel beneath it.
Buys and sells through the canonical market contribute. Settlement delivers the reserve’s share; principal and treasury remain separate.

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.

Separate flows, separate accounting
FlowHolder reserve / burnTreasury
Settled hook underlying70% to reserve30%
Primary purchase payment70% to reserve30%
Collected position underlying fees70% to reserve30%
Collected position cAsset fees70% burned30% 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.

(5.1)
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.
One schedule, every V1 familyReference USD · logarithmic scale
The 64 fixed raw release pricesA stepped schedule, not a forecast. Reference USD price rises from about $0.1318 in step 1 to $38,169 in step 64. Each family converts the schedule to its underlying at its fixed launch denomination. The complete values are in the table below.0.11101001k10k100k116324864
Step 1–64. Reference dollars describe the fixed pricing ruler, not current USD prices or trading volume. Only a paid release advances the cursor.

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.

Band 1 · steps 1–4. Family V1 raw schedule at a unit denomination; rounded, not a live quote.
StepcAsset allocationReference USD / cAsset
128,718.16$0.131768
227,971.6$0.160882
327,244.44$0.196429
426,536.19$0.239829
Explore the remaining 60 steps
Bands 2–16 · steps 5–64. Family V1 raw schedule at a unit denomination; rounded, not a live quote.
StepcAsset allocationReference USD / cAsset
525,846.35$0.292818
625,174.44$0.357516
724,520$0.436508
823,882.57$0.532953
923,261.71$0.650707
1022,656.99$0.794479
1122,068$0.970017
1221,494.31$1.18434
1320,935.54$1.44602
1420,391.29$1.76551
1519,861.2$2.15559
1619,344.88$2.63187
1718,841.99$3.21337
1818,352.16$3.92336
1917,875.08$4.79021
2017,410.39$5.84859
2116,957.79$7.14082
2216,516.95$8.71857
2316,087.57$10.6449
2415,669.35$12.9969
2515,262.01$15.8685
2614,865.25$19.3746
2714,478.81$23.6554
2814,102.42$28.8819
2913,735.81$35.2633
3013,378.73$43.0547
3113,030.93$52.5675
3212,692.18$64.1821
3312,362.23$78.3629
3412,040.86$95.677
3511,727.84$116.817
3611,422.96$142.627
3711,126$174.14
3810,836.77$212.616
3910,555.05$259.592
4010,280.66$316.949
4110,013.4$386.977
429,753.093$472.479
439,499.549$576.872
449,252.596$704.33
459,012.063$859.95
468,777.784$1,049.95
478,549.594$1,281.94
488,327.337$1,565.18
498,110.857$1,911
507,900.005$2,333.23
517,694.635$2,848.75
527,494.603$3,478.17
537,299.771$4,246.67
547,110.005$5,184.96
556,925.171$6,330.56
566,745.143$7,729.28
576,569.794$9,437.04
586,399.004$11,522.1
596,232.654$14,067.9
606,070.628$17,176.2
615,912.815$20,971.2
625,759.104$25,604.7
635,609.389$31,262
645,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.

(6.1)
(6.2)

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.

(7.1)

If q tokens are released for payment x, reserve and active supply become:

(7.2)

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

  1. Read the remaining inventory in the current step and calculate its protected price.
  2. Buy the smaller of the affordable amount and that step’s remaining inventory.
  3. Deduct the rounded-up payment; update simulated reserve and active claims.
  4. 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.

(8.1)
(8.2)

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

What is fixed, and what can still change
AreaBoundary
Catch supply and curveNo post-construction mint. Fixed schedule and launch denomination. No override of the 70% coverage rule.
Primary release pauseGovernance or Safety may pause purchases; only Governance may resume. This does not pause reserve redemption.
Reserve assetsHeld for that family’s active claims. Treasury assets and other families are separate.
Underlying issuerMay retain upgrade, pause and address-blocking controls. A fixed proxy runtime alone cannot prove the implementation is unchanged.
Market exitsThe 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.

Fractions within a band, expressed over 10¹⁸
SubstepWidth numeratorAllocation numerator
1189207115002721066259962535747032355
2225006447370373982253204483747829648
3267579268134334037246622115782069244
4Remaining band widthRemaining 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
  1. paymentUsdE6 = ceil(widthE6 × 200 / 10,000)
  2. paymentUnderlying = ceil(paymentUsdE6 × 10³⁰ / launchUnderlyingUsdE18)
  3. rawPriceE18 = ceil(paymentUnderlying × 10¹⁸ / allocation)
  4. 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.

catch
Total reserveUnavailable