区块链概念 That You Must Know 第四期(2)

kakushao · · 2270 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

第四期 挖矿的相关算法(2)

卡酷少

Wechat:13260325501


看过(1)篇,相信你一定对挖矿的机制有了一点了解。那么本篇,我们来一起看一下挖矿中算法。

下面的文章中,如果在文章的前半篇你遇到了不理解的词汇,也许在文章的后半段就会给出答案。最后关于不理解的部分欢迎大家在文章下面留言,我会及时给出答复。

区块链的区块到底是什么?

  • 挖矿是为了生成一个区块,那么区块到底是什么?区块的作用又是什么?一个区块又包含了哪些信息呢?
  • 简单理解的话,一个区块可以理解为一个结构体。我们知道结构体可以存储不同类型的信息,这些信息可以是字符串,可以是数字,也可以是日期。那一个区块里包含了哪些信息呢?这里我们给出一张图来,先来了解一下区块信息有几大类。
  • 图1

image

  • 如图一个区块中信息按类别划分,主要分为的这四大类,这点大家只做概念性了解即可。真正有作用于生成区块的信息,主要是区块头中这几项:
  • index(记录当前是第几个区块)
  • current hash(当前哈希值)
  • previous hash(承接的上一区块的哈希值,可保证区块按时间串联)
  • timestamp(时间戳,记录该区块的生成时间)
  • data(交易详情,详细记录了每笔交易的转出方和收入方,金额及数字签名)
  • nounce(随机数,即全网矿工一起pk计算的的,能满足哈希难度要求的答案)
  • 其中希望大家先对nounce值有个印象。这个nounce值不仅与挖矿有关,也在之后的代码实现中有非常重要的身份。
  • 下图给出一个简单的列表:
  • 图2

image

什么是哈希和哈希值?

  • 为理解挖矿的代码机制,首先解决几个概念。第一个就是“哈希”。
  • 在上一篇挖矿中我们提到了算力。也说到算力就是一台矿机每秒钟能做多少次哈希碰撞。那么,什么是哈希,什么又是哈希碰撞呢?
  • 简单理解的话,哈希就是一个函数。哈希碰撞的本质,就是cpu在随机穷举数值的过程中,不断寻找能够生成匹配现阶段比特币“难度”条件的数值。一旦找到这个数值,那么就产生了一次成功的哈希碰撞。
  • 现在你一定很好奇哈希是一个什么样的值呢?我们通过 ==SHA256== hash算法来了解一下。
  • 这里提供一个网址,感兴趣的同学可以跟我一起做一些测试。

link

  • hello

image

  • helloworld

image

  • hello world

image

  • hello,world

image

  • 测试之后,我们可以发现,哈希函数有一些非常独特的特征:
  1. 任意内容都可以生成哈希值。
  2. 哈希值为十六进制表示的数,且长度固定。
  3. 不同的内容生成不同的哈希值。哪怕非常相似的内容生成的值也完全不同,且无规律可循。
  4. 相同的内容每次都会输出相同的哈希值。
  • 通过对比"hello","helloworld",“hello world”和“hello,world”的输出结果,可以验证验证我们对于哈希算法的总结。感兴趣的同学可以再验证别的数值,你会发现,无论多么微小的差别,都会导致哈希值完全无迹可寻的改变。
  • 也正是哈希值的这些特点,赋予了其加密信息时更高的安全性。

有关挖矿的“难度”

  • 最后一个概念就是挖矿的难度。这里的难度,由浅及深,我们先举个例子来理解它的原理。

image

  • 如图所示,比如我们将一个5位数进行排列组合,分个十百千万位。假如第一个排列组合,我指定万位和千位都是5,其他位数不限;第二个排列组合,我只指定万位为5,那么得到谁的几率大,得到谁的几率小呢?
  • ——答案是第一个概率小,第二个概率大。因为被限定的个数越多,其他可选的可能性也就越少了。
  • 同理,挖矿就是去匹配已经被指定了位数的哈希值。而挖矿的“难度”,就是由被指定位数的多少来决定的。这和被指定的是十六进制下的那个数无关。

image

  • 如上图框内所示,当哈希值难度设定了前四位为“0”的时候,只有当匹配上前四位为“0”的时候,才产生了一次成功的哈希碰撞。如果设定的“0”的个数越多,那么哈希成功的难度也越大,挖矿的难度也就越大。
  • 在比特币最开始的时候,难度是很小的,只有第一位为“0”及碰撞成功。那是的挖矿是非常简单的。而现在随着全网算力的增加,挖矿的难度也大大,现在的哈希难度已经是十几个“0”了。

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:kakushao

查看原文:区块链概念 That You Must Know 第四期(2)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2270 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传