用python阐释工作量证明(proof of work)

了解比特币的都知道挖矿很耗电,这是因为比特币用到了工作量证明.

工作量证明是指系统为达到某目标而设置的工作度量方法.一开始是用在网络攻防上,大大提高攻击者的计算量,攻击成本也就上去了.

工作量证明需要由工作者和验证者两方共同完成.它有两层含义.

  • 1.工作者需要完成的工作必须有一定的量,这个量由验证者给出.
  • 2.验证者可以迅速的检验工作量是否达标,注意这里的检验完成过程必须简单.

举几个例子

  • A跟B说,你给我还原这个魔方,B还原魔方需要很多时间,而A验证却很快,只需要看一眼就行了.
  • A跟B说,你给我解这个10次方程,过程很麻烦,但是结果容易验证.
  • A跟B说,你给我把这个游戏玩通关,B需要一定时间,而A验证却很快.
  • RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难.
  • ...

在计算机系统中,可以这样设计:

验证者给定一个随机字符串s,工作者必须找出一个数n,使得随机字符串拼上这个数n后的md5结果前面几位都是0.

即md5(s+n)的结果符合验证者的要求.工作者只能不停的穷举,找出这样一个数n.

下面上python代码.

工作方:

#coding=utf-8
from itertools import count
from hashlib import md5
msg = 'randomstring'
for i in count():
    hashid = md5(msg+str(i)).hexdigest()
    if hashid.startswith('0000'):
        print i,hashid
        break

输出39496 00001c48020e444f58a297a0785df5cf,即工作方需要md5()39496次.

而验证方只需要拿工作方给过来的n,进行一次md5即可验证.

即if md5(msg+str(n)).hexdigest()[:4] == ‘0000‘.

因为md5用十六进制表示,每一位出现的概率是16.所以工作者要找到前面4位都是0平均需要16*16*16*16=65536次.

验证者可以根据自身需要来规定前面0的个数来控制工作者的工作量.想要对方耗多点电,那就多加几个0吧.

时间: 2025-01-03 02:26:27

用python阐释工作量证明(proof of work)的相关文章

浅谈无需工作量证明的加密货币

浅谈无需工作量证明的加密货币 Iddo Bentov1,Ariel Gabizon2,Alex Mizrahi (Computer Science Dept., Technion; chromawallet.com) 译者:shylocks ([email protected]) 摘要:本文研究了那些并没有使用 PoW(工作量证明)协议的加密货币.这些协议通常采用 PoS(权益证明)协议,也就是采用了一种使担任验证工作的人获得在系统中相关权限的协议.我们对拥有较多矿工的系统进行了分析.最后,提出

比特币如何挖矿(挖矿原理)-工作量证明

在区块链记账原理 一篇,我们了解到记账是把交易记录.交易时间.账本序号.上一个Hash值等信息计算Hash打包的过程.我们知道所有的计算和存贮是需要消耗计算机资源的,既然要付出成本,那节点为什么还要参与记账呢?在中本聪(比特币之父)的设计里,完成记账的节点可以获得系统给与的一定数量的比特币奖励,这个奖励的过程也就是比特币的发行过程,因此大家形象的把记账称为"挖矿",本文将详细讨论这个过程. 记账工作 由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的个比特币(当前是12.5比特

基于工作量证明的哈希算法实验

实验背景: 哈希函数H:X→Y ,其中,X为定义域,Y为值域,且|X|>|Y|,能够实现任意长度的输入转换成固定长度的输出. 密码学哈希函数H应满足如下的要求: (1) 压缩:x任意长,H(x)固定长: (2) 容易从x计算出 H(x): (3) 抗原像攻击:已知y ∈ Y,要找出x∈X,使得H(x) = y是困难的: (4) 抗第二原像攻击:已知x ∈ X, 找出另一个x' ∈ X,使得H(x')=H(x)是困难的: (5) 抗碰撞性:找出任意两个不同的x, x' ∈ X,使得H(x) = H

第二章 工作量证明和挖矿

概览 工作量证明拼图和难易度 挖矿 难易度共识 时间戳校验 累积难易度 验证测试 小结 概览 本章节我们将会在我们的玩具版区块链的基础上加入工作量证明(POW)的支持.在第一章节的版本中, 任何人都都可以在没有任何工作量证明的情况下添加一个区块到区块链中. 当我们引入工作量证明机制之后,一个节点必须要解开一个有相当计算量的拼图(POW Puzzle)之后,才能往区块链上添加一个新的区块.而去解开该拼图,通常就被称为挖矿. 引入工作量证明机制之后,我们还可以对一个新区块的产出时间作出大致的控制.大

区块链python演示

# -*- coding: utf-8 -*- """ Created on Tue Jan 30 08:46:36 2018 block:每个区块包含属性:索引(index),Unix时间戳(timestamp),交易列表(transactions),工作量证明(稍后解释)以及前一个区块的Hash值. @author: Administrator """ import hashlib import json import requests fr

EOS和以太坊那个区块链平台更好?

显然,你已经听说过两个最受欢迎的智能合约区块链,但想知道EOS与以太坊之中哪个更好?或许你想比较一下两种技术?好吧,你来对了地方,因为我要告诉你你需要知道的一切! 在这个EOS vs Ethereum指南中,我将首先解释每个项目的基础知识,然后概述每个区块链的执行情况.这将包括交易时间,交易费用和可扩展性等内容. 之后,我将简要介绍如何在没有第三方的情况下验证交易.这将包括以太坊使用的工作量证明(Proof of Work)与EOS使用的股份授权证明(Delegated Proof of Sta

MD5和SHA-1

MD5和SHA-1都是我们耳熟能详的术语了,很多人可能知道他们跟加密有关系,但是他们是怎么做到加密的,他们各自的特点又是什么.我来简单的讲一讲. MD5和SHA-1都被称作哈希(Hash)函数,用过Java语言的人对这个术语应该相当熟悉.Java类库里的Object类定义了hashCode这个函数,但是java的概念略有不同.正式的哈希函数的定义是"把任意长度的数据计算成固定长度的数据".也就是说函数的输入是任意长的,输出总是固定长度的.MD5和SHA-1是两种加密用哈希函数,MD5的

共识机制

联邦拜占庭协议/ Federated Byzantine Agreement / FBA 联邦拜占庭协议的主要特性是去中心化和任意行为容错,通过分布式的方法,达到法定人数或者节点足够的群体能达成共识,每一个节点不需要依赖相同的参与者就能决定信任的对象来完成共识. 来源:<区块链行业词典>-维京研究院.甲子智库 授权拜占庭容错算法/ Delegated Byzantine Fault Tolerance / dBFT dBFT,是基于持有权益比例来选出专门的记账人(记账节点),然后记账人之间通过

区块链的相关名词有哪些?星光区块链

区块链的相关名词有哪些?随着区块链这个名词越来越火,现在有很多人都去了解区块链技术是怎样的?但有一些人因为不知道它相关名词的意思,陷入一个似懂非懂的状态.为了使大家更加深入的了解区块链技术,下面就让星光区块链来告诉大家一些常用的区块链的相关名词有哪些?它们是什么意思?-:半衰期来源于比特币的激励机制,即为矿工每验证一个区块即可得到的奖励.从最开始的50BTC,每四年减半,目前是12.5BTC,已经历过2次半衰(50BTC-->25BTC-->12.5BTC). 二:.分叉指向同一个父块的2个区