最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python挖礦算力測試程序詳解

 更新時間:2019年07月03日 14:44:29   作者:charles_lun  
這篇文章主要介紹了python挖礦算力測試程序詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

談到比特幣,我們都知道挖礦,有些人并不太明白挖礦的含義。這里的挖礦其實(shí)就是哈希的碰撞,舉個簡單例子:

import hashlib
x = 11
y = 1
#這里可以調(diào)節(jié)挖礦難度,也就是哈希的長度
while hashlib.sha256(f'{x*y}'.encode("utf-8")).hexdigest()[5:7]!="00":
  print(x*y)
  y +=1
print("找到了:",(x*y))

結(jié)果如下:

當(dāng)然比特幣的挖礦要比這個復(fù)雜太多,但是原理差不多,有個大概的認(rèn)知。

關(guān)于節(jié)點(diǎn)的同步,是取整個節(jié)點(diǎn)中最長的區(qū)塊鏈進(jìn)行同步,如圖所示:

有了以上內(nèi)容鋪墊,代碼實(shí)現(xiàn)和理解就容易了,代碼如下:

#挖礦原理與網(wǎng)絡(luò)共識
import datetime
import hashlib
import json
import requests

class Blockchain2:

  def __init__(self):
    self.chain = [] #區(qū)塊鏈列表
    self.nodes = set() #節(jié)點(diǎn)集合
    self.current_tranactions = [] #交易列表
    self.new_block(proof=100,preHash=1) #創(chuàng)建第一個區(qū)塊

  #新建一個區(qū)塊,需要計(jì)算,才能追加
  def new_block(self,proof,preHash = None):
    block={
      "index":len(self.chain)+1,#區(qū)塊索引
      "timestamp":datetime.datetiem.now(),#區(qū)塊時間戳
      "transactions":self.current_tranactions,#區(qū)塊交易記錄集合
      "proof":proof,#算力憑證
      "preHash":preHash or self.hash(self.chain[-1]), #上一塊的哈希
    }
    self.current_tranactions = [] #開辟新的區(qū)塊,初始化區(qū)塊交易記錄
    self.chain.append(block)

  @staticmethod
  def hash(block):
    #處理為json字符串格式的哈希
    block_str = json.dumps(block,sort_keys=True).encode("utf-8")
    return hashlib.sha256(block_str).hexdigest()

  #新增交易記錄
  def new_transaction(self,sender,receiver,amount):
    transaction ={
      "sender":sender,
      "receiver":receiver,
      "amount":amount,
    }

    self.current_tranactions.append(transaction)

    return self.last_block["index"]+1

  @property
  def last_block(self):
    return self.chain[-1]

  #挖礦,依賴上一個模塊,獲取工作量證明,即POW共識機(jī)制
  def proof_of_work(self,last_block):
    last_proof = last_block["proof"]
    last_hash = self.hash(last_block)
    proof = 0

    while self.valid_proof(last_proof,proof,last_hash) is False:
      proof +=1

    return proof

  #校驗(yàn)工作量
  @staticmethod
  def valid_proof(last_proof,proof,last_hash):
    guess = f'{last_proof}{proof}{last_hash}'.encode("utf-8")
    guess_hash = hashlib.sha256(guess).hexdigest()
    return guess_hash[:6] =="000000" #可以調(diào)整計(jì)算難度

  #區(qū)塊一致性,同步算法,
  def resolve_conflicts(self):
    neighbours = self.nodes
    new_chain = None
    max_length = len(self.chain)
    #遍歷所有節(jié)點(diǎn),找出最長的鏈
    for node in neighbours:
      #獲取節(jié)點(diǎn)區(qū)塊鏈信息
      response = requests.get(f'http://{node}/chain')
      if response.status_code ==200:
        length = response.json()["length"]
        chain = response.json()["chain"]

        if length>max_length and self.valid_chain(chain):
          max_length = length
          new_chain = chain

    if new_chain:
      self.chain = new_chain
      return True
    else:
      return False

  #校驗(yàn)區(qū)塊鏈的合法性
  def valid_chain(self,chain):
    last_block = chain[0]
    current_index = 1
    #校驗(yàn)每一個區(qū)塊的prehash,proof合法性
    while current_index <len(chain):
      block = chain[current_index]
      #校驗(yàn)哈希的合法性
      if block["preHash"] != self.hash(last_block):
        return False
      #校驗(yàn)算力的合法性
      if not self.valid_proof(last_block["proof"],block["proof"],block["preHash"]):
        return False
      last_block = block
      current_index +=1
    return True

算力校驗(yàn)和pow共識基本實(shí)現(xiàn)了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文帶你快速掌握Python LightGBM必備知識點(diǎn)

    一文帶你快速掌握Python LightGBM必備知識點(diǎn)

    LightGBM(Light Gradient Boosting Machine)是一種梯度提升樹算法的高效實(shí)現(xiàn),這篇文章為大家整理了十個LightGBM必備知識點(diǎn),希望對大家有所幫助
    2023-06-06
  • Python如何安裝第三方模塊

    Python如何安裝第三方模塊

    在本篇文章里,小編給大家分享的是關(guān)于Python安裝第三方模塊的方法及實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • Python使用Tkinter實(shí)現(xiàn)滾動抽獎器效果

    Python使用Tkinter實(shí)現(xiàn)滾動抽獎器效果

    Tkinter 是 Python 的標(biāo)準(zhǔn) GUI(Graphical User Interface,圖形用戶接口)庫,Python 使用 Tkinter 可以快速地創(chuàng)建 GUI 應(yīng)用程序。這篇文章主要介紹了Python使用Tkinter實(shí)現(xiàn)滾動抽獎器,需要的朋友可以參考下
    2020-01-01
  • python登錄豆瓣并發(fā)帖的方法

    python登錄豆瓣并發(fā)帖的方法

    這篇文章主要介紹了python登錄豆瓣并發(fā)帖的方法,涉及URL模擬登陸及cookie的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • scrapy-redis源碼分析之發(fā)送POST請求詳解

    scrapy-redis源碼分析之發(fā)送POST請求詳解

    這篇文章主要給大家介紹了關(guān)于scrapy-redis源碼分析之發(fā)送POST請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用scrapy-redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python TK庫簡單應(yīng)用(實(shí)時顯示子進(jìn)程輸出)

    python TK庫簡單應(yīng)用(實(shí)時顯示子進(jìn)程輸出)

    這篇文章主要介紹了python TK庫簡單應(yīng)用(實(shí)時顯示子進(jìn)程輸出),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python的垃圾回收機(jī)制深入分析

    Python的垃圾回收機(jī)制深入分析

    這篇文章主要介紹了Python的垃圾回收機(jī)制,有助于深入的理解Python的內(nèi)存分配與回收機(jī)制,需要的朋友可以參考下
    2014-07-07
  • 一行Python3代碼實(shí)現(xiàn)解析地址信息

    一行Python3代碼實(shí)現(xiàn)解析地址信息

    在日常數(shù)據(jù)處理的過程中,有時候拿到手的是完整的地址信息,如果需要從地址信息中解析出相應(yīng)的各級行政單元名稱,方式有很多,而今天要介紹的方式只需要一行代碼即可快速實(shí)現(xiàn),快跟隨小編一起學(xué)習(xí)一下吧
    2022-05-05
  • Pytorch獲取無梯度TorchTensor中的值

    Pytorch獲取無梯度TorchTensor中的值

    這篇文章主要介紹了Pytorch獲取無梯度TorchTensor中的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 解析django的csrf跨站請求偽造

    解析django的csrf跨站請求偽造

    本文主要介紹了解析django的csrf跨站請求偽造,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論

兴海县| 隆林| 甘谷县| 内江市| 靖江市| 闽侯县| 嘉义县| 延吉市| 灵宝市| 兰溪市| 米易县| 潞西市| 陆良县| 特克斯县| 容城县| 普洱| 工布江达县| 吉木萨尔县| 杭锦旗| 墨江| 永兴县| 永新县| 定兴县| 白山市| 益阳市| 南丰县| 收藏| 城固县| 衡阳县| 内乡县| 遂川县| 汉源县| 南京市| 张家界市| 兴国县| 东安县| 隆子县| 虹口区| 富阳市| 辉南县| 固阳县|