區塊鏈研究實驗室 | 初學者用Python搭建區塊鏈

買賣虛擬貨幣

最好的學習方法是透過模仿別人,從而學會再最佳化迭代。如果你是第一次編碼區塊鏈,可以跟我一起學習。

迄今為止,選擇哪種語言和使用哪種直譯器來搭建區塊鏈專案的過程是這一努力中最困難的部分。之所以選擇Python,是因為它對初學者來說很簡單,並且對於高階編碼同時有效。

1.環境配置

我下載了Python 3.9與PyCharm,PyCharm介面簡單,適用於所有級別。我嘗試編寫簡單的命令,直到對PyCharm滿意為止。現在,可以構建一個區塊鏈專案了。

2.搭建實戰

如果你是第一次編碼,我強烈建議你跟著影片或文章教程一起學習。它幫助我掌握了自己在寫什麼以及為什麼要寫它。

首先,我匯入了hashlib和datetime,讓我們分別計算雜湊和時間戳塊。

匯入是將程式碼從一個模組傳輸到另一個模組的修改。如果沒有datetime匯入,我的區塊鏈將無法處理時間戳,或者如果沒有hashlib匯入,則無法建立雜湊。

區塊鏈包含兩個類:Block類和Blockchain類。使用Block類,新增到區塊鏈的每個塊都具有相同的模型。

積木類

該塊必須包含以下屬性:

  • 塊的編號,其設定為0,因為它是鏈中的第一個塊,稱為Genesis塊資料,設定為無

  • 接下來,設定為無。這充當指向下一個塊的指標,該塊繼續保持連結的趨勢。

  • 雜湊,設定為無。區塊的雜湊至關重要,因為它是加密技術的一部分,使區塊鏈變得如此安全和不可變。

  • 隨機數,設定為0。隨機數是一遍又一遍地迭代直到找到“ Golden Nonce”的隨機整數。在工作量證明中,礦工競相首先找到合適的雜湊。隨機數變化多次,直到它有助於生成正確的雜湊。這樣就完成了對塊的驗證,並且可以將塊新增到鏈中。

  • 前一個雜湊,設定為0x0。儲存前一個區塊的雜湊值會使區塊鏈不可變,因為更改一個區塊的雜湊值會影響所有後續區塊。

  • 時間或時間戳記,描述了交易發生並用於同步網路中所有塊的時間。

所述塊類,其確定標準加入到鏈中的每個塊

當我們建立一個塊時,我們儲存它的資料。建構函式init初始化類的屬性。自身和資料表示將包含在物件(塊)中的內容。

雜湊

下一步是新增雜湊函式,該函式計算塊的雜湊。

在現時的資料,在前面的雜湊的時間戳和塊編號放入一個字串,並執行透過SHA-256的功能。SHA-256是通常用於區塊鏈的密碼雜湊演算法。“ h ”是使用SHA-256的變數。因為我在程式碼的開頭匯入了hashlib,所以可以使用SHA-256。雜湊函式中所有元件的總和將建立塊的雜湊,當建立新塊時,該雜湊將新增到雜湊欄位中。

圖片的最後一行告訴你將在輸出中顯示的內容或列印的內容。在這種情況下,輸出將顯示塊的雜湊值和塊編號。

區塊鏈類

下一步是建立程式碼的第二個類:Blockchain類。區塊鏈類包括:

  • 難度設定為20。透過增加難度,我們有效地減小了目標範圍。減小目標範圍將使挖掘區塊變得更加困難,這在處理具有許多節點來查詢可接受的雜湊的網路時非常有用。

  • 最大隨機數,設定為2的32的冪,這是可以儲存在32位數字中的最大數字。隨機數必須小於要接受的目標數。

  • 目標數,將2設定為256的冪減去難度。在這種情況下,難度為20。

區塊鏈中的第一個塊是Genesis塊,如第34行所示。現在,我完全陷入了下一行程式碼:dummy = head = block。任何連結列表的開始都稱為head。由於連結列表的開頭是Genesis塊,因此我們將其記為head = block。^ h H但是,僅此還不夠具體, -在Python中,物件是透過引用傳遞。然後,head和block會指向同一件事。必須在head變數之前寫入一個隨機變數(在本例中為dummy),以告訴計算機head並不與block指向同一物件。

新增塊

我們將繼續這樣的想法,即區塊鏈是add函式的連結串列,用於將塊新增到鏈中。

藉助雜湊,區塊鏈將其作為連結串列的形狀。雜湊將塊繫結在一起,使其不可變。前一雜湊(線39)必須目前在列表的頂部被設定成等於該塊。然後,將新塊設定為等於當前塊加一,如程式碼第三行所示。

最後兩行有助於形成區塊鏈的形狀。如“ self.block.next =塊”所示,每個塊都有指向下一個塊的指標,因此下一個指標被設定為塊。這會將塊新增到列表的末尾。下一行“ self.block = self.block.next”將指標向前移動以繼續向列表末尾新增塊的趨勢。

礦業挖掘

接下來,我新增了一個挖掘功能。我使用了工作量證明共識機制,例如比特幣。為了將塊新增到鏈中,節點嘗試不同的隨機數,直到發現雜湊小於目標範圍。

46行開始迴圈。首先,設定一些猜測準則(範圍),即從0到最大隨機數。透過檢查當前塊的雜湊值是否小於或等於目標,它在第47行繼續。雜湊值必須在Python中轉換為整數,因此必須轉換為int。如果雜湊值低於目標值,則該過程繼續,並且可以新增該塊(第48行)。接下來,列印塊,最後,我們暫停一下開採。但是,如果雜湊值不小於目標數,則將1加到隨機數上,然後重試。

我們以在第56行開始的迴圈結束程式碼。它計算10個隨機塊。你可以試一下數字,但是它始終會停在你插入的整數上。

第60行提示列印10個塊,你就可以看到它的實際效果。僅用61行,你就建立了一個可以生成塊,計算雜湊並將其放在一起的區塊鏈。

作者:鏈三豐,來源:區塊鏈研究實驗室

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;