前言
《认识区块链》是一个系列,因为笔者的毕设与区块链相关,所以打算把所学所想通过博客的形式记录下来。这个专栏会从区块链是什么,拓展到区块链核心技术实现,区块链应用,以及区块链相关开发,最后会带大家一步步完成一个DAPP的开发。
相信对于很多人来说,区块链是一个很熟悉的名词,但是又不甚了解它究竟是什么,用了哪些技术,有什么作用,能解决什么问题,具体应用场景又是什么。
区块链究竟是什么?
维基百科对于区块链的定义如下:
区块链(blockchain或 block chain)是借由密码学与共识机制等技术创建与存储庞大交易资料链的点对点网络系统。
这种过于学科化的定义其实很难让我们搞懂区块链的真正含义,在笔者的理解中,区块链由两部分组成,正如字面意思一样,这两部分第一是区块 ,第二是链。
如下图所示,每个区块都存储着某些信息,同时,它们和上一个区块也有着"联系",这个联系就像是数据结构中的链表 一样,将多个不同的区块连起来。
区块里有什么
如上图所示,每一个区块里面都存储着三部分数据,分别是真实数据 、哈希值、上一个区块的哈希值。
真实数据里面存放的是区块所存储的数据,数据类型根据上层应用的不同而改变,比如虚拟货币,以比特币举例子,那么数据里面存放的大概有交易的金额,交易双方,交易时间等等。
哈希则是对整个区块的哈希,当一个区块被创建出来时,它的哈希值也随即产生。因为哈希的加密体制原因,可以简单的将得到的哈希值认为是一个独一无二的存在,对应现实世界中则是每个人独一无二的指纹。
哈希可以说是区块链密码学方向的精髓,因为哈希值会随着输入的改变而改变,哪怕输入相差无几,最后得到的输出也会大相径庭。以SHA-256
算法举例,比如字符串abc
生成的哈希值为ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
,而字符串abc!
生成的哈希值就为53e0eff3204626f3e256ca636572d7ccdf8eb5a190c9defa3fa567bc63866b76
。
虽然在理论上可能产生哈希碰撞(无限的输入,有限的输出)从而导致有可能产生安全问题,但是目前来看这个概率微乎其微,而且区块链也有其他技术能够保证安全性。
不同的区块就通过第三部分上一个区块的哈希值关联起来,最终形成一个"链",一旦某一个区块被篡改了,就必定(几乎完全,但应哈希碰撞的存在,不能说是100%)会导致这个块的哈希值发生改变,同时,后面的块存储的Previous hash
对应不上,导致后续所有的块都会失效。
这里就有一个问题,区块链中第一个区块的 Previous hash
应该指向哪里呢?
答案是地址0,因为它没有实际区块的指向,我们也将每一条链的第一个区块称为创世区块。
区块链真的安全吗?
假设一条链里面有500个区块,现在我想篡改第349个区块,同时我也要将后续的区块对应的Previous hash
值修改为篡改后的值,以当前计算机的性能,其实是可以实现的。
那么区块链还有什么机制来保证它的安全呢?
Proof-of-work
,工作量证明机制,它能够减慢新的块生成的速度,以比特币为例,当你想要生成一个新块时,你首先需要计算所需的工 作量,而这个计算量是非常大的(这也就是挖矿的由来),大概十分钟才能新增一个区块- 分布式技术,每个节点都存储了一份链完全的数据,即一份完整的数据副本,想要修改数据必须得到半数以上节点的同意。