【区块链基础】2——BTC区块结构
区块 block
BTC中的区块结构大致如下:
其中,一个完整的区块由块头(block header)和块体(block body组成),下面将对其中的数据结构进行说明。
全节点与轻节点
全节点:保存区块的全部内容,包括header和body,在本地硬盘维护完整的区块链信息。
轻节点:只保存区块的header。
区块链系统中,轻节点的数量要多于全节点,轻节点的使用限制也相对更少。
哈希指针 hash pointers
哈希指针是应用在区块链技术中的一种数据结构。普通的指针储存了一段数据的内存位置,而哈希指针除了储存数据位置之外,还储存了这段数据的哈希值。
区块链即为哈希指针组成的链表(Block chain is a linked list using hash pointers)。每个区块的header都包含指向下一个区块的哈希指针,走到底的区块是系统中产生的第一个区块,叫创世纪块(genesis block),而开头的区块是系统中最近产生的区块(most recent block),最近产生的区块前面没有别的区块,但是也会有一个哈希指针,保存在系统里。由此,哈希指针组成的链表应为无环链表,否则将产生循环依赖。
通过后一个区块的哈希指针,不仅能找到前一个区块,而且能够防止有人篡改数据,具有防篡改日志(tamper-evident log)属性。如果有人妄想修改某个区块的数据,那么它后面的那个区块的哈希指针,不能够和篡改数据后的区块生成的哈希指针匹配。
区块链中轻节点可以不保存整个区块链的内容,需要时可向全节点进行获取,根据防篡改日志属性,轻节点可对获取到内容的正确性进行验证。
实际在网络中,哈希指针只是一种形象的说法,在header中只保存上个区块header的哈希值,并无指针。全节点一般将区块存在key-value数据库中,key保存区块的哈希,value保存区块的内容,只要掌握了最后一个区块的哈希值,即可查找到之前各个区块的数据。
默克尔树 merkle tree
默克尔树是一种哈希二叉树,其叶节点存储的是数据文件,而非叶节点存储的是其子节点的哈希值,只要查看根哈希值,就能检测出树中是否有地方被篡改,效率较高。
其中,交易列表保存于区块的body中,根哈希值则保存在区块的header中。
默克尔证明 mekle proof
假设有这样一种场景需要用到数字货币支付,支付完成后本人需要证明这笔交易已经写到区块中,比较容易想到的办法就是拿到打包交易的对应区块,然后对比区块中的所有交易来确认是否已经被打包其中。但是在比特币或者以太坊的场景下,一个区块大概有两三千笔交易,一个交易又包含若干字段,如果逐一比较交易不仅速度慢,而且不安全,因为拿单一的区块无法知道拿到的块的真伪。
merkle proof是一种仅需链中全量header就可以证明交易是否存在(proof of membership)某一区块中的方法。
如图所示,绿色块为轻节点已知的header信息,黄色块为轻节点接收到其它节点发送过来的交易信息和路径中部分哈希值。轻节点可自下而上计算蓝色块中的哈希值,并将最终计算得到的哈希值与header中的跟哈希值比较,以验证交易生否真正存在。这一点也利用了哈希函数collision resistance的特性,其时间复杂度为O(logN)。
优点
- 无需知道其他节点的值是什么就可以证明特定节点是否在集合中。
- 仅存储默克尔证明消耗很小的空间。
- 判断一笔交易是否在区块中的消耗很低。
使用场景:
轻节点只包含区块头,也就是只有交易树的根哈希值,当需要向轻节点证明一笔交易已经打包到指定区块时,只需要提供这笔交易和对应路径上的哈希值即可,这样轻节点就可以在不保存区块体的情况下证明了这笔交易已经上链不可更改了。
Target 和 Nonce
target 就是一个 256-bit 的数,计算 nonce 值的过程就是对区块 header 不断的运算哈希,直至找到能使区块哈希小于 target 的 nonce:
H(blockheader)<=targetH(block header) <= targetH(blockheader)<=target根据nonce计算得到哈希值就去跟 target 对比,如果哈希值大于 target ,更改nonce,再次计算 header 哈希;反之如果哈希小于等于 target,那么运算过程就结束了,当前 nonce 值会被最终记录到 header 中。
哈希值只计算header中的数据即可,由于body中交易列表的根哈希值存于header,可由此验证交易列表是否被篡改。
矿机每秒能做多少次nonce 求解过程为算力的代表,其单位Hash/s,显然算力越大,就有更大的概率率先找到 nonce 值,也就是宏观意义上抢到的记账权。争夺记账权的过程成为挖矿,争夺记账权的节点成为矿工,挖矿使用的计算机成为矿机。
参考资料
- 北京大学肖臻老师《区块链技术与应用》公开课
- 《区块链技术驱动金融》
区块链基础系列
- 【区块链基础】1——密码学基础
欢迎打赏Σ(っ°Д°;)っ
【区块链基础】2——BTC区块结构相关推荐
- 【区块链基础】4——ETH区块结构
账户 与BTC不同,ETH使用的是基于账户的账本(account-based ledger),账本中记录了各个用户的的余额,交易时不必追溯币的来源. 基于账户的账本对双花攻击(duoble spend ...
- 【区块链基础】5——ETH协议
GHOST协议 以太坊系统将出块时间降到了15秒左右,相比于比特币系统大幅度提升了出块的速度,但由于P2P网络延迟,会导致出现大量的临时性分叉,间接造成算力的分散,若沿用比特币系统中最长合法链原则,将 ...
- 区块链基础与网络安全
区块链基础与网络安全 区块链定义 什么是比特币 比特币信任来源 比特币原理 比特币->区块链 区块链核心技术 区块链的特征 区块链核心技术 区块链攻击对象 1. 数据层 2.网络层 3.激励层 ...
- 【问链财经-区块链基础知识系列】 第三十二课 从区块链溯源来看农产品链的设计
在区块链的应用场景中,农产品溯源和食品溯源一直是翻来覆去讲的故事,但实际上溯源是一个伪命题,农产品和食品的加密上链实现溯源看起来很丰满,然而现实却很骨干.我们经常忘记了初心:溯源的目的是为了什么? 农 ...
- 【问链财经-区块链基础知识系列】 第二十七课 区块链与分布式账本的异同
编者按:在加密货币和区块链领域,有一个业内人士常挂在嘴边的新术语:分布式账本技术(简称DLT).但具有讽刺意味的是,恰恰是比特币和各种区块链试图颠覆的实体们,例如银行,政府和大公司,对分布式账本技术情 ...
- 区块链基础学习(一)
一.区块链简介 1.1.区块链与区块链技术 区块链是将记录(区块)通过密码学串联并加密的链式数据结构.而区块链技术,是通过P2P网络和区块链来实现数据存储的去中心化.不可逆和不可篡改.比特币正是构建在 ...
- 区块链指南 第2章 区块链基础
目录: 2.1 区块链技术 区块链本质上是一个对等网络(peer-to-peer)的分布式账本数据库.区块链本身其实是一串链接的数据区块,其链接指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈 ...
- 【问链-区块链基础知识系列】 第十课 首席架构师谈区块链技术演进
一.区块链和比特币,都有"币-链-网"三层含义 1.第一层含义是"币".这个"币"并不是刚才王行长所说的真正意义上的"货币&quo ...
- 区块链基础知识与关键技术解析
区块链基础 1. 区块链的来龙去脉 1.1 区块链技术起源 1.2 比特币产生背景与现状 1.3 数字货币概念 1.4 比特币技术原理 2. 区块链概念与产业现状 ...
- 区块链 - 区块链基础知识:交易哈希链
区块链 - 区块链基础知识:深入了解交易哈希链 本文的主题是执行有关交易哈希链. 交易池的角色以及 一个最长的区块链如何永远占据主导. 讨论的细节包括以下内容: 事务哈希链的实现细节 交易池的角色 为 ...
最新文章
- github中origin和upstream的区别(转)
- WHERE WILL BUSINESS PHD GO?
- java面板中添加面板_如何把窗体加入面板中 java
- 5.26在网上看到的方法,实现图形缩放、对齐、图形修改后进行dirty check。(未实验过)...
- 语音学习笔记(四)【传统声学模型】
- 2021年中国超声波织物切割机市场趋势报告、技术动态创新及2027年市场预测
- webgis之geowebcache跨域
- bim服务器型号,国外有哪几个知名的BIM服务器?BIM服务器全介绍!(三)
- 中英文翻译、语料库等资料
- Activiti 流程配置可视化:SpringBoot 集成 Activiti6 + Activiti Modeler
- 远程线程注入技术 屏蔽ctrl+alt+del
- qqxml卡片 php代码,qqxml卡
- 玩转Excel快捷键和常用函数和图表,赶紧学起来
- java eml_javamail读取并解析eml文件
- html转换下一页,如何转到下一页与HTML和/或JS锚?
- 【暮色天】行情反复 愈挫愈勇(1.15)
- 【Java项目】java实战宠物领养系统项目
- Unity SKFramework框架(十七)、FreeCameraController 上帝视角/自由视角相机控制脚本
- XTTS,又一个值得你重视的Oracle数据库迁移升级利器
- 查询单号物流信息是否揽收教你一键操作
热门文章
- 网易蜂巢(云计算基础服务)MongoDB服务重磅来袭
- k线顶分型 python_顶分型K线形态形态特征及操作要领
- 手机投屏不是全屏怎么办_一招搞定手机投屏不是全屏问题,手机投屏自适应全屏...
- 同事说关键字查询用Mysql,我上去就是一个高压锅,用ElasticSearch不香吗?
- chkdsk 停滞_职业停滞–早期发现和治疗
- 台式计算机是32位还64位,小编教你怎么看电脑是32位还是64位
- 计算机的新兴技术在测绘工程领域的应用,当代测绘新技术在测绘工程中的应用...
- Winform2、(C#) 设置编译后.exe执行文件的图标
- virtualbox网络配置
- outlook配置126邮箱