《精通比特币》第七章“区块链”解读——区块链基础知识篇

本章,我将深入浅出的介绍区块链如何首尾相连、区块的结构、Merkle树的原理以及Merkle如何验证交易存在等常用知识,可帮助你清晰的了解区块链的内部结构。

建议阅读时长:8分钟

第1节 简介

区块链是将包含交易信息的区块由后向前有序链接起来的数据结构。形象的来讲,区块链类似于一个垂直堆砌的栈,创世区块作为栈底的第1个区块,后面新生成的区块依次在上面堆砌。所以,在区块链里面,用“高度”表示某区块与首区块之间的距离;用“顶端”或“顶部”表示最新添加的区块。

每个区块,由区块头和交易信息两部分组成(这两部分的具体信息,后文会有阐述)。区块头中包含连接上一区块的“父区块哈希值”,每个区块的唯一性标识是对区块头中的信息进行SHA256计算得到的哈希值,所以当“父区块哈希值”发生变化时,“子区块的哈希值”也会发生变化,对应的“孙区块哈希值”也会有连锁的变化,而每产生一个区块需要花费很大的计算。所以一旦一个区块有很多代以后,这种瀑布效应将保证该区块不会被改变,除非强制重新计算该区块后续的所有区块,这样的重新计算需要花费巨大的计算量。所以一个长区块链的存在可以让区块链的历史不可改变,这也是比特币系统安全性的一个关键特征。

第2节 区块结构

区块是区块链中聚合了交易信息的容器数据结构,它由一个包含描述数据属性的区块头和紧跟其后的构成区块主体的交易组成。每个区块的区块头大小为80字节,每个区块至少包含500笔交易,每笔交易平均至少250字节,所以一个区块中的交易数据大小至少为125000字节,比区块头的1000倍还要大,这也是简易支付验证(SPV)客户端只存储区块头来完成交易验证的原因,能节省很大空间。

关于简易支付验证的过程,可以参考“第六章 比特币网络解读”中的介绍。

第3节 区块头

区块头中包含3类数据。第1类数据是“父区块哈希值”,用来连接上一区块;第2类数据是时间戳、难度和随机数,记录创建该区块时的挖矿信息;第3类数据是交易数据的Merkle根哈希值,该字段是对本区块所有交易数据的总结。具体字段描述如下:

区块头字段

时间戳、难度目标和随机数,会在下一章中详细介绍。

第4节 区块标识符

区块标识符,指可以定位到是哪个区块的代号每个区块的标识符,有2种:区块哈希值和区块高度。

区块哈希值,是对区块头的所有数据信息进行二次哈希计算得到的,该哈希值依赖于区块头中的数据,只要区块头中的值发生变化,区块哈希值即会变化。区块哈希值可唯一定位到一个区块,是区块的唯一性标识。就像根据身份证号能对应唯一的公民一样。

仔细核对区块中的字段可以发现:区块中只记录了父区块的哈希值,并没有存储当前区块的区块哈希值。区块哈希值没有存储在区块链完整数据库中,而是当该区块从网络被接收时由每个节点计算出来的,由节点存储在一个单独的数据库表中,以便后续快速的搜索区块。

区块高度,是区块离创世区块的距离,如区块高度为30000,则代表其为区块链中的第30001个区块(创世区块的区块高度为0)。通过区块高度可以确定区块在区块链中的位置,但是区块高度不是区块的唯一性标识,这是因为同一时间可能会有多个矿工产生同一高度的区块,导致出现区块链分叉,虽然分叉是暂时的,但需要等到后续至少产生6个新区块时,才能确定对应高度的区块。就像姓名,可以用来称呼对方,但是可能会出现很多人是相同的名字,所以姓名可能会对应到很多人。

第5节 Merkle树

在区块的区块头中,有一个字段Merkle树根,该字段用来汇总区块内的所有交易并用于快速校验区块内是否存在某笔交易。

Merkle 树的原理:

简单的说,Merkle树就是一个哈希二叉树,父节点是2个子节点SHA256之后的结果,叶子节点是对交易数据SHA256之后的结果。

Merkle树结构

如上图所示,叶子节点为交易1—交易8,先对交易1—交易8分别进行哈希计算,得到每个交易的哈希值,如Hash1—Hash8,得到叶子节点。再对交易哈希值两两进行SHA256计算,如果叶子节点是奇数个,会将最后一个节点复制一份,再进行哈希计算后得到其父节点,如Hash12——Hash78。逐层向上递归,依次两两哈希,直到只有一个根节点,即Merkle树根。

如何使用Merkle树验证交易是否存在?

使用Merkle树,可以很快捷的验证交易是否存在。比如,验证交易4是否存在,只需要知道从交易4的哈希值到计算根节点的路径上需要参与计算的最少个数哈希值即可,所以只需要提供Hash3、Hash12、Hash5678,即可构建从交易4到跟节点的验证路径。

当全节点检测到待验证交易存在于某个区块中时,会给SPV请求方返回区块头和Merkle路径,这里的Merkle路径不会包含该区块的所有交易,只会返回包含所请求的交易到计算Merkle根节点的最少个数哈希值,如上面所述,如果需要验证交易4,只需要知道3个哈希值即可,这样可以大大提高验证的效率、同时节省本地空间。下图所示为SPV节点根据所返回的Merkle路径,计算根节点,通过和区块头的Merkle根值做比对,来证明交易是否存在:

Merkle验证路径

如果根据Merkle路径计算出的根节点与区块头中的Merkle树根一致,则代表交易存在于该区块,反之,则交易不存在于该区块。

我们知道,不同字符串碰撞到同一个sha256的概率极小,那么double sha256的概率就是它的平方,而merkle root是经过一层一层计算上来的,如果一个区块只有一个(或2个)交易,那么就是double^(2+1) sha256,而如果是4个交易,就有double^(4 + 2 + 1) sha256,更何况一个区块有那么多交易,要经过merkle运算得到一个相同的hash,几乎是不可能的,因此,在merkle验证中用一个伪造的交易hash来得到一个已知来merkle root是不可能的。

另外,Merkle树还可应用于所下载文件的完整性验证,感兴趣的朋友可以查阅学习下。

第6节 总结

通过本章的学习,相信你对区块链如何首尾相连、区块的结构、Merkle树的原理以及Merkle如何验证交易存在等知识,有了清晰具体的认识。

如果对文中的表述有疑义或者存在表述有误的地方,欢迎在留言区讨论交流,一起精通比特币。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容