实施状态
本书描述的是已经决定的协议。它所描述的内容中,有一部分还没有写进代码。本页准确地说明是哪一部分。
已决定并已实现
- 费用(默认为 5 %)及其两种费率结构
TreasuryVault、其预言机界限,以及它没有提取功能这一点BuybackBurner与$STOCKFUN飞轮- 紧急模式,自 2026-10-05 起立即生效
- 通往 Robinhood Chain 的跨链通道,已准备就绪并在模拟中测试,自 2026-09-28 移除回程路径以来单向运行,并于 2026-10-06 通过 LayerZero 在两个测试网上端到端运行过(见下文)
$STOCKFUN协议代币的单边发射- 创建者回购的移除,于 2026-09-28 完成
- 发射机制的重新设计,于 2026-09-28 完成:不再有联合曲线,也不再有毕业;每个市场的创建、其两个锁定头寸(默认为 700M 与 300M)以及创建者可选的买入,都在同一笔交易中完成
- 创建费,默认为 0.001 ETH,自 2026-10-05 起为所有者的设置
- 递减式防狙击以及创建者白名单:默认最多 20 个地址,通过官方路由器交易时获得豁免;官方路由器仍可由所有者更改
- 创建者费用按市场分别保存在 Hook 上,由创建者领取;自 2026-10-01 起,团队份额和回购份额也是如此,通过任何人都可以触发的领取来支付
- 每个市场的代币以及
$STOCKFUN的持仓都在链上记录,自 2026-10-02 起由持仓记录器记录,每个代币在每次转账时都会调用它。在 2026-10-01,当这份记录仍在代币之中时,它让两个钱包之间的每次转账多消耗约 52,000 至 61,000 gas,高于做出该决定时估计的 20,000 至 40,000。Uniswap 的PoolManager不被记录,因此一次兑换承担的是交易者一方的开销,以及自 2026-10-01 起为已记录供应量进行的一次写入:对于已持有该代币的钱包,通过路由器买入为 113,529 gas,卖出为 137,250(在 2026-10-01 的修复之前分别为 125,862 和 150,416,这些修复还从每笔交易中去掉了两次发送) - 自 2026-09-29 起,StockFun 的池子默认不收取 Uniswap LP 手续费:税就是一笔交易的全部成本
- 2026-09-29 安全审计的修复,于 2026-09-30 和 2026-10-01 实施:流动性只能来自流动性锁定合约;团队份额和回购份额在任何交易之外领取;按 Keeper 指定的数额进行转换,现金逐只股票预留;每个代币中都有已记录供应量,即空投的分母;Robinhood Chain 通道上,单个市场不再会阻断一个批次,暂停中的远端枢纽仍会应用角色变更。每一项已修复的发现都有回归测试
- 2026-10-01 的安全流水线,即补全了其中若干项修复的第二轮审计:在 Robinhood Chain 上,v3 路径逐个池执行,官方跨链桥的账目票据支付的记录不超过它加入队列的记录;使金库现金低于其预留额的紧急转移会让这些预留额作废;Keeper 在篮子的最后一只股票上留出 n−1 个单位。每一项修复都有回归测试
- 2026-10-02 的可升级重新设计:除代币、流动性锁定合约和镜像金库部署器之外,每个模块都位于一个代理合约之后,可由 StockFun 的所有者升级,并立即生效;金库在两条链上都是每个市场一个代理合约;代币被简化为只有一个 setter
setRecorder、自 2026-10-05 起还带有其救援函数的普通 ERC-20;持仓记录位于其自己的模块中;Hook 的代理合约在挖掘时带有全部 14 个 v4 权限;流动性锁定合约的终止模式,及其 30 天的事先公告期;存储布局被记录下来,并由一个脚本检查。一次兑换多消耗约 27,000 gas,这是单独测得的:买入为 237,190 gas,而不是 210,105;卖出为 285,031,而不是 258,278 - 空投合约,于 2026-10-04 完成:以太坊上的
AirdropDistributor,可升级并绑定到工厂合约,由两种金库上的sendToAirdrop供给股票,以及远端枢纽上的空投路由。每日循环的时间窗口在 13:00 UTC 关闭,份额根据已记录的持仓计算,由每位持有者自费领取,没有期限、上限或最低额,每个代币一份排除名单,为没有合格持仓的时间窗口搁置股票,以及紧急模式。分叉测试套件之外的 514 个测试全部通过,其中包括一个有状态不变量;测试中以 mock 模拟 LayerZero。Codex 审查了设计和代码,并两次审查了修复,其最终检查没有发现任何漏洞。尚未部署 - 2026-10-05 的各项决定:没有团队分配,
$STOCKFUN的全部供应量进入其锁定头寸;立即生效的紧急转移和立即生效的适配器更换;协议的每一个数值都是所有者的链上设置,在两条链上都是如此,以今天的数值为默认值,每个池子保留它创建时的 LP 手续费和 tick 间距。已写进代码并经过测试,尚未部署 - 创始人于 2026-10-05 确立的设计规则:一处失败绝不阻断其余部分,每一个能够持有资金的合约都有一个补救手段,用来转出被卡住的东西,唯一的刻意例外是代币向其持仓记录器的报告;参见架构。当天的第四个审计循环把它写进了代码:跨链送达绝不阻断另一个市场,领取支付它能支付的部分,每一段买入、每一只空投股票和批次中的每一个市场都单独进行,为拒收 ETH 的接收方保留欠款,而不是让市场停止,Lens 一次读取一个金库,没有紧急模式的模块都有救援函数。已写进代码并经过测试,尚未部署
- 2026-10-05 的五个审计循环及其修复,其中包括:紧急转移之后结清账目,绝不由另一个市场支付;跨链批次仅限 Keeper 发送,镜像金库的预先部署仅限 Keeper 和所有者;在正在使用的代币上指定的记录器不再会破坏交易,也不会计量在它之前开始的时间窗口;
$STOCKFUN的发射操作者在铸造之前就被排除在空投之外;官方跨链桥通道的票据按基础费用定价;存储检查覆盖每一层;以及上述规则。每一项修复都有回归测试;当天结束时,614 个 Foundry 测试全部通过,三个分叉测试套件因没有 RPC 而跳过。尚未部署 - Keeper 的空投步骤和 dapp 的领取页面,于 2026-10-05 完成,以及 Keeper 的新职责:支付 Hook 和锁定合约为接收方保留的款项,对持续失败的情况发出警报,单独规划每只股票的那一段,一个在重启后依然保留的状态文件,以及每日收取 LP 手续费。尚未部署
- 第五个审计循环的链下审查,于 2026-10-06:Keeper 按照 2026-09-27 的决定,每个空投时间窗口转换一次金库的 ETH,在等待回执之前记录每一笔交易,并在其状态文件夹上持有一把锁,也不再为只会失败的买入支付 Ondo 证明费用;一个篮子最多包含五只股票;Lens 包含每个金库的状态和欠款;
$STOCKFUN的发射脚本会恢复一次中断的运行;应用会计入欠金库的 ETH,在领取中为仍在途中的股票留出余量,记住被其代币拒绝的股票,并且绝不把未读取的数据显示为没有。619 个 Foundry 测试通过,三个分叉测试套件因没有 RPC 而跳过。同一天在一条私有链上进行的演练,让 Keeper 端到端地运行了两个时间窗口,并通过了它的六个场景。参见Keeper和dapp。尚未部署 - 演练的发现,于 2026-10-06 修复:即使某个市场的金库没有任何新的东西可发送,Keeper 也会归入空投合约为该市场搁置的股票,因此一个交易过一次之后就沉寂的市场,不再会让它的第一次空投处于持有者够不到的状态;它按时间窗口而不是按自己的时钟记录低于门槛的金库;本地部署文件在 Keeper、应用或 worker 使用之前会与链上进行核对。620 个 Foundry 测试通过,三个分叉测试套件因没有 RPC 而跳过。参见Keeper。尚未部署
- 第六个审计循环,于 2026-10-06 修复:在官方跨链桥上,Keeper 会跟踪每一张票据,直到知道它已被执行,无论其转账是否已被计入,并且只依据远端枢纽的事件计入转账;金库的 USDC 在其 ETH 每次转换之后推进一次,其他情况下每个时间窗口最多一次,与 2026-09-27 为 ETH 所做的决定一致,而 Robinhood Chain 上的买入仍然每一轮都会运行;对于没有任何东西可发送的金库,一次无法归入任何东西的搁置股票查找不再每天发送;低于门槛的金库会依据时间窗口关闭之后读取的余额进行检查;每个金库都在自己的路由器上报价;当 Lens 无法读取
$STOCKFUN的价格时,应用会把它标为“(last read)”。参见Keeper。尚未部署 - 第七个审计循环,于 2026-10-06 修复:Keeper 只向空投发送价值抵得上发送成本的东西,跨链桥无法携带的粉尘不再被算作有东西可发送;它先从每张官方跨链桥票据的创建回执开始读取,因此有效的存款绝不会被当作已执行;每一次日志查找都在最新区块之下几个区块处停止;在 RPC 服务于另一条与配置不符的链时,它拒绝启动;它的警报 webhook 未接收的内容会被保存并重新发送;空的设置采用其默认值。应用的数据 Worker 单独读取每一个可升级合约,在其交易读取失败时把 24 小时交易量显示为未知,并检查每个端点的链;价格图表把每个数据点放在它的时间上。620 个 Foundry 测试通过(分叉文件之外的 615 个,以及 Robinhood Chain 分叉测试套件在其公共 RPC 上的五个;三个以太坊分叉测试套件因没有 RPC 而跳过);Keeper 的 277 个测试、shared 包的 51 个、后端的 9 个以及 worker 的 137 个测试全部通过。参见Keeper和dapp。尚未部署
- Robinhood Chain 上的价格喂价防护,于 2026-10-06 写进代码:当一只股票的代币表明其预言机因公司行动而暂停时,预言机会暂缓给出该股票的价格,这项检查对每只股票开启;当 Chainlink 的排序器在线状态喂价表明排序器宕机或刚刚恢复时,它会暂缓给出所有价格。Robinhood Chain 没有这样的喂价,因此第二项检查在部署时关闭,这是一个明确的选择,直到发布这样的喂价为止。两者都是所有者的设置,在以太坊上关闭。参见Robinhood 通道。尚未部署
- 第八个审计循环,于 2026-10-06 修复:应用的发射表单只提供从链上读取的篮子,并在发送之前再次核对所选的篮子;Keeper 在跨链批次所在区块已有几个区块深度时才跟踪它,能区分跨链桥的粉尘和费用无法报价的股票,对每一条不同的警报只保留一条待发记录,在读取到其 RPC 的链之前保留另一条链的状态文件,要求两个链标识符,在最新区块之下几个区块处读取票据,并对本地通道上的开启只计算一次;Keeper、它的预检和它的检查器、Worker 以及应用都掌握了价格喂价防护;Worker 的交易窗口绝不往回移动,交易面板对白名单钱包收取正常税率。640 个 Foundry 测试通过(分叉文件之外的 633 个,以及 Robinhood Chain 分叉文件在其公共 RPC 上的七个;三个以太坊分叉测试套件因没有 RPC 而跳过);Keeper 的 306 个测试、shared 包的 51 个、后端的 9 个以及 worker 的 155 个测试全部通过。参见Keeper和dapp。尚未部署
- 以太坊 Glamsterdam 升级下空投送达的 gas,Sepolia 于 2026-10-06 启用了这次升级:创始人当天的决定,即 Keeper 模拟每一次送达,在 StockFun 的所有者于远端枢纽上设定的范围之内选择其 gas,并重新执行仍然卡住的送达,在第二次失败时发出警报。已写进代码并经过测试,已通过升级应用于测试网运行,尚未在主网上部署。参见Keeper
- 第九个审计循环,于 2026-10-06 修复,包含 LayerZero 测试网运行的发现:Keeper 在一分钟内于其最后一笔交易所在的区块上读取,并在那里估算它接下来要发送的交易的 gas,给每笔交易其估算值加 25 %,按最后一次被触发的顺序发送其待发警报,不再对被它自己的执行删除的票据发出警报,它的预检可以在测试网部署上运行;Worker 在其 Cloudflare 对象休眠时保留它对其 RPC 所了解的情况,并记录 Robinhood Chain 自身的区块;应用给每笔交易它自己的 gas 上限,标出作为估算值的国库金额,并且绝不把无法读取的授权当作没有授权。自这个审计循环起,第二个代理会在每一项修复被推送之前审查它,它的发现也以同样的方式修复。653 个 Foundry 测试通过(分叉文件之外的 646 个,以及 Robinhood Chain 分叉文件在其公共 RPC 上的七个;三个以太坊分叉测试套件因没有 RPC 而跳过);Keeper 的 370 个测试(关卡的最后一次修复之后为 372 个)、shared 包的 51 个、后端的 9 个以及 worker 的 189 个测试全部通过。参见测试与验证。尚未在主网上部署
- 第十个审计循环,于 2026-10-06 修复:每次部署广播都采用节点的 gas 估算,因为在 Glamsterdam 下,部署工具自己的数值对每一次创建都不够;跨链批次在 Robinhood Chain 上的最后一步获得一个基数加上每个市场的一份,每个批次最多 17 个市场,Keeper 不会发送更多,并会说明停滞的批次所处的状态;Keeper 的紧急监控分组列出其合约,它的错误文本只保留 RPC 地址的主机,它通过 Multicall3 读取每个市场;应用绝不把钱包取消的交易显示为已完成,并在一分钟内于不早于其自己最后一笔交易所在区块的区块上读取。测试网的跨链桥适配器已升级,并承载了它的下一个批次。662 个 Foundry 测试通过(分叉文件之外的 655 个,以及 Robinhood Chain 分叉文件在其公共 RPC 上的七个;三个以太坊分叉测试套件因没有 RPC 而跳过),LayerZero 测试网项目的 2 个测试也通过;Keeper 的 400 个测试、shared 包的 51 个、后端的 9 个以及 worker 的 210 个测试全部通过。参见测试与验证。尚未在主网上部署
- 被中断循环的剩余资产在下一次循环中处理完毕,于 2026-09-27 决定:Keeper 会推进金库仍持有的现金,无论是否达到门槛,最迟在下一个时间窗口进行
一份实现顺序记录在 projet/docs/FUNCTIONAL_AUDIT_2026-09-28.md 中,它分为若干步骤,每一步都能让代码库保持可编译。
2026-09-27 已决定,尚未实现
创建者回购和跨链桥的回程路径已于 2026-09-28 从合约、Keeper 和后端中移除。自 2026-10-04 起,空投合约已写进代码,自 2026-10-05 起,Keeper 的空投步骤和 dapp 的领取页面也已写进代码:均已经过测试,尚未部署。股票适配器尚未写进代码:见下文。代码库中的应用已不再显示 Treasury Ratio。
已没有任何待实现的事项。Keeper 每日的空投步骤和 dapp 中持有者的领取页面自 2026-10-05 起已写进代码,被中断循环的剩余资产也会在下一次循环中处理完毕,Keeper 会推进金库仍持有的现金,无论是否达到门槛:见上文。
doc/ 中的文档以及落地页规格已于 2026-09-27 与这一决定对齐。在代码中,创建者回购的移除已经完成,自 2026-10-04 起,空投合约也已完成,包括其份额计算和领取,自 2026-10-05 起,Keeper 的步骤和领取页面也已完成。
2026-09-28 已决定,尚未实现
- 把封装股票带到以太坊的股票适配器,每只股票一个:Robinhood Chain 上的锁仓适配器及其在以太坊上的 OFT。它们需要 LayerZero 的
oft-evm包,其主网版本不在代码库中;测试使用 mock,而 2026-10-06 的 LayerZero 测试网运行使用了基于该包构建的测试适配器。以太坊上的领取自 2026-10-04 起已写进代码,其在 dapp 中的页面自 2026-10-05 起已写进代码 - 股票适配器的 LayerZero 配置由所有者掌握,没有延迟,也没有提取上限
2026-09-11 已决定,部分同步
从 Ondo 转向 Robinhood Chain 已成定局,通道的代码也已存在。项目的源文档尚未全部更新——参见源文档勘误。
从未在真实条件下验证过
- 尚未进行任何主网部署
- 尚未在主网上运行过任何 LayerZero 传输。2026-10-06,LayerZero 测试网运行通过 LayerZero 真实的测试网端点、DVN 和执行器,在 Sepolia 和 Robinhood Chain 的测试网之间传送了跨链批次和空投送达,共七个每小时的时间窗口和六个空投循环,每一笔领取都恰好等于其计算出的份额。它使用的是测试股票、测试适配器、一种测试 USDG 和模拟喂价:它既不能证明 Paxos 的 USDG 对,也不能证明 Robinhood 的股票及其适配器、真实的喂价和流动性,或者主网的 gas、费用和最终性。参见Robinhood 通道
- 现有的形式化证明并不涵盖当前的跨链通道
LiquidityLock形式化规范中有七条规则在证明器上对一个方法lockProtocolLiquidity仍未得出结论,即使使用更长的时限也是如此;它们在其他所有方法上都成立。2026-10-01 针对修复后代码的重新运行没有发现任何被违反的规则- 形式化规范正在针对 2026-10-02 的重新设计进行更新:它们最近一次完整的证明器运行是在 2026-10-01,早于这次重新设计。对于 2026-10-04 的空投,涉及被修改合约的五份规范通过了类型检查,没有在证明器上运行。在 2026-10-05,各份规范先针对设置进行了更新,随后又针对当天的各个审计循环进行了更新,这些审计循环新增了关于 Hook 的欠款和误入资金、锁定合约保留的份额以及每一个救援函数的规则:它们通过了类型检查,自 2026-10-01 以来没有在证明器上运行。2026-10-06 为预言机的价格喂价防护编写的新规则同样如此
- Keeper 的欠款支付、LP 手续费收取、警报和状态文件于 2026-10-05 编写,由其测试覆盖,并自 2026-10-06 起由一条私有链上的演练覆盖:每个时间窗口一次的转换、空投、一个拒收 ETH 的金库及其欠款的支付、在运行中途被终止时的状态文件及其锁、LP 手续费。跨链桥通道没有在那里运行;它在 2026-10-06 的 LayerZero 测试网运行中由 Keeper 端到端地运行过,但从未在真实条件下运行
- 尚未进行任何外部审查
主网之前仍待解决
- 对 Robinhood Chain 上喂价覆盖范围的最新调查,以及如果 Chainlink 为该链发布排序器在线状态喂价,在预言机上设置它(截至 2026-10-06 尚不存在)
- Paxos 的 USDG 前往 Robinhood Chain 所走的 LayerZero 路径的大小限制,在第一个批次之前读取;如果它不同于默认的 10,000 字节,就相应设置跨链批次的市场数上限(自第十个审计循环起)
$STOCKFUN头寸的起始 FDV 与上限- 空投尚待完成的工作,见上文所列:股票适配器。它的参数自 2026-10-04 起已确定:Keeper 不推送,没有上限,没有最低额,没有期限,每个代币一份排除名单
- 取代 Treasury Ratio 的指标,以及口号和标语——它们描述的是一个会不断积累的国库
- 2026-10-01 的第二轮审计中仍在等待所有者决定的发现:最后一只股票的余量在合约一侧的实现,它会改变文档所记录的分配规则(R2T-1);以及作为可选项,让工厂合约自行部署
$STOCKFUN的金库(R2F-2)。自 2026-10-05 起,拒收 ETH 的金库不再让其市场停止,因此 R2F-2 所描述的停止不再会由这样的金库引起
已于 2026-10-05 解决的事项。在 2026-09-29 的审计中:曾经任何人只要看到就能使用的 Ondo 证明(M-7)和曾经接受自身作为接收方的路由器(L-4)已经修复,跨链桥适配器的轮换(M-2,以及与之相关的 L-8)则按所有者的决定维持现状。在第二轮审计中:以 PoolManager claims 的形式收取买入税(R2F-1,option b)被否决,税保持目前的收取方式;针对远端枢纽上已记录现金的紧急转移,其记录原本随后会用其他市场的现金支付(R2H-1),已由当天各个审计循环的结算工具加上一套流程涵盖,即所有者在官方跨链桥通道上于转移之前暂停远端枢纽;而拒绝某一个镜像金库的现金代币(R2H-2)自第四个审计循环起已不再阻断任何东西:向该金库的送达单独等待,其他市场照常获得支付。