天天看點

用不到200行的Python代碼實作一個區塊鍊描述互動性:貢獻

原文: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