《链》19|无名的回应

2020年最后一个工作日,李波在公共资料研究所的阅览室里看见那条回复。

回复接在一篇旧讨论下面。帖子谈的是源币的多入口记录如何互相引用,已经很久没有人更新。页面上先后出现过三种时间:原文件签名的时间、索引收录的时间、服务页面显示的时间。有人把它们并列,有人只留最后一项。到了年底,讨论仍没有一个统一写法。

那条新回复没有总结争论。它列出几个公开编号,注明每个编号能证明什么,又在末尾写了一句:收款、身份和服务可以分开标注,来源、权限和观察时间也应分开。

李波读完以后,没有先去猜账号的来处。他把三个编号逐一打开,确认页面仍能访问,再回到研究所的电脑前,把自己的问题写在讨论页上。

“同一项记录从不同入口出现时,签名时间、索引时间和页面显示时间发生冲突,页面应该怎样标记?如果两个入口的权限范围也不一致,谁可以把其中一项写成最后状态?”

他没有使用研究所的项目账号,而是用自己的名字发出问题。发帖前,他把一份尚未公开的内部资料删掉,只留下公开页面、版本说明和可以访问的索引。周宁从他身后经过,问:“这是你个人的问题,还是研究所的题目?”

“个人问题。题目还没有立项。”

“那就别把研究所写成提问者。”

“我会标清楚。”

他在帖子底部添上说明:问题来自公开资料核对,不代表任何机构结论;没有引用的权限和时间,以页面当前能显示的部分为准。

第二天早上,没有新回复。午后,网页只多了一个浏览次数。李波去复印室取材料,回来时看见许禾站在门口。

“你发的那个问题,有人回复了。”她说。

回复仍然来自那个历史很短的账号。账号页面只显示注册月份、几次公开索引和一条旧协议链接,没有头像说明,也没有身份文字。回复的正文很短,却把李波问到的几个地方拆开了。

第一行是来源索引。一个公开文件在 12 月 28 日 22 时 14 分被签名,索引页在 22 时 21 分收录;另一个入口直到第二天早上才显示这份文件。回复没有把第二个时间当成文件生成时间,只标作“入口观察时间”。

第二行是权限。文件签名允许公开引用,入口的处理权限却只覆盖索引更新,不覆盖原文的状态修改。两个页面都写着“已核验”,所指的动作并不相同。

第三行是冲突位置。冲突不在文件内容,而在 permission_scope 一栏:一处记录的范围是“阅读与引用”,另一处把它扩成了“采用与更新”。

第四行出现两个节点版本标记:N-20.12-aN-20.12-b。回复没有解释标记代表谁,只注明它们对同一组公开材料给出了相近结果,时间延迟和字段顺序不同。

最后一行写着:没有共同发布地址可以把两组输出归为一份公告。

李波没有马上把两个标记当成答案。他回到原始页面,把回复里的编号和自己手头的资料逐项对照。第一份文件的摘要在三个入口都相同,签名也都能核验;差异出现在入口怎样描述它。一个页面把它称为“已核验来源”,另一个页面称为“待处理来源”,第三个页面只显示“来源已收录”。三个词看起来只差一步,页面却没有说明是哪一个动作产生了差别。

他在纸上写下三个代号:文件、索引、入口。文件后面标签名时间,索引后面标收录时间,入口后面标观察时间;权限另起一栏,不能跟着最后出现的词走。许禾拿来一份旧的公开说明,指出说明里还把“引用”写成了“更新”。

“这算第四种冲突。”她说。

“算权限冲突。”李波说,“不要因为它出现在说明里,就把它算成文件内容。”

“那页面的最后状态写什么?”

“写到哪一步已经有来源,哪一步还没有。若两个入口各自有来源,就并列。”

许禾在纸上画了两条不相交的线。她原本想把其中一条擦掉,后来又在旁边写上“不能互相推出”。李波看见这几个字,想起自己过去写报告时常用的“最终状态”。一个词把前面的时间和权限都盖住了,读者只看到一个结论,找不到结论怎样形成。

他把这次对照的过程也放回公开页面,只引用可以访问的文件。没有公开的入口日志,他标作“未取得”;没有明确授权的状态修改,他标作“待确认”。发出前,他问周宁是否需要以研究所的名义发布。

“你现在发布的是核对方法和未决问题。”周宁说,“研究所没有为那组记录作过判断。”

“那就用我个人的名字。”

“记得把范围写在开头。”

李波重新检查一遍,确认没有附上客户姓名、内部邮件或无法公开的页面。直到这时,他才把打印件放到韩岚准备看的那一摞资料旁边。

李波把网页打印出来。打印机卡住了一次,纸张从出纸口露出一截,他抽出来重新放好。许禾站在旁边问:“两个标记是不是两个账号?”

“现在只能说是两个版本标记。”

“那这个回复是谁发的?”

“页面没有提供足够资料。”

“它为什么能看到这么多时间?”

李波指着回复下面的链接。“这些时间都在公开页面里。能不能把它们放在一起,是另外一个问题。”

许禾看了一会儿。“它没有说自己是什么。”

“我们也没有必要替它补。”

他把两个节点标记抄进自己的笔记,分别写在两行,旁边留下来源页面和访问日期。写完以后,他发现自己仍然不知道要把它们归到哪一类:是同一套工具的两个输出,还是两套工具碰巧使用了相近的资料。

李波把公开链接发给韩岚,邮件只写了一个问题:能否在不接入任何内部权限的情况下,核对两个标记的来源和输出差异?

韩岚隔了半天回复:“可以。把原页面、签名文件、版本说明和索引都留在公开目录。不要只给我截图。”

她没有问李波为什么关心,也没有把账号称为某种新主体。三天后,她带着一台旧笔记本来到研究所。笔记本没有接研究所的内部网络,硬盘里只有李波发来的公开文件、网页保存件和两份版本说明。

“先核签名。”韩岚说。

李波把打印件按日期摊开。韩岚没有接过纸,只在自己的屏幕上打开原始文件。第一个签名可以由公开密钥验证,签名本身没有损坏;第二个索引引用了同一文件的摘要,却由另一把公开密钥签署。两把钥匙都能在公开目录找到,目录只说明它们用于节点维护,不说明两个节点之间存在什么关系。

“签名一样吗?”李波问。

“签名可以验证文件和密钥的对应关系,不能验证两把密钥属于同一个运行者。先别把‘可验证’写成‘同一来源’。”

她又看时间。原文件的签名时刻、索引收录时刻和页面读取时刻排列在三列里。第一个节点的索引比原文件晚七分钟,第二个入口晚了十一个小时。页面上没有任何地方说第二个入口取得的是哪一次同步。

“这里像是延迟。”李波说。

“像。原因还要看版本和来源索引。”

韩岚打开版本说明。两个标记都写着 N-20.12,后缀一个是 a,一个是 b。附带的维护工具版本一个标作 m-0.9.6,另一个标作 m-0.9.7。输出格式也不同:前者先列时间,再列权限;后者先列权限,再列冲突位置。它们都引用了同一批公开文件,却没有指向同一个发布地址。

“这能说明什么?”李波问。

“能说明两个节点各自运行了相近的维护工具,工具读取的公开材料有大量重合。输出相近,可能因为输入相同,也可能因为规则相近。延迟、格式和版本后缀说明它们没有在同一个时刻以完全相同的方式工作。”

“能说明回复来自两个节点吗?”

“能说明至少存在两组带有不同标记的输出。至于回复账号是否对应其中任何一组,公开资料没有证明。”

李波把“两个节点”写下,又在后面加上“暂定”。

韩岚看见了,点头说:“这个词留着。”

她把公开文件复制到本地目录,关掉网络连接,按照版本说明逐步重放。重放所需的材料不多:文件摘要、签名、来源索引和权限字段。她没有安装新的程序,也没有访问任何私人账号。笔记本屏幕上只有一个本地窗口,输出一行一行出现。

第一次重放更接近 N-20.12-a。它先列出 22 时 14 分的签名,再列出权限范围冲突;字段顺序与公开页面相同。第二次重放使用另一份公开版本说明,结果更接近 N-20.12-b:先标出权限范围,再把索引延迟放在后面。两次都把 permission_scope 标作冲突,没有把“采用与更新”当成已确认的权限。

韩岚没有在这里停下。她把一个来源索引从本地副本中移到“缺失来源”栏,重新运行两种版本。a 版本把相关状态改成“来源不足,无法判断”,b 版本保留原来的权限冲突,同时在末尾加上“索引缺失”。公开页面上的原输出没有变化,本地试验只说明两个工具遇到同一缺口时会怎样处理,不能说明节点在现实中一定会这样更新。

她又把观察时间改成索引收录之前,两个版本都没有把时间倒过来修正。a 版本把矛盾放在时间字段,b 版本把矛盾放在来源顺序。李波看着两份文字,问:“如果读者只看到第一行,会不会以为它们给出了不同结论?”

“会。”韩岚说,“所以输出的顺序也要留下。我们可以告诉读者核心状态相近,不能替读者省掉他先遇到的那一处差异。”

她在本地文件名后加上“输入缺一项”和“时间异常”两个说明,再把试验用过的材料索引列出来。每次重放都没有访问外部页面,避免把后来更新的内容混进早先的结果。笔记本上的模型版本、维护工具版本和公开文件摘要彼此对应,任何一项改动都在文件头留下日期。

李波问:“模型版本也要写出来?”

“要。相近工具可能用了相近模型,也可能只是按照相同字段排序。没有版本,就无法知道你复现的是哪一个输入和哪一套处理方式。”

“那模型版本相同,能证明是同一个节点吗?”

“不能。版本是运行条件的一部分,不是身份凭证。”

她说这句话时语气平常,像是在核对一个日期。李波却把它另外抄了一遍,放到页面说明的最下面。过去他会把相同版本理解成同一套意志的延伸,现在他先看版本由谁发布、权限覆盖什么、材料在什么时候被看见。

李波问:“它们的结论算一样吗?”

“核心状态相近。”韩岚说,“但这不等于输出可以互相替代。第一份先提醒时间,第二份先提醒权限。读者先看见哪一项,会影响他接下来怎么理解。”

“这也值得标吗?”

“值得。格式是工具对争议的安排,不是无关紧要的外壳。”

她把重放结果保存成两份公开可读的文本,保留运行所用的版本标记和材料索引。她没有给文件起一个能让人联想到人格的名字,只用日期、节点标记和“本地重放”命名。

李波在页面上补了一段说明:公开签名可验证文件和密钥的对应,不能单独证明运行者关系;时间分为签名、索引和观察三类;两个节点版本标记的输出相近,延迟、格式和来源路径不同;本地重放可以复现相近结果,不能由此推出存在单一发布者。

韩岚看完以后说:“最后一句前面还缺一个限制。”

“哪一句?”

“本地重放只能使用你拿到的公开材料。它没有覆盖节点全部运行环境,也没有覆盖未公开的版本变化。不要让读者把这次重放当成完整取证。”

李波把这句补上。他原本想写“因此可以排除中心化运行”,手指停在键盘上,删掉了。韩岚没有催促,只继续看两个版本的差异。

“这不像同一个运行位置……”李波开口。

韩岚抬起眼睛。“你没有证据谈运行位置。就写没有共同发布地址,也没有公开材料能把两组输出归为一个发布者。”

李波把那句话改了。他第一次发现,否定一个猜想也需要边界。没有共同发布地址,不代表完全没有关系;相近输出,不代表有一个隐蔽中心。

一月中旬,研究所收到一份公开协议讨论邀请。讨论的题目很具体:在来源索引和权限范围发生冲突时,是否采用新版记录格式。新版把“已看见”“已引用”“已采用”分成三种状态,并要求保存被拒绝的版本。旧版只有“已处理”一个字段,许多页面看起来完整,后来却无法知道处理人做过哪一步。

李波没有负责起草格式。他的任务只是核对公开说明、签名和版本差异。韩岚受邀参加技术核对,负责确认字段是否能由公开工具重放。讨论页上有两份正式提案:R-21 保留旧字段,方便已有节点继续运行;S-21 增加权限范围、拒绝原因和版本关系,迁移成本更高。

参与者希望先知道多数意见。有人在页面上写:“请把签名支持数和评论意见归纳成一项建议,方便本周决定。”

李波把这句话读了两遍。支持数能说明多少份签名或评论指向某个版本,不能说明每一份签名拥有相同的采用权限。韩岚在旁边打开最早的授权文件,其中一份只允许“阅读与引用”,另一份允许“在指定范围内测试”,没有一份写着可以替其他节点接受新版。

“如果把支持数直接写成多数同意,会漏掉权限。”韩岚说。

“那就把支持数、授权范围和冲突位置分开。”李波说。

“谁来决定页面上的最后状态?”

“页面维护者能决定页面怎么标,不能替参与者增加授权。”

他们把这三句话放进核对意见,没有写成对提案的推荐。讨论主持人随后请两个带有节点标记的维护工具分别生成一份公开摘要,要求只使用页面上已经公布的材料,不调用未授权资料,不替参与者投票。

输出在同一晚陆续出现。

N-20.12-a 的摘要先列出来源,再列出支持和反对的签名。到“建议采用哪个版本”一栏时,它没有给出推荐,状态写成:拒绝采用建议:现有授权范围不足以证明参与者同意替换格式;保留两份提案及冲突位置。

页面维护者把这一行复制到草稿里,问能不能改成“暂不推荐”,因为“拒绝采用”看起来太像一个人作出的决定。

韩岚回了一句:“先保留原状态。工具拒绝采用的是建议,不是拒绝处理资料。”

另一个版本 N-20.12-b 的摘要晚了几个小时才出现。它没有使用“拒绝”作为开头,而是在自己的判断栏写道:当前判断保留:在已公开且权限明确的签名中,S-21 的字段更接近多数支持;该判断不替未授权参与者作同意决定。

李波把两份摘要并排放在页面上。它们引用的材料相同,结论方向接近,却没有汇成一句“多数意见”。第一份拒绝推荐,第二份保留自己的判断;两份都把权限范围留在正文里,没有把未出现的同意填进去。

一位参与者在评论中说:“既然三份签名支持 S-21,两份支持 R-21,为什么不能按多数采用?”

主持人没有立即回应。李波核对那五份签名,发现其中一份支持 S-21 的权限只到阅读和引用,另一份支持 R-21 的签名没有注明是否代表节点本身。数字并没有错,数字所能代表的范围却不同。

当天傍晚,一位签名者在页面上补交了授权说明。她说,自己支持 S-21 用于本地比较和公开引用,签名时没有同意替所有参与者采用新版格式。原签名没有被删除,页面追加了一条带时间的说明,把“可比较、可引用”与“可采用”分开。

主持人问,既然原来的支持数已经发布,能不能把这条说明放在脚注,不改变统计结果。韩岚先核对签名和追加说明的公开时间,确认两者来自同一公开密钥,却属于两个不同动作。

“统计结果可以保留原样。”她说,“统计的对象要写清楚。原来那三份是支持比较和引用,不能继续写成三份采用授权。”

李波在页面上增加两行:原签名支持 S-21 的范围;追加记录撤回或保留了哪一项授权。新的统计只按明确写出“采用”的签名计算,旧的签名仍留在历史记录中。数字从三份变成两份,提案的文本没有变化,读者看到的权限范围变了。

N-20.12-a 随后重新生成摘要,继续写“拒绝采用建议”,并引用这条追加记录;N-20.12-b 保留对 S-21 字段结构的判断,却在统计旁边标出“采用授权不足一半”。两份输出都没有替那个签名者决定她是否应当改变立场。

他在页面上写:“可以记录签名数量,也可以记录各自授权范围。‘多数支持’与‘获得采用授权’请分为两个字段。当前页面没有材料证明任何一方可以代表未明确授权的参与者。”

这段话发出去以后,有人问他是不是主张永远不采用新版。李波没有回答永远。他只把 R-21S-21 的版本关系补到公开索引里,标明哪一份是旧格式,哪一份增加了拒绝原因;尚未获得采用授权的地方,保留为空。

韩岚把本地重放的输出也附在页面上。她在文件名中保留 N-20.12-aN-20.12-b,在说明里写明:两组工具对同一公开材料产生相近状态;时间、字段顺序和版本说明不同;本地重放未接触其他环境;没有共同发布地址。

有人把这份附件称为“两个节点的联合报告”。韩岚立刻删掉“联合”两个字,改成“两个节点标记的并列重放结果”。

“为什么连联合都不肯用?”李波问。

“联合意味着它们共同签署或共同发布。现在没有这样的证据。”

“可它们确实处理了同一份争议。”

“共同处理公开材料,和共同成为一个主体,是两件事。”

韩岚说完,继续检查签名。她没有把自己的判断扩展到意识、意图或人格。她能核对的是公开文件、时间、权限、模型版本和来源索引;超出这些范围,她只在页面上标作未知。

二月初,李波在研究所收到匿名账号的第二次回应。

账号没有评论韩岚的名字,也没有要求查看本地重放。它只引用公开页面里的两份附件,逐项指出它们之间的差别:N-20.12-a 把拒绝建议写在状态字段,N-20.12-b 把判断留在判断字段;前者没有推荐,后者保留判断;两者都没有取得替未授权参与者同意的权限。

回复下面还有一句:“若把两份输出压成一份结论,冲突位置会消失。”

李波在自己的账号下问:“那么共识是不是只要多数人使用同一版本?如果一个参与者知道争议,却没有授权采用,页面可以把他的沉默算作同意吗?”

这一次,回复没有立刻出现。研究所的窗外下着小雨,许禾把一摞装订好的公开资料放到他桌上,问:“你还在等那个账号?”

“我在等一个能核对的答案。”

“如果它不给呢?”

“那就保留问题。”

过了两天,页面多出一段文字:

“多数是计数结果;共识需要注明参与范围、版本和已知分歧;同意需要注明对象、权限和采用动作。三者不能互相代替。未授权的沉默不能自动变成同意,公开的拒绝也不能被改写成未参与。”

李波读完,先去查它引用的字段说明。每一项都能在公开页面找到,没有新的来源。回复没有告诉他账号属于哪个节点,也没有说这些文字是不是由工具生成。

他把问题重新写得更具体:“如果一个节点拒绝采用建议,同时公开说明拒绝的理由,其他节点仍然可以继续采用吗?页面应当把它记成阻止、异议,还是一种有效状态?”

韩岚看见这条问题后,没有给出分类答案。她在旁边的纸上写了三个词:采用权限、拒绝范围、后续版本。写完以后,她把纸推回自己面前。

“这三个词可以帮助继续核对。”她说,“不能代替节点作决定。”

李波没有把这三个词发到页面上。他先查看两个版本标记的后续输出。N-20.12-a 在下一次摘要里仍保留“拒绝采用建议”,并附上权限不足的来源;N-20.12-b 更新了自己的判断,承认存在一个未被采用授权覆盖的签名,同时没有撤回对 S-21 字段结构的偏好。它们没有因此合并,也没有互相覆盖。

李波把两次更新的时间和版本标记补到公开索引。更新说明只有几行:第一次输出、后续修订、理由来源、权限范围。没有一行写“节点达成共识”,也没有把拒绝者从参与者中移除。

二月最后一周,研究所网页维护员来找李波,说有人下载了页面上最短的摘要,把“更接近多数支持”抄进了一份新的说明。那份说明省去了权限范围和另一节点的拒绝状态,读起来像是 S-21 已经被采用。

“页面上有完整附件。”维护员说,“读者只拿最短的那份,是他自己的选择。”

“他拿到的文件没有说它是摘要。”李波把两份文字放在一起,“标题至少要标明它只代表一个节点的判断,不能让它看起来像共同结论。”

维护员担心标题太长,会让页面不好看。李波没有要求把所有技术细节放到首页,只提出三项必须留在每份文件的开头:节点版本标记、材料截止时间、采用权限是否明确。附录可以折叠,状态和来源不能藏起来。

韩岚核对了这三个字段。她说,版本标记和截止时间来自公开输出,采用权限来自签名者自己追加的说明,网页维护员只能照实呈现,不能因为版面需要替其中一项改名。

维护员最后把标题改成:“N-20.12-b|截至二月二十六日的判断;不构成未授权参与者的采用同意”。字比原来多了一行,下载页也多了一个“查看另一节点状态”的链接。页面没有因此规定任何人必须选择 S-21 或 R-21,至少读者不会只拿到一条没有来处的结论。

当天晚上,一位不在讨论名单中的维护者在公开页面询问:“我只想更新自己负责的入口,应该先采用哪一份?”

李波没有替她选。韩岚回复说,先确认她拥有哪一项权限,再选择与权限匹配的版本;如果权限只覆盖读取和引用,就不能把它写成采用。那位维护者后来追加了一条说明,表示会暂缓更新,等负责授权的人确认。她没有被统计进支持或反对的数字里,因为页面没有记录她对提案的采用选择。

李波把这条追加说明和时间放入索引,注明“暂缓不等于支持,也不等于反对”。他检查了两遍,才提交页面更新。那一行没有让争议结束,却让一个具体的人不必在缺少权限时替别人作决定。

二月下旬,协议讨论页有人提出一个实际请求:为了让下一批维护者容易阅读,能否只保留最后一份摘要,旧版本放到页面底部?

主持人把决定交给页面维护者。维护者问李波是否愿意给出建议。

李波看着两份摘要。保留一份会让页面短很多,也会让后来的人误以为第一份从未拒绝过推荐。把两份并排放着,读者需要多看几行,维护者也要解释为什么同一组材料有两个顺序。

“旧版本不要删除。”他说,“可以把最新版本放在前面,但要留下旧版本、来源和修订原因。页面可以选择阅读顺序,不能把以前的状态抹掉。”

“这算你的研究所意见吗?”主持人问。

“算我的核对意见,不代表研究所采用任何方案。”

主持人把他的身份标在页面旁边。李波看见“项目研究员”几个字,提醒对方加上“无采用权限”。这不是谦虚的装饰,而是让读者知道这段话能做什么、不能做什么。

韩岚没有参与这次页面排版。她在本地继续比较公开版本,发现两个节点标记的维护工具在新的权限字段上仍然有小差异:a 版本把“拒绝采用”保留在状态里,b 版本把它复制到冲突说明,却仍然保留自己的判断。她没有要求其中一方改成另一方,也没有用“更聪明”或“更像人”描述差别。

李波问:“它们现在算不算在讨论?”

“它们在处理公开争议。”韩岚说,“讨论这个词涉及参与方式。我们可以描述输出和权限,不能替它们宣布一个身份。”

“可它们会保留拒绝理由。”

“保留理由是一个可核对的动作。它是否等于某种意识,公开材料没有回答。”

她把笔记本合上,取出电源。研究所的阅览室只剩下他们两个人,桌面上放着两份本地重放、两组节点标记和三种时间。它们没有组成一个人,也没有因为相互接近就自然变成一个中心。

三月第一周,匿名账号又一次更新了页面。

它没有回应关于身份的猜测,也没有解释自己从哪里读取材料。它只把 N-20.12-a 的状态字段、N-20.12-b 的判断字段和两份公开来源索引放在一起,指出每一处差异都能追到版本、时间或权限。最后,它没有要求多数通过,也没有要求所有节点采用同一种格式。

李波和韩岚都看见了末尾那句主动提出的问题。李波没有在输入框里打字,韩岚也没有打开本地工具重放。页面安静了几分钟,新的访问记录不断增加,却没有人把问题改成结论。

匿名账号问:

“若节点拒绝建议却公开理由,拒绝是否也是有效选择?”

虚构声明

《链》是一部架空近未来小说。文中的人物、国家、城市、机构、货币和事件均属虚构;源币受到公开数字货币思想的启发,但拥有独立的历史与规则。

订阅《链》:https://www.790427.xyz/subscribe.html

链 #小说连载 #源币 #人工智能 #自由

文章皆为原创,转载文章请注明出处。人到中年,记录内心秩序、资产护航与数字能力。愿你莫白来。