比特币技术原理----区块链的本质
Posted 喜欢数学的女孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币技术原理----区块链的本质相关的知识,希望对你有一定的参考价值。
比特币技术原理----区块链的本质
比特币白皮书
2008年10月31日,一个密码学极客中本聪在“metzdowd.com(密码朋克)”网站的邮件列表中发表了一篇论文,题为《比特币:一种点对点式的电子现金系统》
创世区块
2009年1月3日,区块链里的第一个区块,创世区块被挖出。
他在区块中留下:The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.(2009年1月3日,财政大臣正处于为银行实施第二轮紧急救助的边缘.)
创世区块的哈希值为: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
比特币:点对对货币的开源实现
2009年2月11日,中本聪在P2P Foundation这个论坛上发布了一篇长文《比特币:点对对货币的开源实现》
他向大家宣布:
我开发了新的开源的点对点电子现金系统,叫做比特币。它是一个完全去中心化的,无需中央服务器或者受信任方,因为比特币的一切都是建立在密码学证明的基础上,而不是信任的基础上。
区块链
区块链是由包含交易信息的区块从后向前有序链接起来的数据结构,其本质是去中心化的分布式账本。
单向链接性
对每个区块头进行 SHA256 二次哈希加密,可生成一个哈希值。
每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的链条。(溯源)
最长链原则
由于最长链原则要想篡改数据需重新计算耗费巨大的计算量,所以一个长区块链的存在可以让区块链的历史不可改变,这也是比特币安全性的一个关键特征。(不可篡改)
区块
区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构,由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。
区块头
区块头由三组区块元数据组成。
首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。
第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关。
第三组元数据是merkle树根(一种用来有效地总结区块中所有交易的数据结构)。
区块头结构
构成区块主体的一长串交易
构成对应区块所有交易详情,以区块高度639230为例,在此区块发生的交易详情如下:
Merkle 树
Merkle 树是一种哈希二叉树,它是一种用作快速归纳和校验大规模数据完整性的数据结构。
在比特币网络中,Merkle 树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。
当 N 个数据元素经过加密后插入 Merkle 树时,你至多计算 2*log2(N)次就能检查出任意某数据元素是否在该树中,这使得该数据结构非常高效。
起始时所有的交易都还未存储在 Merkle树中,而是先将数据哈希化,然后将哈希值存储至相应的叶子节点。以叶子节点分别是 HA、HB、HC 和 HD为例:
H~A~ = SHA256(SHA256(交易 A))
通过串联相邻叶子节点的哈希值然后哈希之,这对叶子节点随后被归纳为父节点。 例如,为了创建父节点 HAB,子节点 A 和子节点 B 的两个 32 字节的哈希值将被串联成 64 字节的字符串。随后将字符串进行两次哈希来产生父节点的哈希值:
H~AB~=SHA256(SHA256(H~A~ + H~B~))
为了证明区块中存在某个特定的交易,一个节点只需要计算 log2(N)个 32字节的哈希值,形成一条从特定交易到树根的认证路径或者 Merkle 路径即可。有了 Merkle 树,一个节点能够仅下载区块头(80 字节/区块),然后通过从一个满节点回溯一条小的 Merkle 路径就能认证一笔交易的存在,而不需要存储或者传输大量区块链中大多数内容,这些内容可能有几个 G 的大小。
Merkle 树和简单支付验证(SPV)节点
一个节点能够通过生成一条仅有 4 个 32 字节哈希值长度(总128 字节)的 Merkle 路径,来证明区块中存在一笔交易 K。该路径有 4 个哈希值(由蓝色标注)HL、HIJ、HMNOP 和 HABCDEFGH。由这 4 个哈希值产生的认证路径,再通过计算另外四对哈希值 HKL、HIJKL、HIJKLMNOP和 Merkle 树根(在图中由虚线标注),任何节点都能证明 HK(在图中由绿色标注)包含在 Merkle 根中。
注:本文虽然在别的论坛发表过,但属于原创,皆为作者喜欢数学的女孩同一人。
以上是关于比特币技术原理----区块链的本质的主要内容,如果未能解决你的问题,请参考以下文章