1. 程式人生 > >區塊鏈很難嗎? 40行python開發一個區塊鏈

區塊鏈很難嗎? 40行python開發一個區塊鏈

Python 區塊鏈 金融

技術分享圖片


盡管有人認為區塊鏈目前還是個不成熟的解決方案,但它無疑稱得上是計算機發展歷史上的一個奇跡。但是,到底區塊鏈是什麽呢? 我們將通過動手實現一個迷你的區塊鏈來幫你真正理解區塊鏈技術的核心原理。python源代碼保存在Github。

區塊鏈

區塊鏈是一個公開的數字賬本,它按時間順序記錄比特幣或其他加密貨幣發生的交易。

更一般的講,區塊鏈是一個公共數據庫,新的數據將存儲在一個被稱為”塊“的容器中,然後塊會被添加到一個不可篡改的鏈,因此被稱為”區塊鏈“。當我們談到比特幣或其他加密貨幣時,這些數據指的是交易記錄。當然,你可以將任何類型的數據存入區塊鏈。

區塊鏈技術已經催生了全新的、完全數字化的貨幣,如比特幣和萊特幣,這些貨幣並不是由中央政府發行或管理的。這一技術給那些不認可當前銀行系統人帶來了新的自由。區塊鏈同時也為分布式計算帶來了革命性的創新,例如,以太坊區塊鏈引入了一些有趣的概念,比如智能合約。

在本文中,我將用不到50行的Python 2代碼來做一個簡單的區塊鏈。我稱它為SnakeCoin

我們首先將定義“塊”的數據結構。在區塊鏈中,每個塊都存儲一個時間戳和一個可選地索引。在SnakeCoin中,我們將把兩者都存儲起來。為了確保整個區塊鏈的完整性,每個塊都有一個用於自我標識的哈希。與比特幣一樣,每個塊的哈希將是對塊索引、時間戳、數據和前塊哈希計算出的加密哈希值。其中你可以在數據中保存任何內容。

技術分享圖片

太棒了!現在有了塊的數據結構,不過我們的目的是實現一個區塊鏈,所以需要將塊添加到一個鏈中。如前所述,每個塊都需要前一個塊的信息。但是按照這個說法就會有一個問題,如何添加區塊鏈的第一個塊?嗯,鏈中的第一個塊,或者說創世塊,是一個特殊的塊。在很多情況下需要手動添加或者采用單獨的處理邏輯。

下面將創建一個函數,它的作用就是簡單地返回一個創世塊。這個塊的索引為0:

技術分享圖片

現在已經創建好了創世塊,接下來需要一個函數,以便在區塊鏈中生成後續的塊。這個函數將以鏈中的前一個塊為參數,生成並返回新塊。當新塊的哈希值計算利用了來自前面塊的信息時,區塊鏈的完整性就會隨著每個新塊而增加。如果不這樣的話,外部組織就更容易“改變過去”,用他們偽造的塊來取代鏈中的塊。這一系列的塊哈希可以作為加密的證據,有助於確保一旦將塊添加到區塊鏈,它就不能被替換或刪除。

技術分享圖片

大部分的重要工作已經完成,現在可以創建區塊鏈了!在我們的實現中,區塊鏈就是一個簡單的Python列表。列表的第一個元素是創世塊。當然,我們還需要添加後續的塊。因為SnakeCoin可以說是世界上最迷你的區塊鏈,我們在這裏只添加20個新的塊。可以用for循環來生成新塊:


技術分享圖片

下面來測試一下我們的區塊鏈。



技術分享圖片

跑通了!如果希望在控制臺中查看更多信息,可以編輯源文件並打印每個塊的時間戳或塊中的數據。

這就是SnakeCoin的全部內容。為了使SnakeCoin能夠達到生產級區塊鏈的規模,還需要添加更多的功能,比如用來跟蹤多個節點上區塊鏈變化的P2P服務層,以及限制在一定時間內可以添加到鏈中的新塊數量的工作量證明算法。

如果想學習Python,可以加154+725.1666,我可以提供學習方法、學習路徑、學習材料、學習平臺給你。

也歡迎大家訂閱公眾號:Python從程序猿到程序員


區塊鏈很難嗎? 40行python開發一個區塊鏈