抓着 @TermMax 的结算逻辑测 Gas 消耗和调用栈时,最让我意外的不是它省了多少 Gas,而是它直接把传统借贷协议里最容易出事的「全局复利累加器」从链上砍掉了。#TermMax
写过或审计过借贷合约的都知道,像 Aave/Compound 这类浮动池,任何一笔存取借还交互都必须强制触发一次 `accrueInterest`,在链上实时推演极高精度的复利折算。这种大池子架构看着灵活,但全局状态机每秒都在算账,不仅平白吃掉大量交互 Gas,在极端并发下哪怕只有几个微小的精度截断误差,都可能被套利者抓来做粉尘攻击。之前帮团队做结算系统迁移时,光是浮动利息的跨期对账和漂移修正,就折腾了快一个月。
TermMax 的底层根本不需要这种动态累加器。它用 FT 贴现票据在撮合成功的瞬间直接把利息锁成常数,整个借贷周期里的最终债务是一个确定的离散值。到了 Maturity,合约只执行一次原子化的面额扣除和抵押品解冻,完全去掉了中间成千上万次无意义的链上计息状态更新。
不过这种把计算前置的设计也有操作成本:由于每个到期日的账本完全独立,前几天我写脚本测试批量清偿时,如果手头有多个不同 Maturity 的债务头寸,没法像传统池子那样一笔交易全局还清,必须挨个对准分片逐一调用。
把复杂的实时计息彻底剥离,换来的是确定性的代码执行与零精度漂移。对需要精准对账的机构大资金来说,这种干净的结算逻辑往往比花哨的动态利率算法更能让人放心。 $ETH
写过或审计过借贷合约的都知道,像 Aave/Compound 这类浮动池,任何一笔存取借还交互都必须强制触发一次 `accrueInterest`,在链上实时推演极高精度的复利折算。这种大池子架构看着灵活,但全局状态机每秒都在算账,不仅平白吃掉大量交互 Gas,在极端并发下哪怕只有几个微小的精度截断误差,都可能被套利者抓来做粉尘攻击。之前帮团队做结算系统迁移时,光是浮动利息的跨期对账和漂移修正,就折腾了快一个月。
TermMax 的底层根本不需要这种动态累加器。它用 FT 贴现票据在撮合成功的瞬间直接把利息锁成常数,整个借贷周期里的最终债务是一个确定的离散值。到了 Maturity,合约只执行一次原子化的面额扣除和抵押品解冻,完全去掉了中间成千上万次无意义的链上计息状态更新。
不过这种把计算前置的设计也有操作成本:由于每个到期日的账本完全独立,前几天我写脚本测试批量清偿时,如果手头有多个不同 Maturity 的债务头寸,没法像传统池子那样一笔交易全局还清,必须挨个对准分片逐一调用。
把复杂的实时计息彻底剥离,换来的是确定性的代码执行与零精度漂移。对需要精准对账的机构大资金来说,这种干净的结算逻辑往往比花哨的动态利率算法更能让人放心。 $ETH