随着ICO的火热,区块链技术逐渐成为人们茶余饭后的话题。然而在很多人的眼中区块链技术就等于ICO,ICO荣区块链技术就荣,ICO黄区块链技术就黄,这是非常不对的。
比特币及各种代币是运营于区块链技术之上的一种应用,ICO一种融资行为,通过代币的首次公开发行来获得项目启动资金,以反哺各个应用和区块链技术的发展,我相信这是ICO的初衷。但是资本是逐利的,目前的情况是劣币驱逐良币,泡沫巨大,监管势在必行。正如徐小平老师所说:“ICO只是区块链技术的一个应用,而不是区块链技术本身。有人说98%的ICO项目不会有回报,因为泡沫太多了,这一点我是同意的。但ICO最大的问题不仅是泡沫,而是缺乏监管。这个问题,我相信政府一定会有所作为。”
作为信息安全领域学习工作了近10年的老鸟,我认为区块链技术是近年来最具革命性的新兴技术之一。他不仅仅是一个加密技术或是数字货币、或者共享账本什么的。而是一门系统工程和全新的设计思想,一个融合云计算、分布式存储、密码学等学科的全新设计理念。
现在大家都在讲解区块链的概念和应用场景,但是讲解区块链技术的地方很少,我希望能有这么一个地方和大家交流学习区块链技术,将自己研究区块链技术的所得与大家分享,共同进步。只有深刻的认识到区块链技术,深刻的认识到ICO,才能保持初心,不被形势所迷惑。
水平有限,难免会有遗漏或不对的地方,欢迎大家来拍砖。
什么是区块链,如何解决问题
区块链技术学术定义是指多个参与方之间基于现代密码学、分布式一致性协议、点对点网络通信技术和智能合约编程语言等形成的数据交换、处理和存储的技术组合。
有点头晕,顾名思义,就是数据区块按照时间顺序以链的方式组合在一起,而这个链任何人都可以访问(对共有链而言)、不可篡改、不可伪造。如果像比特币那样运用在货币领域,这就好比全网络的所有人都在共同维护着这个账本,任何账目的转入转出都可以查,任何的交易都可以查,这就解决了一个人类社会的基本问题:两个陌生人之间的直接信任问题,不再需要第三方来维护这个信任。
区块链如何做的呢?它由许多的区块组成,每个区块看成一个账单,把区块链理解为一个账簿,区块中包含交易的详细信息,例如买方、卖方、合约等等,交易发生时会建立一个区块来记录交易详细信息。然后区块会广播到全网所有节点,通过将共有交易详情及双方或多方独有签名合并加密获得全网验证。如果所有节点对应的加密记录一致,则交易有效。 当全网验证通过,该区块就会并入到历史的交易链中,并且备份到全网的各个账簿上。 如果要篡改区块上的信息,则需要 51%以上的交易记录才能被认可通过,所以篡改交易信息是非常困难的。
什么是区块?存储了什么东西
可以看出区块主要有区块头和区块体两部分组成。区块头包含版本号,前一区块地址,时间戳,随机数,当前区块的目标哈希值,merkle数的根植等信息。区块体主要包含交易的计数和交易账单详情。
一定时间内(比特币10分钟)全网的所有交易都会被永久的记入数据区块中,而且任何人都可以查,区块中的MerKle树会为每一笔交易都进行数字签名(好比交易的双方都盖了自己的钢戳),因为这个钢戳只有交易者自己才有,这样就能保证块里的每一笔交易都是不可伪造的,同时也是不能抵赖的,同时加入时间戳就可保证也是不可重复的。
所有的数据都通过MerKel树的hash值产生这个区块体的唯一根植记入区块头。MerKel如此设计非常的巧妙,一方面他可以快速的归纳和校验区块数据的完整性(自下向上不断HASH就行了)。另一方面大大提高了区块链的运营效率和可扩展性:因为区块头只用包含跟哈希值就可以了,而不用附带整个块,这极大的减少了链的负担。
现在大家了解区块体包含一段时间内全网的交易信息,并且以MerKle数的方式存储,并将他们的跟hash信息存储到区块头。打个比方:区块体就是我们这段时间(比特币是10分钟)的账本,整个账本会有一个唯一的hash值,就好比我们的账本名,而链就好比账本名的目录,我们将这个账本名存储到目录中,就可以找到账本在哪里,也可以校验他是不是真的账本的了(因为hash值本身不可篡改,账本发生一个字节的变化就会对hash值造成雪崩效应,变得和之前的大不相同)。
区块头包含了前一版本号,区块地址,时间戳,随机数,当前区块的目标哈希值,merkel树的根值。相信大家一定会知道链如何工作了,很简单,就是不断的通过前一区块地址,就可以找到上一个区块在哪,这就形成了一个链。
那么其他的字段有什么作用呢?我们一个一个看
时间戳和不可篡改性
时间戳是指格林威治时间1970年1月1日0时0分0秒(北京时间8时0分0秒)到现在的总秒数,其实就是这个总秒数的字符串,这就可以唯一标识某一刻的时间。再区块链的每一个区块头都有一个时间戳,记录当前区块数据的写入时间(这个时间戳是由获得记账权的矿工再完成记账时加盖的),这就能说明区块的写入时间了,下一个区块的时间戳都会对前一个时间戳增强工作量证明,也就是下整个链条一旦链起,时间戳只会越来越大。这就增加了一个时间维度的数据,使得数据更容易追溯。
挖矿问题
另外两个字段,随机数与目标哈希的作用又是什么呢?
比特币有一个很大的问题,也是他的设计思想,就是全网没有类似于央行这种单独记账的单位,大家同时竞争记账(计算前一段时间生产的区块,并将该区块写到链上),也就是传说中的挖矿。那么谁来记账呢?在没有中央统筹单位,互相没有信任基础的情况下如何保证各个节点记账的一致性和交易的合法性呢?这就是共识机制。
比特币采取一种POW(工作量证明机制),这就用到了随机数和目标哈希值两个字段。
首先,矿工把全网尚未记录的现有交易打包成一个区块,轻松得到一个包含MelKel树的区块体。然后矿工需要不断的去遍历尝试寻找一个随机数,使得新区快加上随机数的哈希值能满足一定的难度条件,例如前面10位都为0。只要找到这个随机数,就相当于确定了区块链最新的一个区块,也相当于获得了区块链的本轮记账权。然后矿工就可以把这个区块广播出去,全网的其他节点验证该区块是不是满足挖矿难度条件(比如前10位为0,这个条件会变化,比如会根据当前全网的算力进行调节),同时校验区块里的交易数据是不是符合协议规范,然后把该区块链接到自己的区块链上,从而也就完成了全网当前网络的共识。
这样做的优点是完全去中心化,节点自由进出,避免建立中心信用机构的成本。只要网络破坏者的算力不超过全网算力的50%,交易状态就能保持一致。
缺点也很明显,大量资源浪费,好好的电都用来算这种东西了。而且激励机制也造成矿池的算力集中。所以有了POS、dpos等等。
小结
区块链巧妙的融入很多设计思想和技术:比如P2P网络、加密算法与哈希算法、数字签名、甚至博弈论等。这其中的很多思想也都在这个小小的数据区块头中得到体现。我认为区块结构是所有的基础,也是精髓所在。所以,比特币的区块结构即能反应发明者天才的一面,也是可能制约其发展的所在,所以才会有了以太坊,才有了不断革命的区块链技术。