Two accumulators, one stake: paying emission and interest with zero cross-subsidy

Known formally as The Dual-Accumulator Doctrine in the BlazePhoenix whitepaper.

BlazePhoenix Engineering · updated 2026-07-21 · 8 min · written from the deployed bytecode

By Mitra (@Sigmacrit) — anonymous developer of the BlazePhoenix protocol. The code is the résumé.

Abstract in 15 languages · resumo · resumen · 摘要 · 要旨 · ملخص

EnglishBlazePhoenixStaking runs two MasterChef-style accumulators over one stake base: emission (180M BZPX over 7 years) paid on boosted effective stake, and borrower interest paid only to pure savers — separate denominators, so no role subsidises another, all under a single solvency invariant and a quadratic lock boost up to 2.75×.

PortuguêsO BlazePhoenixStaking corre dois acumuladores estilo MasterChef sobre uma única base de stake: emissão (180M BZPX em 7 anos) paga sobre o stake efetivo com boost, e o juro dos mutuários pago só aos poupadores puros — denominadores separados, para que nenhum papel subsidie outro, tudo sob um único invariante de solvência e um boost de lock quadrático até 2,75×.

EspañolBlazePhoenixStaking ejecuta dos acumuladores estilo MasterChef sobre una única base de stake: emisión (180M BZPX en 7 años) pagada sobre el stake efectivo con boost, e interés de los prestatarios pagado solo a los ahorradores puros — denominadores separados, para que ningún rol subsidie a otro, todo bajo un único invariante de solvencia y un boost de bloqueo cuadrático hasta 2,75×.

FrançaisBlazePhoenixStaking fait tourner deux accumulateurs de type MasterChef sur une seule base de stake : l’émission (180M BZPX sur 7 ans) payée sur le stake effectif boosté, et l’intérêt des emprunteurs versé uniquement aux épargnants purs — des dénominateurs distincts, pour qu’aucun rôle n’en subventionne un autre, le tout sous un unique invariant de solvabilité et un boost de blocage quadratique jusqu’à 2,75×.

DeutschBlazePhoenixStaking betreibt zwei MasterChef-artige Akkumulatoren über einer einzigen Stake-Basis: Emission (180M BZPX über 7 Jahre) auf den geboosteten effektiven Stake, und Kreditnehmerzins nur an reine Sparer — getrennte Nenner, damit keine Rolle eine andere subventioniert, alles unter einem einzigen Solvenz-Invariant und einem quadratischen Lock-Boost bis 2,75×.

РусскийBlazePhoenixStaking ведёт два аккумулятора в стиле MasterChef над одной базой стейка: эмиссия (180 млн BZPX за 7 лет) выплачивается на усиленный эффективный стейк, а процент заёмщиков — только чистым вкладчикам; разные знаменатели, чтобы ни одна роль не субсидировала другую, всё под единым инвариантом платёжеспособности и квадратичным бустом блокировки до 2,75×.

TürkçeBlazePhoenixStaking, tek bir stake tabanı üzerinde MasterChef tarzı iki biriktirici çalıştırır: emisyon (7 yılda 180M BZPX) boost’lu etkin stake üzerinden ödenir, borçlu faizi ise yalnızca saf tasarrufçulara ödenir — ayrı paydalar, böylece hiçbir rol bir diğerini sübvanse etmez; hepsi tek bir ödeme gücü değişmezi ve 2,75×’e kadar kuadratik kilit boost’u altında.

العربيةيشغّل BlazePhoenixStaking مُراكِمَين على نمط MasterChef فوق قاعدة رهان واحدة: الإصدار (180 مليون BZPX خلال 7 سنوات) يُدفع على الرهان الفعّال المعزَّز، وفائدة المقترضين تُدفع فقط للمدّخرين الخُلَّص — مقامان منفصلان، فلا يدعم دورٌ دوراً آخر، والكل تحت ثابت ملاءة واحد وتعزيز قفل تربيعي حتى 2.75×.

हिन्दीBlazePhoenixStaking एक ही स्टेक आधार पर दो MasterChef-शैली संचायक चलाता है: उत्सर्जन (7 वर्षों में 180M BZPX) बूस्टेड प्रभावी स्टेक पर दिया जाता है, और उधारकर्ता ब्याज केवल शुद्ध बचतकर्ताओं को — अलग हर, ताकि कोई भूमिका दूसरे को सब्सिडी न दे, सब एक ही सॉल्वेंसी अपरिवर्तनीय और 2.75× तक द्विघात लॉक बूस्ट के अधीन।

日本語BlazePhoenixStaking は単一のステーク基盤の上で二つの MasterChef 型アキュムレータを走らせます。放出(7年で1.8億 BZPX)はブースト後の実効ステークに、借り手の利息は純粋な貯蓄者だけに支払われ、分母を分けることでどの役割も他を補助しません。すべては単一の支払能力不変量と、最大2.75倍の二次ロックブーストの下にあります。

中文BlazePhoenixStaking 在同一质押基座上运行两个 MasterChef 式累加器:排放(7 年 1.8 亿 BZPX)按加成后的有效质押支付,借款人利息只付给纯储户——分母各自独立,因此任何角色都不补贴另一角色,全部处于单一偿付不变量与最高 2.75× 的二次锁仓加成之下。

한국어BlazePhoenixStaking은 하나의 스테이크 기반 위에서 두 개의 MasterChef 방식 누산기를 운영합니다: 배출(7년간 1억 8천만 BZPX)은 부스트된 유효 스테이크에, 차입자 이자는 순수 예치자에게만 지급되며, 분모를 분리해 어떤 역할도 다른 역할을 보조하지 않습니다. 모두 단일 지급능력 불변량과 최대 2.75×의 2차 락 부스트 아래 있습니다.

Bahasa IndonesiaBlazePhoenixStaking menjalankan dua akumulator gaya MasterChef di atas satu basis stake: emisi (180 juta BZPX selama 7 tahun) dibayar atas stake efektif ber-boost, dan bunga peminjam hanya dibayar ke penabung murni — penyebut terpisah, sehingga tak ada peran yang mensubsidi peran lain, semuanya di bawah satu invarian solvabilitas dan boost kunci kuadratik hingga 2,75×.

বাংলাBlazePhoenixStaking একটিমাত্র স্টেক ভিত্তির উপর দুটি MasterChef-ধাঁচের অ্যাকিউমুলেটর চালায়: নিঃসরণ (৭ বছরে ১৮ কোটি BZPX) বুস্টেড কার্যকর স্টেকের উপর দেওয়া হয়, আর ঋণগ্রহীতার সুদ কেবল খাঁটি সঞ্চয়কারীদের — আলাদা হর, যাতে কোনো ভূমিকা অন্যকে ভর্তুকি না দেয়, সবই একটি সলভেন্সি অপরিবর্তনীয় ও ২.৭৫× পর্যন্ত দ্বিঘাত লক বুস্টের অধীনে।

FilipinoNagpapatakbo ang BlazePhoenixStaking ng dalawang MasterChef-style na accumulator sa iisang stake base: ang emission (180M BZPX sa loob ng 7 taon) ay binabayad sa boosted effective stake, at ang interes ng nanghihiram ay sa purong nag-iipon lamang — magkahiwalay na denominador, kaya walang papel na sumusubsidiya sa iba, lahat sa ilalim ng iisang solvency invariant at quadratic lock boost hanggang 2.75×.

Most protocols would build three contracts here: a staking vault, a lending market, and a lock-boost incentive layer, each with its own accounting and its own attack surface. BlazePhoenixStaking builds one — a single contract whose reward mathematics is two MasterChef-style accumulators sharing one stake base, every privileged path bounded by a proof rather than a promise. The design rule, stated in the whitepaper: do not build three systems where one suffices.

The two accumulators track two genuinely different cash flows, so they carry two different denominators — and that is the whole trick. No staker earns from a pool they did not fund.

Two flows, two denominators

accRewardPerShare distributes the protocol’s fixed emission — 180,000,000 BZPX released linearly over seven years — across totalBoostedEffective, the boosted net stake of everyone. accPureYieldPerShare distributes borrower interest across totalBoostedPure, the boosted stake of pure savers only (positions carrying no debt). A borrower earns emission on their effective stake, but earns none of the interest yield — because the money they borrowed is not lending to anyone. A saver dilutes no one’s emission. Each flow is paid strictly from its own base.

function _computeBoost(UserInfo storage u) internal view returns (uint256 be, uint256 bp) {
    uint256 boost = boostByDays(u.lockDays);
    uint256 effective = u.staked > u.debt ? u.staked - u.debt : 0;
    be = effective == 0 ? 0 : mulDiv(effective, boost, BOOST_BASE);          // emission base
    bp = (u.debt == 0 && u.staked > 0) ? mulDiv(u.staked, boost, BOOST_BASE) : 0; // pure-yield base
}

The boost is quadratic in commitment

Both bases are weighted by a single boost curve, continuous in the committed lock duration d (in days) and quadratic — so longer locks are rewarded super-linearly, up to 2.75× at the full seven-year horizon:

boost(d)=10000+750·d365+250(d365)2bps
boostByDays(d): 1 year → 1.10×, 2 years → 1.25×, 5 years → 2.00×, 7 years (2555 days) → 2.75×. Staking is mandatory-locked (90..2555 days); there is no liquid stake.

The interest curve that feeds the second accumulator

Borrower interest — the fuel for accPureYieldPerShare — follows a kinked rate curve in utilisation u = totalDebt / totalStaked, gentle below 80% and deliberately punishing above it, so near-total utilisation is economically absurd and exit liquidity is protected:

rate(u)=100+500uif u0.8500+72500(u0.8)if u>0.8bps
_interestRate(): 1% APR at zero utilisation, 5% at the 80% kink, ~150% as utilisation approaches 100%. A 3% reserve factor is skimmed to protocolReserve; the rest feeds pure savers.

One writer, no drift

Two accumulators over one base only stays honest if the two global denominators can never desync from the sum of their parts. So there is exactly one function — _applyBoost — permitted to write totalBoostedEffective and totalBoostedPure, and it does so by plain checked subtraction: the global total is by construction the sum of every tracked contribution, so it is always at least this user’s tracked value, and any drift would underflow and revert. Even the emergency exit routes through it, so leaving can never strand a stale boosted ghost-share. The dual accumulators, the boost, and the interest all live under the single solvency invariant of the Master Conservation Identity — subordinate to one equation that no reachable state can violate.

Do not trust this page — reproduce it

Every claim above is checkable against the chain. Start here:

cast call 0x3f60C7aa0c36a78D200405feBE143d2Cf3fA0c77 "getGlobalStats()" --rpc-url https://mainnet.base.org — read totalBoostedEffective and totalBoostedPure side by side: two independent denominators over one stake base

Contracts are verified on every chain we deploy to — addresses in the protocol manifest. Deeper formal treatment: the whitepaper (PDF).

Share this article · join the discussion

Related engineering