TL;DR
BTC staking rewards are a fixed 25% of emission (α), paid in STRK. So BTC APR moves linearly with the STRK/BTC price, while STRK APR doesn’t move with price at all. Over the last 11 months BTC APR ranged from 1.7% to 10.4% while STRK APR stayed at 7.7–10%. At STRK = $1, BTC stakers would earn ~90% APR; at $2, ~180%. The inflows SNIP-31 counted on to correct this didn’t happen.
Proposal: replace the fixed α with a floating α that keeps BTC APR at ~0.4× STRK APR (the past year’s average ratio). STRK stakers’ rewards stay unchanged: the excess is simply not minted. Backtested over the last 11 months, BTC stakers would have received slightly more than they actually did.
Current state (on-chain, 2026-10-10)
| STRK staking | BTC staking | |
|---|---|---|
| Share of emissions | 75% | 25% (α) |
| Rewards per year | ~119.6M STRK | ~39.9M STRK (~$2.8M) |
| Total staked | 1.561B STRK (~$111M) | 534.6 BTC (~$44M) |
| Gross APR (0% commission) | 7.66% | 6.41% |
Prices: STRK ≈ $0.071, BTC ≈ $82.7k.
Today’s numbers are a spike, not the norm
| Period (Nov 2025 – Oct 2026) | STRK APR | BTC APR | BTC/STRK ratio |
|---|---|---|---|
| Average | 8.4% | 3.4% | ~0.4 |
| Range | 7.7–10.1% | 1.7–10.4% | 0.19–1.35 |
| Mid-Sep 2026 (STRK ≈ $0.029) | 7.7% | 2.6% | 0.33 |
| Now | 7.7% | 6.4–6.8% | 0.85–0.88 |
STRK rose ~2.5× in a month, so BTC APR rose ~2.5× too. That is the whole story behind today’s near-parity.
The structural problem
BTC APR = α · mint · P_STRK / (BTC staked · P_BTC)
Holding today’s BTC stake constant:
| STRK price | BTC APR | Paid to BTC pool / yr | BTC needed to bring APR back to 3.4% |
|---|---|---|---|
| $0.071 (now) | 6.4% | $2.8M | ~1,000 |
| $0.25 | 22.6% | $10.0M | 3,548 |
| $0.50 | 45% | $20.0M | 7,095 |
| $1.00 | 90% | $39.9M | 14,190 |
| $2.00 | 180% | $79.8M | 28,380 |
STRK stakers stay at ~7.7% in every row. The more successful STRK becomes, the more the protocol overpays the same BTC capital: up to 1–2× the entire BTC TVL every year, in newly minted STRK.
Why the self-correction doesn’t work
SNIP-31 assumed that “less BTC → higher APR → inflows”. On-chain, that didn’t happen:
- Late March 2026: BTC APR jumped to 6.8%. BTC stake went 673 → 628.
- Oct 2026: BTC APR went from 2.6% to 6.7%. BTC stake went 589 → 554.
- Since April, BTC stake has stayed at 550–700 BTC whatever the APR.
- The Dec 2025 peak (1,732 BTC) came from the BTCFi Season incentive campaign, not from staking APR, and it left when the campaign ended.
A rising APR mostly pays more to capital that is already staked, rather than attracting new capital.
Why the ratio matters (risk and dilution)
- Risk. A STRK staker has 100% of principal exposed to STRK. A BTC staker has none; only the yield is in STRK.
- Dilution. BTC rewards are emission on top of STRK staker rewards (c was raised to 4% when BTC staking launched). The dilution falls on all STRK holders, stakers and non-stakers alike.
- Real yield. Emission is ~2.1% of circulating supply per year, so a STRK staker’s real yield is ~5.5%. A BTC staker’s 6.4% has no dilution of principal, so at today’s prices BTC stakers earn a higher real yield than the people paying for it.
Proposal: floating α
α = k · V_BTC / (V_STRK + k · V_BTC), k = 0.4
V = amount staked × 7-day TWAP price
α ≤ 33% (the SNIP-31 bound)
STRK staker rewards unchanged; BTC rewards = α/(1−α) × STRK rewards
This targets BTC APR ≈ 0.4 × STRK APR (≈3.1% today), the average ratio of the past year. It doesn’t change the level of rewards on average; it only removes the swings, in both directions.
Backtest, Nov 2025 – Oct 2026 (same on-chain data):
| Fixed α = 25% | Floating α | |
|---|---|---|
| Avg BTC APR | 3.38% | 3.31% |
| Peak BTC APR | 10.4% | 5.3% |
| Total paid to BTC stakers | 33.5M STRK | 36.1M STRK |
| α today | 25% | ~13–14% |
| BTC APR today | 6.4% | ~3.1% |
| Emission today | 159.5M/yr | ~139M/yr (−13%) |
When STRK falls, α rises (up to 33%) and protects BTC yield. When STRK rallies, the excess isn’t minted. At STRK = $1 that avoids ~38M STRK/yr of emission; BTC stakers keep ~3%.
This is not a cut to BTC rewards. Over the past year it would have paid BTC stakers more. It is protection against exactly the price scenarios the whole ecosystem is hoping for.
Implementation notes
- α is currently a hard-coded constant (
ALPHA = 25;get_alpha()only reads it, there is no setter). Any change needs a contract upgrade and a vote, so it is worth doing it once, properly. - Decouple the two roles of α. α also sets BTC’s weight in consensus ((1−α)·s/S + α·b/B). Consensus weight must not move with price, so keep it at 25% and let only the reward share float.
- Oracle. 7-day TWAP (Pragma or Ekubo), a cap on how fast α can change (exact rate to be discussed), and a fallback to 25% if the oracle fails.
- Simpler alternative. Add a governance setter, and have the Monetary Council update α monthly using the published formula.
- Precedents. Babylon cut BTC-only rewards from 4% to 1% (Nov 2025) and moved the rest into BABY co-staking. Core DAO ties BTC yield to the amount of CORE staked. Starknet’s own SNIP-35 already adjusts a protocol parameter (base fee) to the STRK price.
Acknowledging the other side
BTC staking brings TVL, liquidity and BTC users to Starknet, and BTC stakers take bridge and custodian risk (about two thirds is SolvBTC). That’s why this proposal keeps BTC yield around its historical average rather than cutting it. It only stops the yield from scaling with the STRK price.
How to reproduce
RewardSupplier.calculate_current_epoch_rewards()→ (strk_rewards, btc_rewards) per epoch; 3600 s epochs → 8,760 per yearRewardSupplier.get_alpha()→ 25Staking.get_total_stake_for_token(token)for STRK and each BTC wrapper, queried at historical blocks for the time series- Staking:
0x00ca1702e64c81d9a07b86bd2c540188d92a2c73cf5cc0e508d949015e7e84a7 - RewardSupplier:
0x009035556d1ee136e7722ae4e78f92828553a45eed3bc9b2aba90788ec2ca112 - Prices: CoinGecko daily
Happy to share the scripts and data for the history and the backtest.