缓存的公告

Bulletin#25CDE89E60E8E7E2AF66F344502D22E8

o5rdqyAP36HG6HTCHbiTNh1GJ7kvKk4Z5m #4

发布@2020-06-27 17:13:03

上一篇


上一条描述了【原子消息】可以被看做【个体在网络空间的操作】

这一条我们扩展原子消息的属性,来满足个体在网络空间发布信息的需求,姑且称为【公告】。

暂时不关心个体通过【公告】发布信息的内容,只在技术层面做好准备,
做一根好用棍子,个体拿着这根棍子干什么,不是我们需要考虑的问题。
也不考虑【公告】如何传播,这些内容将会在后续【公告】中进行阐述。

物理世界中时间是一维单向流淌的。
因此,个体在物理世界的行动本身也都是不可改变的,
每一个行动都在逻辑上绑定了时间戳,并且行动是有先后顺序的。

同样的道理搬到网络空间中的操作上来,需要增加序号(Sequence)、时间戳(Timestamp)两个属性。
但是仅仅增加这两个属性还无法保障【公告】操作的不可改变性,
个体还是可以在做了很多次【公告】后,随意的改动已经发生的【公告】。

前方高能!
这里需要引入区块链技术,再增加一个属性【前次公告哈希】(PreHash)

这就完了?对。
大家不要把区块链搞得太复杂,一说的区块链就是什么共识算法,
区块链仅仅是一种可被检验的链式数据组织形式而已。

下面举例说明:
================================================================================
个体使用账号o8Tjmes6iAukirYrBosSY9ntC5ahqz9ztK生成第1条【公告】
{
"Action":201,
"Sequence":1,
"PreHash":"F4C2EB8A3EBFC7B6D81676D79F928D0E",
"Content":"第一条公告:世界你好!",
"Timestamp":1593258079325,
"PublicKey":"0203411B7B6FA
68C59DE640CA6E4648A60BFFA17020BAD5B47C7CDE58431D70D43",
"Signature":"3045022100B214B1A0BA0796047C912BE4EB9F409D7D36509A43D30AB42D832C6FA8E7037002202AC04110A1275AC3B8F814821E6AFE8B050D9E56613163F7852069EAC9F6FED4"
}

Action是201,表明这是一条【公告】
Sequence是1,表明这是账号o8Tjmes6iAukirYrBosSY9ntC5ahqz9ztK的第1条
PreHash,由于【公告#1】没有前一条公告,所有统一使用固定值"F4C2EB8A3EBFC7B6D81676D79F928D0E"
Timestamp,使用毫秒

【公告#1】的哈希是"049BAC713355971A78C9B56A69101C72"

================================================================================
个体使用账号o8Tjmes6iAukirYrBosSY9ntC5ahqz9ztK生成第2条【公告】
{
"Action":201,
"Sequence":2,
"PreHash":"049BAC713355971A78C9B56A69101C72",
"Content":"第二条公告:爱与和平",
"Timestamp":1593260044447,
"PublicKey":"0203411B7B6FA68C59DE640CA6E4648A60BFFA17020BAD5B47C7CDE58431D70D43",
"Signature":"3045022100CDD6B1A53C0AD3ABB3A454AB1581F2EAF93ED5671B47D3CE34933D5E1F57CE71022029E2973AA6126EFC0F91397AA476E61F17B0DC9C40F893F46733CE0E79FFD240"
}

【公告#2】的PreHash是【公告#1】的哈希"049BAC713355971A78C9B56A69101C72"

【公告#2】的哈希是"05D67A3492EB84312A6B64FB631C6CAD"

================================================================================
个体使用账号o8Tjmes6iAukirYrBosSY9ntC5ahqz9ztK生成第3条【公告】
{
"Action":201,
"Sequence":3,
"PreHash":"05D67A3492EB84312A6B64FB631C6CAD",
"Content":"第三条公告:星辰大海",
"Timestamp":1593260920556,
"PublicKey":"0203411B7B6FA68C59DE640CA6E4648A60BFFA17020BAD5B47C7CDE58431D70D43",
"Signature":"3045022100DC592604580E9A71018DCE59A9A2005CA5A672256A180F1090A465BDE4FDCE7602201810C1561650286B5BD45F40E108237B38418C523CA76DBC8D3ED253DA1848D3"
}

【公告#3】的PreHash是【公告#2】的哈希"05D67A3492EB84312A6B64FB631C6CAD"

【公告#3】的哈希是"10BBDBC93CFC319F150988A49E933607"

================================================================================
.
.
.
.
.
.


依此类推,当个体生成N条【公告】后,如果再生成一条序号为M(M小于N)的【公告M’】,将会导致M之后的所有【公告】都无法通过PreHash校验。

通过这些属性,可以保证网络空间上单个账号发布的【公告】,近似具备等同于物理世界的时间戳、先后顺序、不可改变的特性。
由于所有的信息都是在个体的计算设备生成,所以【公告】的内容、时间戳的真实性、准确性及其他特性不在技术控制的范围内,
需要其他个体来判断的,不打算在这些问题上浪费时间。

我将这种所有区块都使用一个密钥进行签名的区块链称为单签名区块链,简称单链。
与之对应,由不同密钥签名的区块组成的区块链,称为多签名区块链。
向单链中写入新区块是不需要共识。