Connect ›
Cover: The two fee regimes: anchored and exhaustion, measured from outside the Router

The two fee regimes: anchored and exhaustion, measured from outside the Router

The protocol fee of 28 basis points (0.28%) is charged once at the first bridge input on an anchored route, and once per hop on a route no bridge coin ever enters.

Known formally as The Fee Rule, Both Regimes in the BlazePhoenix whitepaper.

BlazePhoenix Engineering · updated 2026-09-06 · data through 2026-10-11 · 7 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 · 摘要 · 要旨 · ملخص

English — The protocol fee of 28 basis points (0.28%) is charged once at the first bridge input on an anchored route, and once per hop on a route no bridge coin ever enters. Where it lands on ten route shapes, the transient ledger that refuses a settlement paying nothing or twice, and how often each test notices each fee defect — 20 of 20 with a Wilson interval, and two belts at 0 of 20 by design.

Português — A fee de protocolo de 28 basis points (0.28%) é cobrada uma vez na primeira entrada de ponte numa rota ancorada, e uma vez por hop numa rota em que nenhuma moeda-ponte entra. Onde ela cai em dez formas de rota, o ledger transitório que recusa uma liquidação que pague nada ou a dobrar, e com que frequência cada teste nota cada defeito de fee — 20 of 20 com um intervalo de Wilson, e dois cintos a 0 of 20 por desenho.

Español — La comisión de protocolo de 28 basis points (0.28%) se cobra una vez en la primera entrada de puente en una ruta anclada, y una vez por hop en una ruta en la que nunca entra una moneda puente. Dónde cae en diez formas de ruta, el ledger transitorio que rechaza una liquidación que pague nada o el doble, y con qué frecuencia cada prueba advierte cada defecto de comisión — 20 of 20 con un intervalo de Wilson, y dos cinturones en 0 of 20 por diseño.

Français — Les frais de protocole de 28 basis points (0.28%) sont prélevés une fois à la première entrée de pont sur une route ancrée, et une fois par hop sur une route où aucune monnaie-pont n’entre jamais. Où ils se posent sur dix formes de route, le registre transitoire qui refuse un règlement ne payant rien ou payant deux fois, et à quelle fréquence chaque test remarque chaque défaut de frais — 20 of 20 avec un intervalle de Wilson, et deux ceintures à 0 of 20 par conception.

Deutsch — Die Protokollgebühr von 28 basis points (0.28%) wird auf einer verankerten Route einmal beim ersten Brückeneingang erhoben und auf einer Route, in die nie eine Brückenmünze eintritt, einmal pro Hop. Wo sie bei zehn Routenformen landet, das transiente Ledger, das eine Abrechnung ablehnt, die nichts oder doppelt zahlt, und wie oft jeder Test jeden Gebührendefekt bemerkt — 20 of 20 mit einem Wilson-Intervall und zwei Gurte bei 0 of 20, absichtlich.

Русский — Протокольная комиссия в 28 basis points (0.28%) взимается один раз на первом входе моста на закреплённом маршруте и один раз за хоп на маршруте, куда мостовая монета не заходит вовсе. Куда она попадает на десяти формах маршрута, транзитный реестр, отвергающий расчёт, который не платит ничего или платит дважды, и как часто каждый тест замечает каждый дефект комиссии — 20 of 20 с интервалом Wilson и два пояса на 0 of 20 по замыслу.

Türkçe — 28 basis points (0.28%) tutarındaki protokol ücreti, çapalı bir rotada ilk köprü girişinde bir kez, hiçbir köprü parasının girmediği bir rotada ise hop başına bir kez alınır. On rota biçiminde nereye düştüğü, hiç ödemeyen ya da iki kez ödeyen bir kapanışı reddeden geçici defter ve her testin her ücret kusurunu ne sıklıkla fark ettiği — Wilson aralığıyla 20 of 20 ve tasarım gereği 0 of 20’de duran iki kemer.

العربية — رسوم البروتوكول البالغة 28 basis points (0.28%) تُحصَّل مرة واحدة عند أول دخول للجسر في مسار مرتكز، ومرة لكل قفزة (hop) في مسار لا تدخله عملة جسر أبدًا. أين تقع على عشرة أشكال من المسارات، والسجل العابر الذي يرفض تسوية لا تدفع شيئًا أو تدفع مرتين، وكم مرة يلحظ كل اختبار كل خلل في الرسوم — 20 of 20 بفاصل Wilson، وحزامان عند 0 of 20 بحكم التصميم.

हिन्दी — 28 basis points (0.28%) का प्रोटोकॉल शुल्क एक लंगर-युक्त रूट पर पहले ब्रिज इनपुट पर एक बार लिया जाता है, और ऐसे रूट पर जहाँ कोई ब्रिज सिक्का कभी नहीं आता, प्रति hop एक बार। दस रूट आकृतियों पर यह कहाँ गिरता है, वह क्षणिक बहीखाता जो कुछ भी न चुकाने या दो बार चुकाने वाले निपटान को मना करता है, और हर टेस्ट कितनी बार हर शुल्क-दोष को पकड़ता है — Wilson अंतराल के साथ 20 of 20, और डिज़ाइन से ही 0 of 20 पर दो पेटियाँ।

日本語 — 28 basis points (0.28%) のプロトコル手数料は、アンカー付きルートでは最初のブリッジ入力で一度、ブリッジ通貨が一度も入らないルートでは hop ごとに一度徴収される。十通りのルート形状でそれがどこに着地するか、何も払わない決済や二重に払う決済を拒む一時台帳、そして各テストが各手数料欠陥に気づく頻度 — Wilson 区間つきの 20 of 20 と、設計上 0 of 20 のままである二本のベルト。

中文 — 28 basis points (0.28%) 的协议费,在有锚定的路线上于第一次进入桥时收取一次;在从不进入任何桥币的路线上则每个 hop 收取一次。它在十种路线形态上落在何处、拒绝一笔不付费或重复付费结算的瞬态账本,以及每个测试察觉每种费用缺陷的频率 — 带 Wilson 区间的 20 of 20,以及按设计停在 0 of 20 的两条安全带。

한국어 — 28 basis points (0.28%)의 프로토콜 수수료는 앵커가 있는 경로에서는 첫 브리지 입력에서 한 번, 브리지 코인이 한 번도 들어오지 않는 경로에서는 hop마다 한 번 부과된다. 열 가지 경로 형태에서 그것이 어디에 떨어지는지, 아무것도 내지 않거나 두 번 내는 정산을 거절하는 일시 원장, 그리고 각 테스트가 각 수수료 결함을 알아채는 빈도 — Wilson 구간을 붙인 20 of 20, 그리고 설계상 0 of 20에 머무는 두 개의 벨트.

Bahasa Indonesia — Biaya protokol sebesar 28 basis points (0.28%) dipungut sekali pada masukan jembatan pertama di rute berjangkar, dan sekali per hop di rute yang tak pernah dimasuki koin jembatan. Di mana ia jatuh pada sepuluh bentuk rute, buku besar sementara yang menolak penyelesaian yang membayar nol atau dua kali, dan seberapa sering tiap uji menangkap tiap cacat biaya — 20 of 20 dengan selang Wilson, dan dua sabuk di 0 of 20 secara sengaja.

বাংলা — 28 basis points (0.28%) প্রোটোকল ফি নোঙর-করা রুটে প্রথম ব্রিজ ইনপুটে একবার নেওয়া হয়, আর যে রুটে কোনো ব্রিজ কয়েন কখনও ঢোকে না সেখানে প্রতি hop-এ একবার। দশটি রুট-আকৃতিতে এটি কোথায় পড়ে, যে ক্ষণস্থায়ী খতিয়ান কিছুই না দেওয়া বা দুবার দেওয়া নিষ্পত্তিকে প্রত্যাখ্যান করে, এবং প্রতিটি টেস্ট কত ঘন ঘন প্রতিটি ফি-ত্রুটি ধরে — Wilson ব্যবধানসহ 20 of 20, এবং নকশা অনুযায়ীই 0 of 20-এ থাকা দুটি বেল্ট।

Filipino — Ang protocol fee na 28 basis points (0.28%) ay siningil nang isang beses sa unang bridge input sa isang naka-angkla na ruta, at isang beses kada hop sa isang rutang hindi kailanman pinapasukan ng anumang bridge coin. Kung saan ito dumadapo sa sampung hugis ng ruta, ang panandaliang ledger na tumatangging tumanggap ng settlement na walang bayad o may dobleng bayad, at gaano kadalas napapansin ng bawat test ang bawat depekto sa bayad — 20 of 20 na may Wilson interval, at dalawang sinturon sa 0 of 20 nang sinasadya.

What you gain from this page is the fee rule in a form you can check from outside the contract: which hop pays, on what base, how many times, and how often the tests that guard it would notice if any of that changed. The protocol fee is 28 basis points (0.28%), a compile-time constant. The interesting part is not the rate but the place, because a fee charged at the wrong hop is a fee an attacker can route around.

Heat map of eight fee mutants against five tests: kills over runs with the Wilson interval
Detection of each fee mutant by each test: kills over runs with the Wilson 95 % interval; the two ledger belts are the rows nothing sees, by design. Source: fee-seal-detection.json.

The anchored regime

The rule since 2026-08-22: charge once, on the input of the first hop whose input is a bridge coin — or, for a direct route into a bridge coin, on the output. The bridge list is the registry’s, not the caller’s, and the base is the measured input of that hop, so the fee is anchored to a token the protocol recognises and an amount the pools actually saw. The Quoter models the same deduction, and parity between preview and delivery is asserted in both regimes.

The exhaustion regime

The rule also had a second regime it had not named. A hand-built route through pools the registry would not hold, with no bridge coin as any hop’s input, never finds a fee hop; the predicate that charges is then true for every hop, so each hop pays on its own measured input. The register carried this as FEE-01 — about 56 bps on an honest two-hop route — and the suite pinned it. It is a deliberate rule, and the reason is a test: on 2026-09-05 the obvious simplification, charge such a route once on hop 0, was tried inside the suite and reopened the escape the exhaustion policy exists to close. A value-less first hop carries the fee spot onto dust and the real hop pays nothing; five pinned tests went red within the same run. The policy stands, and is now named in the code where the predicate is, with that reason beside it.

Where the fee lands, by route shape

route shaperegimewhere the fee landsmeasured
A → B (neither a bridge)exhaustion, one hophop 0’s input, oncefee = ⌈28 bps × input⌉, one event
W → A (bridge in)anchoredhop 0’s inputsame
A → W (bridge out, direct)anchored, output sidethe outputfee = ⌈28 bps × gross output⌉, delivered = gross − fee
A → C → B (no bridge)exhaustion, two hopseach hop’s measured inputtwo events, each ⌈28 bps × that hop’s input⌉
W → A → Banchored at hop 0hop 0’s inputone event
A → W → Banchored at hop 1the bridge coin hop 0 producedone event, ⌈28 bps × what hop 0’s pools paid out⌉
A → C → W (bridge only as output of two hops)exhaustioneach hop’s inputtwo events
A → C → D → B, A → W → C → B, A → C → W → Bas aboveas above3 / 1 / 1 events

Source: SWAP-TESTS-REPORT-2026-09.md §3; forge test --match-path test/FeeSeals.t.sol, 2,000 fuzz runs, amounts 10¹² to 10²¹ wei, one and two legs per hop

FeeSeals.t.sol reads none of the Router’s numbers. The fee token comes from the rule and the bridge list; the base from the pools’ balance deltas — what left the Router into the fee hop, or what the previous hop’s pools paid out — or the recipient’s; the fee from the treasuries’ deltas; the count from the Fee events. Each shape runs with one and with two legs per hop: 2,000 runs, no failure, the Router holding nothing after every settlement. A test that fits the code passes; a test written to catch is one whose expectation was produced without asking the code.

Three seals, and the ledger

sealwhat it doeswhere
both regimes namedthe anchored regime pays exactly once, at the fee hop; the exhaustion regime pays once per hop; the alternative is written down as tried and refused_execute, at the predicate
one producer of the commitmentthe sum of a hop’s declared leg inputs — the fee base at hop 0 and the scale’s denominator — is computed by one function, _legSum; before, two loops_legSum
the run-time ledger_payFee counts into a transient slot; every settlement reads it once and refuses a delivery that paid nothing (RouterE(15)) and, on an anchored route, a second payment (RouterE(16)), then clears it_payFee, end of _execute

Source: ASSURANCE.md §4o; Router runtime size after the ledger: 23,781 bytes

How often each test notices each defect

Every fee mutant — the regime predicate moved either way, the commitment producer, the ledger’s two checks, and the three fee mutants of the invariant study — was run under twenty fuzz seeds per fuzzed test and once per deterministic test. Read across a row for which tests see a defect; read down a column for what a test can and cannot see.

mutantFeeSeals fuzzRouter campaign (2 hops, 2 legs)covering array t = 2junk-prefix escapeexhaustion preview parity
exhaustion charges hop 0 only (junk-prefix escape)20/20 [0.84, 1.00]20/20 [0.84, 1.00]noyesyes
exhaustion skips hop 020/20 [0.84, 1.00]20/20 [0.84, 1.00]noyesyes
commitment counts the first leg only20/20 [0.84, 1.00]20/20 [0.84, 1.00]nonono
fee doubled20/20 [0.84, 1.00]20/20 [0.84, 1.00]yesyesyes
input-side fee never charged20/20 [0.84, 1.00]20/20 [0.84, 1.00]noyesyes
fee charged on both sides20/20 [0.84, 1.00]20/20 [0.84, 1.00]noyesyes
BELT ledger: settlement without a fee no longer refused0/20 [−0.00, 0.16]0/20 [−0.00, 0.16]nonono
BELT ledger: anchored double payment no longer refused0/20 [−0.00, 0.16]0/20 [−0.00, 0.16]nonono

Source: fee-seal-detection.json, 2026-09-05, release settings; 20 fuzz seeds per fuzzed test at 256 runs per seed, one run per deterministic test; Wilson 95 % interval

The interval and the bound, in one paragraph. Twenty kills in twenty seeds is a sample, not a certainty, so the detection probability is reported as a Wilson 95 % interval, [0.84, 1.00]: the data are consistent with a test that catches this defect at least 84 % of the time. Where nothing was missed, the rule of three gives the other side — the miss probability of one campaign is bounded at 15 % at 95 % confidence, which is three over twenty. That number is why the guard runs the named test and the campaign both: two instruments at 15 % each are a different guarantee from one.

The first measurement of this table found the Router campaign blind to the exhaustion mutant that spares hop 0 and to the commitment producer — 0 of 20 each — because it built direct one-leg routes only. The campaign was widened the same day: a second action walks two hops through the chain, splits hop 0 across two pools, and checks the fee shape the rule prescribes from the bridge list and the pools, with the first token as the bridge coin so one campaign holds every regime. The column was re-measured, and both mutants are now seen 20 of 20. The covering array sees only the doubled fee, because its rows always cross a bridge.

The belts

The two ledger rows are 0 of 20 by everything, and that is the correct reading, not a gap. In isolation no test can make them fire, because the predicate in front of them leaves no path that settles without paying, or pays twice on an anchored route. They are the contract refusing at run time what the tests refuse at review time, on paths that do not exist yet. They are kept, listed as belts, counted as covered nowhere, and absent from the mutation guard, which admits only mutants a named test kills. Detection rates are per test at 256 fuzz runs per seed; a test that misses at that budget may catch at a larger one.

Reproduce

forge test --match-path test/FeeSeals.t.sol                            # the fee rule, both regimes, from outside the Router
forge test --match-path test/BlazePhoenixRouter.invariant.t.sol        # the Router campaign, 2 hops, 2 legs
forge test --match-path test/FeeEscapeViaJunkPrefix.t.sol              # the escape the exhaustion regime closes

Do not trust this page — reproduce it

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

forge test --match-path test/FeeSeals.t.sol  # 2,000 runs over the ten route shapes above, both regimes, fee measured from the treasuries’ deltas
Cite this article

Licensed CC BY 4.0 — quote, translate and reuse freely, including commercially, with attribution and a link. Copy a ready-made citation:

BlazePhoenix (2026). The two fee regimes: anchored and exhaustion, measured from outside the Router. BlazePhoenix Engineering. https://blazephoenix.xyz/learn/the-two-fee-regimes
@misc{blazephoenix_the_two_fee_regimes,
  title  = {The two fee regimes: anchored and exhaustion, measured from outside the Router},
  author = {BlazePhoenix},
  year   = {2026},
  url    = {https://blazephoenix.xyz/learn/the-two-fee-regimes},
  note   = {Accessed: reproduce the claim with the command above}
}

Writing an answer, a wiki entry or a paper? The claim above is reproducible against the chain before you quote it — which is the only sound basis for citing a technical source at all.

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

Related engineering

Next in Execution semantics · 2 / 3
A quote is a statement about the past: what an in-transaction solver fixes, and what it does not ›Three independent sources of drift separate a quote from a fill. Solving the route inside the executing transaction removes exactly one of them. The other two survive — and our own preview surface is the clearest case of a guarantee restated where it cannot be enforced.11 min

Questions, a partnership or a bug to report? Contact us or email contact@blazephoenix.xyz