本系列内容包含:基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。
挖矿
以比特币网络为例,比特币挖矿主要使用到的算法是SHA-256,其具体流程参见下图。
我们从上往下进行分析:
第一层是:nVersion;
第二层是:hashPrebBlock;
第三层是:hashMerkleRoot,
第四层是:nTime;
第五层是:nBits;
第六层是:nNonce;
第七层是:Hash。
中国互联网络信息中心报告:区块链金融应用取得阶段性成果:金色财经报道,4月28日,中国互联网络信息中心(CNNIC)发布第45次《中国互联网络发展状况统计报告》,其中介绍了我国区块链发展状况。在政策方面,区块链相关政策环境更加优化:政策密集出台鼓励区块链技术发展,区块链监管框架已初步形成。在技术方面,区块链关键技术取得进展:底层技术创新持续提升,加密算法重视自主可控,跨链技术成为研究重点。在应用方面,区块链技术与各行各业加快融合:区块链政务应用在民生办事领域落地,区块链金融应用取得阶段性成果,基于区块链的供应链系统已被用于实际业务中。[2020/4/28]
里面的n代表连续0的个数,该值要小于当前区块难度目标值m,挖到块的条件是前n个比特位全部为0,n越大,难度越大。假设最低难度对应最大目标值为M,则区块难度为:M/m
看过前面课程的朋友应该会有印象,这些全部是区块头中的数据字段。
动态 | 2月ETH区块链上活跃地址数量增加约41%:根据Coinmetrics的网络状况报告,ETH区块链上活跃地址数量在2月增加了约41%。地址数量从236,095增加到320,273。活跃地址数量的增加通常表明用户正在使用区块链,并且越来越多的以太坊交易正在发生。与ETH相比,BTC有效地址仅提高了1%。[2020/2/26]
再来看左边,我们分析一下为什么其中有些是固定而有些是可变的。
1.版本号和前一个区块哈希是固定的,以比特币为例,假设当前比特币区块高度为N,如果某人想挖接下来N+1区块的话,那么这个时候版本号必须是固定的,前一个区块的哈希必须也是固定的。因为在不存在分叉的情况下,当前区块包含上一个区块的哈希值;
也就是N-1区块的哈希值加上N区块数据算出N区块哈希值,然后將N区块哈希值当成N+1区块的的前一区块哈希值。这里有点绕,希望大家多理解一下;
韩国政府科学技术情报通信部许可的首家区块链研究教育院在首尔开院:6月8日,韩国政府科学技术情报通信部许可的首家区块链研究教育院——沃尔顿区块链研究教育院在首尔开院,沃尔顿链教育项目将致力于培养区块链人才、推动区块链技术的发展以及在亚洲的推广。就在昨日,沃尔顿链与时尚星球(FASHION)签署战略合作协议,在品牌、技术、商品溯源等多方面与时尚星球展开深度合作。当晚,沃尔顿链向全球发布主题为“沃尔顿链,链接你的梦想”社区创意大赛,目前已有全球86个国家的社区通过创意作品,最直观地展现出社区心目中的沃尔顿链。据悉,沃尔顿链专注于区块链底层技术研发、创新与应用落地,为众多领域提供行业解决方案,将区块链技术与微小芯片进行结合,实现数据与实物绑定,让物理世界与数字世界无缝链接。[2018/6/8]
2.交易Merkle根是可变的,为什么说可变呢?因为在挖矿的时候,肯定会准备一个打包区块,打包区块形成的时候,矿工会根据自己的需求或根据利益算法,将交易打包进去,最后整理成一个Merkle根;
沃尔顿链中国区发起人:区块链是透明诚信的商业生态系统:据证券时报报道,曾是七匹狼集团有限公司的采购总监,同时也是一名天使投资人,沃尔顿链中国区发起人许芳呈接受采访时告诉记者,“区块链被大众误解的根本原因在于,区块链技术本身缺乏一个被广泛认同的定义共识,也没有哪个国家政府或权威机构给出技术标准,所以在市场上,大家常常把区块链应用的形态,误解为区块链技术本身。比如比特币并不代表区块链,只是区块链技术应用形态当中的一种。”对于沃尔顿链的投资逻辑,许芳呈表示主要有三点:第一,沃尔顿链生态系统是全透明、诚信的、去中心化的商业生态系统。第二,当良性的沃尔顿链生态建立起来以后,存在着各式各样的子链,任何跨子链的数据交互都将创造出新的价值。第三,后续由沃尔顿链团队官方发行的重要子链,如高频流转环节使用的交易子链或销售子链(支付子链用于普通的顾客,销售子链用于所有的商家或企业),将有针对性地适用于电子商务、艺术品流通、企业征信、物流运输、服饰奢侈品、食品及酒类等领域。[2018/2/24]
3.时间戳是可变的,挖矿有个时间范围,在这个时间范围内挖出的矿都为有效,所以在有效时间内的时间是可以任意调节的;
4.难度值在一定周期内是固定的,会随着周期的改变而变化;
5.Nonce是可变的,这里就不展开讲了,忘记的朋友可以翻阅前面的讲解。
在挖矿的时候,到Nonce的时候,由于时间戳和Merkle根都已经经过计算固定了,这时只需要改变Nonce就可以了。此时可以把这7个数据看成一个整体,前面6个数据是X,把X放在哈希函数里面,会出来一个值,比如说Y值。
由于比特币网络里使用的哈希算法是SHA-256,当Y值出来之后,就会得到一个256个由0和1组成的字符串。这个字符串出来之后,它会和X里面的难度值比较大小。
每计算一次,也就是通过了一个Nonce,就会产生一个Y值,Y值会和难度值比较大小,如果Y值小于难度值,此时就找到了一个有效的Nonce,矿也就挖出来了。
生成地址
地址的生成中也用到了哈希算法。从下图可以看到从公钥到比特币地址生成的流程。
第一层:生成公钥;
第二层:两层哈希算法,SHA-265和RIPMD-160;
第三层:然后双层哈希计算,会产生公钥哈希;
第四层:Base58Check编码;
第五层:经过编码,得到一个编码串,这个编码串就是公钥哈希即比特币地址。
形成Merkletree和交易Hash
在默克树树结构和形成交易哈希里面也使用到了哈希算法。
上图的默克树中,最底层有4个叶子节点,最左边HA下面有个Hash,意思是:Tx表示交易,A表示交易编号。
假设现在使用的哈希算法是SHA-256,那么交易产生时,会对HA、HB分别进行哈希计算,会分别得到2个由256个0和1组成的字符串。同理,HC、HD也会得到相应的字符串,这样四个交易会形成总的默克尔根。
区块链
大家都知道在区块链中,每个区块都是一环套一环衔接上去的,就像一个链条一样。我们通过下面的图片,具体分析一下。
从图中可以看出链的顺序是从下往上增长的,最下面块的高度是277314,这个区块里面包含上一个区块的哈希值:0000…0bdf,这里的0000…0bdf是上一个区块区块头的哈希值。
同理,277315区块里面包含的上一区块头哈希值:0000…2249,也是区块277314的区块头哈希值,即:0000…2249。同理277316区块也是这样的情况,这也是我们第一节希望大家多理解的问题。
这样的情况就保证了任何人可以从某一个区块中,找到这个区块里面包含的上一区块的哈希值,也就是其父区块。
现在我们讨论的问题都是针对于区块链没有分叉的一个情况,到后面我们详细分析区块链分叉之后情况又是怎样的。
通过这三个区块我们能发现,从某种程度上来说区块链就是一个哈希链。最新产生的区块通过哈希值指向上一个区块,上一个区块在指向上上一个区块……一直指向创世区块。通过这个关系,这些区块形成了链条,也就是我们常说的区块链。
这是哈希算法在区块链中常用到的具体应用,大家可以预先想一下,为什么区块链中会使用哈希算法,而不是其他算法呢?后面的课程我们会给大家进行解答。
下节预告:什么是哈希
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。