当前位置: 首页 > 编程日记 > 正文

PoW工作量证明

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
在这里插入图片描述
PoW是Proof of Work的缩写,即工作量证明的意思。在《拜占庭将军问题》中介绍过,比特币系统中引入了“工作量”的概念,有意降低了信息传递的效率,让矿工必须完成一定的工作量,才能够在全网广播消息。

(孩子第一次为我的文章配图,厉害吧)

以工地的搬砖任务为例,一群工人们(矿工)向火车的车皮(区块)里搬砖,每个工人身边都有一个集装箱,这个集装箱与火车车皮一样大,正好能够装满1000块砖。

工人们只能往集装箱里搬砖,谁先装满集装箱,就把这个集装箱放到车皮里,领取12.5元的工钱(实际上并不是马上拿走,100节车皮之后才能真正取走)。只有第一个搬完的工人能够获得奖励,在这个集装箱放入车皮的同时,其他工人的集装箱里也装了一些砖头了,全部作废,重新搬砖,继续投入到下一节车皮的竞争中。

比特币世界里的矿工(工人)也是这样辛苦,这里的矿工是一堆安装了专门芯片的电脑,它们的工作就是进行HASH计算(准确讲是SHA256,高级搬砖工作),谁先算完,写入一个新区块(车皮),得到奖励的12.5个BTC(发行新币),其它矿工则白忙活,继续进行下一轮的竞争。

因为电脑的计算速度太快,所以要安排上亿次的HASH计算,保证有矿工在10分钟左右能够完成任务。这种工作量,既是一种发行货币的过程,也是一种验证其他人交易的过程,从而保证了整个比特币系统的安全性。

简化的计算过程

假设我有一个区块信息是“abcde",要在其后面补一个随机数,使得HASH结果以0开头。我在“区块链生存训练”饭团里介绍过HASH的作用,HASH的加密特性使得原始数据即使发生极其微小的改变,得到的结果也有巨大不同。

所以我只能一个数一个数地尝试,一直试到随机数5的时候,此时的字符串为”abcde5",SHA256的HASH结果为051f2f…d7b9e1,以0开头,我找到了一个解,我就可以把"abcde5"加到新区块上,拿走12.5个BTC。

区块链正如其名,是一个区块与另一个区块链接起来而成的,一个区块中用于参与工作量计算的主要有三部分数据(为了说明HASH计算的工作量,我对整个计算过程进行了极大地简化,更详细的细节请自行参考《精通比特币》):

1)父区块HASH:用于指向父区块,当一个区块一个区块地链接起来后,想篡改一个区块,会影响子区块,再会影响孙区块,从而带来指数级的巨大计算量,从而使篡改几乎不可能。

2)交易信息指纹:一个区块内通常有几百笔的交易信息,也用HASH算法产生一个指纹(准确地讲是Merkle树,以后再介绍),只占用32个字节。

3)随机数nonce:矿工所做的事就是找这个nonce,通过不断地尝试变化这个nonce,进行上亿次的HASH计算,得到满足要求的结果。

假设父区块HASH为“abc",交易HASH值为”de",不断变化nonce,计算HASH值,假设nonce=5时,满足工作量目标(以一个0开头,这个术语以后再解释),获得到了全球共享大账本的记账权,然后将这个区块广播出去。

其它矿工收到这个区块后,首先要进行验证,验证别人是不是经过了大量计算并满足目标,而这个验证的计算量则非常非常小,0.001秒都不用。

就像前面说的搬砖一样,搬1000块砖的过程非常辛苦,但其它工人只需扫一眼就知道他是否完成了工作量(因为1000块砖正好装满一个集装箱),其它工人一看集装箱放到了车皮上(产生了新区块),则放弃当前的一箱砖,开始新一轮的工作(下一区块的竞争)。

小结:

工作量证明既用于发币,也是验证交易的有效性,保证比特币的安全
计算过程中不断调整nonce,要进行数亿至万亿次的HASH运算
先完成计算的获得记账权,写入一个新区块,向外广播
其它矿工只用非常非常少的计算量就可以完成验证
竞争失败的矿工,取得最新区块信息,开始新一轮竞争
我在5月23日开办了“区块链生存训练”饭团,现在成员超过180人,已经讲解了众多概念:比特币地址、Block区块、区块链、确认、Mining挖矿、矿工费、HASH哈希、矿工、工作量证明、私钥、公钥、交易、钱包、PressOne、ICO等等,并且饭团内还有热烈的讨论。有人预测区块链将是未来的价值互联网的基础协议,想要活在未来,就要尽早学习这些内容。

相关文章:

zookeeper 集群安装

一、ZooKeeper相关概念简介:ZooKeeper是一个开源的、分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服…

python queue 多进程_python中的Queue与多进程(multiprocessing)

最近接触一个项目,要在多个虚拟机中运行任务,参考别人之前项目的代码,采用了多进程来处理,于是上网查了查python中的多进程一、先说说Queue(队列对象)Queue是python中的标准库,可以直接import 引用,之前学习…

postman测试上传文件

输入url:http://127.0.0.1:8081/uploadfile 选择post方式 选择body 选择form-data,text改为file 输入key:file ,value:选择文件 send即可 转载于:https://www.cnblogs.com/shimh/p/6094410.html

区块链资产安全攻略

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 本文从钱包、密码、软件、备份、交易所、习惯几个方面给出一些指引。 钱包 每个钱包在熟练使用之前,请用小额测试。 有条件购买硬件钱…

win10安装docker并结合Idea2018.1部署springboot项目

一、准备工作 1.、工具:win10,idea2018,maven3.5,jdk8 二、win10安装docker 1、win10安装docker:http://www.runoob.com/docker/windows-docker-install.html 2、安装完毕后,点击小鲸鱼,选择set…

在桌面右键菜单,停止工作,并提示“资源管理器停止工作”等情况。

在配置文件中,找到右键管理菜单,然后删除NvCp开头的扩展项有问题,去掉就完事了。转载于:https://www.cnblogs.com/wangfengderizi/p/6094446.html

ue4cmd怎么调用_[UE4,automation]UE4批渲染cmd篇

之前做项目的过程中,有一部分工作是在UE4里制作输出小短片。由于要完成的量比较大,所以研究了一些批渲染的方法。逻辑上跟以前在maya里用batch render差不多,不过UE4这边的设置相对繁琐一点点。本文讲解了在不打开UE4软件的前提下&#xff0c…

区块链将带来怎样的应用?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在上一篇文章中,咱们聊到了区块链技术正在与大数据、云计算、物联网以及人工智能这些技术链接,随时可能碰撞出技术创新的火…

【Spark】Spark2.x版的新特性

一、API 1. 出现新的上下文接口:SparkSession,统一了SQLContext和HiveContext,并且为SparkSession开发了新的流式调用的configuration API 2. 统一了DataFrame和DataSet。DataFrame相当于DataSet[Row],以及DataSet的增强聚合API 3…

python基础主要内容_python基础—python的介绍

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.这是因为计算机不能直接认识并…

Web Serveice服务代理类生成及编译

一、生成代理类 对于web service服务和wcf的webservice服务,我们都可以通过一个代理类来调用。 怎么写那个代理类呢?通过一个工具生成即可!!微软为我们提供了一个wsdl.exe的Web服务描述语言工具,wsdl.exe从 WSDL 协定文…

生成器/迭代器 和 函数的递归

生成器 一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个…

CDN -- 集合

weui https://cdnjs.cloudflare.com/ajax/libs/weui/0.4.3/style/weui.min.css 百度静态资源库 http://cdn.code.baidu.com/转载于:https://www.cnblogs.com/xuange306/p/6102407.html

python清华大学出版社第三章课堂作业的答案_Python程序设计清华大学出版社董付国第3章选择与循环题库.ppt...

3.5 综合运用 例2:输出序列中的元素。 a_list[a, b, mpilgrim, z, example] for i,v in enumerate(a_list): print 列表的第, i1, 个元素是:, v 3.5 综合运用 例3:求1~100之间能被7整除,但不能同时被5整除的所有整数 。 for i in …

以太坊私链入门

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载 目录 背景软件安装与配置 2.1. Ubuntu 2.1.1. 安装 geth 2.1.2. 安装 solc 2.2. Windows 2.3. Mac OS 2.4. 编译安装创世区块 3.1. 初始化创世区块 …

数据结构(十)栈的作用--大数的加法运算

一、大数加法的定义 在Java中,整数类型有四种,byte(8位)、short(16位)、int(32位)、long(64位)。 其中,int类型为32为,也就是说最大的…

分布式技术一周技术动态 2016-11-27

分布式系统实践 1. 大数据时代快速SQL引擎-Impala http://dwz.cn/4G9mvt 摘要: 在Dremel论文发表之后,开源社区涌现出了一批基于MPP架构的SQL-on-Hadoop(HDFS)查询引擎,典型代表有Apache Impala、Presto、Apache Drill、Apache HAWQ等,看上去…

vuerouter3种模式_Vue-router的三种传参方式

第一种传递参数:name传参两步完成name传参并显示在模板中;第一在router/index.js中配置name属性,routes: [{path: /,name: HelloWorld,component: HelloWorld},]第二步在src/App.vue接收{{ $route.name }}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

以太坊的数据结构

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 以太坊被描述为为一个交易驱动的状态机,它在某个状态下接受一些输入后,会确定的转移到一个新的状态。具体来说,…

(转载)虚幻引擎3--9掌握虚幻技术UnrealScript 预处理器

第九章 – UNREALSCRIPT预处理器9.1概述9.2 MACRO(宏)的基础知识指南 9.1 –您的第一个宏9.3具有参数的宏指南 9.2 – MACRO参数9.4内置宏DEFINE IF/ELSE/ENDIF 实例: IF/ELSE/ENDIF的应用 INCLUDE ISDEFINED/NOTDEFINED 示例: 结合使用 …

springboot添加多数据源连接池并配置Mybatis

springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 星期六,那是个晴天,天湛蓝湛蓝的非常干净,仿佛飘过一粒尘埃也能看得清清楚楚,然后就发生…

lua菜鸟教程_Lua 环境安装

Lua 环境安装Linux 系统上安装Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文使用了5.3.0版本进行安装:curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gztar zxf lua-5.3.0.tar.gzcd lua-5.3.0make …

以太坊智能合约Demo

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战demo示例快速入门,用demo例子深入浅出智…

Java学习笔记七——数组工具类Arrays

数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组。若将里面的方法用熟的话&#xff0c;那开发效率会大大提高。下面介绍其中的方法。 List<T> asList(T... a) 作用&#xff1a;将指定数组或数组元素&#xff0c;转换成固定大小的List。…

c++窗口管理系统是什么_优秀的食堂管理系统让你对校园生活更充满希望

面对今年疫情环境下的种种困难&#xff0c;各大高校纷纷根据情况采取不同的措施&#xff0c;应对开学的各种难题。解决返校学生就餐就是一大难点。学校后勤工作人员少之又少&#xff0c;开设的食堂窗口也供不应求。这也直接导致了后勤人员懒散&#xff0c;食堂阿姨给菜“手抖”…

ACM训练小结-2018年6月16日

今天题目情况如下&#xff1a;A题&#xff1a;线段树XOR性质。情况&#xff1a;由于写法问题&#xff0c;调试困难&#xff0c;浪费大量时间。B题&#xff1a;&#xff08;对所有满足i mod pq&#xff0c;求a[i]之和&#xff09;&#xff0c;无修改&#xff0c;直接上n*sqrt(n)…

加密货币的本质

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 去年&#xff0c;比特币暴涨&#xff0c;其他币也像雨后春笋一样冒出来&#xff0c;已经有1000多种了。 很多人都在问&#xff0c;加密货币&#…

「2018山东一轮集训」 Tree

为什么出题人这么毒瘤啊&#xff1f;&#xff1f;&#xff01;&#xff01;一个分块还要带log的题非要出成n<2*1e5。。。。。。。 为了卡过最后两个点我做了无数常数优化&#xff0c;包括但不限于&#xff1a;把所有线段树改成 存差分的树状数组&#xff1b;把树剖求LCA的极…

mysql 表空间收缩_mysql表碎片清理和表空间收缩

mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式)OPTIMIZETABLE [tablename],当然这种方式只适用于独立表空间清除碎片的优点:降低访问表时的IO,提高mysql性能,释放表空间降低磁盘空间使用率OPTIMIZE TABLE ipvacl…

spring security remember me实现自动登录

1 默认策略 在我们自定义的login中增加一个选择框 <input type"submit" value"Login" /> <br/> <br/> <input type"checkbox" valuetrue name"_spring_security_remember_me" />记住密码 <!-- 记住…