起源是一些 Minecraft 服务器主之间的讨论,共享行为恶劣的玩家 ID 以早做预防。类似话题讨论多了之后便有了一个类似 “云 ban” 的系统,即共享 banlist 。但是这些设计通常有些弱点:
- 中心化方案:需要中心服务器,无法确保中心服务器的中立性,无法确保云上数据是否被篡改。
- 去中心化方案:需要每个服务器自行提供共享接口,包括 HTTP 服务器或放在 Minecraft 的协议包中等,有些管理员不希望暴露服务器地址,直接向封闭协议包里塞数据也可能导致未知问题。
于是就引出了这个小项目:Minecraft Player Reputation Database “Minecraft 玩家声望数据库”。
它的基本原理非常简单,即
- 通过他人无法篡改的方式来提供数据交换。
- 使用数值来量化“声望”。
于是就有了两种实现思路:
- 中心化:基于 PGP 签名消息,简易实现、无需公开特定 Minecraft 服务器地址,例如 MySQL 数据库 <> 后端 API <=> 客户端(插件)。由于签名消息无法被篡改的特性,网络上的任何人都可以开设一个中心服务器。
- 去中心化:基于区块链实现信息交换,客户端本地进行数据提取。需要 ledger 服务器。
由于时间略紧想快就只做了中心化的方案(因为可以 CRUD 直接出样品)。
任何人都可以向中心服务器提交签名的声望数据,作为服务器管理员则可以只获取信任签名的数据并在本地基于信任度对声望数据做加权处理,最后得出一份本地的声望数据,即可根据这份数据做进一步的操作。
项目主页(包括服务端实现和一些客户端实现): https://openmprdb.org
类似的思路可以推广到任何基于 ID 的平台,不仅仅是 Minecraft 。由于平时没什么时间所以各种设计实现都还比较粗糙,欢迎各路大神吐槽批评哈哈)