Bitcoin区块验证
区块的生成
矿工在挖矿前要组建区块
将coinbase交易打包进区块
将交易池中高优先级的交易打包进区块
优先级 = 交易的额度 * UTXO的深度/交易的size- 防粉尘攻击
创建区块的头部
版本号|父区块哈希|Merkle树根|时间戳|难度值|Nonce
挖矿成功后,将计算出来的随机数noncet填入区块头部,向临近节点传播
区块的验证链接
验证过程
- 相邻节点收到新区快后,立即做以下检查
- 验证Pow的nonce值是否符合难度值
- 检查时间戳是否小于当前时间2小时(10分钟一个块)
- 检查Merkle树根是否正确
- 检查区块size要小于区块size的上限
- 第一笔交易必须是coinbase的交易
- 验证每笔交易
Merkle Tree结构
二叉树
树--由多个节点组成的一种数据结构
- 每个节点存储数据
- 根节点root
- 父节点,子节点,兄弟节点
构建二叉搜索数
125218191517169

Merkle Tree
防止数据篡改
快速验证某个交易是否存在
节点存储Hash值
从子节点构造树

Merkle Path - 验证路径
只需log2(N)个已知数,即可验证K是否被包含在区块中
H[^K]为查找交易
H[^ABCDEFGH]和H[^MNOP]及H[^IJ] 为临近已知父节点
H[^L]为相邻节点交易Hash

Bitcoin区块验证的更多相关文章
- Bitcoin区块链攻击方式
目录 重放攻击-- 非人为攻击 其他攻击 重放攻击-- 非人为攻击 重放攻击 Replay Attach 攻击者重复发送相同的数据库包到目的主机,用以欺骗系统 用支付宝付款信息重复项商家索取商品 比特 ...
- Factom(公证通)--基于区块链的存证系统
Factom这个Solution在2014年的时候就已经推出了,现在已经2018年了,我才来写这一篇分析文章可能有些迟了,但是它是十分具有参考价值的.因为现阶段来开区块链虽然炒得火热--养猫.养狗.草 ...
- 以太坊中的账户、交易、Gas和区块Gas Limit等概念
什么是账户 以太坊账户与我们所知的账户概念有一定相似之处,却又有很大的区别,更不同于比特币中UTXO. 账户分两类: - 外部拥有账户(EOA),也就是普通账户 - 合约账户 普通账户 所谓的普通账户 ...
- zkSNARK 零知识验证
参考文献 ZCash7篇,有社区翻译版,但还是推荐看原汁原味的 https://z.cash/blog/snark-explain.html Vitalik3篇,小天才作者我就不介绍了,这三篇 ...
- EOS区块同步源码分析之见证者
调了两天,终于把EOS的出块和DPOS共识机制的代码看了个大概,下面做个小总结.因为这一块是EOS比较核心的代码块,稍微复杂些,如果有理解错误之处,请大家见识并帮我指出来,我也会有可能随时改写这里的内 ...
- [币严区块链]USDT钱包节点搭建
USDT是基于BTC发的稳定币,它是比特币的一条侧链,说简单点,就是在比特币区块数据的不可篡改性与区块唯一性的基础上,再封装了一层.具体原理可网上查资料.总之理解一点:USDT的钱包节点就是BTC的钱 ...
- 区块链共识机制之工作量证明(POW)
像比特币.以太坊.NXT.Bitshares等这些区块链系统,其本质上是一种加密经济组织,它建立在点对点网络上,是去中心化.无管辖的,由密码学.经济学和社会共识来共同维护.这些加密网络因各种原因有着多 ...
- 比原链CTO James | Go语言成为区块链主流开发语言的四点理由
11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...
- 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform
原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念 ...
随机推荐
- MySQL基础之 排序与限制,聚合
排序与限制 ORDER BY 作用:取出按照某个字段进行排序后的记录结果集. 配合:常与DESC 和ASC一块使用:默认是ASC,表示升序.DESC表示降序 LIMIT 作用:用于显示数据的一部分记 ...
- Pre标签 自动换行
<pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码 ...
- openlayers5实战--踩坑总结
1.接口返回圆心坐标和半径,直接通过new Circle(center,radius)添加圆形feature变小问题. 解决办法: new Feature()的geometry参数不能直接赋值new ...
- JavaScript中数组slice和splice的对比小结
前言 今天重温了一下Javascript,看到了数组的方法,其中有两个比较相似的方法——splice和splice,看着很像,就是多了一个p,但是用法却相当不一样. 在使用中,可以通过选择一个具有强语 ...
- BZOJ2839:集合计数(容斥,组合数学)
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...
- datagridview 获取选中行的索引
C# CODE for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)//遍历所有选中的行 { this.dataGrid ...
- IntelliJ IDEA 2018.3发布
本文转自:https://www.linuxprobe.com/intellij-idea-2018-3-java-12.html
- 学习Kali Linux必须知道的几点
Kali Linux 在渗透测试和白帽子方面是业界领先的 Linux 发行版.默认情况下,该发行版附带了大量入侵和渗透的工具和软件,并且在全世界都得到了广泛认可.即使在那些甚至可能不知道 Linux ...
- C++之构造函数拷贝
拷贝构造函数,顾名思义,就是通过拷贝对象的方式创建一个新对象.拷贝构造函数有两种原型(我们继续以book类来说明拷贝构造函数原型): book(book &b); book(const boo ...
- Python开发简单爬虫
简单爬虫框架: 爬虫调度器 -> URL管理器 -> 网页下载器(urllib2) -> 网页解析器(BeautifulSoup) -> 价值数据 Demo1: # codin ...