跳到主要内容

Rebase 变基

一次 Rebase 会向质押者铸造新的 DOHM,其上限由国库背书所能覆盖的范围决定。它每个周期(固定数量的比特币区块)至多运行一次,且无需许可——没有专门的 keeper(守护程序)。每一次质押、解押以及(普通)债券购买都会触发它,因此任何用户操作都会派发一个到期的周期。若无人操作,也不会丢失任何周期:错过的周期会在下一次操作时一并补齐(一次可补多个)。

何时该执行 Rebase

epochs_due = ⌊ (height − last_rebase_height) / epoch_length ⌋ (0 → 干净的空操作)

每次调用都会把 last_rebase_height 推进 epochs × epoch_length,因此较长的积压会在连续多次调用中逐步清空。

补齐上限取决于路径

一次调用能清掉多少个错过的周期,取决于它走的是哪条估值路径(见下文国库如何为 Rebase 估值):

  • 低成本路径(背书缓存新鲜)——每次调用至多 1024 个周期。它每个周期的唯一开销只是合约内的算术运算,因此一次操作几乎能清空任何静默期的积压。
  • 校准路径(缓存过期或被标记为脏,需要完整重新估值)——每次调用至多 3 个周期,因为该调用还要对全部储备做一次现货遍历估值,必须控制在单笔交易的燃料预算之内。更深的积压会在多次调用中清空。

这就是"为什么我的积压没在一次 Rebase 里全部清掉?"的答案——你走的是校准路径,上限为 3。

每个周期的奖励

三个量,全部来自国库记账(reserve_usd = 国库全部储备的美元价值;tracked = 累计已铸造的 DOHM;pending = 为未赎回债券凭证预留的 DOHM;floor = frUSD/DOHM × 1e8):

1. 背书率(bps,10000 = 恰好 1 倍背书):

backed_dohm = ⌊ reserve_usd × 1e8 / floor ⌋
backing_ratio_bps = ⌊ backed_dohm × 10 000 / (tracked + pending) ⌋

2. 有效利率(每周期 ppm)——在 1 倍背书及以下时为零,随后线性爬升,到达目标比率时达到政策上限:

rate_eff = 0 若 ratio ≤ 10 000
= rate_max 若 ratio ≥ target
= rate_max × (ratio − 10 000) / (target − 10 000) 否则

rate_max 由治理设定,并被硬性封顶为 100 000 ppm = 每周期 10%

3. 奖励——本次发放量,受记账上的超额封顶,因此 Rebase 绝不会铸造超出背书的部分:

excess = backed_dohm − (tracked + pending)
reward = min( ⌊ staked × rate_eff / 1e6 ⌋ , excess )

奖励被铸造给质押合约,从而抬高指数(见质押)。当一次调用补齐多个周期时,每个周期的奖励会复利累积——在计算下一个周期之前,trackedstaked 会先加上前一个周期的奖励——最终合并为一次派发交付。

这对你意味着什么

  • 奖励可能为零。 在 1 倍背书及以下时利率为 0;没有超额时上限为 0。协议不承诺任何固定收益。
  • 奖励随操作到来。 一个到期的周期会在任何人质押、解押、购买债券或直接调用 Rebase 时派发——而不是在某个墙上时钟的时刻。
  • 被跳过的周期仍会推进。 若质押被暂停,或储备一时无法定价,该周期会在不发放奖励的情况下推进,而不是卡住整个协议。
  • 没有调用者赏金——你自己调用 Rebase 要付矿工费,且不会直接得到任何回报。

估算收益

协议没有固定的年化收益率(APY)。若要根据当前参数估算:指数每个周期大约按 rate_eff(以分数计)增长,因此按年复利:

epochs_per_year ≈ blocks_per_year / epoch_length (约 10 分钟一个区块时,每年 ≈ 52,560 个区块)
APY ≈ (1 + rate_eff)^epochs_per_year − 1

这是一个上界:它假设利率不变、且奖励从未触及 excess 上限。rate_eff 与背书率都会变动,因此任何 APY 数字都应视为实时估算,而非承诺。(计算器会帮你算好。)

国库如何为 Rebase 估值

Rebase 读取一个缓存的背书值(每当有债券存入价值时更新)——即低成本路径。当以下两种情况之一出现时,它会退回到对整个储备的完整实时重新估值(frUSD 按 1:1;波动性资产按区间内的 AMM 现货价;LP 按 √k 折算):

  • 缓存过期——超过了过期窗口(自上次完整重估以来的区块数)。
  • 缓存被标记为脏——一次紧急储备减记(治理操作 DecreaseReserveBal)会给它打上脏标记,从而强制在即便缓存在时间上仍新鲜的情况下,也要在下一次 Rebase 时进行一次校准。减记刻意跳过重新估值,以便在某项储备无法定价时仍然可用,因此下一次 Rebase 必须重新锚定。

无论走哪条路径,一项无法定价的储备都会让本次 Rebase 跳过其奖励——它绝不会基于错误的数字进行铸造。