最近在學習區塊鏈的相關知識,在懂得原理後通過程式設計實現了乙個簡單的區塊鏈程式,希望對以後的學習有所增益,在這裡要感謝b站up主"是落拓呀"的對於區塊鏈的詳細講解,下面附上相關python**。
import hashlib
import json
from typing import text
# 區塊
class
block
:def
__init__
(self, data, previoushash)
: self.__data = data
self.__previoushash = previoushash
self.__hash = self.compute_hash(
)def
compute_hash
(self)
: s = hashlib.sha256(
) s.update(
str(self.__data + self.__previoushash)
.encode(
'utf-8'))
return s.hexdigest(
)def
set_hash
(self, value)
: self.__hash = value
defget_hash
(self)
:return self.__hash
defset_data
(self, value)
: self.__data = value
defget_data
(self)
:return self.__data
defset_previoushash
(self, value)
: self.__previoushash = value
defget_previoushash
(self)
:return self.__previoushash
defget_all
(self)
: tmp =
return tmp
# 鏈# 生成祖先區塊
class
chain
:def
__init__
(self)
: self.__chain =
[self.big_bang()]
defbig_bang
(self)
: genesis_block = block(
'我是祖先',''
)return genesis_block
defget_latest_block
(self)
:return self.__chain[
len(self.__chain)-1
]# 新增區塊到區塊鏈上
defadd_block_to_chain
(self, new_block)
:# data
# 找到最近乙個block的hash
# 這個hash就是新區塊的precvioushash
new_block.set_previoushash(self.get_latest_block(
).get_hash())
new_block.set_hash(new_block.compute_hash())
defget_chain
(self)
:return self.__chain
defchain_list
(self)
:for i in self.__chain:
print
(i.get_all())
# 驗證這個當前的區塊鏈是否合法
# 當前資料有沒有被修改
# 驗證區塊的previous是否等於previous區塊的hash
defvalidatechain
(self):if
len(self.__chain)==1
: s = hashlib.sha256(
) s.update(self.__chain[0]
.get_data(
).encode(
'utf-8'))
if self.__chain[0]
.get_hash(
)!= s.hexdigest():
return
false
return
true
# 從第二個區塊開始驗證
for i in
range(1
,len
(self.__chain)):
s = hashlib.sha256(
) block_to_validate = self.__chain[i]
# 當前資料有沒有被篡改
s.update(
(block_to_validate.get_data(
)+ block_to_validate.get_previoushash())
.encode(
'utf-8'))
get_hash = block_to_validate.get_hash(
) hexdigest = s.hexdigest(
)if block_to_validate.get_hash(
)!= s.hexdigest():
print
('資料篡改'
)return
false
# 驗證區塊間是否被篡改
previous_block = self.__chain[i -1]
if block_to_validate.get_previoushash(
)!= previous_block.get_hash():
print
('前後區塊鏈結斷裂'
)return
false
return
true
if __name__ ==
'__main__'
: c1 = chain(
) b1 = block(
"轉賬十元",""
) c1.add_block_to_chain(b1)
b2 = block(
"轉賬一百元",""
) b3 = block(
"轉賬二百元",""
) b4 = block(
"轉賬三百元",""
) b5 = block(
"轉賬四百元",""
) b6 = block(
"轉賬五百元",""
) b7 = block(
"轉賬六百元",""
) c1.add_block_to_chain(b2)
c1.add_block_to_chain(b3)
c1.add_block_to_chain(b4)
c1.add_block_to_chain(b5)
c1.add_block_to_chain(b6)
c1.add_block_to_chain(b7)
c1.chain_list(
)print
(c1.validatechain())
# 嘗試篡改這個區塊鏈
c1.get_chain()[
2].set_data(
'轉賬一百個十元'
) c1.get_chain()[
2].set_hash(c1.get_chain()[
2].compute_hash())
print
(c1.validatechain(
))
人生就是在學習中成長,每天堅持學習,把所學的知識記錄下來,堅持學習,收穫更多的知識;感謝生活中每乙個遇到的人,使他們給了你前進的動力。 python 區塊鏈 區塊鏈Python實現
區塊鏈是如同鍊錶的一組記錄。每個區塊含有一些資訊以及與其他區塊關聯的方法。每個區塊有前乙個區塊的雜湊值 時間戳 資料。class block def init self,timestamp,data,previous hash self.timestamp timestamp self.data d...
簡單介紹區塊鏈的聯盟鏈
單群組fisco bcos聯盟鏈 聯盟鏈是區塊鏈裡面的一種,簡介 區塊鏈跟傳統的b s,c s,專案的架構來說不同,1 傳統專案中心化 你付錢 收款 通知店鋪發貨 你確認收貨 把錢打給給店鋪 區塊鏈去中心化 你付款 賣家收款後把東西給你 雙方對外宣稱交易完成 簡單來說就是不需要第三方介入,區塊鏈是全...
簡單區塊鏈的實現(帶POW挖礦系統)
在it界,2018最火的熱詞相必就是區塊鏈了,c 和go是目前最適合區塊鏈開發的兩種語言,所以咱們學go的肯定得學一點區塊鏈的知識,但是區塊鏈涉及太多密碼學,金融學 p2p網路等知識了,從 切入呢,今天我們就從用go實現一條帶有模擬挖礦系統的簡單區塊鏈。三大模組 還是比較簡單清晰的,主要有三個模組,...