pow算法解释

PoW,全称Proof of Work,即工作量证明,又称挖矿。大部分公有链或虚拟货币,如比特币、以太坊,均基于PoW算法,来实现其共识机制。即根据挖矿贡献的有效工作,来决定货币的分配。

工作量证明是什么

工作量证明( PoW )通过计算一个数值( nonce ),使得拼揍上交易数据后内容的 Hash 值满足规定的上限。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。

如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。网络中只有最快解谜的区块,才会添加的账本中,其他的节点进行复制,这样就保证了整个账本的唯一性。

假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。

工作量证明的例子

举个例子,给定的一个基本的字符串”Hello, world!”,我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,如果得到的哈希结果(以16进制的形式表示)是以”0000”开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。

"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64
"Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8
"Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7
...
"Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965
"Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6
"Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过这个示例我们对工作量证明机制有了一个初步的理解。

工作量证明的优缺点

优点:完全去中心化,节点自由进出;

缺点:目前bitcoin已经吸引全球大部分的算力,其它再用Pow共识机制的区块链应用很难获得相同的算力来保障自身的安全;挖矿造成大量的资源浪费;共识达成的周期较长,不适合商业应用

通过一个App的演示深入理解区块链运行原理

下载安装

如果没有安装nodejs,需要先安装 nodejs

# Clone this repository
$ git clone https://github.com/seanseany/blockchain-cli

# Go into the repository
$ cd blockchain-cli

# Install dependencies
$ npm install

# Run the app
$ npm start
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行结果:

创建区块

在 blockchian ->后面输入 bc查看创始区块结构。

当一个区块挖矿时都发生了什么?

在 blockchian ->后面输入 mine kongyixueyuan.com 挖矿并创建一个新的模块。

Hash是怎么计算的?

Hash值是一个十六进制固定长度为64位的唯一的标识。

hash值是由indexprevious block hashtimestampblock data 和 nonce 作为输入数据计算而得。

CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)
The SHA256 algorithm will calculate a unique hash, given those inputs. The same inputs will always return the same hash.
  • 1
  • 2

SHA256算法将根据给出的输入数据计算出一个唯一的hash值,只要输入值不变,永远返回相同的结果。

在线演示: 
https://anders.com/blockchain/hash.html

你是否注意到块哈希中的四个前导0?

四个前导0是有效散列的最低要求。 所需的前导0的数量称为难度

下面的方法验证hash难度是否有效。

function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i < b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i >= difficulty;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这就是我们所熟知的工作量证明系统 - Proof-of-Work system

什么是nonce?

nonce是一个用来找到满足条件的hash值的数字。

let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

nonce 值一直迭代,直到 hash 值有效为止。在我们案例中一个有效的hash 值是最少有4个前导0。找到nonce 值以满足合适条件的hash值的过程就叫做挖矿。

随着难度的增加,可能的有效散列数减少。 使用较少可能的有效散列,需要更多的处理能力才能找到有效的散列。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工作量证明算法(Proof of Work)是一种共识算法,它在区块链中起到了重要的作用。Python中可以实现工作量证明算法的一种方法是使用哈希函数和随机数。具体步骤如下: 1. 首先,我们需要定义一个区块的数据结构,其中包含区块的索引、时间戳、交易数据、上一个区块的哈希值和一个随机数(Nonce)。 2. 接下来,我们需要选择一个哈希函数,比如SHA-256,来对区块的数据进行哈希运算。 3. 然后,我们需要设定一个目标值,也称为难度目标。目标值是一个由前导零位数决定的字符串,比如"0000"。我们的目标是找到一个Nonce,使得区块的哈希值满足前导零的要求。 4. 开始挖矿。挖矿的过程就是通过不断尝试不同的Nonce值来计算区块的哈希值,直到找到一个满足难度目标的哈希值为止。 5. 一旦找到一个满足难度目标的哈希值,我们就可以将该区块添加到区块链中,并将其广播给网络中的其他节点。 6. 其他节点会验证该区块的哈希值是否满足难度目标,并进行相应的确认和更新操作。 请注意,Python只是一种编程语言,可以用来实现各种共识算法,包括工作量证明算法。在实际应用中,还需要考虑到其他因素,如难度调整、共识规则等。因此,实现一个完整的Python POW共识算法可能需要更复杂的代码和逻辑。以上只是一个简单的示例,希望能为您提供一些参考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [15个区块链共识算法的开源实现【BFT/Raft/Paxos/Pow/PoS】](https://download.csdn.net/download/weixin_38723027/14887677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【毕设教程】python区块链实现 - proof of work工作量证明共识算法](https://blog.csdn.net/HUXINY/article/details/125848088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [视频教程-共识算法PoW算法及其实现-区块链](https://blog.csdn.net/weixin_28698089/article/details/106512656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值