EC2:技术探讨:用区块链算法找出疫情谎报者_Xaviera Tech

    新型冠状病已肆虐了半个多月,各单位各部门早已开始了每日健康状况汇报打卡,实时监督自身和家人的健康状况,只要发现存在一定根据的疑似病例就必须上报。这对于疫情的及时发现与早期隔离都非常重要。

    在此呼吁大家务必重视健康上报过程,不要心存侥幸心理。因为任何误报、谎报、不报,理论上都能够用技术手段挖掘出来!

    别说现有的上报系统是集中式收集与管控的,就是在更加复杂、更加难以协调的完全分布式区块链系统中,也能找到是谁在作恶。

    众所周知,共识机制是区块链技术的灵魂,主要用来解决去中心化的网络中如何维护全网数据一致性的关键问题。它的目标就是让分布式网络中的各个节点对数据达成一致。换句话说,就是能够让每个人都正确地知道全网所有其他人的健康状况。

拒绝上报者

    假设有人私自隐匿不报,我们就用如下算法:

共同战疫  

2020年 2 月 2 日            

    让我把 Python 伪代码换成人类的语言解释一下:

    有 ABCD 四个人,假设我是 A,view_A 表示我对另外三个人的健康状态的了解情况,也就是说若 view_A[B]=0,那么就代表我知道 B 是健康的,若 view_A[B]=null,就代表我不知道 B 的健康状态。若 B 私自不按规定上报,则算法的过程可以简述为:

第一轮:

第一阶段:

上报我自己的健康状态;接受CD发送给我的他们的状态(recfrom_A[C] = 0,recfrom_A[D] = 0)

第二阶段:

汇总我接收到的新消息,得知 C 和 D 也是健康状态。

第二轮:

上报我在第一轮中得知的 C 和 D 的健康状态;

没有收到新知识,算法结束。

    那么此时,所有 ACD 都知道了 ACD 是健康的,唯独不知道 B。

好,此时,我们找出了不按规定上报的 B。

谎报乱报者

    这个情况比较复杂,B 是谎报甚至乱报的,可能向 C 报了健康,向 D 报了不健康,同时又不告诉我 (A) 任何有关他自己的信息。这个时候,我就要采用如下的算法了:

换成人类的语言就是:

我上报自己的健康状况,并接收了 CD 告诉我的他们的健康状态。(rec1_A[C]=0, rec1_A[D]=0),没有收到 B 的消息rec1_A[B]=null,但 B 告诉了 C 和 D,rec1_C[B]=0,rec1_D[B]=1

我和 CD 都分别上报了第一步中得知的消息,那么我的rec2_A(A)=[0,null,0,0], rec2_A(B)=[null,null,null,null], rec2_A(C)=[0,0,0,0], rec2_A(D)=[0,1,0,0],之后,我取 max 汇总这些消息,得知,view=[0,1,0,0]。也就是说,我知道了 B 是有问题的。那么同理可证,所有人都知道了 B 是有问题的。

好,此时,我们又找出了谎报乱报的 B。

    你看,不管是不报、谎报,还是乱报,最终都必被抓出原形。

    所以呼吁大家,珍视生命,重视疫情!接受防疫检查,按时上报健康状况!

我们有信心打赢疫情阻击战。

期待节后顺利正常工作生活。

知识拓展

    在传统的分布式一致性算法中,拒绝上报即等价于节点崩溃故障(错误进程发生崩溃后停止执行)或遗漏故障(错误进程间歇性不发送消息或发生崩溃);谎报即等价于拜占庭故障(错误进程可以随意改变自身状态,发送错误消息或广播不一致消息)。在最复杂的 Byzantine 故障下,采用交互一致性算法,能够使系统容忍的错误进程数上限是 n/3(n是进程总数)。

    传统的分布式一致性算法是区块链共识机制的基础,上述只是在简单的分布式同步系统中的典型共识算法,此外尚有分布式异步系统共识和一致性算法,学习之后,对于理解主流的区块链共识机制(如Pow、PoS、DPOS、RPCA、PBFT、PoV、CoT 等)大有裨益。

●本文旨在呼吁大家重视疫情,技术之处若有疏漏,敬请谅解! ●

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-2:781ms