原文:A Python Implementation of a simple blockchain
翻譯:無阻我飛揚
摘要:本文來自github,描述了如何用少量的Python代碼實作一個簡單的blockchain,以下是譯文。
描述
pysimplechain的實作完全聚焦于哈希賬本功能。它不包含任何進階功能,諸如分布式賬本或者通過工作量證明的一緻性協定。在這個項目中,還會發現“事務”的概念被抽象為一個更通用的“消息”概念,它可以包含任何類型的資料。
是以,這個項目的目标是解釋和澄清什麼是blockchain最核心的結構。項目的意圖不是為了重寫一個進階的blockchain,如比特币或以太坊。
這個blockchain通過包含三個類的simple_chain.py檔案實作。
Message()
類,
Block()
類和
Chain()
類。
message
是基本的資料容器。當增加一個塊時,它被密封,塊中具有辨別它的2個哈希值:有效載荷哈希和塊哈希。每個消息通過哈希指針(
prev_hash
屬性)連結到前一個消息。
validate
消息的方法将確定每個消息的完整性,但不會檢查哈希指針正确與否。這個工作留給在Block()類中的
validate
方法去完成。
block
包含一個接一個地依次連結的1,…,n個消息。當一個
block
添加到
chain
時,它被密封和驗證,以確定消息正确排序,并且哈希指針比對。一旦塊被密封和哈希,它将通過檢查期望值與實際值進行驗證。
chain
包含一個接一個依次連結的1,…,m個塊。可以随時調用
validate
方法來驗證鍊的完整性,它将調用每個塊的驗證方法,一旦驗證不通過,将抛出
InvalidBlockchain
異常。
互動性:
manager()
函數,通過終端/控制台與blockchain互動。基本動作是:
- 添加消息到塊:允許向目前塊添加消息;
- 添加塊到鍊:允許将目前塊添加到鍊,如果它不為空;
- 顯示塊:請求一個索引,如果存在具有該索引的塊,則傳回一些塊屬性;
- 顯示鍊:傳回鍊中每個塊的一些屬性;
- 驗證完整性:如果驗證是完整的,則傳回True,否則終止程式,抛出适當的異常;
- 退出:終止程式并删除區塊鍊。
貢獻
歡迎大家有新的想法:打開/關閉issues,fork repo,通過Pull請求分享你的代碼。
将此項目克隆到您的計算機:
git clone https://github.com/EricAlcaide/pysimplechain