1.1 认识区块链
1.1.1 区块链的概念
我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。区块链也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,呈链状结构,这种结构就是链表。
区块抽象到计算机语言中就是一个对象、一个结构体、一个类,同样类中也可以定义属性、变量和方法,但区块里包括的内容可以自己来定义。比如,以太坊公链的区块结构,它有变量,我们就可以自己进行定义。以下是我们设置一个区块包括变量的例子。
上述的type Block struct表示定义一个区块,其中定义了变量Number、PreHash、Hash、Value、Create。
当链表中的每个数据个体是上述区块的时候就构成了一条区块链。区块是区块链每一环的实体。这是一种最简单的区块链。如图1-1所示,其中箭头的方向代表的是子块关联父块,也可以将箭头反过来,表示父块连接子块。
图1-1 正常形态的链
由于链中的区块包含数据,例如上面的Value变量,因此我们能够在这个区块被打包到链中的时候向Value填充值,此后我们通过访问这个区块内部的数据可对它打包的数据进行读取,然后输出,展示给用户。
在上面的例子中,我们用来存储打包到区块中的数据变量只有一个Value,那么请想象一下,如果把Value换成一个数组或者更多变量,这个区块就会变得更复杂,它的功能也会跟着变得更多。
此外,链中的区块被规定是唯一的,即相同区块号的区块不能以同一个身份(以太坊中允许有区块号一样的不同含义块)在同一条链中出现两次,如果出现了,那么链会将其纠正过来。
下面是网上对区块链的定义解释:
“区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。”
这个概念其实是一个广义的解释,笔者更趋向于把这个解释理解为区块链节点程序,而不是区块链,因为一个区块链的节点服务程序就包含了这个概念中的各个模块,实际上还有很多其他的模块。
一般来说,区块链公链包含但不限于下面的技术模块:
(1)数据加密签名技术模块。
(2)共识机制技术模块。
(3)分布式数据存储技术模块。
(4)点对点通信传输技术模块。
(5)智能合约技术模块。
(6)应用程序接口技术模块。
当我们把这些模块技术实现的代码整合到一个程序中时,它便是一个区块链应用,例如某一条公链。
那么是不是区块链应用一定要全部实现这些技术模块呢?不是的,你可以开发自己的区块链公链,哪怕是超级简单的雏形,只要是链状的区块存储应用,就可以称为区块链。请记住,任何一个复杂的区块链应用,例如知名的公链,都是在简单的模型上进行技术的添砖加瓦打造出来的。此外,区块链的各个技术模块所包含的知识点也是非常丰富的,可以说每一个知识点都属于一个领域。
1.1.2 链的分类
区块链的链分类通常有3类,即公有链、私有链和联盟链。这3类链的主要区别是:
(1)公有链的维护节点比较多,节点网络对所有人开放,任何人都可以进行特定的数据访问。
(2)私有链是面向个人或某个组织的。
(3)联盟链是多个组织团体的节点联合在一起维护的,对组织开放。
目前被广泛接受、认可、有价值的“代币”(Token)几乎都是基于公有链的。
不同种类的公有链之间要实现相互通信,比如比特币公链和以太坊公链进行BTC兑换ETH的交易,需要借助技术手段来实现,例如跨链通信技术。
1.1.3 区块链能做什么
从区块链普遍的去中心化的特点来看,在节点网络中,如果某条公链的合法节点数目达到一定的数量级,那么我们可以认为当前公链的去中心化程度接近100%,这意味着链上的数据不会再被篡改了,于是我们所传递到链上被保存在区块中的数据会一直存在下去,真实而永久。
基于这个特点,我们可以将区块链应用到数据的溯源存储方面。除此之外,还可以根据区块链具体提供的功能进行各种应用。例如,以太坊公链,它是区块链,而且提供了智能合约这类具备图灵完备的功能模块,我们可以基于它来开发智能合约去中心化应用DApp,其中最为普遍的便是ERC20智能合约所对应的“代币”。
要理解区块链能做什么,可以从实际的区块链应用所具备的特点进行思考,从而得出答案。