缓存的公告

Bulletin#7574CE837D673A863422E1DE72595007

o5rdqyAP36HG6HTCHbiTNh1GJ7kvKk4Z5m #6

发布@2020-07-19 11:47:37

上一篇


引用


接上条
个体可以自由的创建N条【公告单链】,【个体有发表内容的自由】
同时向【公告单链】持续写入内容是需要消耗【人类时间】的,准备内容的时间,所有【公告】间的时间跨度,最近【公告】的写入时刻
并且屏蔽一条【公告单链】的成本几乎为零(几乎不需要消耗【人类时间】),个体可以构建基于账号的【内容过滤器】,【个体有屏蔽内容的自由】

接下来,从0开始谈谈【公告】的传播
1、初始状态,个体各自创建自己的账号,发布自己的公告,构建自己的【公告单链】,
个体之间不发生【公告】数据的交互,默认的初始状态是不接收任何其他个体的【公告】,
此时,没有违背个体意愿的垃圾信息;
2、个体通过物理世界或者网络空间,获取到了其他个体的账号,
并基于个体自由意愿接收来之账号oA、oB、oC...等账号的【公告】,
个体一旦不愿意继续接收某个账号的【公告】时,可以自由的屏蔽该账号,
关注账号白名单以外账号发布的【公告】,都不会出现在个体眼前;
3、现在有一个问题,我关注了账号oG,我想把oG发布的一条很好的【公告】转发给我的朋友,
但是我的朋友并没有将oG纳入白名单,即便我把【公告】发给他,他的计算设备也会屏蔽掉这条【公告】,
这种设计显然是不好,物理世界中也不是只有直接消息,而没有间接消息(二次传播消息)。


因此,要引入间接传播机制,直接例子
账号obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf的【公告#1】
内容是"o22Zhy8MzQYemARcftajENtfikjbhTNiqg:自主可控",
用于声明自己准备使用账号o22Zhy8MzQYemARcftajENtfikjbhTNiqg发布一些自主可控相关的内容
{
"ObjectType":101,
"Sequence":1,
"PreHash":"F4C2EB8A3EBFC7B6D81676D79F928D0E",
"Quote":[],
"Content":"o22Zhy8MzQYemARcftajENtfikjbhTNiqg:自主可控",
"Timestamp":1583719468574,
"PublicKey":"03D5AD191ADEA2857AC05E1D64075ED911C81CF36CEB8B230B1D68222801B0ADE7",
"Signature":"3044022001CE5500C78F310F2627F0B9FA6E2E913DC533B8EC0FAFA0199B5BBF1A517CA802205A714BA53834B85D031AA65AA166641BD52831327DF52998F5C77816E08815DE"
}

将账号o5rdqyAP36HG6HTCHbiTNh1GJ7kvKk4Z5m的【公告#4】中引入的属性"Action"修改为"ObjectType",
此后【公告】是一个数据对象,而不是一个操作
新引入属性"Quote",用于记录【被引用公告的基本信息】,是一个数组,暂定最多可以引用8条公告,
本条公告未引用其他公告,所有Quote属性的值是空数组。


下面账号o22Zhy8MzQYemARcftajENtfikjbhTNiqg的【公告#1】引用账号obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf的【公告#1】,如下
{
"ObjectType":101,
"Sequence":1,
"PreHash":"F4C2EB8A3EBFC7B6D81676D79F928D0E",
"Quote":[{"Address":"obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf","Sequence":1,"Hash":"EBEB6524F5F44DC5ED356378C2335D30"}],
"Content":"第一条公告:账号创建",
"Timestamp":1583719817350,
"PublicKey":"02ECE5CC8C58BB329F5FEADE429938FF65CEF7149F1F62F36FF4DCA37739B07B5D",
"Signature":"304402207C4FD9E6C05332F0DCE71C11D9CE4557417A3FA655A7A797EA961A540687C1F9022051B251ABF9CE12FD4FA69F8C3E607438B8D18DDA0B3BE00C6E8B5928F65572F2"
}

重点看
"Quote":[
{
"Address":"obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf",
"Sequence":1,
"Hash":"EBEB6524F5F44DC5ED356378C2335D30"
}
]
表明引用了一条【公告】,被引用的公告是由账号obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf发布的序号为1且哈希值为EBEB6524F5F44DC5ED356378C2335D30的【公告】。


在个体计算设备本地的执行逻辑是,凡是本地已经存储了的【公告】,其引用的【公告】可以被展示在个体眼前。
这样就解决了上述3中的问题
只要关注了账号o22Zhy8MzQYemARcftajENtfikjbhTNiqg,本地客户端可以存储其【公告#1】,
即便没有关注账号obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf,
也可以通过【o22Zhy8MzQYemARcftajENtfikjbhTNiqg#1】中的引用,
去获取并展示【obeTvR9XDbUwquA6JPQhmbgaCCaiFa2rvf#1】

需要注意的有几点:
1、按照上述设定,引用这个特性是可以无限传递,
也就是说,【公告Ga】引用Gb,Gb引用Gc,Gc引用Gd...,
只要获取看到了公告Ga,就可以放行这一些列公告Gb、Gc、Gd...显示在个体眼前
2、引用的获取和显示,默认均不是自动的,需要个体点击操作才会触发
3、引用不仅仅是引用,同时也是对【被引用公告】的备份和背书。