美文网首页@IT·互联网学区坊
区块套而不只是区块链

区块套而不只是区块链

作者: 黄药师blockchain | 来源:发表于2019-01-11 10:38 被阅读18次

    著名的经济学人杂志说比特币是信任的机器,那他到底是怎样的一只看不见的手,能够没有干预的情况下,不出错的正常运行了10年,这个账到底是怎么记的,可以做到记录不可纂改呢?他到底有什么与众不同的地方?

    最基本的理解就是,每一个区块就像账本的一页,一个区块一个区块链接起来,形成长长的链条,就像流水账一样。这个解释当然没错,但是只说对了一半,其实他不仅仅是区块链,更是区块套,手套的套,你会发现他是建立整个比特币网络记账机制的关键,也是理解区块链思维模式的关键。那么接下来,我们就来看一下比特币是怎么记账的。

     

    第一部分:hash算法

    先,咱们还是得先简单了解下著名的哈希算法,我去注册公司的时候想让名字里面带哈希两个字,人家工商局的跟我说每天都有不少于十个人申请这个名字,所以可见多么重要。我看网上很多人解释比特币的时候都试图绕过这一点来做简化,其实我也想绕因为怕听不懂也担心我自己讲不清楚。

    但是真的绕不过去,否则会看起来好像明白了,但其实只知道个表面,聊天吹吹牛还好,如果要投资或者结合区块链做些事情那还是最好搞得更清楚一点。当然其实它也不复杂,可以说是所有技术背景的人都知道的一个常识,只是对非技术背景的人来说有点陌生而已。

    Hash的英文拼写是hash,在英文的日常用语里面,意思就是把某个东西切成碎末,从而让各种形状不同的东西切完以后变成全都一样。很多人应该都吃过宫爆鸡丁吧,你看那个里面的鸡丁你还认得出是鸡的哪个部位吗?有人居然说还可以吃出公母来,肯定不行对吧。因为那只鸡被哈希了。

    hash用在算法里面的解释,叫做随机散列函数,就是把任意长度的输入都变成固定长度的输出,是一个压缩映射的操作。一部10个g的电影也好,还是一张照片。hash算法都可以给你算一个固定长度的编码出来,这个编码我们把它叫做hash值。你看是不是很像切菜,当然他并不是把大文件做分解,而是给每份数据算一个长度一样的编号,就像每个人都有个身份证号码一样。所以他是不能反向再解密还原原始文件的,因为他只是个摘要,就像你没法对着身份证号码,就能描述出一个人的长相身材。

    哈希算法有很多种,比特币网络用的叫sha-256算法,就是不管任何文件丢进去,它都给你一个256位长度的二进制数字,就是一串很长的0101。Hash算法的具体计算过程比较复杂,有兴趣的话可以自己再去了解。

    除了长度固定以外,他还有两个关键特点:

    1、只要原始数据不同,得到的hash值就一定不同。也就是找不到两份不同的数据但是他们的hash值一样,这个也叫防碰撞。有了这个特性以后,hash值就可以唯一的代表一份数据。

    为什么能够做到这一点呢,简单来讲就是因为他够长。它有256位,最多可以表示2的256次方种不同结果,这个数字已经比宇宙中所有原子的数量都要多了。你可能会说再多他也毕竟是有限的,而文件数量是无限的,按道理一定会出现重合啊。但问题是,那只是理论上。实际应用中,你得真的找到才叫碰撞,那个要花的计算量是非常大的,大到什么程度呢,大到无法完成。随便拿一份数据,如果你要找到第二份不同的数据,但是hash值跟他一样的话。即使宇宙大爆炸开始就开始让电脑去穷举,以我们的计算机能力,到今天也还没算完。被你不小心随便碰运气撞上的概率,也比连续中10期彩票头奖的概率还要低。

    2、他不像身份证号那样,一看前几位就知道是哪个省的,后几位就知道生日多少。Hash的算法规则,让产生的hash值没有任何规律,所以才会叫随机 散列函数。你没法像买手机号一样主动要求定制,比如给我尾号来三个八888。而只能通过不断改变文件一个个去试,因为前面说了,数据发生任何改变,hash值都会变,而且是巨变。所以你如果要三个888的话,可以,怎么办,比如在一篇文章后面加一个数字,让这个数字不断的变,每次变完都在重新算一下,看看有没有试出来。只能这样一个个的穷举尝试下去。

    好,我们知道hash算法有三个特点,首先他是根据内容算出固定长度编号的操作、他长度很长,只要内容有任何不同编号就会不同、编号随机产生没有任何规律。

    第二部分:区块套

    那么接下来咱们说回比特币的记账,以及hash在这里面起到了什么作用。首先是一个区块到底长什么样的,比特币矿工每次打包一个区块的时候,这个区块里面除了记录了过去十分钟内的交易信息,同时还记了一个hash值,这个hash值是怎么算出来的呢?它是把十分钟内的交易,和上一个区块的hash值合到一起,作为原始数据,算了一个新的hash值。这一步算出的hash,在下一个区块里面会和新的交易数据合并产生新的hash值,就是这么一直重复下去。不管实际交易记录信息量有多少,都可以通过这么一个256位的hash来监控任何一步是否有数据发生了改变。

    这就很像你在网上买过东西,特别是买一些敏感的商品。有的时候就会一个大箱子里面套了小箱子,小箱子里面再套了更小的箱子,没有的话自己想象一下哈。比特币的区块链里面,越是早期的交易就就像里面的小箱子,最近的一笔交易就是最外的那个最大的箱子。

    这样做的好处,是产生不断增强的效果。如果你想改掉某一个区块上的交易信息,比如明明付出去了的钱,收到货以后,又想反悔改成没付的话。那得怎么办,不光是改那个区块,还得把后面每个区块的hash值都改掉。就像你想把小箱子里的东西拿出来,必须得把外面的大箱子都拆掉,而且你拆的速度还要比他新增的速度更快。因为一个交易记录只要发生任何变化,hash值都会完全不同。同时下一个区块又会用到这个改变以后的hash值,所以下一个也得一起变,就是这么一个连锁反应。而每次改变都得全网接受,所以你要么有本事全改掉,否则光改一个地方是没用的。后面的课程你会知道,这个代价是巨大的。

    所以很多时候只要保存了最后一个区块的hash,就可以知道整个链条有没有发生过任何变化。

    我们都看过三国演义里面的火烧赤壁,庞统给曹操出了馊主意,让他把战船通过大锁链和木板连起来,这样人和马都可以在上面跑。船越多就越对吧,如果它不是用大铁锁和木板呢,如果是两条船之间拉根网线,显然就达不到这个效果。

    第三部分:utxo的区块套

    除了在区块层面,每个比特币层面也是一样。我们知道一个区块里其实记录的是多笔交易的转账信息,对于每一笔交易,其实用的也是这种区块套的结构。

    还记不记得前面说的,比特币用的utxo,这种未花费输出的结构。他也是一个带了套的链状结构。一个比特币诞生以后,当他发生第一次转账的时候,就会除了记录转给谁、转多少以外,还会把这些转账信息算出一个hash值一起保存。下一次转账的时候,又会把新的转账信息和上一次的hash值合到一起,算一个新的hash值。

    所以你看,不管是从单个比特币的utxo纬度,还是多笔交易的区块层面,比特币网络都通过hash这个机制,建立了区块套而不只是区块链,从而让整个交易记录不断反复增强,你要改任何一步的交易都得把后面所有的全部改掉,也只要记住最后一笔交易或者最后一个区块的hash值,就可以知道之前任何一步有没有被纂改过。这样才能起到类似赤壁之战里面的那种铁锁连舟的效果。

    相关文章

      网友评论

        本文标题:区块套而不只是区块链

        本文链接:https://www.haomeiwen.com/subject/mcvarqtx.html