专栏首页ShaoYLPow挖矿流程

Pow挖矿流程

Pow挖矿流程

POW即工作量的证明,主要特征是客户端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查出客户端是不是做了相应的工作。
Pow挖矿即不断接入新的Block延续Block Chain的过程。
  • 当某个节点提供出一个合理的Block Hash值,验证方能简单证明该节点确实经过了大量的尝试计算。一个符合要求的Block Hash由N个前导零构成,零的个数取决于网络的难度值。Block Hash值的计算是使用“blockchain”,在字符串后面加上nonce的整数值串。nonce是随机数,不停地更换尝试,才能计算得到N个0开头的hash值。在“blockchain”+nonce进行SHA256哈希运算,如果得到哈希结果(以十六进制表示)是以若干个0开头,则验证通过。0 的个数越多,计算难度越大,比如要寻找4个前导0的哈希值,预期就要大概进行2^16尝试。
  • 任何一个节点的POW 证明通过,生成一个新的区块并写入区块链,都必须解出比特币网络的PoW的题目。解出比特比网络PoW题目关键3个要素是:工作证明函数、区块和难度值。工作证明函数、区块和难度值。
    • 工作量证明函数是计算方法。在比特币系统使用SHA256作为工作量证明函数。
    • 难度值决定大约需要经过多少次哈希运算产生一个合法区块。在全网算力不断变化,需要维持平均10分钟出一个区块,难度值必须根据全网算力的变化进行调整。难度调整是每个完整节点中独立自动发生。每2016个区块,所有节点都会按统一公式自动调整难度,调整公式:新难度值=旧难度值*(过去2016个区块花费时长/20160分钟)
  • POW 证明通过产生Block Chain首先将数个字段包含nonce随机数和时间戳每秒变化一次合并成一块数据,然后对这块数据进行双SHA256运算。
  • Block Chain是节点计算符合要求的前N个零的hash结果,Block的Nonce 是不停是尝试计算,找到合理的hash,才能打包Block,装入block meta信息,然后产生交易数据,对外广播新的block,其他节点验证通过,链接至Block Chain,主链高度加一,然后切换至新block后面挖矿。由于hashPrevBlock字段的存在,使得大家总是在最新的block后面开挖,
  • 从block hash算法推断合理的block并不是唯一的,同一高度存在多个block的可能性。那么,当同一个高度出现多个时,主链即出现分叉(Fork)。遇到分叉时,网络会根据下列原则选举出Best Chain:
    • 不同高度的分支,总是接受最高(即最长)的那条分支
    • 相同高度的,接受难度最大的
    • 高度相同且难度一致的,接受时间最早的
    • 若所有均相同,则按照从网络接受的顺序
    • 等待Block Chain高度增一,则重新选择Best Chain
  • 分支博弈
    • 挖矿也会为了不惜任何手段获取利益
    • 如果所有节点均独自挖矿不理会其他节点,并将所得收益放入自己口袋,就会出现一个节点挖一个分支的结果。由于机器的配置总是有差别的,那么算力最强的节点挖得的分支必然是最长的,如果一个节点的分支不是最长的,意味其收益存在不被认可的风险(即零收益)。为了降低、逃避此风险,一些节点肯定会联合起来一起挖某个分支,试图成为最长的分支或保持最长分支优势。
    • 一旦出现有少量的节点联合,那么其他节点必然会效仿,否则他们收益为零的风险会更大。于是,分支迅速合并汇集,所有节点都会选择算力更强的分支,只有这样才能保持收益风险最小。最终,只会存在一个这样的分支,就是主干分支(Best/Main Chain)。
    • 对于不诚实节点来说,结局是无奈的:能且只能加入主干挖矿。不加入即意味被抛弃,零收益;加入就是老实干活,按占比分成。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安卓创建第一个工具类

    用户1941540
  • iOS-UI控件之UITableView(一)

    用户1941540
  • 区块链:定义未来金融与经济新格局

    用户1941540
  • Net操作配置文件(Web.config|App.config)通用类

    一、Net操作web.config通用类(代码如下): using System; using System.Configuration; using Syst...

    Java中文社群_老王
  • 单体和微服务的流水线有哪些不同?

    “The more things change; the more things stay the same.”

    CNCF
  • 总结:常见算法工程师面试题目整理(二)

    答: boost的核心思想不同于bagging,它在基于样本预测结果对照与真实值得差距,进行修正,再预测再修正,逐步靠近正确值。

    sladesal
  • 最全常见算法工程师面试题目整理(二)

    接着上回写的《最全常见算法工程师面试题目整理(一)》,继续填接下来的坑。 11boost算法的思路是什么样的?讲一下你对adaboost 和 gbdt的了解? ...

    用户1332428
  • 漏洞复现 | 越权删除用户信息

    这两天一直在找自己搭建靶场的漏洞,通过群里小伙伴与老师给的提示,终于找到了这个漏洞。

    TeamsSix
  • numpy.hstack

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • 微信小程序开发之前期需求研讨

    接下来要做一个 个人的小程序,名称为:申霖 - 博客,微信小程序账号已经注册了,前期的准备工作也都做好了,下面来说一下产品的设计吧!

    申霖

扫码关注云+社区

领取腾讯云代金券