目录
在 Reddit 上,像 r/opensource 这样的名称只能属于一个社区,谁控制了这个社区,谁就一直占有这个名称。如果版主做出了用户不喜欢的决定,唯一的选择就是另开 r/opensource2。新社区从零订阅者起步,尽管大多数订阅 r/opensource 的人关心的是开源本身,而不是那个特定的版主团队。
Bitsocial 应用通过目录来避免这个问题。目录是一个主题名称,例如 opensource,由多个社区竞争。这个名称对应的短路径会打开当前排名第一的社区,因此更好的社区无需任何人许可就能接管这个名称。
工作原理
- 目录代码就是主题名称。 Seedit 使用
/s/funny这样的路径。5chan 使用/g/这样的图版路径。 - 社区作为候选者竞争。 每个目录都有一份候选社区列表,每个社区都有自己的确切地址,例如
funny-posting.bso。 - 排名最高的候选者赢得该路径。 打开
/s/funny会显示当前的胜出者。 - 落选不会删除任何内容。 未胜出的社区会保留自己的地址、帖子和订阅者,任何人仍然可以直接打开它。
名称是入口,不是身份
目录代码只是一条发现路径。所有需要持久保存的东西都指向一个确切的社区:
- 从
/s/funny订阅时,订阅的是当前胜出者的确切地址。目录代码本身永远不会被存储为订阅。 - 帖子链接始终使用社区的确切地址,因此胜出者变更后,旧链接不会开始指向另一个社区。
- 胜出者变更时,Seedit 不会改动现有订阅,而是询问每位订阅者:切换到新的胜出者、两个都保留,还是保留当前社区。自动切换是按目录单独开启的可选设置,自动切换时会显示一条可撤销的通知。
因此,参与竞争的社区不会夺走任何人的订阅。它赢得的是名称:新访客会进入它,现有订阅者则可以一键做出选择。更喜欢原社区的人可以继续保留它。
为什么不采用先到先得的名称
- 杜绝抢注。 仅仅占有一个好名称是不够的。社区必须始终是这个名称的最佳候选者。
- 没有管理员分配名称。 由管理员分配名称会重新造出 Bitsocial 旨在消除的中心化否决权。
- 竞争者保有接触受众的途径。 竞争社区可以瞄准同一个名称,而不必换一个更差的名称从头开始。
- 客户端对胜出者的判断一致。 Seedit 以确定性的方式对候选者排名,因此读取同一份已定稿目录快照的每个客户端都会显示同一个胜出者。Seedit 不会因为胜出者在某个用户的网络连接上暂时无法访问,就换上另一个候选者。
目前如何决出胜出者
候选者以 JSON 文件的形式发布在 bitsocialnet/lists 仓库中,每个目录一个文件,社区通过向对应文件提交 pull request 来加入目录。这只是启动阶段的做法。目标是用投票取代 pull request,作为决定胜出者的方式。
- Seedit 按分数对目录的候选者排名,其次按加入时间,最后按地址。每个目录文件都带有一个修订号,候选者或胜出者的任何变更都会发布一个新修订版本。
- 5chan 使用
@bitsocial/pubsub-voting为每个目录举行一场投票竞赛。客户端通过 libp2p gossipsub 交换已签名的选票,并自行计算票数,没有任何服务器负责计票。投票需要持有 5chan Pass(一种不可转让的代币),每位持有者有一票。为尚未列入的板块投票即可提名它。这些竞赛目前在 Base Sepolia 测试网上运行,在迁出测试网之前,票数会显示出来,但不会改变列表的排序。
协议还是应用?
目录不属于 PKC(存储和传输社区的点对点层)。它们是客户端在该层之上应用的一种约定,与默认列表和搜索并列;参见内容发现。客户端可以读取相同的目录文件、发布自己的目录文件,或者完全不使用目录,而用户仍然可以通过地址打开任何社区。