新聞中心
最近區(qū)塊鏈又開始火起來來啦,翻出一篇我一年前寫的文章,其實(shí)對(duì)于我們碼農(nóng)來說,除了平時(shí)埋頭苦干,對(duì)新技術(shù)需要保持一定敏感性!每一種新的技術(shù)的出現(xiàn)都和未來的產(chǎn)業(yè)發(fā)展非常相關(guān),蘊(yùn)含著巨大的機(jī)會(huì),除了干活還要擴(kuò)張自己的眼界,對(duì)自己大有裨益!

成都創(chuàng)新互聯(lián)公司專注于桓臺(tái)企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開發(fā)。桓臺(tái)網(wǎng)站建設(shè)公司,為桓臺(tái)等地區(qū)提供建站服務(wù)。全流程定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
那作為當(dāng)下最火的語言Python,其實(shí)可以干很多事情,今天我們用Python來簡單的實(shí)現(xiàn)一個(gè)區(qū)塊鏈吧,想想都覺得很酷!
??
??
1.什么是區(qū)塊
首先區(qū)塊鏈就是一種去中心化的分布式賬本數(shù)據(jù)庫,簡單說就是一組區(qū)塊組合的鏈條。那么里面每一個(gè)單元就是區(qū)塊:
??
??
圖片來源于天善學(xué)院
區(qū)塊上面有幾個(gè)重要的屬性:一個(gè)數(shù)據(jù)data,一個(gè)pre_hash和自身的hash:
??
??
1).我們用hashlib這個(gè)庫函數(shù)來處理hash計(jì)算操作
2).新建一個(gè)Block類,來表示區(qū)塊,里面有兩個(gè)屬性(一個(gè)pre_hash,一個(gè)data)
3).這個(gè)為了簡便用了類屬性@property裝飾器來除了hash的值,即當(dāng)我用block.hash=xxx的時(shí)候,會(huì)系統(tǒng)自動(dòng)調(diào)用這個(gè)hash函數(shù)。
4).這個(gè)hash函數(shù)很關(guān)鍵,以為你區(qū)塊鏈里面的都是用sha256來加密的,也是安全性比較高的一種加密方式,我們會(huì)得到一個(gè)十六進(jìn)制數(shù)據(jù)字符串值。
區(qū)塊中有一個(gè)非常特殊,就是創(chuàng)世區(qū)塊!它是所有區(qū)塊里面的頭,他是父區(qū)塊,因此沒有pre_hash
#創(chuàng)世區(qū)塊 #其中第一個(gè)區(qū)塊,也叫創(chuàng)世區(qū)塊,它是一個(gè)特殊的區(qū)塊,沒有父區(qū)塊 def create_genesis_block(): data="Genesis Block",prev_hash="")
左右滑動(dòng)代碼
2.定義一個(gè)區(qū)塊鏈
我們上面已經(jīng)定義了區(qū)塊,下面來定義一個(gè)區(qū)塊鏈,把一個(gè)一個(gè)區(qū)塊連起來!
??
??
我們需要再寫一個(gè)類,用一個(gè)列表把一個(gè)一個(gè)區(qū)塊存起來,形成一個(gè)列表鏈!
??
??
1).我們聲明一個(gè)BlockChain的類,然后里面設(shè)置一個(gè)blocks列表數(shù)據(jù)結(jié)果,用來存放區(qū)塊,先把父區(qū)塊鏈放進(jìn)去
2).增加一個(gè)add_block函數(shù),用來添加區(qū)塊:
- 先生成一個(gè)新的區(qū)塊內(nèi)存
- 然后添加data和它的hash值
- 把區(qū)塊添加到區(qū)塊鏈中
3.實(shí)現(xiàn)區(qū)塊鏈
我們的區(qū)塊和區(qū)塊鏈都已經(jīng)準(zhǔn)備好了,是不是有點(diǎn)小興奮,大名鼎鼎的區(qū)塊鏈,Python幾十行代碼就模擬出來了,Python確實(shí)快速開發(fā)的神奇,我們來看一下效果:
??
??
>> Prev Hash: Data:Genesis Block Hash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3 -------------------------------------------------------------------------------- PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3 Data:Jack send 1 BTC to Sam Hash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524 -------------------------------------------------------------------------------- PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524 Data:Sam send 2 BTC to lili Hash:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872 --------------------------------------------------------------------------------
4.區(qū)塊鏈的不可篡改
看完前面基本是不是對(duì)區(qū)塊鏈有了一個(gè)感性的認(rèn)識(shí),那么區(qū)塊鏈最牛逼的地方就是不可篡改,為啥這么說呢?
??
??
比如我們修改了中間的一個(gè)區(qū)塊的內(nèi)容,會(huì)到時(shí)它的hash改變,那么后面的區(qū)塊的pre_hash就會(huì)和前面的區(qū)塊的里面hash對(duì)應(yīng)不起來!
我們用代碼看一下:
??
??
我把第二個(gè)block里面的數(shù)據(jù)改一下,隨便改一下里面的內(nèi)容。然后我們看一下這個(gè)block里面的hash的變化:
Prev Hash: Data:Genesis Block Hash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3 Valid Block -------------------------------------------------------------------------------- PrevHash:89eb0ac031a63d2421cd05a2fbe41f3ea35f5c3712ca839cbf6b85c4ee07b7a3 Data:Jack send 1.3 BTC to Alice Hash:ec7b877b3a47a74ababf298e047352e8805fed3fa99ad15ab788ec47a70776d0 Valid Block -------------------------------------------------------------------------------- PrevHash:ad3ebab374b25e6f3d4f0f14465ff3f86020ce036b5b538c2a506de800dac524 Data:Sam send 2 BTC to lili Hash:f9ba725838192731e73b8f28b33c88be9798c314ea7a538fc77e80039413b872 Invalid Block --------------------------------------------------------------------------------
因?yàn)樾薷牧说诙€(gè)區(qū)塊的內(nèi)容,里面hash值也隨著改變,這樣的后面的區(qū)塊就無法和前面的區(qū)塊的hash對(duì)應(yīng)起來,這就是區(qū)塊鏈的不可篡改性!因?yàn)槭怯胹ha256加密的方法,那怕改動(dòng)一點(diǎn)點(diǎn)都不行!
名稱欄目:小白都能看懂,用Python來實(shí)現(xiàn)一個(gè)區(qū)塊鏈,就這么簡單
當(dāng)前地址:http://www.fisionsoft.com.cn/article/dhscjgc.html


咨詢
建站咨詢
