15分钟读懂中本聪比特币白皮书开始装逼(3)
好吧,终于写到第三小节了——时间戳服务器。
这个小节,英语只有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号同学大。
(总觉得还是没讲清楚,可能还是因为自己理解不够透彻,有空我再重写一下哈。欢迎补充指教)
Token Economy Design社群发起人介绍
任鑫,05年开始在中美做电商,11年创立『今夜酒店特价』,13年把公司卖给了京东,开始做京东O2O。15年再创业IM服务助理,2017年底转型区块链,是要发车(yaofache.com)和轻钱包糖果车的创始人。
要发车(www.yaofache.com)是区块链行业信息聚合平台,有最全的数字货币行情和资讯信息,在加密货币的世界里开得一手好车。
想要加入TED(Token Economy Design)社群,请添加微信:renewyourdream
本文转自任鑫Mars在要发车的专栏文章:《15分钟读懂中本聪比特币白皮书开始装逼(3)》