区块链这段时间相当热门,新闻媒体大量的报道,宣称它将创造未来,但啥是区块链?它是如何工作,有何特别之处,能解决什么问题,又如何使用呢?今天我们就来尝试,做一个最好懂的区块链教程,希望你看完这篇文章,不仅可以理解区块链,还会明白什么是挖矿,为什么挖矿会越来越难的问题。
区块链是什么,正如其名字所示,区块链是一串包含着信息的数据块,它是一种特殊的分布式数据库,这项技术最早由一组研究人员于1991年提出,用来给数字文档打上时间戳记,以确保人们不能回溯或篡改时间,就像一个公证人。首先区块链主要是用来存储信息,就像存储你的聊天记录一样,任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库,其次,任何人都可以架设服务器,加入区块链的网络,成为一个节点,区块链的世界里面没有中心节点,每个节点都是平等的,都保存着整个数据库,你可以向任何一个节点写入或者读取数据,因为所有的节点最终都会同步,保证区块链的一致性。
举个栗子,我们常用的某信就是中心化的服务器,某讯的主机就是中心节点,大家所有的聊天内容,都是通过他们的节点在发送给你想发送的人,然后聊天记录会保存在他们的服务器上,如果使用区块链,你的信息可能发送给任何一个节点,然后进行全网节点同步,这样所有的机电就都是一个数据库,其次你的电脑也可以安装程序成为一个节点,通过加密后,保存所有人的聊天记录,和某讯的服务器,拥有一样的权限和级别。
其实,分布式数据库并非新的发明,市场上早有此类产品,但是区块链有一个革命性的特点,区块链没有管理员,它是彻底的无中心的,其它的数据库都有管理员,但是区块链没有,如果有人想对区块链添加审核,也是实现不了的,因为它的设计目标就是为了防止出现居于中心地位的管理当局,正是因为无法管理,区块链才能做到无法被控制,否则,一旦被大公司大集团掌控了管理权,他们就会控制整个平台,其他使用者就必须听命于他们,但是,没有理管理员,人人都可以往里面写入数据,怎样才能保证数据是可信的呢,被坏人改了怎么办呢,区块链有一个区块组,区块很像数据库的记载,每次写入数据就是创建一个区块,每个区块包含了两个部分,区块头和区块体,区块头记录当前区块的特征值,区块提记录当前的实际数据,区块头包含了当前区块的多项特征值,生成时间、实际数据的哈希、上一个区块的哈希等等。
全球区块链商业委员会(GBBC)和全球数字金融(GDF)合并:金色财经报道,全球区块链商业委员会宣布与加密货币和数字资产采用市场标准协会全球数字金融 (GDF) 进行重大合并。此次合并使两家组织加入各自的资源、资产和成员资格,成为全球最大的区块链技术和数字资产生态系统行业协会。合并后的协会将拥有近 500 名机构成员和 178 名大使,在 95 个司法管辖区和学科开展业务。Global Digital Finance 将更名为 GBBC Digital Finance,总部位于英国,其团队主要分布在 EMEA 和 APAC。[2022/5/26 3:41:53]
你需要理解什么是哈希,就是理解区块链所必须的,所谓哈希就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是256位,就是说不管原始内容是什么,最后都会计算出一个256位的二进制数字,它可以是一个笑脸、一个语音、一段话或者一个视频。而且可以保证,只要原始内容不同,对应的哈希一定是不同的,举例来说,字符串123的哈希是这个,转换成二进制就是256位,而且只有123能够得到这个哈希,理论上其它字符创也有可能得到这个哈希,但是概率是极低的,可以近似认为是不可能发生,因此就有了两个重要推论,1.每个区块的哈希都是不一样的,可以通过哈希识别区块,2.如果区块的内容改变了,它的哈希一定会改变,区块以哈希是一一对应的,每个区块的哈希都是针对区块头计算的,也就是说,把区块头的各项特征值按照顺序连接在一起,组成一个很长的字符串,再对这个字符串计算哈希,Hash=SHA256(区块头)这个就是区块哈希的计算公式。SHA256区块链的哈希算法,注意这个公式里面只包含了区块头,不包含区块体,也就是说,哈希是由区块头唯一决定的。
前面说过区块头包含了很多内容,其中有当前区块的哈希,还有上一个区块的哈希,这个意味着如果当前区块体的内容变了,或者上一个区块的哈希变了,一定会引起当前区块的哈希改变,这一点对区块链有重大的意义,如果有人修改了一个区块,该区块的哈希就变了,为了让后面的区块还能还能连接到它,就必须依次修改后面所有的区块,否则被改掉的区块就脱离了区块链,由于后面要提到的原因,哈希的计算很耗时,短时间内修改多个区块,几乎是不可能发生的,除非有人掌握了全网51%以上的算力,正式通过这种联动机制区块链保证了自身的可靠性。数据一旦写入,就无法被篡改,就像历史一样,发生了就是发生了,从此再也无法改变,每个区块链都连接着上一个区块,这是区块链这个名字的由来,由于必须保证节点之间的同步,所以新区块的添加速度不能太快。
试想一下,你刚同步了一个区块,准备基于它生成下一个区块,但这个时候别的节点又有了新的区块产生,你不得不放弃做了一半的计算再次去同步,因为每个区块的后面只能跟着一个区块,你永远只能在最新区块的后面生成下一个区块,所以你别无选择,一听到信号就必须立刻同步,所以区块链的发明者中本聪故意让添加新区块化变得困难,它的设计是平均每十分钟全网才能产生一个新的区块,一小时也只产生六个而已,这种产出速度不是通过命令达成的,而是故意设置了海量的计算。也就是说只有通过这些大量的计算,才能得到当前区块的有效哈希,从而把新区快添加到区块链,由于计算量太大,所以快不起来,这个过程叫做采矿,也叫做挖矿。
因为计算有效哈希的难度,好比在全世界的沙子里面找到一粒符合条件的沙子,计算哈希的机器叫做矿机,操作矿机的人叫做矿工,读到这里你可能还会有一个疑问,人们都说采矿好困难,可是采矿不就是用计算机,来计算出一个个哈希吗,这正是计算机的强项啊,怎么会变得困难呢。迟迟算不出开,原来不是任意一个哈希都可以,只有满足条件的哈希才会被区块链所接纳,这个条件特别的苛刻,使得绝大部分哈希都不能够满足要求,必须重算。
原来,哈希头包含一个难度系数,这个值决定了计算哈希的难度,举例来说,第十万个区块的难度系数是14000,区块链协议规定,使用一个常量除以难度系数,可以得到目标值。显然,难度系数越大,目标值越小,哈希的有效性跟目标值密切相关,只有小于目标值的哈希才是有效的,否则哈希无效,必须重算,由于目标值非常小,哈希小于该值的机会极其渺茫,可能计算十亿次才能中一次,这就是采矿如此之慢的原因。
刚才说过,当前区块的哈希由区块头,唯一决定,如果要对同一个区块反复计算哈希,就意味着区块头必须不停的变化,否则不可能算出不一样的哈希,区块头里面所有的特征值都是固定的,为了让区块头产生变化,中本聪故意增加了一个随机项,叫做“Nonce” Nonce 是一个随机值,矿工的作用其实就是猜出 Nonce 的值,使得区块头的哈希可以小于目标值,从而能够写入区块链, Nonce 是非常难猜的,目前只能通过穷举的方法一个一个试错。
根据协议, Nonce 是一个32位的二进制,最大可以到2147亿,第十万个区块的 Nonce 是2.74亿,可以理解成矿工从零开始一直计算了274亿次,才得到了一个有效的 Nonce 值,使得算出的哈希能够满足条件,运气好的话也许一会就找到了 Nonce ,运气不好的话,可能算完了2147亿都没有办法发现 Nonce ,及当前趋话题不可能算出满足条件的哈希,这时协议允许矿工改变区块体,开始新的计算。
正如刚才所说,采矿具有随机性没法保证正好十分钟产出一个区块,有时一分钟就算出来,有时几个小时也没有结果。总体来说,随着硬件设备的提升,以及矿机量增长,计算速度一定会越来越快,为了将产出速率恒定在十分钟,中本聪还设计了难度系数以及动态调整机制,它规定难度系数每两周调整一次,如果这两周里面区块的平均生成速度是九分钟,就意味着这比预定速度快了10%,因此,接下来的难度系数就要调高10%,如果平均速度升成是11分钟,就意味着与预定速度慢了10%,因此,接下来难度系数就要降低10%,难度系数越调越高,目标值越来越小,导致了采矿越来越困难,即使区块链是可靠的。
现在还有一个问题没有解决,如果两个人同时向区块链写入数据,也就是说同时有两个区块加入,因为他们都连接着前一个区块,就形成了分叉,这时应该采用哪一个区块呢,现在的规则是新节点总是采用最长的那条链,如果区块链有分叉,将看哪一个分支,在分叉点后面先打到六个区块,称之为六次确认,按照十分钟一个区块计算,一小时就可以完成。
由于新区快的生成速度由计算能力决定,所以这条规则就是说拥有大多数计算能力的那条分支,就是正宗的区块链,区块链作为无人管理的分布式数据库。从2009年已经运行了11年,没有出现过大的问题,这证明它是可行的,但是,为了保证数据的可靠性,区块链也有自己的代价,1.效率问题,数据写入区块链最少要等待十分钟,所有节点都同步数据则需要更多的时间,2.耗能问题,区块的生成需要矿工进行无数无意义的计算,这是非常浪费能源的,因此,区块链的适用场景其实有限,不存在所有成员都信任管理的当局,写入的数据不需要实时使用,挖矿的收益能够弥补本身的成本,如果无法满足上述的两个条件,那么传统的数据库将是更好的解决方案。
目前区块链最大的应用场景就是以比特币为代表的加密货币,去中心化金融和通信等行业也在快速的发展。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。