python簡單區塊鏈模擬

2021-08-20 08:58:25 字數 1913 閱讀 7697

最近學習了一點python,那就試著做一做簡單的程式設計練習。

首先是這個程式設計的指導圖,如下:

對的,類似乙個簡單區塊鏈的模擬。

**如下:

class

dadablockcoin:

#index 索引,timestamp 時間戳,data 交易記錄,self_hash交易hash,last_hash,上個hash

def__init__

(self,idex,timestamp,data,last_hash):

self.idex = idex

self.timestamp = timestamp

self.data = data

self.last_hash = last_hash

self.self_hash=self.hash_dadablockcoin()

defhash_dadablockcoin

(self):

sha = hashlib.md5()#加密演算法,這裡可以選擇sha256,sha512,為了列印方便,所以選了md5

#對資料整體加密

datastr = str(self.idex)+str(self.timestamp)+str(self.data)+str(self.last_hash)

sha.update(datastr.encode("utf-8"))

return sha.hexdigest()

defcreate_first_dadablock

():# 創世區塊

return dadablockcoin(0, datetime.datetime.now(), "love dadacoin", "0")

# last_block,上乙個區塊

defcreate_money_dadablock

(last_block):

# 其它塊

this_idex = last_block.idex + 1

# 索引加1

this_timestamp = datetime.datetime.now()

this_data = "love dada" + str(this_idex) # 模擬交易資料

this_hash = last_block.self_hash # 取得上一塊的hash

return dadablockcoin(this_idex, this_timestamp, this_data, this_hash)

dadablockcoins = [create_first_dadablock()] # 區塊鏈列表,只有乙個創世區塊

nums = 10

head_block = dadablockcoins[0]

print(head_block.idex, head_block.timestamp, head_block.self_hash, head_block.last_hash)

for i in range(nums):

dadablock_add = create_money_dadablock(head_block) # 建立乙個區塊鏈的節點

head_block = dadablock_add

print(dadablock_add.idex, dadablock_add.timestamp, dadablock_add.self_hash, dadablock_add.last_hash)

列印結果如下:

與開頭的指導思路完美契合,雖然只是很簡單的模擬。

CCF CSP 區塊鏈 模擬

只有90分,最後乙個點沒通過,想不明白,放這裡晾著吧,有時間反思一下,大概思路如下 首先建立乙個圖的資料結構來描述它,然後建立乙個以時間為順序的任務表,這個表我們利用map內建的紅黑樹來實現 插入即排序的功能 然後以這個時間序為事件發生順序,按照邏輯模擬就可以了,當然我們會發現同一時刻查詢和更新事件...

python 區塊鏈 區塊鏈Python實現

區塊鏈是如同鍊錶的一組記錄。每個區塊含有一些資訊以及與其他區塊關聯的方法。每個區塊有前乙個區塊的雜湊值 時間戳 資料。class block def init self,timestamp,data,previous hash self.timestamp timestamp self.data d...

python入門區塊鏈技術 區塊鏈教程

區塊鏈 blockchain 技術源於位元幣。在位元幣中,為了保證每筆交易可信並不可篡改,中本聰發明了區塊鏈,它通過後乙個區塊對前乙個區塊的引用,並以加密技術保證了區塊鏈不可修改。隨著位元幣的逐漸發展,人們發現區塊鏈本質上其實是乙個分布式的,不可篡改的資料庫,天生具有可驗證 可信任的特性,它不但可用...