区块链这段时间相当热门,新闻媒体大量的报道,宣称它将创造未来,但啥是区块链?它是如何工作,有何特别之处,能解决什么问题,又如何使用呢?今天我们就来尝试,做一个最好懂的区块链教程,希望你看完这篇文章,不仅可以理解区块链,还会明白什么是挖矿,为什么挖矿会越来越难的问题。
区块链是什么,正如其名字所示,区块链是一串包含着信息的数据块,它是一种特殊的分布式数据库,这项技术最早由一组研究人员于1991年提出,用来给数字文档打上时间戳记,以确保人们不能回溯或篡改时间,就像一个公证人。首先区块链主要是用来存储信息,就像存储你的聊天记录一样,任何需要保存的信息,都可以写入区块链,也可以从里面读取,所以它是数据库,其次,任何人都可以架设服务器,加入区块链的网络,成为一个节点,区块链的世界里面没有中心节点,每个节点都是平等的,都保存着整个数据库,你可以向任何一个节点写入或者读取数据,因为所有的节点最终都会同步,保证区块链的一致性。
举个栗子,我们常用的某信就是中心化的服务器,某讯的主机就是中心节点,大家所有的聊天内容,都是通过他们的节点在发送给你想发送的人,然后聊天记录会保存在他们的服务器上,如果使用区块链,你的信息可能发送给任何一个节点,然后进行全网节点同步,这样所有的机电就都是一个数据库,其次你的电脑也可以安装程序成为一个节点,通过加密后,保存所有人的聊天记录,和某讯的服务器,拥有一样的权限和级别。
其实,分布式数据库并非新的发明,市场上早有此类产品,但是区块链有一个革命性的特点,区块链没有管理员,它是彻底的无中心的,其它的数据库都有管理员,但是区块链没有,如果有人想对区块链添加审核,也是实现不了的,因为它的设计目标就是为了防止出现居于中心地位的管理当局,正是因为无法管理,区块链才能做到无法被控制,否则,一旦被大公司大集团掌控了管理权,他们就会控制整个平台,其他使用者就必须听命于他们,但是,没有理管理员,人人都可以往里面写入数据,怎样才能保证数据是可信的呢,被坏人改了怎么办呢,区块链有一个区块组,区块很像数据库的记载,每次写入数据就是创建一个区块,每个区块包含了两个部分,区块头和区块体,区块头记录当前区块的特征值,区块提记录当前的实际数据,区块头包含了当前区块的多项特征值,生成时间、实际数据的哈希、上一个区块的哈希等等。
DeFi增长推动以太坊合约调用数量激增:金色财经报道,据Glassnode数据,随着DeFi在2020年快速增长,以太坊合约调用(contractcall)数量激增。自今年年初以来,由外部账户发起的合约调用数量几乎增加了两倍,从每天不到30万次增加到目前的每天超过85万次。内部以太坊合约调用数量则是从6月份的每天不到100万增加至目前每天超过300万,在短短三个月内增至超过3倍。[2020/9/4]
你需要理解什么是哈希,就是理解区块链所必须的,所谓哈希就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的哈希长度是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.耗能问题,区块的生成需要矿工进行无数无意义的计算,这是非常浪费能源的,因此,区块链的适用场景其实有限,不存在所有成员都信任管理的当局,写入的数据不需要实时使用,挖矿的收益能够弥补本身的成本,如果无法满足上述的两个条件,那么传统的数据库将是更好的解决方案。
目前区块链最大的应用场景就是以比特币为代表的加密货币,去中心化金融和通信等行业也在快速的发展。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。