什么是区块链?简单来说区块链就是一个分布式的记账本,或者分布式的数据库。
区块链的数据结构是一个链表,交易数据被存储到链表的区块中,区块链的第一个区块叫创世区块,除了创世块以外,每个区块还包含前一个区块的哈希指针,这个哈希指针的值是根据前一个区块的实际数据计算出来的。哈希指针指向前一个区块,后面的区块可以查找前面所有区块的信息。
账本的数据结构就是这样的一个链表,那么分布式的含义是什么呢?
区块链的众多参与者组成了一个松散自治的 P2P 网络,我们把区块链网络的参与者叫做节点,每个节点都拥有一个账本拷贝,所有账本的信息都是一致的,在区块链里没有中心节点。每当有新的交易进来,所有节点的账本都会更新,并且最终保持一致。更新的方式不是去修改某个区块的值,而是保存交易记录。比如在比特币系统中,它没有用户资产记录这样的概念,不像普通数据库那样用一条数据存储资产,比特币用户资产的值是通过把所有的交易记录串联聚合后得到的,账户里资产的来源可以一直向上追溯,直到创世块为止。区块链里的交易数据根据具体场景,可以是任何需要记录的信息。
智能合约
为了支持信息的持续更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制。智能合约不仅仅可用于在区块链网络中打包信息,它们也可以被用于自动的执行由参与者定义的特定交易操作。
比如智能合约可以规定物流中的运输费用,根据物流的快慢收取不同的费用,根据货物的到达时间进行自动转账等。上传到区块链网络中的的智能合约会被打包到某一个区块中,因此智能合约一旦写入区块链,也是不可更改的。
共识机制
区块链网络中交易信息同步的过程,确保交易只有获得适当参与者批准后才更新,所有的参与者都会将同样的信息按照同样的顺序更新,这样的过程叫做共识。共识机制是区块链的核心之一。
区块链的第一个应用比特币,采用的是Proof of Work(工作量证明)的共识机制。简单介绍一下比特币的共识机制,算法的具体细节大家可以去查白皮书。节点收到一个交易后,会根据判断标准对该交易进行有效性校验,无效的交易会被废弃。通过有效性验证之后的交易将会被广播给其他节点。其他节点会做同样的独立校验,当有效的交易达到整个网络所有节点时,即全网达成了“该交易有效”的共识。每个节点都会收到很多有效但是还未被打包到区块中的交易,这些交易被组装成 Merkle Tree,Merkle Tree 的第一个交易比较特殊,叫做 coinbase,由节点自己创建,将挖矿奖励支付到矿工自己的地址。挖矿奖励包括新创建的比特币和打包进该区块所有交易的手续费总额。然后节点计算一个符合难度的哈希值,挖矿就是通过修改参数不断计算区块哈希值,直至达到难度要求,也就间接证明了该节点付出了对应的工作量,这就是工作量证明。笔者的另一篇文章300行ABAP代码实现一个最简单的区块链原型里用了一个 ABAP 方法CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR 来计算区块的哈希值。
当节点计算出一个符合难度的区块哈希时,即说明该矿工挖矿成功了,该节点将该区块组装到本地的区块链,同时也将此区块广播给其他节点。其他节点接收到该区块后会验证该区块是否有效,有可能有两个节点同时挖出了新的区块 B1 和 B2,它们的上一个区块都是同一个区块 P。有的