浅析区块链之区块链是什么

从去年开始,区块链突然如火如荼起来,相关的新闻席卷微博、朋友圈、科技论坛、门户网站等各大媒体。业界大佬们更是频频发言,有宣称不做区块链就会被时代淘汰的,有说坚决不碰区块链的。国家队也是频频出手,管制、定性、做应用,央行更是默默地把区块链专利数量做到了世界前列。面对众多纷杂的信息、众多的技术分析文章,很容易让人脑袋嗡嗡,怕不懂,更怕懂了啥也都做不了。于是决定梳理一下相关的信息,看看这区块链到底是什么东西。

说到区块链,需要先了解其产生的背景,这样才能理解为何如此设计区块链。区块链的出现是和“暗网”相关的。所谓“暗网”与我们常见的“互联网”相比,只有通过特殊的软件才能够访问,并且在暗网上基本都是些黑市交易,无法见光,参与这些交易的人都不想暴露真实的位置、个人信息。应对这种交易需求,才出现了比特币。所以说,区块链一开始是为了解决匿名交易的问题出现的,也就是比特币。这也是区块链的第一个阶段,即一套账本体系和货币发行机制;后来基于区块链技术,出现了以太坊,在改进比特币区块的基础上加入了智能合约机制,称之为区块链2.0;以太坊之后,类似以太坊的一些扩展应用,能够对于每一个互联网中代表价值的信息和字节进行产权确认、计量和存储,能够扩展到几乎任何领域,这是区块链的第三个阶段,区块链将完成价值的交换。目前处在区块链2.0阶段。

其实从本质上看,区块链和Git类似,每个节点都有一份数据的存储,不同的是区块链没有中央服务器这么个概念,就是一个分布式无中心数据库,其有效的通过数学的方式在数据库没有管理员的情况下对内容达成一致,并且不通过正式工资或是分得股权就能奖励那些帮助使数据库变得更有价值的人们,最终能够实现无争议无抵赖的匿名交易。概括来看,其特点如下:

去中心化:互联网本来的意义就是平等开放,所以有一种言论就是区块链是回归互联网本来意义的希望。这一点是区块链天然的优势,所有节点都存有数据的副本即实现了“去中心化”。

无法篡改: 得益于区块之间的链式结构,可以保证数据无法篡改或者篡改的成本远大于收益。

公开透明:每个节点保存的信息相同,能够消除信息不对称,实现信息透明。

与传统的关系型数据库用一张表或者多张独立的表存储数据,“区块链”使用多个“数据表”并且多个“数据表”形成前后衔接的链式结构,以防止数据被篡改(修改任何一个区块就破坏了链式结构)。总体的结构如下所示:

其中每一个“数据表”在区块链中被称为“区块”。格式如下:

这是区块链技术基本都具有的一些头部信息,包括4字节的版本号、32字节的上一个区块的哈希值、32字节的Merkle根、4字节的时间戳(当前时间)、4字节的难度目标以及4字节的随机数。

版本号:用于跟踪软件/协议的更新。如果新版本的软件不兼容旧版本的软件,那么就认为是发生了“分叉”。

上一区块头哈希值:存储的是链上上一个区块的哈希值,也是区块链设计的精髓所在。

Merkle根:又叫做梅克尔根,是一种用于完整性证明的数据结构,为了能够在区块头中体现出交易而做的一个计算,同时也是为了解决交易记录进行Hash计算的效率问题。

时间戳:该区块产生的近似时间。这个时间虽然是节点生成的但是其是否有效需要其他节点的认可(允许有一定程度的误差)。时间戳使得交易有先后,是防范双重支付攻击的一个关键设计。

难度目标:该区块工作量证明的算法的目标值。

Nonce: 用于工作量证明算法的计数器。

区块体的信息主要是交易列表。交易的数据结构因平台的不同而不同。比特币中就是简单的交易信息,以太坊则会存放智能合约。这里交易列表用来实现UTXO(未花费的交易输出,Unspent Transaction Output),从而实现支付系统,即没有余额、钱包的概念(比特币=UTXO),需要通过遍历整个交易历史来最终计算出每个账户的余额,如此能够避开基于账户概念的设计的一些缺陷。

此外,还需要说一下“块高度”的概念。区块链网络的创世块(第一个区块)的块高度为0,如此每增加一个区块高度就+1,如第一个图所示,如果最左侧的块为创世块,那么最后一个区块的块高度就是2。

以比特币为例,区块链的一个典型交易流程:

新的交易向全网所有节点广播,交易信息包括发UTXO输入、UTXO输出等关键信息。这里一个交易并不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。

每一个节点都将收到的交易信息经过验证无误后(使用解锁加锁脚本自动化验证)纳入一个区块中(被打包到块之前这些交易被存储在内存池中)。

每一个节点都尝试根据最新的区块的信息找到一个具有足够难度的工作量证明。

当一个节点找到了一个工作量证明,就创造一个新的区块(将接收到的交易纳入其中),并向全网进行广播。

当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性。

其他节点表示他们接受该区块,而表示接受的方法是在跟随该区块的末尾制造新的区块以延长该链条,将被接受区块的随机散列值做为新区快的上一随机散列值。

参考资料

《精通比特币》

比特币白皮书:一种点对点的电子现金系统白话区块链技术栈与应用

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180320G1IT2F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券