当前位置:首页 > 比特币新闻 > 正文

15分钟读懂中本聪比特币白皮书开始装逼(3)

来源: 互联网时间:2018-04-08 10:10:07

好吧,终于写到第三小节了——时间戳服务器。

这个小节,英语只有5行@@,我看看50行能不能说完@@

上次说到,比特币转账,其实就是

让全网所有人记录下来『A把钱给B啦』

那么问题是,怎么『记录下来』呢?

简单,把这段时间听到的所有交易丢到一个『块』里,保存下来就好啦。

那么,下一个问题,怎样确保我们能搞清楚哪个『块』先发生哪个『快』后发生呢?

简单,每个块上面记一下时间就好啦。

那么,下一个问题,怎样确保我们所有历史记录都是对的呢?如果有人偷偷增加了一个历史交易记录呢?如果有人偷偷改了一个『块』的时间呢?

呃……

中本聪同学的神奇方法就是:把每个『块』打上一个时间戳,然后按照时间顺序把『块』串成一个链,一环套一环,只要看最后一环是对的,整条链就没问题。反过来说,只要中间任意一环动了,整条链就断了。

具体来说,他把链上最后一个『块』加上前一个时间戳,一起哈希出新的时间戳,用这个时间戳证明最后一个『块』的出现时间。

好吧,说人话,举栗子~

先再解释一下哈希,可以理解为一个摘要算法。这里的第一个关键是:不同的文件,被摘要(哈希)之后得到的数据是不同的。你丢一个熊猫进去,可能出来KLJIJHDSF;你丢一个金毛狗进去,可能出来HPIUGGTD。输入不同的数据,得到的摘要也就不一样。

第二个关键是,根据结果的HPIUGGTD,我其实没法反推出你输入的是金毛狗。这是个单向的摘要过程,有点像你自己可以把自己完整人生浓缩成一张A4纸简历,但是我看了你的简历没法从中反推出你大学计算机基础课打多少分。

有这个基础之后,我们再看这个链是怎么造出来的。

比如我这个块里包含3个交易,分别是『A—>B』、『XX—>XYI』和『IOU—>III』,而这个块对应的时间戳是TYUOOUTR。那么当我收到新的交易打包的时候,我会用『A—>B』、『XX—>XYI』『IOU—>III』和『TYUOOUTR』放在一起哈希一下,生成一个新的时间戳OUHUIYGTFD,然后把新的块和这个时间戳对应。

这里面的关键是:新『块』的时间戳是由这个『块』的内容和之前一个『块』的时间戳决定的。而之前一个『块』的时间戳又是由前一个块的内容和时间戳决定的……依次推导下去,你会发现这个『块』的时间戳和之前所有『块』都有关,之前任何一个『块』被修改内容或者顺序,最新『块』的时间戳就会改变,所以只要最后一个『块』的时间戳有共识,我们就能共识说前面所有的『块』应该都是对的,而且都是按照公认的顺序出现的。

另一方面,因为新的时间戳OUHUIYGTFD的生成时用到了前一个时间戳TYUOOUTR,所以我们可以知道OUHUIYGTFD对应的时间发生在TYUOOUTR之后。一环套一环,我们就可以知道所有事情发生的先后顺序了。

发现这样说起来还是很复杂,我用不太对的但是更好理解的方式再说一遍吧。

假设一个班级有50个学生,学号是1-50。每个人考试成绩不一样,1号学生考了78分,2号学生考了83分,3号学生考了60分……

如果我要求从第二个学生开始,每个学生计算一个T(不管这个是什么意思)= (自己的成绩+学号) x 前一个学生的T值 /80。

假设1号学生T值=成绩,那么2号学生的T值就是(83+2) x 78 / 80 = 82.88;而三号学生的T值 = (60+3) x 82.88 / 80 = 65.27……这样依次推下去,我很容易计算出第50号学生的T值是56.23。

这个56.23和之前所有学生的成绩和T值都有关,也和计算的顺序有关,所以我只要看一下50号同学T值是对的,和其他人看法都一样,我就可以知道之前的所有学生排序和分数记录都是对的。而且,因为计算3号学生T值要用到2号同学的T值,所以我们可以肯定3号同学学号比2号同学大。用类似的方法,我们也可以知道36号同学的学号比35号同学大。

(总觉得还是没讲清楚,可能还是因为自己理解不够透彻,有空我再重写一下哈。欢迎补充指教)

任鑫 要发车创始人CEO

微信公众号:marsopinion

要发车www.yaofache.com是区块链信息聚合平台

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。

你可能感兴趣