小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

編程語言 Python 區塊鏈 數字貨幣 比特幣 編程python新視野 2018-12-15

2018年最火的技術是什麼,毫無疑問是區塊鏈,今年年初區塊鏈橫空出世,其實對於我們碼農來說,除了平時埋頭苦幹,對新技術需要保持一定敏感性!每一種新的技術的出現都和未來的產業發展非常相關,蘊含著巨大的機會,除了幹活還要擴張自己的眼界,對自己大有裨益!

那作為當下最火的語言Python,其實可以幹很多事情,今天我們用Python來簡單的實現一個區塊鏈吧,想想都覺得很酷!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

給大家整理了Python很全面的資料和教程可以下載,

關注轉發私信小編【01】即獲取。

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

01.

什麼是區塊

首先區塊鏈就是一種去中心化的分佈式賬本數據庫,簡單說就是一組區塊組合的鏈條。那麼裡面每一個單元就是區塊:

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

區塊上面有幾個重要的屬性:一個數據data,一個pre_hash和自身的hash:

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

1.我們用hashlib這個庫函數來處理hash計算操作

2.新建一個Block類,來表示區塊,裡面有兩個屬性(一個pre_hash,一個data)

3.這個為了簡便用了類屬性@property裝飾器來除了hash的值,即當我用block.hash=xxx的時候,會系統自動調用這個hash函數。

4.這個hash函數很關鍵,以為你區塊鏈裡面的都是用sha256來加密的,也是安全性比較搞的一種加密方式,我們最後會得到一個十六進制數據字符串值。

區塊中有一個非常特殊,就是創世區塊!它是所有區塊裡面的頭,他是父區塊,因此沒有pre_hash

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

02.

定義一個區塊鏈

我們上面已經定義了區塊,下面來定義一個區塊鏈,把一個一個區塊連起來!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

我們需要再寫一個類,用一個列表把一個一個區塊存起來,形成一個列表鏈!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

1).我們聲明一個BlockChain的類,然後裡面設置一個blocks列表數據結果,用來存放區塊,先把父區塊鏈放進去

2).增加一個add_block函數,用來添加區塊:

  • 先生成一個新的區塊內存
  • 然後添加data和它的hash值
  • 最後把區塊添加到區塊鏈中

03.

實現區塊鏈

我們的區塊和區塊鏈都已經準備好了,是不是有點小興奮,大名鼎鼎的區塊鏈,Python幾十行代碼就模擬出來了,Python確實快速開發的神奇,我們來看一下效果:

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

看我們一共創建了3個區塊:

第一個區塊:是父區塊,沒有pre_hash,只有數據和一串hash碼

第二個區塊:是 "Jack發送1個比特幣給Sam"它的區塊的pre_hash指像前面的父區塊hash碼

第三個區塊:是"Sam發送了2個比特幣給lili"它的區塊的pre_hash指像前面的Jack區塊

04.

區塊鏈的不可篡改

看完前面基本是不是對區塊鏈有了一個感性的認識,那麼區塊鏈最牛逼的地方就是不可篡改,為啥這麼說呢?

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

比如我們修改了中間的一個區塊的內容,會到時它的hash改變,那麼後面的區塊的pre_hash就會和前面的區塊的裡面hash對應不起來!

我們用代碼看一下:

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

我把第二個block裡面的數據改一下,隨便改一下里面的內容。然後我們看一下這個block裡面的hash的變化:

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

因為修改了第二個區塊的內容,裡面hash值也隨著改變,這樣的後面的區塊就無法和前面的區塊的hash對應起來,這就是區塊鏈的不可篡改性!因為是用sha256加密的方法,那怕改動一點點都不行!

好了,上面就是用Python簡單入門區塊鏈,還沒有加入挖礦(工作量證明)的環節,這次通過Python語言本身來理解區塊鏈,不知道大家感覺如何,歡迎留言討論!

文末知識點摘要:99% 會陷入的編程誤區

前天一位讀者在微信上問了我這樣一個問題。

小編告訴你零基礎如何用python來實現一個區塊鏈?就是這麼簡單!

這樣的問題可以衍生出,在學習編程的過程中,那些難以理解的編程概念,我們需要怎麼樣去學習。

每個編程語言都會有它自己的特性,比如 C++ 有指針操作,Java 有類的概念,Python 有字典數據結構。這些語言獨有的特性,也正是它們魅力所在。在學習一門編程語言,起初大家都是從最基礎的語法學起。比如 Python,很多教程在簡單介紹了下 Python 的一些語言特點,就會開始固有的章節「編寫你的第一個 XXX 代碼」,即寫個輸出「hello world」。

隨著進一步的學習,你會遇到更高級的語法。比如 Python 的多線程、正則表達式、匿名函數、裝飾器等等。掌握這些高級語法,能讓你的代碼更加優雅。但對應的也就更加難以理解。大部分人在學習高級語法的時候,都是一頭霧水。看了很多資料,始終還是無法掌握。

概念學習

這時候你已經陷入「概念學習」的誤區。覺得我一定要先把概念學好,學懂,我才能使用的好。以至於到了最後,就像最開始的讀者一樣,越學越抽象,越學越不知所措。

編程原本就是注重實戰的科目,用所學的知識,來解決實際項目。在項目中,磨練已學到的知識。但大部分人卻本末倒置,心想我一定要把編程語法全學好,一個都不能落下。然而這樣的學習效率是非常低下,並且只會越學越迷茫,越學越失去對編程的興趣,最終放棄編程。

項目驅動學習

不要一味的陷入編程語法,要懂的項目驅動學習。你只要稍微把編程基礎知識學習下,然後儘可能多的做項目。在做項目的過程中,肯定會遇到很多困難,也會遇到很多自己不懂的語法。但在項目中遇到的語法,會讓你清楚知道這語法可以做什麼。這就好比,你在打遊戲的時候,買了一件裝備,知道這件裝備很厲害。這時候你在回去看下裝備的介紹,就會明白裝備為什麼那麼厲害。

在項目中學習也是如此,遇到難以理解的地方,這時候在回頭查找相關資料,學習的效率會大幅度的提升。那些晦澀難懂的概念,也就很容易理解。

相關推薦

推薦中...