区块链是一个共享的、不可篡改的账本,旨在促进业务网络中的交易记录和资产跟踪流程。 资 产 可以是有形的(如房屋、汽车、现金、土地),也可以是无形的(如知识产权、专利、版权、品牌)。 几乎任何有价值的东西都可以在区块链网络上进行跟踪和交易,从而降低各方面的风险和成本。
1.什么是区块链?
1.1 区块链简介
区块链的数据结构是由包含交易信息的区块按照从远及近的顺序有序链接起来的。它可以被存储为平面文件(flat file),或是存储在一个简单数据库中。比特币核心客户端使用Google的LevelDB数据库存储区块链元数据。区块被从远及近有序地链接在这个链条里,每个区块都指向前一个区块。区块链经常被视为一个垂直的栈,第一个区块作为栈底的首区块,随后每个区块都被放置在之前的区块之上。用栈来形象化表示区块依次堆叠这一概念后,我们便可以使用 一些术语,例如:“高度”来表示区块与首区块之间的距离;以及“顶部”或“顶端”来表示最新添加的区块。
区块链基本上是一个不断增长的记录列表,称为块。这些块通过使用加密技术进行链接和保护。每个块通常包含前一个块的加密哈希以及时间戳和交易数据。根据其设计,区块链不允许修改数据。
它是一个开放的分布式账本,可以验证和永久的方式有效地记录各方之间的交易。如下图所示的区块链通常由 p2p 或点对点网络共同管理,遵循节点之间通信和验证新块的协议。
一旦记录下来,任何给定块中的数据都不能在没有网络多数同意的情况下被更改。
对每个区块头进行SHA256加密哈希,可生成一个哈希值。通过这个哈希值,可以识别出区块链中的对应区块。同时, 每一个区块都可以通过其区块头的“父区块哈希值”字段引用前一区块(父区块)。也就是说,每个区块头都包含它的父区块哈希值。这样把每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的 链条。
1.2 区块结构
区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易列表组成。区块头是80字节,而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。因此,一个包含所有交易的完整区块比区块头大1000倍。下图描述了一个区块结构:
1.3区块头
区块头由三组区块元数据组成。首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关,详见挖矿章节。第三组元数据是merkle树根(一种用来有效地总结区块中所有交易的数据结构)。下图描述了区块头的数据结构。
1.4 区块标识符:区块头哈希值和区块高度
区块主标识符是它的加密哈希值,一个通过SHA256算法对区块头进行二次哈希计算而得到的数字指纹。产生的32字节哈希值被称为区块哈希值,但是更准确的名称是:区块头哈希值,因为只有区块头被用于计算。例 如:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f是第一个比特币区块的区块哈希值。区块哈希值可以唯一、明确地标识一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值。
请注意,区块哈希值实际上并不包含在区块的数据结构里,不管是该区块在网络上传输时,抑或是它作为区块链的一部分被存储在某节点的永久性存储设备上时。相反,区块哈希值是当该区块从网络被接收时由每个节点计算出来的。区块的哈希值可能会作为区块元数据的一部分被存储在一个独立的数据库表中,以便于索引和更快地从磁盘检索区块。
第二种识别区块的方式是通过该区块在区块链中的位置,即“区块高度(block height)”。第一个区块,其区块高度为 0,和之前哈希值000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f所引用的区块为同一 个区块。因此,区块可以通过两种方式被识别:区块哈希值或者区块高度。每一个随后被存储在第一个区块之上的区块在区块链中都比前一区块“高”出一个位置,就像箱子一样,一个接一个堆叠在其他箱子之上。2017年1月1日的区块高度大约是 446,000,说明已经有446,000个区块被堆叠在2009年1月创建的第一个区块之上。
和区块哈希值不同的是,区块高度并不是唯一的标识符。虽然一个单一的区块总是会有一个明确的、固定的区块高度, 但反过来却并不成立,一个区块高度并不总是识别一个单一的区块。两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置。这种情况在“区块链分叉”一节中有详细讨论。区块高度也不是区块数据结构的一部分, 它并不被存储在区块里。当节点接收来自比特币网络的区块时,会动态地识别该区块在区块链里的位置(区块高度)。 区块高度也可作为元数据存储在一个索引数据库表中以便快速检索。
提示一个区块的区块哈希值总是能唯一地识别出一个特定区块。一个区块也总是有特定的区块高度。但是,一 个特定的区块高度并不一定总是能唯一地识别出一个特定区块。更确切地说,两个或者更多数量的区块也许会为了区块链中的一个位置而竞争。
1.5 创世区块
区块链里的第一个区块创建于2009年,被称为创世区块。它是区块链里面所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。 因为创世区块被编入到比特币客户端软件里,所以每一个节点都始于至少包含一个区块的区块链,这能确保创世区块不会被改变。每一个节点都“知道”创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链。 在chainparams.cpp里可以看到创世区块被编入到比特币核心客户端里。
创世区块的哈希值为:
0000000000 19d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
你可以在任何区块浏览网站搜索这个区块哈希值,如blockchain.info,你会发现一个描述这一区块内容的页面,该页面的链接包含了这个区块哈希值:
https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f https://blockexplorer.com/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
在命令行使用比特币核心客户端:
“$ bitcoin-cli getblock 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
{ “hash” : “000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f”,
“confirmations” : 308321,
“size” : 285,
“height” : 0,
“version” : 1,
“merkleroot” : “4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b”,
“tx” : [ “4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b” ],
“time” : 1231006505,
“nonce” : 2083236893,
“bits” : “1d00ffff”,
“difficulty” : 1.00000000,
“nextblockhash” : “00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048”}“
创世区块包含一个隐藏的信息。在其Coinbase交易的输入中包含这样一句话“The Times 03/Jan/2009 Chancellor on brink of second bailout forbanks.”这句话是泰晤士报当天的头版文章标题,引用这句话,既是对该区块产生时间的说明,也可视为半开玩笑地提醒人们一个独立的货币制度的重要性,同时告诉人们随着比特币的发展,一场前所未有的世界性货币革命将要发生。该消息是由比特币的创立者中本聪嵌入创世区块中。
1.6 区块链接成为区块链
比特币的全节点在本地保存了区块链从创世区块起的完整副本。随着新的区块的产生,该区块链的本地副本会不断地更新用于扩展这个链条。当一个节点从网络接收传入的区块时,它会验证这些区块,然后链接到现有的区块链上。为建立一个连接,一个节点将检查传入的区块头并寻找该区块的“父区块哈希值”。
让我们假设,例如,一个节点在区块链的本地副本中有277,314个区块。该节点知道最后一个区块为第277,314个区 块,这个区块的区块头哈希值为:
00000000000000027e7ba6fe7bad39faf3b5a83daed765f05f7d1b71a1632249。
然后该比特币节点从网络上接收到一个新的区块,该区块描述如下:
`{
"size" : 43560,
"version" : 2,
"previousblockhash" :
"00000000000000027e7ba6fe7bad39faf3b5a83daed765f05f7d1b71a1632249",
"merkleroot" :
"5e049f4030e0ab2debb92378f53c0a6e09548aea083f3ab25e1d94ea1155e29d",
"time" : 1388185038,
"difficulty" : 1180923195.25802612,
"nonce" : 4215469401,
"tx" : [
"257e7497fb8bc68421eb2c7b699dbab234831600e7352f0d9e6522c7cf3f6c77",
[… many more transactions omitted …]
"05cfd38f6ae6aa83674cc99e4d75a1458c165b7ab84725eda41d018a09176634"
]
}`
对于这一新的区块,节点会在“父区块哈希值”字段里找出包含它的父区块的哈希值。这是节点已知的哈希值,也就是第 277314块区块的哈希值。故这个新区块是这个链条里的最后一个区块的子区块,因此现有的区块链得以扩展。节点将新的区块添加至链条的尾端,使区块链变长到一个新的高度277,315。图9-1显示了通过“父区块哈希值”字段进行连接三个区块的链。
上面图通过引用前面的区块头哈希连接成区块链
2.比特币和区块链
对于在比特币方面,区块链是记录比特币交易的公共分类账目。该公共分类账目为一个区块链所实现。每个块都包含前一个块的哈希,直到创世块(区块头),这是比特币区块链的第一个块。这一切都是在没有任何受信任的中央机构的情况下实现的:区块链的工作是由运行比特币软件的通信节点网络执行的。付款人 A 向收款人 C 发送 B 比特币的交易是使用现有的软件应用程序传输到该区块链网络。
网络中的节点验证每一笔新交易,将它们添加到他们的账本副本中,然后将这些账本添加到其他节点。每个网络节点都存储自己的区块链副本。大约每 10 分钟,就会创建一组新的经过验证的交易,即一个区块,并将其添加到区块链中,然后快速发布到所有网络节点。这使得比特币软件可以确定何时花费了特定的比特币金额,从而防止在去中心化环境中出现双重支出。值得注意的是,区块链是唯一可以说比特币以未使用形式存在的地方。
区块链技术导致了比特币和莱特币等新的数字货币的发展,这些货币不是由政府或任何国家的中央银行发行或管理的。这将个人从任何类型的控制和中介机构中解放出来,例如银行系统。它还催生了分布式计算技术,例如引入智能合约的以太坊。
区块链是一种复制的共享账本技术,允许网络中的任何参与者查看账本并进行更改。它是开源的,可以降低成本,提高效率,增加可访问性,解决广泛的令人兴奋和热门的业务挑战。 Linux Foundation 的 Hyperledger 是一个开发开源、开放标准共享账本技术的项目。
如今,消费者要求产品及其制造具有透明度。政府需要有关企业供应链的更多信息,并对违规行为进行处罚。在这种情况下,区块链技术有望实现这样的期望。它支持跨供应链的价值或财产的安全数字传输。
3.区块链技术的优势
以下是区块链技术的优势 –
- 交易现在是可验证的,不允许任何一方进行更改。
- 通过更高的透明度实现更高的效率。
- 消费者有权进行知情购买。
- 现在政府能够获得可靠的信息。
许多专家认为,区块链技术可以用于在线投票、众筹等新兴技术和新奇想法。摩根大通等主要金融机构相信加密货币可以降低交易成本并提高支付处理效率。
比特币是区块链技术最流行和最成功的实现之一。它是一种使用分布式对等计算的开源加密货币。不需要中央机构来管理比特币网络。它是由一个化名中本聪的个人或团体创建的。该网络上的交易通过运行挖矿软件的计算机上的工作量证明算法进行验证。