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

詳解python實(shí)現(xiàn)簡(jiǎn)單區(qū)塊鏈結(jié)構(gòu)

 更新時(shí)間:2021年04月25日 11:19:56   作者:凌小皮_177  
區(qū)塊鏈?zhǔn)且环N數(shù)據(jù)結(jié)構(gòu),也是一個(gè)分布式數(shù)據(jù)庫(kù)。這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單區(qū)塊鏈結(jié)構(gòu)的相關(guān)知識(shí),需要的朋友可以參考下

區(qū)塊鏈

比特幣從誕生到現(xiàn)在已經(jīng)10年了,最近接觸到了區(qū)塊鏈相關(guān)的技術(shù),為了揭開其背后的神秘面紗,我就從頭開始構(gòu)建一個(gè)簡(jiǎn)單的區(qū)塊鏈。

從技術(shù)上來看:區(qū)塊是一種記錄交易的數(shù)據(jù)結(jié)構(gòu),反映了一筆交易的資金流向。系統(tǒng)中已經(jīng)達(dá)成的交易的區(qū)塊連接在一起形成了一條主鏈,所有參與計(jì)算的節(jié)點(diǎn)都記錄了主鏈或主鏈的一部分。

一、比特幣內(nèi)部結(jié)構(gòu)

比特幣內(nèi)部結(jié)構(gòu)有四部分:

  1. previous hash: 上一個(gè)區(qū)塊的hash
  2. data:交易數(shù)據(jù)
  3. time stamp:區(qū)塊生成的時(shí)間戳
  4. nonce:挖礦計(jì)算次數(shù)

二、實(shí)現(xiàn)的比特幣結(jié)構(gòu)

  1. index :當(dāng)前區(qū)塊索引
  2. timestamp :該區(qū)塊創(chuàng)建時(shí)的時(shí)間戳
  3. data :交易信息
  4. previous hash: 前一個(gè)區(qū)塊的hash
  5. hash: 當(dāng)前區(qū)塊的hash
  6. nonce : 挖礦計(jì)算次數(shù)

注意:當(dāng)前實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的區(qū)塊鏈結(jié)構(gòu),并不完整。

三、代碼實(shí)現(xiàn)

1.定義區(qū)塊的結(jié)構(gòu)

代碼如下:

"""
區(qū)塊設(shè)計(jì)
"""
import time
import hashlib

class Block:
    # 初始化一個(gè)區(qū)塊
    def __init__(self,previous_hash,data):
        self.index = 0
        self.nonce = ''
        self.previous_hash = previous_hash
        self.time_stamp = time.time()
        self.data = data
        self.hash = self.get_hash()
    # 獲取區(qū)塊的hash
    def get_hash(self):
        msg = hashlib.sha256()
        msg.update(str(self.previous_hash).encode('utf-8'))
        msg.update(str(self.data).encode('utf-8'))
        msg.update(str(self.time_stamp).encode('utf-8'))
        msg.update(str(self.index).encode('utf-8'))
        return msg.hexdigest()
    # 修改區(qū)塊的hash值
    def set_hash(self,hash):
        self.hash = hash

2.創(chuàng)世區(qū)塊構(gòu)造

創(chuàng)世區(qū)塊:沒有前一個(gè)區(qū)塊,這里的previous_hashdata是自己寫死的。

# 生成創(chuàng)世區(qū)塊,這是第一個(gè)區(qū)塊,沒有前一個(gè)區(qū)塊
def creat_genesis_block():
    block = Block(previous_hash= '0000',data='Genesis block')
    nonce,digest = mime(block=block)
    block.nonce = nonce
    block.set_hash(digest)
    return block

這里的mime()函數(shù)是后面的挖礦函數(shù).

3.挖礦函數(shù)定義

代碼如下:

def mime(block):
    """
    挖礦函數(shù)——更新區(qū)塊結(jié)構(gòu),加入nonce值
        block:挖礦區(qū)塊
    """
    i = 0
    prefix = '0000'
    while True:
        nonce = str(i)
        msg = hashlib.sha256()
        msg.update(str(block.previous_hash).encode('utf-8'))
        msg.update(str(block.data).encode('utf-8'))
        msg.update(str(block.time_stamp).encode('utf-8'))
        msg.update(str(block.index).encode('utf-8'))
        msg.update(nonce.encode('utf-8'))
        digest = msg.hexdigest()
        if digest.startswith(prefix):
            return nonce,digest
        i+=1

4.定義區(qū)塊鏈結(jié)構(gòu)

代碼如下:

"""
區(qū)塊鏈設(shè)計(jì)
"""
from Block import *
# 區(qū)塊鏈
class BlockChain:
    def __init__(self):
        self.blocks = [creat_genesis_block()]
    # 添加區(qū)塊到區(qū)塊鏈上
    def add_block(self,data):
        pre_block = self.blocks[len(self.blocks)-1]
        new_block = Block(pre_block.hash,data)
        new_block.index = len(self.blocks)
        nonce,digest = mime(block=new_block)
        new_block.nonce = nonce
        new_block.set_hash(digest)
        self.blocks.append(new_block)
        return new_block

在添加新區(qū)塊到區(qū)塊鏈時(shí),先挖礦在將新區(qū)塊加入?yún)^(qū)塊鏈。

四、代碼運(yùn)行

測(cè)試代碼:

from BlockChain import *
# 創(chuàng)建一個(gè)區(qū)塊鏈
bc = BlockChain()
# 添加區(qū)塊
bc.add_block(data='second block')
bc.add_block(data='third block')
bc.add_block(data='fourth block')
for bl in bc.blocks:
    print("Index:{}".format(bl.index))
    print("Nonce:{}".format(bl.nonce))
    print("Hash:{}".format(bl.hash))
    print("Pre_Hash:{}".format(bl.previous_hash))
    print("Time:{}".format(bl.time_stamp))
    print("Data:{}".format(bl.data))
    print('\n')

運(yùn)行結(jié)果:

區(qū)塊鏈

這里添加了4個(gè)區(qū)塊(包括創(chuàng)世區(qū)塊),處了創(chuàng)世區(qū)塊,每個(gè)區(qū)塊的pre_hash都與前一個(gè)區(qū)塊的hash值相等,這代表區(qū)塊沒有被篡改,數(shù)據(jù)有效。

到此這篇關(guān)于python實(shí)現(xiàn)簡(jiǎn)單區(qū)塊鏈結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)python區(qū)塊鏈結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Excel將數(shù)據(jù)寫入多個(gè)sheet

    Python使用Excel將數(shù)據(jù)寫入多個(gè)sheet

    這篇文章主要介紹了Python使用Excel將數(shù)據(jù)寫入多個(gè)sheet,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 十個(gè)簡(jiǎn)單使用的Python自動(dòng)化腳本分享

    十個(gè)簡(jiǎn)單使用的Python自動(dòng)化腳本分享

    今天小編給大家分享10個(gè)Python高級(jí)腳本,幫助我們減少無謂的時(shí)間浪費(fèi),提高工作學(xué)習(xí)中的效率。文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-05-05
  • python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解

    python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解

    這篇文章主要介紹了python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解,有正在學(xué)習(xí)python的同學(xué)可以跟著小編一起來學(xué)習(xí)下水仙花數(shù)怎么用python計(jì)算吧
    2021-03-03
  • PYTHON壓平嵌套列表的簡(jiǎn)單實(shí)現(xiàn)

    PYTHON壓平嵌套列表的簡(jiǎn)單實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄狿YTHON壓平嵌套列表的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Pandas+Numpy+Sklearn隨機(jī)取數(shù)的實(shí)現(xiàn)示例

    Pandas+Numpy+Sklearn隨機(jī)取數(shù)的實(shí)現(xiàn)示例

    使用Python、pandas、numpy、scikit-learn來實(shí)現(xiàn)隨機(jī)打亂、抽取和切割數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • django 模型中的計(jì)算字段實(shí)例

    django 模型中的計(jì)算字段實(shí)例

    這篇文章主要介紹了django 模型中的計(jì)算字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python網(wǎng)頁(yè)解析器使用實(shí)例詳解

    Python網(wǎng)頁(yè)解析器使用實(shí)例詳解

    這篇文章主要介紹了Python網(wǎng)頁(yè)解析器使用實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python?turtle庫(kù)(繪制螺旋正方形)

    Python?turtle庫(kù)(繪制螺旋正方形)

    這篇文章主要介紹了Python?turtle庫(kù)(繪制螺旋正方形),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python編寫淘寶秒殺腳本

    Python編寫淘寶秒殺腳本

    最近想搶冰墩墩的手辦和鑰匙圈,但是同志們搶的速度太快了,只能利用Python編寫一個(gè)淘寶秒殺腳本了,文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • python 獲得任意路徑下的文件及其根目錄的方法

    python 獲得任意路徑下的文件及其根目錄的方法

    今天小編就為大家分享一篇python 獲得任意路徑下的文件及其根目錄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評(píng)論

清河县| 宁城县| 东方市| 庆城县| 镇巴县| 都江堰市| 金湖县| 策勒县| 华阴市| 淳化县| 海门市| 扬州市| 龙海市| 怀远县| 东阿县| 梧州市| 涟源市| 南澳县| 宁国市| 大厂| 瓮安县| 连州市| 麟游县| 平江县| 巫山县| 新余市| 临海市| 尼木县| 石台县| 威信县| 会昌县| 青海省| 瑞丽市| 光泽县| 花莲县| 利津县| 丰原市| 麦盖提县| 聊城市| 濮阳市| 拜城县|