日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python构建区块链_用python构建区块链(1)---基本结构

發布時間:2025/3/19 python 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python构建区块链_用python构建区块链(1)---基本结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

背景

比特幣從誕生到現在已經10年了,最近一段時間因為工作原因接觸到了區塊鏈相關的技術,為了揭開其背后的神秘面紗,我們就從頭開始構建一個簡單的區塊鏈。在行動之前我們先看一下比特幣的整體結構.

比特幣內部結構

可以看到比特幣主要有四個部分

previous hash(前一個區塊的hash)

merkle root(默克爾樹根節點,內部存儲交易數據)

timestamp(當前區塊生成的時間)

nonce(曠工計算hash值次數)

transaction_structure.png

我們實現的區塊鏈數據結構(簡單實現并不完整)

index 當前第幾個區塊

timestamp 該區塊創建時的時間戳

data 交易信息

previousHash 前一個區塊的hash

hash 當前區塊的hash

注意點

第一個區塊叫做創世區塊(genesis block),區塊鏈創建的時候默認生產的

這里用的是單純的鏈表,不是用默克爾樹存儲

coding

from hashlib import sha256

//區塊schema

class Block:

def __init__(self,index,timestamp,data,previousHash=""):

self.index = index

self.timestamp = timestamp

self.data = data

self.previousHash = previousHash

self.hash = self.calculateHash()

//計算當前區塊的hash值

def calculateHash(self):

plainData = str(self.index)+str(self.timestamp)+str(self.data)

return sha256(plainData.encode('utf-8')).hexdigest()

def __str__(self):

return str(self.__dict__)

//區塊鏈schema

class BlockChain:

//初始化的時候 創建 創世區塊

def __init__(self):

self.chain = [self.createGenesisBlock()]

//構建創世區塊

def createGenesisBlock(self):

return Block(0,"01/01/2018","genesis block","0")

//獲取最后一個區塊

def getLatestBlock(self):

return self.chain[len(self.chain)-1]

//往區塊鏈里面添加區塊

def addBlock(self,newBlock):

newBlock.previousHash = self.getLatestBlock().hash

newBlock.hash = newBlock.calculateHash()

self.chain.append(newBlock)

def __str__(self):

return str(self.__dict__)

//校驗區塊鏈是不是有效的 有沒有人被篡改

def chainIsValid(self):

for index in range(1,len(self.chain)):

currentBlock = self.chain[index]

previousBlock = self.chain[index-1]

if (currentBlock.hash != currentBlock.calculateHash()):

return False

if previousBlock.hash != currentBlock.previousHash:

return False

return True

myCoin = BlockChain()

myCoin.addBlock(Block(1,"02/01/2018","{amount:4}"))

myCoin.addBlock(Block(2,"03/01/2018","{amount:5}"))

#print block info 打印區塊鏈信息

print("print block info ####:")

for block in myCoin.chain:

print(block)

#check blockchain is valid 檢查區塊鏈是不是有效的

print("before tamper block,blockchain is valid ###")

print(myCoin.chainIsValid())

#tamper the blockinfo 篡改區塊2的數據

myCoin.chain[1].data = "{amount:1002}"

print("after tamper block,blockchain is valid ###")

print(myCoin.chainIsValid())

輸出結果

print block info ####:

{'index': 0, 'timestamp': '01/01/2018', 'data': 'genesis block', 'previousHash': '0', 'hash': 'd8d21e5ba33780d5eb77d09d3b407ceb8ade4e5545ef951de1997b209d91e264'}

{'index': 1, 'timestamp': '02/01/2018', 'data': '{amount:4}', 'previousHash': 'd8d21e5ba33780d5eb77d09d3b407ceb8ade4e5545ef951de1997b209d91e264', 'hash': '15426e32db30f4b26aa719ba5e573f372f41e27e4728eb9e9ab0bea8eae63a9d'}

{'index': 2, 'timestamp': '03/01/2018', 'data': '{amount:5}', 'previousHash': '15426e32db30f4b26aa719ba5e573f372f41e27e4728eb9e9ab0bea8eae63a9d', 'hash': '75119e897f21c769acee6e32abcefc5e88e250a1f35cc95946379436050ac2f0'}

before tamper block,blockchain is valid ###

True

after tamper block,blockchain is valid ###

False

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python构建区块链_用python构建区块链(1)---基本结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。