零基础玩转区块链
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

◇区块链的运行机制

区块链网络是一个分布式网络,网络中存在众多节点,每个节点都参与数据维护。一旦有新的数据加入,所有的节点都会对数据进行验证,节点间必须对处理结果达成一致,才能将新加入的数据成功地写入各自维护的区块链中,让网络中每个节点都拥有一套完全一致的数据记录。那么,区块链是怎么工作的呢?下面,我们就以比特币的一笔交易为例来说明区块链的工作过程。

1.身份验证

在区块链网络中没有中心机构对节点进行认证,首要解决的问题是对节点的身份进行验证。在比特币区块链系统中,是使用一对密钥来完成验证的。

创建比特币账户时,会生成公钥和私钥,私钥用于数字签名,确认交易所有权;公钥则是私钥通过算法生成的,还是对外公开的,此过程不可逆,即无法通过公钥推算私钥。

用公钥对数据进行加密后,只有对应的私钥才能解密;用私钥加密,只有对应的公钥才能解密。在区块链系统中,就是使用唯一匹配的私钥和公钥来完成加密、解密和身份验证的,举个例子:

Alice向Bob发送消息“Hello Bob”。

首先,用Bob提供的公钥对信息进行加密形成密文,Bob使用自己的私钥对密文进行解密;解密后的结果如果是“Hello Bob”,则证明这个消息是正确的。

其次,还提供了签名机制,Alice可以用自己的私钥对消息进行签名,Bob则要通过Alice提供的公钥进行验签,从而证明该消息的发送者是Alice。

2.交易确认

如果某个节点发起一笔交易,交易不会被立刻添加到区块链中,首先会对交易余额进行校验。可是,在区块结构中,并没有记录账户余额,如何才能知道交易方有足够的余额呢?在比特币交易网络中,货币的所有权是通过验证历史交易信息来核实的。

例如,Alice要给Bob发送1个BTC, Alice必须援引之前收到这个或更多的比特币的历史交易信息,即“进账”; Bob会查看那些进账,确保Alice是真正的接收者,确保进账数额为1个BTC或更多。如果一笔交易已被使用过一次,该笔交易就会被认为是已消费,且不能被再次使用。

如果Alice的账户通过了验证,则该笔交易就是合法交易,Bob会将交易信息保存在事务池(或内存池)中,广播给其他节点;其他节点接收到交易信息后,也会进行同样的校验操作。

3.交易记录

当某一个节点获得记账权后,会将交易纳入区块,在区块上加盖时间戳,并记录到自己维护的区块链中;然后,将该区块进行全网广播,其他节点接到广播后,将区块记录到各自维护的区块链中。

上例中Alice给Bob的转账完成,交易信息被记录到区块链上,无法更改。

4.双重支付和分叉

比如,Alice账户有一个未消费的BTC, Alice将这个BTC同时发送给Bob和Tom,就是“双重支付”或“双花”。如果两笔交易被先后验证,例如,给Bob的交易通过验证,那么给Tom的交易就会验证失败,反之亦然。如果两笔交易被同时验证,都被认为是有效交易,接入区块链时,就会暂时出现分叉情况,如图4-1所示。

图4-1 两笔有效交易接入区块链时出现的分叉情况

之后的区块认同哪个区块,就会在哪个区块后面延续。比特币规定,选择最长的那条链进行扩展,所以一旦有新的区块加入,就会沿着最长的链延续,较短的那条链上的区块就会被抛弃,对应的交易也将失效,失效的交易就要承担相应的损失。