费用与支付
费用
每笔交易支付 1% 到 15% 的税,由创建者设定,以股票计。毕业后另收 0.20% 池子手续费。发射费用为 0.0005 ETH。没有卖出尖峰,没有 sweep 小费。
税
| 交易 | 税基 | 收取位置 | 税款去向 |
|---|---|---|---|
| 曲线买入 | 付出的股票 | 曲线内 | 协议 30% / 创建者 ≤50% / 金库其余;曲线内的 claim |
| 开盘窗口内的曲线买入 | 代币产出 | 曲线内 | 高于税率的加价部分销毁 |
| 曲线卖出 | 毛股票产出 | 曲线内 | 同样的分配 |
| 池子买入,指定输入 | 付出的股票 | hook 的 beforeSwap | hook 的股票 claim,由 sweep 支付 |
| 池子买入,指定输出 | 付出的股票,按 r / (1 − r) gross-up | hook 的 afterSwap | 同上 |
| 池子卖出,指定输入 | 毛股票产出 | hook 的 afterSwap | 同上 |
| 指定输出的卖出 | 拒绝(ExactOutputRefused) |
- 税额为
floor(paid × taxBps / 10000)。低于10000 / taxBps个最小股票单位的付款不收税,此规则仅对小数位很少的股票有意义。 - 指定输入的池子买入,hook 在池价变动前先收税。只有
1 − rate的付款进入池子,池子手续费按该净额计算。随后在价格限制处停止的 买入以PartialFillRefused回滚,被 v4 包装;解码方法。 - 卖出在交换后按实际收到的金额收税,可以部分成交。
- 金库自己的交换不收税。
Taxed(id, selling, inToken, moved, tax, rateBps):moved是交换移动的股票;买入时交易者支付的是moved + tax。
池子手续费
v4 池按每笔交换的输入货币收 0.20%(lpFee 2000)。factory 为之后的发射接受 1 到 3000(0.30%);费率按池冻结。
| 方向 | 收取货币 | 去向 |
|---|---|---|
| 买入 | 股票 | vault 的头寸;任何人调用 V2LiquidityVault.collectFees() 时转入金库的 buybackStock |
| 卖出 | 代币 | 同一次调用里销毁 |
FeesCollected(stockToTreasury, tokenBurned) 记录两个数字。两者都不计入策略成本。池子手续费计入回购预算,不计入策略本金。
买家可见的费用
毕业池上买家支付税款及按净额计的 0.20%,均以股票计:最低税率时约 1.2%。曲线上买家支付税款,开盘窗口内另付以代币计的加价。 报价页说明如何展示这两项费用。
发射费
launchFeeCurrency 是 Native,launchFeeAmount 是 0.0005 ETH,在 launch 时直接转给 protocol,不兑换,不查询价格。请求中的
maxFee 是发射者愿意支付的上限;费用高于该值时回滚。
支付
每笔税由三方分配:协议(30%)、创建者(最多一半)、金库(其余)。第四方 keeper 按策略动作领取报酬。所有支付均非自动执行:每一笔都是 一次无需权限的调用。
曲线阶段
费用在曲线内部累计为 claim。claimFees(recipient) 将该收款方的 claim 支付给该收款方,不会支付给他人;任何人均可调用,毕业后照常
可用。某一收款方被拦截时,不影响另外两方的领取,也不影响曲线交易。claimable(recipient) 和 totalFees() 读取状态;FeesClaimed 记录
一次支付。
池子阶段
费用以 ERC-6909 股票 claim 的形式按池存在 hook 里。sweep(poolId) 一次将买方和卖方的费用支付给三个收款方,每种货币各自独立结算,
一方无法结算不会阻塞另一方。sweepTipBps 为 0:调用者没有报酬。owedProtocol、owedCreator、owedTreasury 和
accrued(poolId) 读取待付金额;Swept 记录一次支付。没有以代币计的费用库存,也没有 owner 转换的步骤。
协议的份额
每笔税中协议的 30% 以股票支付到 protocol,即 Safe。该收入的 30% 用于回购 $HEDGE,相当于已收税款的 9%。回购由 Safe
定期手动完成;没有合约自动执行,因此这是 Safe 的承诺,而非任何人可调用领取的付款。发射费不在其中。见
$HEDGE 运作机制。
金库的份额
金库的税收份额是收入。到账时是 unbookedStock();book() 或下一次 execute() 按当时价格记账。分批止盈一族和引擎策略记为库存;
回购销毁策略将所有收入计入 buybackStock。池子手续费的股票一侧对每种类型都计入 buybackStock。
keeper 报酬
动作产出的 bountyBps(0.1%),以产出的资产支付给 execute() 或 buyback() 的调用者:
| 动作 | 基数 | 支付资产 |
|---|---|---|
| 止盈(分批止盈一族) | 利润 | 股票 |
| 止损(分批止盈一族) | 所得 | USDG |
| 回调买入、回补买入(分批止盈一族) | 花费 | USDG |
| 引擎卖出(固定仓位、再平衡) | USDG 毛产出 | USDG |
| 引擎买入(固定仓位、再平衡) | 股票毛产出 | 股票 |
| 回购(所有类型) | 买到的代币 | 代币 |
book()、sweep、collectFees、claimFees | 没有 |
一笔 2,000 USDG、收益 3% 的卖出支付约 0.06 USDG。发布说明写明该报酬不足以维持外部 keeper,由协议自行运行一个;调用仍对所有人开放。
更换收款地址
| 地址 | 修改方 | 修改方式 |
|---|---|---|
| 协议的,按池 | owner | setProtocol(poolId, to),无延时 |
| 创建者的,按池 | owner 提议,创建者决定 | proposeCreator(poolId, to);TAKEOVER_DELAY(14 天)后任何人可在 ACCEPT_WINDOW(14 天)内 acceptCreator;创建者调用一次 vetoCreator 即终止,并在 VETO_QUIET(180 天)内不得再次提议 |
| 曲线的收款方 | 没有人 | 不可变 |
创建者地址必须能调用 vetoCreator:应使用 EOA 或 Safe,不应使用分账合约。
金库与回购
每次发射都有一个金库。金库在毕业时获得募资的 30%,运行创建者发射前选定的一种策略,只能在健康门打开时、在上架指定的池子中以股票 对 USDG 交易。其收益用于在代币自身的池子中回购代币并销毁。持币人对金库本身没有索取权(目前没有,后续可以增加)。
七种策略及其参数、下限和默认值在核心概念。
健康门
下列条件同时成立时 health() 为 true:
| 条件 | 来源 |
|---|---|
股票的 Chainlink 价格新鲜,且 oraclePaused() 为 false | PriceOracle |
| 市场开盘,或这次发射的过期容忍带允许一个有界的休市价格 | TradingCalendar、bandBpsPerHour |
股票池现价与预言机、与池子 600 秒均价的偏差都在 maxDeviationBps(0.5%)之内 | 上架的 V3 池 |
| 池子的观测环足以提供这个窗口 | V3 池 |
通过的交易在 V3 池上执行,价格限制为预言机价偏 maxSlippageBps(1%),仅成交限制范围内可成交的数量。计划内休市期间,股票/USDG 的
TWAP 受保护,止损从不在只有池价时触发。过期容忍带是 bandBpsPerHour,0 到 bandCeiling(stock),合计上限 3000;0 表示仅采用
Chainlink,仅在交易时段执行动作。毕业前 health() 返回 (false, 0)。
记账与 execute 的顺序
到账的股票(毕业资本、税收份额、捐赠)在 book() 按当时价格记账之前都是 unbookedStock()。execute() 先记账待处理的股票,
再处理到期的止损,再处理到期的止盈,两种卖出均未到期时才执行回调买入;以 NotDue 结束的 execute() 会回滚临时记账,因此有股票
待记账而没有动作到期时,应单独调用 book()。继承的 takeProfit(id)、stopLoss(id)、buyDip() 选择器在 v2 上回滚。
回购
留给销毁的股票放在 buybackStock。buyback() 用其在代币自身的 v4 池中买入代币,并销毁买入的全部代币。回购不参照日历,因为代币池从不休市;
它按池子 600 秒 TWAP 定价(终点价作为第一个锚点),受 maxBuybackImpactBps(3%)约束,以 buybackCooldown(10 秒)限速。分批止盈
和引擎类型每次出价 buybackChunkUsdg(500 USDG);按比例回购和循环每次出价预算的十分之一。金库自己的交换不收税。
buybackStock 的来源:已实现的利润(分批止盈一族)、收益的分配份额(固定仓位、再平衡)、全部收入(回购销毁),以及池子手续费的
股票一侧(所有类型,经 collectFees())。
销毁对象
| 销毁 | 来源 | 事件 |
|---|---|---|
| 开盘加价 | 窗口内的曲线买入 | Bought.burned |
| 回购 | buyback() | Buyback.tokenBurned |
| 池子手续费,卖出侧 | collectFees() | FeesCollected.tokenBurned |
毕业不销毁任何代币,锁定的流动性也不计为供应量减少。
策略注册表
类型在 predict 之前用 V2TreasuryDeployer.setStrategyKind(symbol, nonce, kind) 选定;类型 0 无需调用。类型是金库 CREATE2 地址
的一部分,因此也包含在 terms 中。注册表只增不改。编号是发布脚本按顺序产生的:
| 类型 | 名称 | 合约 | 代理逻辑 |
|---|---|---|---|
| 0 | 分批止盈 | HedgeFunV2UpgradeableTreasury | HedgeFunV2UpgradeableTreasuryLogic |
| 1 | 回购销毁 | HedgeFunV2UpgradeableBuybackTreasury | HedgeFunV2UpgradeableBuybackTreasuryLogic |
| 2 | 固定仓位 | HedgeFunV2UpgradeableEngineTreasury | HedgeFunV2UpgradeableEngineTreasuryLogic,schema 1,policy V2RebalancePolicy |
| 3 | 再平衡 | HedgeFunV2TradablePercentEngineTreasury | HedgeFunV2TradablePercentEngineTreasuryLogic,schema 3,policy V2TradablePercentRebalancePolicy |
| 4 | 按比例回购 | HedgeFunV2PercentBuybackTreasury | HedgeFunV2PercentBuybackTreasuryLogic |
| 5 | 循环 | HedgeFunV2UpgradeableCycleTreasury | HedgeFunV2UpgradeableCycleTreasuryLogic |
类型 2 和 3 以 STATICCALL 咨询一个无状态 policy。policy 提出一个意图,持有、买或卖;金库在交换前核对 policy 的代码哈希、nonce、
配置哈希、实时预言机、冷却、方向、单次规模和当日成交量。
各种行情下的行为
| 行情 | 分批止盈、按比例回购、循环 | 回购销毁 | 固定仓位、再平衡 |
|---|---|---|---|
| 上涨 | 每达到目标即卖出;仅在低于上次卖出价的回调时再买入,或在继续上涨时再买入一次(循环) | 用手续费回购并销毁 | 股票占比越过区间时分批卖出;收益用于销毁 |
| 震荡 | 高卖低买 | 同上 | 每次偏离区间都交易 |
| 下跌 | 每个回调台阶都买入;未设止损则不卖出 | 同上 | 向目标买入;没有收益,不送入销毁 |
| 横盘 | 不触发 | 同上 | 不触发 |
| 休市 | 股票腿等待;回购按代币池继续 | 同上 | 股票腿等待;回购继续 |
各类型共有
- 转到金库的股票或 USDG 是捐赠,并入下一次观测。没有提取,没有赎回。
- 最多 128 个不同成本的 lot;达到上限后,记账和回调买入须等待一次卖出。
health()、unbookedStock()、buybackStock()、params()、totalBurned()和totalStockSpentOnBuybacks()是每种类型都有的 视图;其余在读取状态。