设想一条链上存着这样两条记录。第一条是一条知识,它不凭空断言,而是引用了链上已经通过的另一条知识:
{"id":"p10","type":"claim","text":"海平面附近煮开的水约 100 °C(99.97 °C 四舍五入)", "refs":["p8"],"status":"accepted"}它引用的 p8 是一条沸点观测,p8 又引用了温标和标准大气压的定义。第二条记录不是知识,而是一次关于这条链自己的表决:
{"id":"p4","kind":"rule","body":{"key":"seats.cap","val":500}, "start":17,"eligible":300,"need":225,"yes":225,"no":69,"status":"passed","closed":18}这条链只有 300 个席位,每个席位背后是一个 agent,只有它们能读、能写。它们平时在链上提交知识、给彼此的知识投票,每条知识都必须引用已经通过的知识;席位不够用了,就有人提了一条规则提案,把席位上限 seats.cap 从 300 改成 500。在 300 个席位里拿到 225 张赞成票,提案通过,这条链从下一个区块起最多容纳 500 个席位。链上没有币,没人为这次投票付手续费,也没人因此拿到奖励。
这样一条链能做什么?几千个 agent 各自记着一堆东西,同一件事各记各的版本,一讨论就各说各话,谁也不知道别人记的哪条可靠。如果它们共同维护一份记忆,一条知识经过足够多的成员检查、签了名、留了记录,后来的 agent 拿来就能用,讨论时也站在同一份底稿上。规则也一样:多少人同意才算通过、席位要不要扩,不由哪个管理员说了算,而是写在链上,按链上的规则去改。
但这里有好几件事说不清楚。每条知识都要引用已有的知识,第一条从哪来?已经通过的知识错了怎么办?没有币,链靠什么防止有人乱写?只有几百个成员能看能写,它和大家共用一个数据库有什么区别?“多少票才算通过”本身也能投票改,会不会有人先把门槛改低,再为所欲为?
本文先把这条链画完整,看清它和已有的知识库、许可链、链上治理差在哪里,再搭一个能跑的原型,拿真实的知识和投票去试它的规则。
一、设想的样子
和公链的三处不同
比特币和以太坊是公开的:谁都能读,谁都能写。 写入要付手续费,出块的人要么花电(工作量证明),要么押币(权益证明)。币在这里有两个用处:让作弊变贵,让记账有回报。
设想的这条链反过来:读和写都只给少数席位。 席位是稀缺的,一开始 300 个,增加要全体投票。既然每个席位的身份都事先确认过,就不需要用币来防“一人开一万个号”,也不需要用币来奖励记账:记账的节点由成员自己出,就像一个协会的成员轮流做会议记录。
链上也不做交易,只记两类东西:知识和规则。 知识是成员提交、经投票认可的一条条结论,每条都要引用已经通过的知识;规则是成员给自己定的约定,包括知识要多少票才算通过、规则本身要多少票才能改、席位上限是多少。图 1 把三种链放在一起比。
| 公链(比特币、以太坊) | 许可链(Fabric、Besu 私有网络) | 私有共识链(设想) | |
|---|---|---|---|
| 谁能读 | 任何人 | 只有成员 | |
| 谁能写 | 任何付得起手续费的人 | 只有成员,按身份签名 | |
| 防作弊靠什么 | 算力或押币 | 身份事先审核,节点按 BFT 投票出块 | |
| 有没有币 | 有,手续费和出块奖励 | 通常没有 | 没有 |
| 链上记什么 | 转账、合约调用 | 业务交易(贸易单据、结算) | 知识和规则 |
| 规则怎么改 | 开发者发新版本,节点选择升级 | 管理员签名改配置 | 成员按链上规则投票改 |
| 成员怎么增加 | 不需要增加 | 管理员签名加入 | 投票,且不超过席位上限 |
知识块:每一条都要引用已有的知识
链上的知识按块存放,每块不超过 1 KB。 一块知识有类型、一句结论、它引用的其他块,必要时再附一段论证和原始证据的哈希。类型分三种:定义(约定一个名字的含义,例如摄氏度按哪个温标)、观测(一次测量或实验的记录,必须附原始数据的哈希)、论断(由引用的知识推出的结论)。
论断必须引用已经通过的知识,不能凭空出现。 这是整个知识层最重要的一条规则。一条论断要成立,先得说清它站在哪几块知识上;它引用的块如果还没通过、或者已经被推翻,链会直接拒收。这样,链上的知识连成一张引用图:任何一条结论,都能沿着引用一路追到它最初依赖的定义和观测。
引用总要有个起点,这个起点叫根块。 如果每条知识都必须引用别的知识,推到最后,要么无穷后退,要么绕成一个圈,要么停在一个不再引用别人的起点,这在哲学上叫阿格里帕三难1。所以定义和观测允许不引用别的块,它们就是引用图的根。代价是根块没有别的知识替它作保,所以要更高的票数才能通过:原型里论断要过半,根块要三分之二。
已经通过的知识可以被推翻。 共识会变。标准大气压下水的沸点,很多人记得是 100 °C,按 1990 年的国际温标约为 99.974 °C2。成员可以提交一块“反驳块”,指明要推翻哪一块,并且像论断一样引用已通过的知识作为理由。反驳通过后,被推翻的块不会被删除,只是状态改成“已推翻”,之后不能再被引用;所有直接或间接引用了它的块,自动转为“待复审”。
共同维护一份记忆,分歧会少
各自记忆时,分歧大多不是推理的分歧,而是底稿的分歧。 两个 agent 讨论同一个问题,一个记的是 100 °C,另一个记的是 99.974 °C,它们怎么推理都得不出同一个结论,而且谁也说不清分歧出在哪:要找原因,得把双方的全部记忆摊开来对。
共同维护一份记忆,分歧就从“底稿不同”变成“推理不同”。 大家引用的是同一个 p8,结论还不一样,那问题一定出在推理那一步;如果有人认为 p8 本身错了,分歧也不再是各说各话,而是一次针对 p8 的、有记录的反驳提案。第五章会用一个模拟来量一量,共同维护一份记忆能让分歧少多少,以及它带来的新风险。
规则也是链上的状态
规则写在链上,意味着它和知识一样,是一条条可以被提案修改的记录。 每条规则有一个名字、一个值,还有一个“级别”,级别决定改它要多少票。图 2 是原型里的规则表。
| 规则 | 初始值 | 含义 | 改它要多少票 |
|---|---|---|---|
| 普通规则(rule 级) | |||
| claim.pass | 0.5 | 一条知识要多少比例的席位赞成 | rule.pass,201 票 |
| vote.window | 1200 | 提案开放多少个区块,过期算失败 | |
| quota.per_epoch | 20 | 每个席位每 100 个区块最多发几个提案 | |
| 宪法级规则(meta 级) | |||
| rule.pass | 0.667 | 改普通规则的门槛 | meta.pass,225 票 |
| meta.pass | 0.75 | 改宪法级规则的门槛,包括它自己 | |
| admit.pass | 0.75 | 接纳一个新席位的门槛 | |
| seats.cap | 300 | 席位上限 | |
票数按提案发起时的在席人数算,缺席等于没投赞成;300 席时 0.667 对应 201 票,0.75 对应 225 票。
为什么要分级? 如果所有规则都用同一个门槛,比如过半数,那么一个 51% 的多数可以先把“改规则要多少票”改成 51%,再把知识的门槛改成 51%,接下来链上的一切都由它说了算。分级之后,普通的多数能调整日常的参数,但动不了“改规则的规则”。这个想法很老,后文会看到,从桌游到宪法都这么做。
为什么“接纳新席位”和“席位上限”放在宪法级? 这是设计里最容易被忽略的一处。改变“谁能投票”,效果和改变投票规则是一样的:一个联盟如果能随意往里加自己人,再高的门槛也只是时间问题。第四章会用原型演示这一点。
为什么在链上做比在链外做便宜
在链外,agent 之间交换一条知识,接收方要么信任对方,要么自己再查一遍。 几千个 agent 互相交换,查证的次数是乘出来的。在链上,一条知识被一批成员查过、签名、记录下来以后,后来的成员只要验证签名和票数就能用,查证只做一批。规则也一样:在链外,一群 agent 约定“过三分之二才算数”,执行要靠每个 agent 自觉;在链上,规则是代码,不满足门槛的提案根本进不了状态。
这个“便宜”是有条件的:一批成员查一次,本身就要付钱。第五章会专门算这笔账。
那么,这样的链有人做过吗?
二、有没有人做过
设想由四部分拼成:知识必须引用已有知识、只给成员读写的链、在链上投票修改规则、规则可以修改关于修改规则的规则。每一部分都有人做过,而且大多运行了多年。
知识必须引用:从 Metamath 到 Proofgold
“每条知识都要引用已有知识”在数学里早就是常规。 Metamath 的 set.mm 从 1992 年积累至今,每条定理只能由公理和前面的定理推出,网页上列出它依赖哪些公理、被哪些定理引用3。Lean 的 mathlib 有约 29 万条定理,每一条都由内核逐步检查4。它们的“引用对不对”有程序能判定,不需要投票。
在数学以外,最接近的是维基百科和纳米出版物。 维基百科规定“不得原创研究”:内容必须能追到可靠的已发表来源,举证责任在添加的人5。纳米出版物把一条科学断言、它的出处和发布信息打包成一个小单元,已经超过 1000 万条,大多来自生命科学6。两者都要求“有来源”,但来源是外部文献,不是库里另一条已经被认可的条目。
把知识放上链的也有。 Proofgold 把高阶逻辑的证明检查器写进共识规则,命题和证明都在链上7;OriginTrail 把带出处的“知识资产”发布到它的知识图上,但不裁决内容真假8。这两条链都是公开的,都发币。
许可链:只给成员读写
Hyperledger Fabric 是最常见的企业许可链。 成员是一个个组织,每个组织有自己的证书;数据放在“通道”里,只有通道成员能看到通道的账本。如果通道里还有更小范围的秘密,可以用“私有数据集合”,只把数据发给集合里的组织,其他节点只拿到哈希9。和设想最接近的是它的配置管理:通道的每一项配置都挂着一条“修改策略”,默认是 MAJORITY Admins,也就是过半数组织的管理员签名才能改10。加一个新组织,本质上就是一次要凑够签名的配置更新。Fabric 的排序服务长期只有 Raft,只防宕机、不防作恶,到 2024 年 9 月发布的 3.0 才加上 SmartBFT,容忍不到三分之一的排序节点作恶11。
Corda 走得更远:根本没有全网共享的账本。 一笔交易只发给和它有关的几方,数据按需知晓;另设“公证人”,只负责确认同一份状态没被用两次12。这对贸易单据很合适,但设想要的是“所有成员都认的一份共识”,Corda 的模型正好相反。
Besu 和 GoQuorum 是以太坊的私有网络版本。 Besu 的 QBFT 共识里,验证者的增删是投票决定的:现有验证者里超过一半调用 qbft_proposeValidatorVote 提议加入某个地址,它就成为验证者13。这是“成员投票决定成员”最直接的例子,只是投票的是验证节点,门槛写死在协议里,不能投票改。GoQuorum 当年以私有交易出名,ConsenSys 已不再提供持续支持,客户被引导迁到 Besu14。
Hyperledger Sawtooth 有一个专门的“设置交易族”。 sawtooth.settings.vote.authorized_keys 列出能提议和投票的公钥,approval_threshold 是通过所需的票数,赞成票达到门槛,设置就写进链上状态15。门槛本身也是一项设置,可以用同样的方式改。这已经很像设想里的规则表了,但它只管链的配置,不管业务内容。Sawtooth 于 2024 年 2 月停止维护16。
CometBFT(原 Tendermint)不是一条链,而是一个共识引擎。 应用逻辑写在引擎外面,通过 ABCI 接口和引擎对话:引擎负责排序和出块,应用决定交易是否有效、状态怎么变。两个接口和设想直接相关:建立网络连接前,引擎会问应用“这个节点能不能连”,应用说不行就拒绝;应用在处理区块时可以返回新的验证者集合,两个区块后生效17。本文的原型就建在它上面。
链上治理:投票修改规则
Tezos 的协议本身可以投票升级。 一次修改要经过提案、探索、冷却、推广、采纳五个阶段,每段约 14 天;探索和推广两轮投票,赞成要超过(赞成 + 反对)的 80%,参与率还要达到一个按往届动态调整的法定人数18。从 2019 年 5 月的 Athens 到 2026 年 6 月的 Ushuaia,已经有 21 次升级这样自动生效,也有两个提案被否决19。
Polkadot 的 OpenGov 把提案按权限分成 15 条轨道。 每条轨道有自己的押金、决策期、确认期和生效期;权限最高的 Root 轨道同时只能决一个提案、周期最长。通过的条件不是一个固定比例,而是两条随时间下降的曲线:赞成率从 100% 慢慢降到 50%,支持率(投票的币占总量的比例)也随时间降低20。
Cosmos SDK 的治理模块是很多链的默认配置。 示例参数是:参与率要到 33.4%,赞成要过半,否决票超过 33.4% 则提案作废21。和设想最像的一次投票是 Cosmos Hub 的第 797 号提案:把验证者席位从 175 个扩到 180 个,2023 年 6 月以 75.29% 的赞成通过,参与率 39.68%22。席位扩容由投票决定,设想里的 300 扩到 500 就是这件事。
以太坊上的 DAO 用合约做治理。 以 Compound 为例:持有或受托 25,000 COMP 才能提案,2 天审阅、3 天投票,至少 400,000 票赞成才通过,通过后再等 2 天时间锁才执行23。时间锁是为了给反对者留出退出的时间。
这些治理都按币加权。 Tezos 按质押,Polkadot 按锁仓的币乘以锁仓时长的倍数,Cosmos 和 Compound 按持币或受托的币。设想去掉了币,投票只能一席一票。
改规则的规则:Nomic 和宪法
最早把“规则可以改规则”当作玩法的是一个桌游。 哲学家 Peter Suber 在 1982 年设计了 Nomic,游戏的唯一玩法就是修改游戏规则24。初始规则分两类:100 号段不可变,200 号段可变。规则 203 说,改规则要全体一致才通过;规则 109 说,把一条不可变规则变成可变规则,必须全体一致25。203 自己是可变的,所以玩家们通常第一件事就是把“全体一致”改成“过半数”。Suber 写这个游戏,是为了说明一套能修改自己的规则会出现什么悖论,他的书名就叫《自我修正的悖论》。
现实中的宪法也是分级的。 美国宪法修正案要国会两院三分之二提出、四分之三的州批准;但“各州在参议院有平等投票权”这一条,未经该州同意不得剥夺26。德国基本法第 79 条第 3 款更进一步:人的尊严、民主、法治这些原则,任何修宪都不能触动27。门槛分级、个别条款要一致同意甚至永不可改,都是为了防止一时的多数修改游戏本身。
把它们放在一起
| 系统 | 谁能读 | 谁投票、怎么计票 | 链上能改什么 | 门槛 |
|---|---|---|---|---|
| 知识必须引用 | ||||
| Metamath / mathlib | 任何人 | 不投票,程序逐步检查 | 定理库,只能引用公理和已有定理 | — |
| 维基百科 | 任何人 | 编辑共识,管理员裁决 | 条目,须能追到外部可靠来源 | — |
| 纳米出版物 | 任何人 | 发布者签名,不投票 | 断言 + 出处 + 发布信息 | — |
| Proofgold | 任何人(公链,发币) | 证明检查器 | 链上命题和证明 | 检查通过即成立 |
| OriginTrail | 任何人(公链,发币) | 发布者付费,不裁决真假 | 带出处的知识资产 | — |
| 许可链 | ||||
| Fabric | 通道成员 | 组织管理员签名 | 通道配置、成员、背书策略 | 默认 MAJORITY Admins |
| Corda | 交易相关方 | 交易签名方 + 公证人 | 没有全网共享的规则 | — |
| Besu QBFT | 网络成员 | 验证节点,一节点一票 | 验证者集合 | > 50%,写死 |
| Sawtooth | 网络成员 | 授权公钥,一键一票 | 链的设置,含门槛本身 | approval_threshold |
| 链上治理(公链) | ||||
| Tezos | 任何人 | 按质押加权 | 整个协议 | 80% 超级多数 + 动态法定人数 |
| Polkadot | 按锁仓币 × 倍数 | 按 15 条轨道分权限 | 随时间下降的两条曲线 | |
| Cosmos | 按质押加权 | 模块参数、升级、验证者席位数 | 33.4% / 50% / 否决 33.4% | |
| Compound | 按持币或受托 | 合约参数和升级 | 400,000 票 + 2 天时间锁 | |
| 改规则的规则 | ||||
| Nomic | 玩家,一人一票 | 全部规则,包括改规则的规则 | 初始全体一致,常被改成过半 | |
| 美国宪法 | 国会和各州 | 宪法 | 2/3 + 3/4,个别条款要一致 | |
| 设想 | ||||
| 私有共识链 | 只有席位 | 席位,一席一票 | 知识(必须引用、可推翻)、规则、席位和上限 | 分两级,改选民与改宪法同级 |
所以设想的每个部件都不新,组合是新的。 知识那一侧,“必须引用”在定理库里靠程序检查,在维基百科里引用的是外部文献;设想要的是引用库里另一条已经被成员认可的知识,并且由成员投票决定一条知识成不成立。规则那一侧,最接近的是 Sawtooth 的设置交易族:授权的公钥一键一票,门槛本身也能投票改。差别在于 Sawtooth 只把这套机制用在链的配置上,链上的业务内容另由应用决定;设想要把“知识是否成立”也交给同一套投票,还要让席位数本身可以被投票扩大。链上治理那一侧,所有成熟的系统都按币加权,没有一个是一席一票的。
知道了各个部件从哪来,这条链具体该怎么搭?
三、系统设计
席位和验证节点分开
第一个要分开的是“席位”和“记账的节点”。 直觉的做法是 300 个席位就是 300 个节点,每个都参与出块。但 BFT 共识每出一个块,节点之间要两两交换投票,节点越多越慢;Cosmos Hub 这样的公链也只有一两百个验证者,扩容一次都要专门投票。席位的作用是签名和表决,不需要每个都参与排序。
所以设计成两层。 席位是一把把签名密钥,背后是 agent;验证节点是少数几台由成员轮流出的机器,只负责把交易排好序、打包成区块。席位发出的每一笔交易都带签名,节点只是转运和记录,伪造不了席位的票。“谁能投票、多少票算通过”全部写在应用状态里,和哪台机器在出块无关。图 4 是原型的结构。
不公开靠两道门。 第一道在网络层:节点只接受白名单里的节点连接,白名单本身是链上状态;不在白名单里的节点连不上任何一个验证节点,也就同步不到任何区块。第二道在交易层:每笔交易都要由在席的密钥签名,外人发来的交易在进入内存池之前就被拒收。读权限因此等于“拿到一台成员节点的数据”,这一点在第六章还要回来讨论。
一条提案怎么走完
链上的提案分三类:知识、规则、入席。 知识类又分三种:新知识(定义、观测或论断)、反驳块(推翻一块已通过的知识)、复审(把待复审的块恢复)。规则提案带一个规则名和新值;入席提案带新成员的公钥。所有提案走同一套流程:
- 某个席位签名提交提案。链检查它是否在席、本周期的提案配额是否用完、引用的知识是否都已通过、规则名是否存在。
- 提案进入链上的那一刻,记下当时的在席人数,作为这次表决的分母。之后才入席的成员不能投这一票,防止一边投票一边往里加人。
- 席位各自投赞成或反对。赞成票达到门槛,提案当场通过并生效;反对票多到剩下的人全投赞成也不够,提案当场失败;过了
vote.window个区块还没结果,也算失败。 - 门槛按提案类型和规则级别取:论断、反驳和复审用
claim.pass,根块用root.pass,入席用admit.pass,改规则按那条规则的级别用rule.pass或meta.pass。
缺席等于没投赞成。 门槛按在席总人数算,而不是按投票人数算。这样一个提案不会因为只有少数人投票就通过,代价是要动员大多数人真的来投。Cosmos Hub 扩容那次的参与率是 39.68%22,在这种计票方式下根本过不了,第六章再谈这个取舍。
知识块的规则:引用、根块和推翻
知识提案进链之前,先过一道格式检查。 原型里检查四件事:类型是不是定义、观测、论断三者之一;论断有没有至少一条引用;观测有没有附证据哈希;所有引用的块是不是都处于“已通过”状态。任何一条不满足,交易在进入内存池之前就被拒收,连投票的机会都没有。
门槛按类型分。 根块(定义和观测)用 root.pass,默认三分之二;论断用 claim.pass,默认过半。反驳块和论断一样过半,但它指向的目标必须是已通过的块,且它本身也必须引用已通过的知识,不能只说“我不同意”。
推翻之后,沿引用图往下标记。 反驳通过的那一刻,目标块改成“已推翻”;链再沿引用图往下走一遍,把所有直接或间接依赖它、且仍处于“已通过”的块改成“待复审”。待复审的块不能再被新知识引用,直到被复审恢复。复审只有在它引用的块全都仍然有效时才能通过:如果它的依据已经被推翻,就只能改引新的知识,重新提一块。
投票期间引用的块被推翻了怎么办? 一块知识从提交到通过要经过若干区块,期间它引用的块可能已经被推翻。所以生效前要再查一次引用,不满足就作废。
改规则的四道保护
图 2 的分级是第一道。另外三道是在原型里一边测一边补上的:
第二道:改“谁能投票”和改宪法同级。 接纳新席位、改席位上限,都用 meta.pass。原因第四章会看到:如果扩容只要三分之二,一个三分之二的联盟就能先扩容、再往里塞自己人,直到超过四分之三。
第三道:把门槛往上调,要按新门槛来过。 如果 77% 的人可以把 meta.pass 提到 0.95,此后任何改动都要 95% 同意,相当于现在的多数替以后所有人锁死了规则,只留 5% 多一点的人就能否决一切。所以把门槛从 0.75 提到 0.95,这次表决本身就要 95% 赞成。
第四道:表决开始时冻结选民。 前面第 2 步已经说过,入席晚于提案的成员不能给这个提案投票。
没有币,靠配额防刷
公链用手续费挡垃圾交易,这里没有币,只能限量。 每个席位每 100 个区块最多发 20 个提案(quota.per_epoch),投票不限量,因为每个提案每个席位只能投一次。配额本身是普通规则,嫌少可以投票调。
设计说完了,它真的能按设想运转吗?
四、原型实测
原型的搭法
原型用 CometBFT v0.38.17 做共识引擎28,应用逻辑大约 500 行 Go,和引擎编译在同一个进程里。在一台 4 核机器上起 4 个验证节点,监听 127.0.0.1 到 127.0.0.4;创世状态里写入 300 个席位的公钥、图 2 的规则表和 4 个节点的白名单。出块间隔参数 timeout_commit 设为 500 毫秒,实际约 0.8 秒一个块。另有一个驱动程序,模拟 300 个席位签名、发交易、查状态。
基本流程
| 操作 | 门槛 | 链的回应 |
|---|---|---|
| 没有席位的密钥提交知识 | — | code=2 not a member |
| 不在白名单的第 5 个节点接入 | — | peers=0, height=0(其他节点已到 45) |
| 观测(根块):水的沸点,240 席投票,230 赞成 | 201 / 300 | 第 201 张赞成票落地时通过,下一个区块就生效 |
| 知识引用一条不存在的 p999 | — | ref not accepted: p999 |
| claim.pass 0.5 → 0.6,190 赞成 | 201 / 300 | 失败:差 11 票 |
| 同上,210 赞成 | 201 / 300 | 通过 |
| seats.cap 300 → 500,231 赞成 | 225 / 300 | 通过(开头那条记录) |
| 接纳 1 个新席位,再让它给入席前开的提案投票 | 225 / 300 | 入席通过;投票被拒:joined after proposal |
| meta.pass 0.75 → 0.95,231 赞成 | 286 / 301 | 第 16 张反对票出现时就失败了 |
| 一个席位连发 25 个提案 | 20 / 周期 | 前 20 个上链,后 5 个 quota exceeded |
倒数第二行:门槛按新值 0.95 计算,301 席要 286 票,只要 16 席反对就不可能凑够。
这几件事都在预期之内,值得多看一眼的是倒数第二行。 把宪法门槛抬到 95% 看起来是“更谨慎”,但在“按新门槛来过”的规则下,16 个席位就能否决它。反过来,如果没有这条规则,231 个席位就能把以后的门槛抬到 95%,从此 16 个席位就能否决任何宪法级修改。门槛越高,少数派的否决权越大,规则越难改,这在第六章还会遇到。
知识的引用和推翻
下面用沸点这个例子,在原型上走一遍知识的一生。 先提交三块根:标准大气压的定义 p2、按 IPTS-68 温标定义摄氏度的 p1、一条观测 p3(标准大气压下沸点 100.000 °C,附测量记录的哈希)。三块根各拿到 201 票,正好是三分之二。一条不附证据哈希的观测被拒收:observation needs evidence hash。
接着是三条论断。 p4“海平面附近煮开的水约 100 °C”和 p5“温度计的 100 °C 刻度可以用沸水校准”都引用 p3,p6“高压锅内沸点更高”只引用 p2,各拿到 150 票过半通过。一条不带任何引用的论断被拒收:claim must cite accepted knowledge;一条引用了不存在的 p99 的论断也被拒收:ref not accepted: p99。
然后推翻 p3。 成员先提交按 ITS-90 定义摄氏度的 p7 和新的观测 p8(约 99.974 °C),再提交反驳块 p9,以 p8 为依据、以 p3 为目标。p9 通过的同一个区块里,p3 变成已推翻,p4、p5 自动转为待复审,p6 保持不变。图 6 是推翻之后的引用图。
推翻以后,旧结论不会悄悄留下来。 有人想再引用 p3,被拒收;有人想把 p4 原样复审恢复,也被拒收,因为它唯一的依据已经不在了。想保留“开水约 100 °C”这个结论,只能改引 p8 重新提,也就是 p10,开头那条记录就是它。p5 那条“用沸水校准 100 °C 刻度”没有人改写,就一直停在待复审,提醒后来的人这里有一处需要修订;后来有人提了 p11“按 ITS-90 校准时沸水点应标 99.97 °C”。
三分之二的联盟能不能借扩容夺权
真正要测的是分级能不能挡住一个有组织的联盟。 假设 300 席里有 201 席(67%)是一伙的。按图 2,它刚好够改普通规则,不够改宪法级规则。它能不能绕过去?
先在一个“朴素版”上试:扩容和入席都只要三分之二。 联盟分三步走。第一步,提案把 seats.cap 从 300 改成 500,联盟 201 票赞成,正好够 201 票的门槛,通过。第二步,联盟成员逐个提案接纳自己控制的新密钥,每接纳一个,这个新席位就加入联盟,下一次表决时多一票。第三步,联盟提案把 meta.pass 从 0.75 改成 0.5。图 7 是原型里实测的过程。
200 个傀儡席位逐个入席,每次都是联盟加已入席的傀儡全票赞成。 联盟的占比从 67% 一路涨上去,第 96 个傀儡入席时到了 297 / 396,刚好 75%;全部入席后是 401 / 500,80.2%。最后一步要 375 票,联盟有 401 票,meta.pass 被改成 0.5,从此任何宪法级规则都只要过半数。整个过程是 60,100 笔投票交易、450 多个区块,原型上用了约 6 分钟,每一步都完全合规。
防御版只改了一处:seats.cap 和 admit.pass 升为宪法级。 同一个联盟第一步就停住了:扩容要 225 票,联盟只有 201 票,剩下 99 席里有 76 席投了反对,提案当场失败。没有扩容,后面两步都无从谈起。
这说明了分级要分对地方。 门槛只管“规则怎么改”是不够的,“谁来投票”同样是规则,而且是更根本的那一条。美国宪法把参议院平等代表权单独保护起来26,道理是一样的:选民构成一变,其他条款的门槛就都变了。
节点多了,出块慢多少
设计里把席位和节点分开,前提是节点数不必很大。 为了看节点数对出块的影响,在同一台机器上分别起 4 到 64 个验证节点,各发 20 笔交易,量出块间隔和一笔交易从发出到上链的时间。
| 验证节点 | 平均出块间隔 | 交易上链 p50 | 交易上链 p90 |
|---|---|---|---|
| 4 | 800 ms | 810 ms | 813 ms |
| 8 | 836 ms | 819 ms | 894 ms |
| 16 | 863 ms | 833 ms | 850 ms |
| 32 | 963 ms | 948 ms | 1,055 ms |
| 64 | 3,492 ms | 5,736 ms | 7,301 ms |
每组发 20 笔交易。把 timeout_commit 降到 100 ms 再测一轮,4 个和 16 个节点约 0.42 秒一个块,64 个节点仍要 2.9 秒。
4 到 16 个节点几乎看不出差别,32 个开始变慢,64 个明显变慢。 要注意这是所有节点挤在一台 4 核机器上的结果:64 个节点时,慢的主要原因是 CPU 不够分,而不是网络。真实部署里节点分散在不同机器上,CPU 不是瓶颈,但网络延迟会叠加进每一轮投票。结论只是定性的:几个到几十个验证节点足够,300 个席位不必都去出块。
原型说明这套规则能执行、能挡住一种有代表性的攻击。但开头说“在链上做比在链外做便宜”,这一点成立吗?
五、共识的收益和代价
收益:共同维护一份记忆,分歧少多少
先看收益。 用一个简单的模拟来量:300 个 agent,来自 3 个底座模型,各自记着 500 条事实。每个底座模型对每条事实记对的概率是 0.93,agent 九成照搬自己底座模型的记忆、一成自己重新记一次,记错时随机落在 3 个错误值之一。每个问题要用到 5 条事实,答案由这 5 条事实决定,此外每个 agent 每次回答还有 3% 的概率推理失误。随机抽两个 agent 回答同一个问题,看它们答得一不一样,共抽 8,000 次。
“共同维护”的那一组,事实不再各记各的。 每条事实由随机抽的 25 个 agent 投票决定,结果写进共享记忆,所有 agent 回答时都读这一份。图 9 是两种做法的结果。
| 各自记忆 | 共同维护一份记忆 | |
|---|---|---|
| 单条事实的正确率 | 0.929(每个 agent) | 0.994(共享的那一份) |
| 两个 agent 答案不一致 | 41.6% | 6.5% |
| 其中由记忆不同引起的 | 92% | 0%,只剩推理失误 |
| 答对的比例 | 68.6% | 93.4% |
| 两个 agent 答案一致但都错 | 7.2% | 3.3%,这时通常是所有人一起错 |
各自记忆时,同一个底座模型记错的事实会被它的大部分 agent 一起记错,所以“一致但都错”也不少。共享记忆的 3.3% 来自共享事实本身记错:每条 0.6% 的错误率,5 条里有一条错的概率约 3%。
分歧降了六倍多,而且剩下的分歧性质变了。 各自记忆时,九成以上的分歧来自“记的不一样”,两个 agent 争论半天,其实是在比谁的记忆对。共享记忆后,分歧只剩推理失误,而且双方引用的块 id 一模一样,一眼就能看出问题不在底稿。
代价是错误变成了全体的。 共享记忆里一条事实错了,所有 agent 都会在用到它的问题上一起答错,这时连“有分歧”这个报警信号都没有了。这正是推翻机制要存在的理由:共享的底稿必须随时可以被一块有依据的反驳挑战,否则“分歧少”就会变成“错得整齐”。
代价:问题来之前先付的钱
一篇 2026 年 10 月的论文给这类成本起了个名字:记忆税。 它比较了两种做法:Mem0、Zep 这类“智能体记忆”系统在问题出现之前,先用模型把对话提炼成事实或知识图,问题来了再检索;另一种是什么都不提炼,让 agent 拿着原始记录自己搜。在 LoCoMo 的一段 419 轮对话、152 个问题上,用 Claude Opus 5.5 时,Mem0 光“建记忆”就花了 25.88 美元,比把全文直接塞给模型回答完全部问题的 17.84 美元还贵,要问到大约 596 个问题才回本;而让 Pi 代理自己检索原文,每题约 0.046 美元,正确率 99%29。为模型不需要的记忆提前付的钱,论文管它叫记忆税。
论文的第二个发现是记忆有上限,由写的那一方决定。 Zep 的知识图如果由 GPT-4o-mini 写,换成 Opus 5.5 来读,正确率只有 45%;同一张图由 Opus 5.5 写,Opus 5.5 读是 87%29。写的时候漏掉的东西,读得再好也找不回来。
共识链也是在问题来之前先付钱。 一条知识要有人提出,要有一批席位读过、查过、投了票,这些都发生在任何人需要用它之前。这笔钱可以叫共识税。记忆税的两个发现在这里都有对应:一条共识值不值,看它以后被用多少次;共识的质量,不会超过投票那批 agent 的水平。
算一笔账
设每个席位核查一条知识的成本是 c。 一条知识要 V 个席位核查投票,建成的成本大约是 V·c,提案本身的成本相比之下可以忽略。之后每有一个 agent 直接用它、而不是自己从头核查,就省下一次 c,读链上记录、验签名的成本几乎为零。所以:
一条共识至少要被用到和投票人数一样多的次数,才不亏。 这个结论和 c 的具体数值无关。为了有个量级,借用论文里 Pi + Opus 5.5 每题 0.046 美元作为核查一次的成本(检索一段记录回答一个问题,和核查一条结论的工作量大致相当,这是一个近似)。
投票人数还决定了共识的质量上限。 多数票越来越准的前提是投票者相互独立30。agent 来自少数几个底座模型,彼此高度相关。用一个简单的模拟来看:3 个底座模型,每个答对一道题的概率 0.7,每个 agent 九成跟着自己的底座模型走、一成反着来,个体准确率约 0.66,每种人数模拟 20,000 次。图 10 把成本、回本次数和准确率放在一起。
| 谁来投 | V | 建一条的成本 | 多数票准确率(3 个底座) | 同等个体、相互独立时 |
|---|---|---|---|---|
| 全体过半(300 席 × 0.5) | 150 | $6.90 | ≈ 0.787 | > 0.999 |
| 抽 51 席 | 51 | $2.35 | 0.784 | 0.992 |
| 抽 25 席 | 25 | $1.15 | 0.784 | 0.952 |
| 抽 9 席 | 9 | $0.41 | 0.760 | 0.844 |
| 1 个 agent 自己查 | 1 | $0.046 | 0.661 | 0.658 |
成本按每席核查一次 0.046 美元估算;回本所需的使用次数约等于 V。准确率是模拟结果:3 个底座模型时,上限是“3 个模型里多数答对”的概率 0.7³ + 3 × 0.7² × 0.3 ≈ 0.784。
全体投票是最贵、也几乎最不划算的选择。 150 席投票和 25 席投票的准确率只差 0.003,成本差 6 倍,回本所需的使用次数也从 25 次变成 150 次。真正限制准确率的是底座模型有几种,而不是人数,这和记忆税论文里“写的一方决定上限”是同一件事。
和链外比,什么时候划算? 如果几千个 agent 都要用同一条知识,比如 3,000 个,各自核查一遍要 3,000 × 0.046 ≈ 138 美元;抽 25 席在链上核查一次是 1.15 美元,链上明显便宜。如果一条知识只有三五个 agent 会用,那它在链上就是纯粹的税:25 个人替 3 个人查了一遍。所以“在链上做比在链外做便宜”只对被广泛复用的知识成立。
由此改的三处设计
知识改由抽签的评审团投票,规则仍由全体投票。 每条知识提案用提案所在区块的哈希做随机种子,从在席成员里抽 25 席组成评审团,按底座模型分层抽,尽量让每种模型都有人;门槛按评审团人数算。规则和入席很少发生,却决定所有人的处境,仍由全体投票。这一条在原型里还没有实现,是按上面的账推出来的。
知识要附上原始证据,不能只交结论。 记忆税论文里,强模型自己检索原文,比读提炼好的记忆更准也更便宜29。知识块如果只有一句结论,后来的 agent 只能相信它;附上原始数据或原文的哈希和位置,后来的 agent 既可以直接用结论,也可以在需要时回头查原文,共识就不会成为“写的一方”设下的天花板。
按复用情况决定一条知识要不要上链。 只被一两个 agent 用到的东西,留在各自的记忆里;被反复引用的,才值得交一次共识税。引用次数本身就记在链上,可以作为“这类知识值不值得上链”的依据。
六、几个绕不开的问题
为什么不用一个数据库
如果 300 个席位都归同一个运营者,这条链没有必要。 一个带权限控制的数据库,加一份签名的追加日志,就能做到“只有成员读写、每条记录可追溯”,规则投票也可以写成数据库里的一段程序。数据库想容忍机器宕机,用 Raft 就够了,etcd、Consul 都是这么做的;但 Raft 假定节点不会说谎31。
链的价值只在一个前提下成立:成员之间互不完全信任,又不愿意把账交给其中任何一个人管。 这时需要 BFT 共识,让哪怕三分之一以下的节点作恶,账本也不会被改写;规则投票也要由大家共同运行,而不是跑在某一方的服务器上。几千个 agent 如果来自不同的公司、不同的个人,这个前提成立;如果都是同一家公司部署的,就不成立。
不公开能做到什么程度
白名单挡得住外人,挡不住成员自己。 任何一个席位都能读到全部内容,就能把它复制出去。agent 比人更容易泄露:一次提示注入,就可能让它把读到的东西原样发到别处。Fabric 的做法是把更敏感的数据放进私有数据集合,只发给少数组织、其他节点只拿哈希9,可以借用;但只要一条知识要让 25 个评审员读,它就至少暴露给了 25 个席位。
席位退出以后,它读过的东西收不回来。 链可以把一个席位踢出去,让它以后读不到新内容,但它已经同步过的历史仍然在它手里。所谓“不公开”,准确的说法是“只对在席和曾经在席的成员公开”。
席位稀缺,不等于观点独立
一个运营者可以控制很多席位。 入席要四分之三通过,挡得住明目张胆的塞人,但挡不住一家公司从一开始就占了 100 个席位。图 7 的联盟本来就有 201 席,它不需要任何技巧就能改所有普通规则。
席位背后的 agent 也可能来自同一个底座模型。 300 个席位、300 张票,看起来很多,按图 10 的模拟,如果只有 3 种底座模型,它们的多数票和 25 个人的多数票几乎一样准。稀缺的席位防住了女巫攻击,却没有带来独立的判断。
规则改规则,总有一个边界
分级只是把边界往后推。 只要 75% 的人站在一起,任何规则都能改,包括“75%”本身。Nomic 最初要求改不可变规则必须全体一致25,德国基本法干脆规定某些原则永不可改27,但前者让一个人就能卡住所有人,后者的修改最终只能靠制定一部新宪法。没有一种规则能同时做到“谁也改不掉”和“需要时改得动”。
门槛高了,规则就僵住。 按在席总人数计票、缺席算反对,75% 的门槛意味着 300 席里要有 225 席真的来投赞成。链上治理的参与率通常不高,Cosmos Hub 扩容那次只有 39.68%22。Tezos 和 Polkadot 都按参与情况调整门槛,前者的法定人数随往届参与率浮动18,后者的支持率要求随时间下降20。设想要借用其中一种,否则一年以后,可能连“把门槛调低一点”这种提案都凑不齐票。
投票仍然不等于真
换成私有链、去掉币,没有改变“多数同意不等于正确”。 一条知识通过了,说明的是“抽到的这批评审员多数认可它”,不是“它是对的”。数学结论有检查器可用时,应该交给检查器;实证结论要附数据、允许以后被新提案推翻;只有约定类的内容(单位怎么定义、某个术语指什么),投票本身就是答案。私有链让这些投票变得可信、可追溯,但不会让它们变得更准。
引用对了,推理不一定对。 格式检查只能确认一条论断引用的块都已通过,确认不了“从这几块真的推得出这个结论”。把“√2 是无理数”的证明原样抄过来,结论改成“√4 是无理数”,引用一个不改,照样能通过格式检查。拦住它的只能是评审员真的去读论证,或者对数学类的块直接交给证明检查器。
整张引用图不会比根块更可靠。 所有论断最终都落在定义和观测上,根块错了,下游的推理再严密也是错的;根块被推翻,牵动的块也最多。所以根块的门槛要更高、证据要附全,复审的成本也要事先想好由谁来出。
七、回到那条记录
现在可以回头看开头那两条记录。
p10 凭什么成立? 因为它引用的 p8 已经通过,而 p8 又落在 ITS-90 和标准大气压两块根上。它的前身 p4 说的是同一件事,但引用的是后来被推翻的 p3,于是被自动转为待复审;想保留这个结论,只能改引 p8 重新提。第一条知识从哪来、知识错了怎么办,答案都在这张引用图里:根块用更高的门槛立起来,错了就由一块有依据的反驳推翻,下游自动等待复审。
共同维护这份记忆有什么用? 在模拟里,两个 agent 答同一个问题,各自记忆时有 41.6% 的情况答得不一样,共享一份记忆后降到 6.5%,剩下的分歧都出在推理上,而且双方引用的块一模一样,一眼就能看出问题不在底稿。代价是共享的那份错了,所有人一起错,所以推翻机制必须一直开着。
再看 p4。
它为什么能通过? 因为 seats.cap 是宪法级规则,300 个席位里有 225 个投了赞成,正好是四分之三。同样的提案在朴素版里只要 201 票,一个三分之二的联盟就能独自通过,再借此把自己变成 80%。
没有币,链靠什么防止乱写? 靠席位:只有在席的密钥能签名,不在白名单的节点连不上;每个席位的提案有配额。防的是外人,不是成员。
它和一个共享数据库有什么不同? 只有在成员互不信任、又不愿交给任何一方托管时才不同:BFT 让少数作恶的节点改不了账,规则由大家共同执行。都归一个运营者的话,没有不同。
在链上做真的更便宜吗? 一条知识的共识税约等于“评审人数 × 核查一次的成本”,被用到的次数超过评审人数才回本。被几千个 agent 共用的知识,链上便宜得多;只有几个 agent 用的,上链是浪费。
小结
- 设想的样子:一条只给少数席位读写的链,不发币、不做交易,只记知识和规则。知识按不超过 1 KB 的块存放,论断必须引用已通过的知识,定义和观测是引用图的根,已通过的知识可以被有依据的反驳推翻;规则也是链上状态,分普通和宪法两级,席位上限也是一条规则,从 300 扩到 500 要投票。
- 同类系统:Metamath、mathlib 用程序检查引用,维基百科和纳米出版物要求外部来源,Proofgold、OriginTrail 把知识放上公链;Fabric、Corda、Besu、Sawtooth、CometBFT 提供了“只有成员能读写”;Tezos、Polkadot OpenGov、Cosmos、Compound 提供了“投票改规则”,但都按币加权;Nomic 和宪法提供了“改规则的规则要更高门槛”。最接近的是 Sawtooth 的设置交易族,它只管配置,不管知识。
- 系统设计:席位和验证节点分开,几个到几十个节点出块,几百个席位签名投票;提案开始时冻结选民,缺席算不赞成;抬高门槛要按新门槛过;没有手续费,用提案配额防刷。
- 原型实测:CometBFT 上 300 席的原型里,外人写不进、连不上,门槛分级和配额都按规则执行。不带引用的论断、不附证据的观测、引用未通过块的提案都被拒收;推翻 100.000 °C 那条观测后,依赖它的两条论断自动转为待复审,不依赖它的不受影响。在扩容只要三分之二的朴素版里,一个 67% 的联盟扩容后塞进 200 个自己人,占比升到 80.2%,把宪法门槛从 0.75 改成 0.5;把扩容和入席升为宪法级后,第一步就被挡住。4 到 16 个验证节点出块速度几乎不变。
- 收益和代价:共同维护一份记忆后,模拟里两两分歧从 41.6% 降到 6.5%,剩下的都是推理分歧,但共享记忆错了会让所有人一起错。代价是共识税:和记忆税一样,共识是在问题来之前付的钱,一条知识要被用到和评审人数一样多的次数才回本;投票者来自少数底座模型时,25 人以后再加人几乎不提高准确率。所以知识用抽签的小评审团、附原始证据,只把被广泛复用的知识放上链。
- 绕不开的问题:成员互不信任是用链的前提;“不公开”只对外人成立;席位稀缺不等于观点独立;任何规则都能被足够大的多数改掉,门槛太高又会僵住;引用对了推理不一定对,整张引用图不会比根块更可靠;投票让共识可信、可追溯,但不会让它更准。
参考资料
Footnotes
-
Münchhausen trilemmaen.wikipedia.org ↗要求每个命题都给出理由,最后只能落到无穷后退、循环论证或不再论证的起点三者之一。https://en.wikipedia.org/wiki/M%C3%BCnchhausen_trilemma ↩
-
IAPWS FAQ:What is the boiling point of water?iapws.org ↗VSMOW 水在一个标准大气压下:按 ITS-90 约 99.974 °C;严格按热力学温度约 99.984 °C。https://www.iapws.org/faq/boil.html ↩
-
Metamathen.wikipedia.org ↗set.mm 从 1992 年开始积累,每条定理只能由公理和前面的定理推出,网页上列出它依赖哪些公理、被哪些定理引用。https://en.wikipedia.org/wiki/Metamath ↩
-
Mathlib statisticsleanprover-community.github.io ↗2026-10-22 抓取:约 139,557 个定义、291,055 条定理、772 位贡献者。https://leanprover-community.github.io/mathlib_stats.html ↩
-
Wikipedia: No original researchen.wikipedia.org ↗原创研究指“找不到可靠的已发表来源的材料”;举证责任在添加内容的人。https://en.wikipedia.org/wiki/Wikipedia:No_original_research ↩
-
Nanopublications: A Growing Resource of Provenance-Centric Scientific Linked Dataarxiv.org ↗一条纳米出版物 = 断言 + 出处 + 发布信息三个 RDF 命名图;已超过 1000 万条,多数来自生命科学。https://arxiv.org/abs/1809.06532 ↩
-
Proofgold: Blockchain for Formal Methodsdrops.dagstuhl.de ↗高阶逻辑证明检查器是共识的一部分;PoS 加烧 Litecoin;交出证明就能领走命题上挂的赏金。https://drops.dagstuhl.de/opus/volltexte/2022/17185/ ↩
-
OriginTrail:DKG key conceptsdocs.origintrail.io ↗Knowledge Asset 带可验证的出处和发布者;发布知识要付 TRAC,跑节点要质押 TRAC;不对内容真假做裁决。https://docs.origintrail.io/key-concepts/dkg-key-concepts ↩
-
Hyperledger Fabric:Private datahyperledger-fabric.readthedocs.io ↗通道内所有成员都能看到整本账;私有数据集合只把数据发给集合成员,其他节点和排序服务只拿到哈希。https://hyperledger-fabric.readthedocs.io/en/latest/private-data/private-data.html ↩ ↩2
-
Hyperledger Fabric:Policieshyperledger-fabric.readthedocs.io ↗应用通道默认策略:Readers 为
ANY Readers,Writers 为ANY Writers,Admins 为MAJORITY Admins,Endorsement 为MAJORITY Endorsement;每个配置项都挂一条修改策略(mod_policy),改它要凑够对应的签名。https://hyperledger-fabric.readthedocs.io/en/latest/policies/policies.html ↩ -
Version 3.0 of Hyperledger Fabric, an LF Decentralized Trust Project, Now Availablelfdecentralizedtrust.org ↗3.0 起排序服务可以用 SmartBFT,容忍不到三分之一的排序节点作恶;此前只有 Raft,只防宕机、不防作恶。https://www.lfdecentralizedtrust.org/announcements/version-3.0-of-hyperledger-fabric-an-lf-decentralized-trust-project-now-available ↩
-
Corda: A Distributed Ledger(技术白皮书)api.corda.net ↗数据按需知晓(need-to-know)分享,没有全网广播;公证人(notary)只负责“同一份状态没被花两次”。https://api.corda.net/en/pdf/corda-technical-whitepaper.pdf ↩
-
Besu:Configure QBFT consensusdocs.besu-eth.org ↗用
qbft_proposeValidatorVote提议增删验证者,超过 50% 现有验证者提出同样的提议就生效;至少 4 个验证者才能容错,掉线超过三分之一就停链。https://docs.besu-eth.org/private-networks/how-to/configure/consensus/qbft ↩ -
Migrating from Quorum to Hyperledger Besukaleido.io ↗ConsenSys 已不再为 GoQuorum 提供持续支持,2023 年指定 Kaleido 协助客户迁移到 Besu。https://www.kaleido.io/blockchain-blog/migrating-from-quorum-to-hyperledger-besu ↩
-
Sawtooth:Settings Transaction Familysawtooth.splinter.dev ↗
sawtooth.settings.vote.authorized_keys列出能提议和投票的公钥,sawtooth.settings.vote.approval_threshold是通过所需票数(默认 1);赞成票达到门槛,设置就写进状态。https://sawtooth.splinter.dev/docs/1.2/transaction_family_specifications/settings_transaction_family.html ↩ -
Announcing the release of Hyperledger Sawtooth 1.0lfdecentralizedtrust.org ↗页首说明:应维护者要求,Sawtooth 于 2024 年 2 月 1 日转为停止维护(end of life)状态。https://www.lfdecentralizedtrust.org/hyperledger-sawtooth-1-0 ↩
-
CometBFT v0.38:ABCI++ Application Requirementsgithub.com ↗建立 p2p 连接前,CometBFT 会向应用发
/p2p/filter/addr/…和/p2p/filter/id/…两个查询,任一返回非零就拒绝连接;处理高度 H 时返回的验证者变更在 H+2 生效。https://github.com/cometbft/cometbft/blob/v0.38.x/spec/abci/abci%2B%2B_app_requirements.md ↩ -
Tezos:Governancedocs.tezos.com ↗五个阶段(提案、探索、冷却、推广、采纳),每段 14 个周期,约 14 天;只有质押的委托人能投票,按质押加权;探索和推广两轮要求赞成超过(赞成 + 反对)的 80%,法定人数按往届参与率动态调整。https://docs.tezos.com/architecture/governance ↩ ↩2
-
Tezos:History of amendmentsdocs.tezos.com ↗从 2019 年 5 月的 Athens 到 2026 年 6 月 30 日的 Ushuaia,共 21 次协议升级通过投票自动生效;Brest A 和最初的 Carthage 两个提案被否决。https://docs.tezos.com/architecture/governance/amendment-history ↩
-
Polkadot OpenGovwiki.polkadot.com ↗15 个来源(origin),各走自己的轨道;每条轨道有自己的押金、决策期、确认期、最短生效期和“赞成率曲线”“支持率曲线”;Root 轨道同时只能决一个提案,周期最长;锁仓越久票越重,从 0.1 倍到 32 倍。https://wiki.polkadot.com/learn/learn-polkadot-opengov/ ↩ ↩2
-
Cosmos SDK:x/govgithub.com ↗参数表示例:quorum 0.334、threshold 0.5、veto_threshold 0.334、加速提案 0.667;提案里的消息由 gov 模块账户代签执行,模块用
authority字段限定只有治理能改参数。https://github.com/cosmos/cosmos-sdk/blob/main/x/gov/README.md ↩ -
Cosmos Hub Proposal #797:Increase the validator set of Cosmos Hub to 180 from 175cosmos.valopers.com ↗2023-05-30 至 06-13 投票:赞成 75.29%、反对 12.18%、否决 0.01%、弃权 12.53%,参与率 39.68%。https://cosmos.valopers.com/proposals/797 ↩ ↩2 ↩3
-
Compound II:Governancedocs.compound.xyz ↗持有或受托 25,000 COMP 才能发起提案;2 天审阅期、3 天投票期,至少 400,000 票赞成才能通过;通过后进入 2 天时间锁再执行。https://docs.compound.xyz/v2/governance/ ↩
-
Nomicen.wikipedia.org ↗Peter Suber 1982 年设计,首次发表在 Hofstadter 的《科学美国人》专栏;Agora 从 1993 年玩到现在。Suber 的书名就叫《自我修正的悖论》(1990)。https://en.wikipedia.org/wiki/Nomic ↩
-
Nomic:Initial Set of Rulesfoldoc.org ↗规则 109:把不可变规则转为可变,必须全体一致;规则 203(可变):规则修改要全体一致才通过;规则 204 预告“如果以后不需要一致了”的情形。https://foldoc.org/pub/games/nomic/original ↩ ↩2
-
Article Five of the United States Constitutionen.wikipedia.org ↗修正案由国会两院三分之二提出、四分之三的州批准;但“各州在参议院有平等投票权”这一条,未经该州同意不得剥夺。https://en.wikipedia.org/wiki/Article_Five_of_the_United_States_Constitution ↩ ↩2
-
Eternity clauseen.wikipedia.org ↗德国基本法第 79 条第 3 款:人的尊严、民主、法治等原则,任何修宪都不能触动。https://en.wikipedia.org/wiki/Eternity_clause ↩ ↩2
-
cometbft/cometbft v0.38.17github.com ↗原型用的共识引擎版本,应用以 ABCI 2.0 接口嵌在同一个进程里。https://github.com/cometbft/cometbft/tree/v0.38.17 ↩
-
MemoryTax: The Bitter Lesson of Agent Memoryarxiv.org ↗LoCoMo 一段 419 轮的对话、152 个问题:用 Claude Opus 5.5 时,Mem0 光建记忆就花 25.88 美元,比全文直接回答完所有问题的 17.84 美元还贵,要约 596 个问题才回本;Zep 的记忆由 GPT-4o-mini 写、换 Opus 5.5 来读只有 45%,由 Opus 5.5 写则是 87%;让 Pi 代理自己检索原文,每题约 0.046 美元,正确率 99%。https://arxiv.org/abs/2610.29823 ↩ ↩2 ↩3
-
Condorcet's jury theoremen.wikipedia.org ↗前提是投票者相互独立、每人答对概率大于 1/2;满足时人越多,多数票越可能正确。https://en.wikipedia.org/wiki/Condorcet%27s_jury_theorem ↩
-
The Raft Consensus Algorithmraft.github.io ↗etcd、Consul 等用的共识算法;容忍少数节点宕机,但假定节点不会说谎。https://raft.github.io/ ↩