91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現一個仿真區塊鏈

發布時間:2021-07-10 14:43:47 來源:億速云 閱讀:478 作者:Leah 欄目:互聯網科技

這期內容當中小編將會給大家帶來有關Python中怎么實現一個仿真區塊鏈,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1、開發包概述

simwiz.py區塊鏈仿真開發包的主要特點如下:

  • 基于離散事件仿真機制,可以單機模擬包含大量節點的區塊鏈網絡

  • 內置仿真網絡和區塊鏈數據結構,可快速進行共識算法和區塊鏈網絡的仿真實驗

  • 簡潔的API接口,非常容易上手,便于二次開發

simwiz.py運行在Python 3.x環境下,當前版本1.0.0,主要類及關系如下圖所示:

Python中怎么實現一個仿真區塊鏈

simwiz.py的主要代碼文件參見官網說明:http://sc.hubwiz.com/codebag/simwiz-python/ 。

2、使用演示程序

在終端進入simwiz.py開發包目錄,執行如下命令運行內置的演示程序:

~$ cd simwiz.py
~/simwiz.py$ python3 demo.py

演示程序中,4個節點構成的區塊鏈網絡會定期輸出其內部區塊鏈構成,結果如下:

Python中怎么實現一個仿真區塊鏈

可以看到各節點(0 ~ 3)在每個出塊周期(1 ~ 7)都通過共識算法保持了區塊鏈數據的一致。

3、啟動仿真區塊鏈

使用Simulation類來創建仿真實例,并調用其run()方法啟動仿真。例如,下面的代碼創建一個包含4個默認節點的區塊鏈網絡的仿真對象,并執行1000毫秒的仿真:

from simwiz import *                                    # 引入simwiz包  

minters = 4
nodes = [                                               # 創建4個節點
  BlockchainNode(interval=100,minters=minters) 
  for i in range(minters)
]  
net = Network(nodes)                                    # 4個節點組網 
sim = Simulation(net)                                   # 創建仿真對象 

sim.run(1000)                                           # 仿真1秒鐘

4、自定義共識算法的實現

simwiz.py開發包內置的BlockchainNode類采用的共識算法類似于DPoS,即根據時間槽來決定當前的出塊節點。可以通過繼承BlockchainNode并重寫其on_timer方法與on_message方法,實現自定義的共識算法。例如,讓每個節點按預設的概率出塊:

from simwiz import *
import random

class PoxNode(BlockchainNode):
  def __init__(self,prob,interval,minters):
    super.__init__(interval,minters)
    self.prob = prob                                    # 當前節點的出塊概率
    
  def on_timer(self,sim):
    if random.random() < self.prob:
      block = self.blockchain.create_next_block()       # 出塊
      msg = pojo({                                      # 創建區塊消息
        'type': 'block',
        'payload': block
      })
      sim.broadcast(self,msg)                           # 廣播區塊消息
          
  def on_message(self,sim,message):
    if message.type == 'block':                 
      self.blockchain.commit_block(message.payload)     # 提交收到的區塊
    if message.type == 'transaction':
      self.blockchain.cache_tx(message.payload)         # 暫存收到的交易

按概率出塊的區塊鏈共識算法都可以采用這個PoxNode模型來仿真,例如PoW(工作量證明)共識算法,每個節點的出塊概率是與節點算力相對應的,即:節點出塊概率 = 節點算力 / 全網算力

下面的代碼利用PoxNode來仿真一個包含100個節點的PoW網絡:

miners = 100                                            # 100個挖礦節點
prob = 0.01                                             # 按均勻分布采樣每個節點的出塊概率
interval = 100                                          # 出塊周期設置為100毫秒
nodes = [                                               # 創建節點對象
  PoxNode(prob,interval,miners) 
  for i in range(100) 
]
sim = Simulation(Network(nodes))                        # 創建仿真對象  
sim.run(10000)                                          # 執行10秒的仿真

上述就是小編為大家分享的Python中怎么實現一個仿真區塊鏈了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

加查县| 崇义县| 龙陵县| 商河县| 客服| 华池县| 汝南县| 大连市| 偃师市| 田东县| 沐川县| 什邡市| 澄迈县| 南京市| 屯门区| 蒲城县| 太康县| 太湖县| 沙河市| 松潘县| 齐齐哈尔市| 福清市| 资阳市| 连南| 颍上县| 安塞县| 晋中市| 仁化县| 博野县| 嵊泗县| 黄冈市| 天全县| 扶风县| 富川| 任丘市| 抚远县| 望江县| 太和县| 建德市| 分宜县| 盐山县|