§00, Documentation

How Coil works.
Why it works.

One page. Everything we know about the mechanic, the math, the legal posture, and the risks. Skip to legal or risks if that’s why you’re here.

§01

The mechanic

Coil splits one tokenized share of STRC preferred stock into two freely-tradeable tokens that together equal the original.

1 sSTRCx → 1 PT-sSTRCx + 1 YT-sSTRCx

PT (Principal Token) is the right to redeem one share of the underlying for $100 par at maturity (1 November 2026). It pays no dividend.

YT (Yield Token) is the right to every dividend that share pays from now until maturity. It returns nothing at maturity (the principal claim went to PT).

The mechanic is Pendle’s, invented on Ethereum in 2022, currently securing roughly $7B of TVL across LSTs, T-bills, and other yield-bearing assets. Coil applies it to a U.S.-listed preferred stock for the first time.

What you can do with each leg

PositionHowWhat you get
Buy FixedHold PT to maturityLocked yield = (par − entry) / entry. Today: $94.40 → $100 over 180 days = 12.4% APY.
Buy LeveragedFlash-borrow USDC, swap to STRCx, deposit PT, borrow USDC against it, repay flash. Single tx.Concentrated dividend exposure × leverage. ~18% APY at 3×, scales with rate.
Sell YieldSell YT into the YT/USDC pool (when liquid)Cash today in exchange for forfeiting future dividends
Hold bothDon’t split, just hold STRCxSame as STRCx itself: ~11.5% dividend, principal at risk to STRC price

§02

Where the yield comes from

The yield is not magic. There’s no farm token, no bootstrap emission. Every dollar of return traces to one of two sources.

Source 1, STRC’s board-set dividend

Strategy Inc (NASDAQ: MSTR) issued STRC, a $100-par perpetual preferred, to fund Bitcoin acquisition. The board sets the cash dividend rate monthly via 8-K filing. The current rate is 11.50% APR, paid bi-monthly on the 1st and 15th. STRCx is Backed Finance’s 1:1 tokenized wrapper of STRC; the dividend manifests on chain as an automatic rebase via Token-2022’s scaledUiAmount extension.

YT holders capture this dividend. PT holders give it up in exchange for a fixed redemption claim at maturity.

Source 2, PT discount-to-par

PT trades below par because future dollars are worth less than present dollars. Today PT-sSTRCx trades at $94.40 against a $100 par redemption. Holding PT to maturity captures the $5.60 gap.

PT yield = (par − entry) / entry × (365 / days_to_maturity)
= ($100 − $94.40) / $94.40 × (365 / 180) ≈ 12.4% APY

The leveraged loop math

Buy Leveraged combines both sources. With $E equity at L× leverage:

Total exposure = $E × L STRCx
Borrow = $E × (L − 1) USDC at 8% APR (coil_lending)

Net APY = (STRC dividend × L) − (borrow rate × (L − 1))
At L=3, 11.5% × 3 − 8% × 2 = 18.5% APY on equity

Capped at 3×: the lending pool enforces 75% LTV against PT collateral. Since PT trades below par, the effective LTV is ~70.8%, at 3.5× the borrow ratio (71.4%) breaches the cap. 3.0× leaves comfortable headroom for slippage.

§03

Why Solana

Pendle’s PT-as-collateral loop runs $7B on Ethereum but only at institutional position sizes, Ethereum’s gas floor makes the same loop unprofitable for retail. A five-leg tx (flash-borrow → swap → wrap → split → deposit-collateral → borrow → repay) costs $25–$200 in ETH gas. On a $5,000 position, that’s 50–400 bps of friction before any yield compounds.

The same loop on Solana fits in a single signature for $0.009 all-in. The fee floor is the product thesis. 11.5% × 3× leverage compounds profitably for a $1k retail position; on Ethereum it requires $50k+.

ChainFive-leg loop costMin profitable size
Ethereum (recent gas)$25 – $200≈ $50,000
Solana$0.009≈ $50

Backed Finance shipping STRCx as a Token-2022 mint with auto-rebasing in April 2026 was the missing piece. Before that, STRC didn’t exist on Solana in a yield-bearing form. After that, the PT/YT split + loop became feasible.

§05

Risk model

Coil is a derivative on a tokenized derivative on a variable-rate corporate preferred funded by Bitcoin. The risk stack is real. We’ve commissioned an external code audit and applied every patch within scope; the full report and status are in the security page.

Counterparty risk, Strategy Inc

STRC is junior debt-equivalent. If Strategy defaults (BTC price collapse + inability to roll convert offerings + dividend suspension), STRC redemption value goes to zero. STRC holders rank ahead of common equity but behind senior debt. The bear case: BTC at $30k for two years + Strategy can’t service dividend = STRC trades at meaningful discount to $100 par. Backed Finance’s STRCx tracks STRC’s actual value.

Counterparty risk, Backed Finance

STRCx is a Backed-issued claim on real STRC held at a custodian. If Backed mismanages reserves, gets sanctioned, or the custodian fails, STRCx breaks the 1:1 peg. Backed retains permanent on-chain authority over STRCx via Token-2022 extensions: permanentDelegate (clawback any account), freezeAuthority (freeze transfers), pausableConfig (pause the entire mint), and scaledUiAmountConfig.authority (change the rebase multiplier). Backed says they’ll only use these for legal compulsion. The dapp surfaces this prominently on Buy Fixed when STRCx is selected.

Coil’s mitigation: the coil_strcon_adapter now refuses new deposits if strcon_vault.amount < wstrcon_mint.supply · i.e. if Backed’s clawback has rendered the adapter undercollateralized, no new user can compound the loss by depositing fresh STRCx. Existing deposits are still subject to the underlying clawback risk.

Smart-contract risk

Six Anchor programs, ~3000 lines of Rust between them. External audit identified 10 critical/high findings. As of 2026-05-10:

FindingStatus
C1, Wrapper insolvency (DRAIN-A, DRAIN-B)Fixed
C2, Cross-user YT yield drainDocumented; v2 fix needs Token-2022 YT migration
C3, Maturity-day redemption raceFixed (solvency invariant on harvest_dividend)
C4, Backed permanentDelegateAdapter circuit breaker + dapp disclosure
C5, Single-key authority concentrationMultisig migration in progress
C6, withdraw_reserves rugFixed (defense-in-depth check)
C7, Dead coil_vault stubCleaned up; real vault is v2 work
C8, Oracle pre-emptionFixed (governance-locked init)
C9, All init_* permissionlessFixed (governance-locked across 5 programs)
C10, Helius API key leakedOperational rotation in progress
H1, PT pricing semantics mismatchDesign pass for v2
H2, AMM init permissionlessFixed

Liquidation risk (leveraged positions)

Buy Leveraged and Auto-loop deposit PT collateral and borrow USDC against it. The lending pool enforces 75% LTV; positions that breach LTV can be liquidated by anyone for a 5% liquidation bonus. Positions are at risk if (a) PT oracle price drops materially below entry, unlikely because PT walks toward par deterministically, OR (b) a borrower’s debt accrues past their PT collateral value at the next interest accrual.

Oracle risk

Coil uses Pyth’s Equity.US.STRC/USD feed for the spot price snapshot during dividend harvest. The wrapper validates feed ID + age (≤ 5 min) + verification level + confidence interval (≤ 1.00%) before accepting any update. PT pricing for the lending pool is deterministic (linear walk from entry to par) and does not depend on Pyth, making the lending pool cascade-resistant during oracle outages.

Liquidity risk

The dapp’s lending pool is currently bootstrap-sized ($100 USDC reserves, scales as governance seeds more). Per obligation borrow is capped at 50% of total reserves. AMM pools (Raydium PT/USDC, Meteora YT/USDC) are not yet seeded · Buy Fixed and Buy Leveraged work today; Sell Yield via the YT/USDC pool requires liquidity that will be seeded as the protocol matures.

§06

Architecture

Six Anchor programs deployed on Solana mainnet. All upgrade authorities are currently held by a single deployer keypair (5d17EC...); migration to a Squads multisig is the next operational step.

ProgramMainnet IDResponsibility
coil_strcon_adapterFZuHa…SmxcWBridges Token-2022 STRCx into a legacy SPL wSTRCx mint that the rest of the protocol can speak to. 1:1 conversion in raw atoms. Includes circuit breaker (audit C4).
coil_wrapperGCWiW…aFWPMints sSTRCx 1:1 against wSTRCx deposits. Tracks sy_index (yield accumulator) advanced by Pyth-validated harvest_dividend. Solvency invariant blocks insolvent harvests.
coil_splitterEMCoX…oM3FSplits sSTRCx into PT + YT, merges them back, mints/burns market PDAs.
coil_oracleEJ5Fp…K6ffLinear-discount PT oracle. Walks PT price from entry to $100 par over the maturity window. Cascade-resistant.
coil_lendingDJwFE…RrZ7PT-collateralized USDC lending pool. 75% LTV cap, 8% borrow APR, per-obligation borrow cap of 50% of reserves.
coil_vaultECgTv…5Y55Hello-world stub from initial deploy. Permanently frozen (upgrade authority = System Program). Dead code; real auto-rebalanced vault is v2 work under a fresh program ID.

The atomic loop tx

Buy Leveraged composes 8 instructions across 5 programs in a single signature:

1. MarginFi flash-borrow USDC
2. Jupiter swap USDC → STRCx
3. coil_strcon_adapter.wrap (Token-2022 → legacy SPL)
4. coil_wrapper.deposit (mint sSTRCx)
5. coil_splitter.split (mint PT + YT)
6. coil_lending.deposit_collateral (PT)
7. coil_lending.borrow (USDC)
8. MarginFi flash-repay

All atomic, if any leg fails, the whole tx reverts and the user pays only the (sub-cent) tx fee. Tx size fits the 1232-byte v0 message cap by combining a coil-owned LUT (program IDs + market PDAs) with Jupiter’s per-route LUTs.

§07

FAQ

Is Coil custodial?

No. Every PT, YT, sSTRCx, and wSTRCx token is held in your own wallet under your own keys. The protocol’s vaults hold the underlying STRCx and USDC, but those vaults are program-derived addresses (PDAs), no human can sign transfers out of them.

What happens at maturity (1 November 2026)?

You can burn equal amounts of PT + YT to redeem the underlying sSTRCx via the splitter’s redeem_pt instruction. Then redeem sSTRCx through the wrapper for wSTRCx, and unwrap wSTRCx through the adapter for STRCx. From there you can sell on Jupiter or hold the underlying.

If you only hold PT (no YT), redeem_pt still pays out at par from the wrapper’s underlying vault · that’s the PT contract.

Can I exit a position before maturity?

Yes. The splitter’s merge instruction accepts equal PT + YT and returns sSTRCx pre-maturity. The dapp’s Withdraw button on each Buy Fixed position does this end-to-end and (optionally) swaps the resulting STRCx back to USDC via Jupiter in the same tx.

What happens if Strategy cuts the dividend?

YT holders earn less. PT holders are unaffected, PT pays out at par regardless. The leveraged loop’s yield drops in proportion: net APY = (new_dividend × leverage) − (8% × debt). Below ~4% dividend, leveraged loops at 3× turn negative.

Why not deposit into the Raydium / Meteora liquidity pools?

LP positions earn trading fees on YT/USDC swaps. Today those pools aren’t seeded so volume is zero, no fee income. Seeding the pools is governance’s next move ahead of letting non-team users run the leveraged path at scale.

What chain risks exist?

Solana network risk (validator outages have historically lasted hours, not days), Token-2022 program risk (newer than legacy SPL Token, smaller surface but less battle-tested), Jupiter routing risk (multi-hop swaps depend on third-party pools’ solvency), MarginFi flash-loan risk (the non-Coil component the leveraged loop depends on).

Where is the source code?

github.com/xxpumpkingxx/coil. Programs in programs/, dapp in app/, operational scripts in scripts/, security the live security page at /security.

Who audited it?

External code review on 2026-05-08 / -09. Findings and remediation status documented in the security page. Formal audit by a brand-name firm (e.g. OtterSec, Neodyme) is a v2 milestone.

Try it

The dapp is live on Solana mainnet today.