NVDA Printer:规则、角色和合约
快速上手讲该做什么。这一页讲合约强制执行什么、哪些只是我们的做法、谁拿着哪把钥匙能做什么。常量直接写数字; owner 能改的,写它的边界,当前值在金库页面上。
金库是什么
一个 BrokerEpochVault 持有 NVDA token,发行不可转让的份额。每周它通过自己的 BrokerVaultQuotedDesk,把它全部 NVDA
的一张 covered call 卖给白名单里的买方;报价由报价签名人签名、买方批准。买方的权利金在同一笔交易里进入金库。到期时按链上
证明过的价格结算,权利金按份额分配。
| 合约 | 决定什么 |
|---|---|
BrokerEpochVault | 存款、份额、每周的阶段、领取、队列、暂停 |
BrokerVaultQuotedDesk | 签名报价的卖出、权利金托管、费用、结算和 1 小时作废窗口 |
BrokerVaultOracle | 开仓时和到期时的 NVDA 价格:Chainlink,或带宽内经签名的官方收盘价 |
BrokerVaultDeskOperator | 金库的 operator:把签好名的每周卖出转给 Desk,别的什么都不做 |
BrokerVaultScheduler | 每周的时间,由链上交易日历推出来;任何人都可以调用 |
BrokerVaultZap | USDG 存款和自愿开启的复投,按预言机约束的价格在池子里换 |
BrokerVaultExitPool | 周中按签名报价买下锁仓份额 |
HedgeStakingGate | 允许存款的 HEDGE 质押 |
它们都不是代理合约,都不能升级,金库的 ownership 不能放弃也不能绕过。
角色
| 角色 | 谁持有 | 能做 | 不能做 |
|---|---|---|---|
| Owner | 2/3 Safe | 下面这些参数(在边界内);暂停;卖出后 1 小时内作废 | 动存户的 NVDA、份额或权利金 |
| Operator | BrokerVaultDeskOperator,一个没有钥匙的合约 | 提交签好名的每周卖出 | 其他任何事;它没有别的函数 |
| Keeper | Hedgehood 的服务器 | 付 gas:冻结、通过 operator 提交卖出、跑队列、结算 | 陌生人做不到的事;它做的每一步任何人都能做 |
| 报价签名人 | Hedgehood 的钥匙 | 签每周卖出的条款 | 自己锁定任何东西 |
| 期权买方 | Hedgehood 的账户 | 批准报价并付权利金 | 付得比 Desk 下限少 |
| 收盘价签名人 | Hedgehood 的钥匙 | 签官方收盘价 | 让价格偏离 Chainlink 超过 0.75% |
| 退出签名人 | Hedgehood 的钥匙 | 签周中退出价格 | 让支付超过退出池的上限和库存 |
| 复投 keeper | Hedgehood 的 keeper | 给开了复投的账户复投权利金 | 把权利金送到那个账户自己的存款以外的地方 |
买方是 Hedgehood。权利金按上市期权的买价算,并有链上下限把关,但每一张 call 的对手方都是我们。这是利益冲突,写在这里, 不藏。
一周的精确规则
时间是纽约时间,来自交易日历;节假日跳过,提前收盘时到期也提前。
| 步骤 | 规则 |
|---|---|
| 排期 | 排期合约在截止前至少 12 小时发布每一周;任何人都可以调用 |
| 截止 | 周一 09:30;之后的存款属于下一周 |
| 冻结 | 截止时给金库里的 NVDA 和份额数拍快照;任何人都可以触发 |
| 卖出 | 09:35 到 15:30 之间(交易窗口);到 15:30 还没卖出,这一周跳过,什么都不变 |
| 到期 | 周五 15:59,距窗口结束至少 12 小时、至多 9 天 |
| 结算 | 约 16:10 起,见下文;无需许可 |
存入
- 门槛。 账户在门槛合约里质押至少门槛数量(1,000,000 HEDGE)时才能存款。只要还有本金在金库里,min(质押, 门槛) 保持锁定,只有超出部分能申请解除。解除要先申请,再等 7 天。Owner 能改门槛、能阻止新存款,碰不到任何人的质押。
- USDG。 Zap 在池子里把 USDG 换成 NVDA。最少换到的 NVDA 必须不低于预言机价格减 1%,链上强制,所以存款的成交价 不会比这更差。
- 队列。 存款按它所属的那一周排成一批。接受存款期间,keeper 最多每小时把它们按当时的每份 NVDA 换成份额;锁仓周里的 存款要等那一周结算。变成份额之前,或在它那一周的截止之前,都可以撤回,拿回同样数量的 NVDA。
- 上限。 总 NVDA 有 owner 设的上限,页面显示剩余额度。
卖出
合约强制:
| 规则 | 数值 |
|---|---|
| 行权价必须严格价外,至少 | minOtmBps:owner 设,不能低于 0.5%;当前 1% |
| 行权价至多比现价高 | 当周的偏离,6.5%;合约上限 10% |
| 权利金至少 | 名义金额的 minPremiumBps:owner 设,不能低于 0.1%;当前 0.2% |
| 权利金至多 | 名义金额的 10% |
| 覆盖 | 冻结时金库里的全部 NVDA |
| 报价 | 报价签名人签名、买方批准、不超过 120 秒、对应本周的到期日 |
| 使用的价格 | 预言机;休市或喂价过期时它拒绝给价 |
我们的做法(合约不强制):在上面的带宽里,选当周五到期、delta 最接近 0.15 的上市 NVDA call,按 OPRA 买价成交;如果这个 行权价的权利金低于下限加 0.05%,就选能达到的、delta 最接近的那个。行情冷清的一周它会往价内靠,但绝不出带宽。
费用。 Hedgehood 收权利金的 feeBps,当前 20%,上限 30%。第一次卖出之后,提高费率只对至少 7 天后的卖出生效,
所以它永远不会落在截止和当周卖出之间;降低立即生效。已经卖出的一周保持它卖出时的费率。
作废。 卖出后的一小时内,owner 可以写明理由作废这次卖出。买方拿回 90% 的权利金,另外 10% 留给存户;NVDA 不动。 这一小时里不能周中退出。
结算
价格。 如果这一周卖出时已经设了收盘价签名人,就按 NVDA 的官方收盘价结算:由那把钥匙签名,到期 10 分钟后起接受,且 只在距到期前最后一轮 Chainlink 价 0.75% 以内才接受。我们的签名人只有在两家独立数据源对收盘价精确到分一致时才签,证据 公开。否则(以及到期 48 小时后的兜底),价格是到期前最后一轮 Chainlink 价,由它的下一轮证明。一周用哪个价格来源在卖出时 就固定,之后改签名人也切换不了。
支付,P 是结算价,K 是行权价,N 是覆盖的 NVDA:
P ≤ K:存户保留全部N个 NVDA,以及扣费后的权利金。P > K:买方拿到N × (P − K) / P个 NVDA,即行权价以上的价值。其余的和扣费后的权利金归存户。- 到期后 7 天都没有价格:按
P ≤ K结算。
到期后的每一步都无需许可:任何人都可以确定价格并结算,所以 keeper 不在只会让一周晚一点,拖不住它。
把钱拿出来
| 合约规则 | |
|---|---|
| 撤回存款 | 在它变成份额之前,或它那一周截止之前 |
| 到期后取回 | requestRedeem 预留份额;接受存款期间在下一次队列处理时、锁仓期间在结算时以 NVDA 支付;之前可撤销;无费用 |
| 立即退出 | 退出池在卖出后 1 小时到到期前 1 小时之间买入份额,签名报价 25 秒有效、只能用一次,受池子上限和库存限制 |
退出价格按市场买回你那份 call 的成本接手它:
每份价值 = 未覆盖 × S_bid + 已覆盖 × (S_bid − C_ask) + (权利金 − 费用) / 卖出时的份额数
支付 = 份额 × 每份价值 × (1 − 退出费) 以 USDG,或 ÷ S_ask 以 NVDA
S 是 NVDA 的 SIP 报价,C_ask 是本周那张 call 的 OPRA 卖价。退出费 1%,每份报价里都写明。
复投
开了复投的账户,在一周结算后、下一次截止前、市场开盘时,由 keeper 把可领的权利金换成 NVDA,成交价不差于预言机价减 1%, 排成它下一周的存款。keeper 只能对开了复投的账户这么做,也只能放进它们自己的存款。关闭立即生效。
Owner 能改什么
存款上限 · HEDGE 门槛和门槛合约 · operator · 退出池名单 · 暂停 · 报价签名人、买方和买方批准钥匙 · 费用(有边界、有延迟) · 权利金和价外下限(有边界)· 收盘价签名人(0.75% 带宽,每周在卖出时固定)· 复投 keeper · 退出池自己的签名人和它自己的 库存。
暂停停止新存款、新卖出和退出池买入。结算、领取、撤回和取回照常;暂停期间跑队列,会把待生效存款退还为可领 NVDA,而不是 激活它们。
这些都动不了存户的 NVDA、份额或权利金。
为什么 operator 是一个合约
金库里还保留着它最初的设计:operator 在券商那边卖 call,再上报结果。这种锁仓周的亏损由 operator 报,上限是按预言机价格 的 call 内在价值加名义金额的 0.5%,从存户的 NVDA 里扣。Desk 卖出的一周永远不能按上报的数字结算,但谁当 operator,谁就 可以改开这样一周。
所以 operator 不是一把钥匙,而是 BrokerVaultDeskOperator:一个没有 owner、没有存储、不持有资金的合约,唯一的函数是
把签好名的卖出转给 Desk。broker 路径检查 msg.sender == operator,而没有任何办法让这个合约去调用它。keeper 通过它提交
卖出,其他任何人也可以,因为报价签名人和买方已经签过名,所有边界照样生效。
唯一的回头路是 owner 的决定:2/3 Safe 重新把一把钥匙设成 operator,这是一笔任何人都能在链上看到的交易。我们不会这么做, 写在这里是为了让你能自己查。
会出什么问题
- NVDA 下跌。 金库是 NVDA 多头。权利金是垫子,不是对冲。
- NVDA 大涨。 行权价以上的部分每周都卖掉了。
- 价格出错。 结算价依赖 Chainlink,签名周还依赖我们在 0.75% 带宽内的签名人。喂价过期时会停掉卖出和存款,而不是乱定价。
- token 被暂停。 NVDA token 的发行方可以暂停它;暂停期间什么都动不了。
- 钥匙。 报价、买方和收盘价钥匙是运营钥匙,不以明文文件放在服务器上。被滥用时受上面的卖出下限和 0.75% 带宽约束;丢了 只会让一周晚一点,之后任何人都能结算。keeper 自己的钥匙只付 gas。
- 退出池没钱。 立即退出依赖它的库存;到期后取回不依赖。
- 没有第三方审计。 合约做过内部审查和测试,包括在线上链的 fork 上测试。这不是审计。
合约
Robinhood Chain(4663)。 从 edd7f09 部署,区块 84792706;链上代码已和这个 commit 的全新编译结果核对过。
它们建立在:
| 地址 | |
|---|---|
| NVDA token | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| NVDA / USD Chainlink 喂价 | 0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15 |
| 交易日历 | 0xFcD3129E596B3C4577fb4129D61A90db52306461 |
| NVDA / USDG 池 | 0xd4EB21209C4D6093f80B5b84f5C45cc093EA14a3 |
| HEDGE | 0x3f9108a3bECa998C14c6dda822a7e8EaEb88E20D |
| Owner Safe(2/3) | 0xB5C9e27F50599687eD141ABe337414B79061489b |
| 期权买方 | 0xFD3C304e2f51542D2c7CD038f43fba4b28301b8A |
Robinhood Chain 测试网(46630)。 同一份源码,用测试 token 和测试喂价:
| 地址 | |
|---|---|
| Vault | 0xB60Ca23C68747eFeDF63c3429081ED418add64aC |
| Desk | 0xa0AE14695C29f7Ec59D79E456d407D254333374D |
| Oracle | 0xaF7B8E25ff5f6b4C90740B5B06c16f4Ef8f4d24b |
| Zap | 0xC5939A6FADADc36b091F39546573609011BF028F |
| 退出池 | 0x4b26073384fe4317e85cB587EE646aD1c15E029A |
| HEDGE 门槛 | 0x7473f13f1e20FC59eeed224D1EbEC1548bdeE76A |
| 排期合约 | 0x8F44D16D898f16933E1A17f1743ab0cb1FbBF36a |
源码:github.com/0xHedgeHood/hedgehood-vaults。实时参数和本周时间在 金库页面。