自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用不到50行的Python代碼,構(gòu)建最小的區(qū)塊鏈

開發(fā) 后端
盡管一些人認(rèn)為區(qū)塊鏈?zhǔn)且粋€等待問題的解決方案,但毫無疑問,這種新技術(shù)是計算機的奇跡。但是,區(qū)塊鏈到底是什么呢?在本文中,我將用不到50行的Python2代碼來做一個簡單的區(qū)塊鏈。我稱它為SnakeCoin。

[[211080]]

盡管一些人認(rèn)為區(qū)塊鏈?zhǔn)且粋€等待問題的解決方案,但毫無疑問,這種新技術(shù)是計算機的奇跡。但是,區(qū)塊鏈到底是什么呢?

區(qū)塊鏈

它是比特幣或其他加密貨幣進(jìn)行交易的數(shù)字賬本,賬本按時間順序記錄并對外公開。

在更一般的術(shù)語中,它是一個公共數(shù)據(jù)庫,新數(shù)據(jù)存儲在一個名為塊的容器中,并被添加到一個不可變鏈(后來的區(qū)塊鏈)中添加了過去的數(shù)據(jù)。在比特幣和其他加密貨幣的情況下,這些數(shù)據(jù)是一組交易記錄。當(dāng)然,數(shù)據(jù)可以是任何類型的。

區(qū)塊鏈技術(shù)已經(jīng)催生了新的、完全數(shù)字化的貨幣,如比特幣和萊特幣,這些貨幣并不是由中央政府發(fā)行或管理的。因此為那些認(rèn)為今天的銀行系統(tǒng)是騙局或終將失敗的人帶來了新的自由。區(qū)塊鏈所包含的以太坊技術(shù)對分布式計算進(jìn)行了變革創(chuàng)新,它引入了一些有趣的概念,比如智能合約。

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

首先將定義塊將是什么樣子。在區(qū)塊鏈中,每個塊都存儲一個時間戳和一個索引。在SnakeCoin中,需要把兩者都存儲起來。為了確保整個區(qū)塊鏈的完整性,每個塊都有一個自動識別散列。與比特幣一樣,每個塊的散列將是塊索引、時間戳、數(shù)據(jù)和前塊哈希的加密哈希。數(shù)據(jù)可以是你想要的任何東西。

  1. import hashlib as hasher 
  2.   
  3. class Block: 
  4.   def __init__(self, indextimestamp, data, previous_hash): 
  5.     self.index = index 
  6.     self.timestamp = timestamp 
  7.     self.data = data 
  8.     self.previous_hash = previous_hash 
  9.     self.hash = self.hash_block() 
  10.   
  11.   def hash_block(self): 
  12.     sha = hasher.sha256() 
  13.     sha.update(str(self.index) + 
  14.                str(self.timestamp) + 
  15.                str(self.data) + 
  16.                str(self.previous_hash)) 
  17.     return sha.hexdigest() 

這一步后有塊結(jié)構(gòu),但現(xiàn)在是創(chuàng)建區(qū)塊鏈,所以需要向?qū)嶋H的鏈中添加塊。如前所述,每個塊都需要上一個塊的信息。但是按照這個說法就有一個問題,區(qū)塊鏈的***個區(qū)塊是如何到達(dá)那里的呢?不得不說,***個塊,或者說是起源塊,它是一個特殊的塊。在很多情況下,它是手動添加的,或者有獨特的邏輯允許添加。

下面將創(chuàng)建一個函數(shù)簡單地返回一個起源塊以便產(chǎn)生***個區(qū)塊。這個塊是索引0,它具有任意的數(shù)據(jù)值和“前一個哈希”參數(shù)中的任意值。

  1. import datetime as date 
  2.   
  3. def create_genesis_block(): 
  4.   # Manually construct a block with 
  5.   # index zero and arbitrary previous hash 
  6.   return Block(0, date.datetime.now(), "Genesis Block""0"

現(xiàn)在已經(jīng)創(chuàng)建好了起源塊,接下來需要一個函數(shù),以便在區(qū)塊鏈中生成后續(xù)的塊。這個函數(shù)將把鏈中的前一個塊作為參數(shù),創(chuàng)建要生成的塊的數(shù)據(jù),并使用適當(dāng)?shù)臄?shù)據(jù)返回新塊。當(dāng)新的塊哈希信息來自前面的塊時,區(qū)塊鏈的完整性會隨著每個新塊而增加。如果不這樣做,外部組織就更容易“改變過去”,用全新的方式取代已有的鏈條。這一系列的散列可以作為加密的證據(jù),有助于確保一旦將塊添加到區(qū)塊鏈,它就不能被替換或刪除。

  1. def next_block(last_block): 
  2.   this_index = last_block.index + 1 
  3.   this_timestamp = date.datetime.now() 
  4.   this_data = "Hey! I'm block " + str(this_index) 
  5.   this_hash = last_block.hash 
  6.   return Block(this_index, this_timestamp, this_data, this_hash) 

大部分的工作已經(jīng)完成,現(xiàn)在可以創(chuàng)建區(qū)塊鏈了。在這次的示例中,區(qū)塊鏈本身是一個簡單的Python列表。列表的***個元素是起源塊。當(dāng)然,還需要添加后續(xù)的塊,因為SnakeCoin是最小的區(qū)塊鏈,這里只添加20個新的塊??梢杂胒or循環(huán)來生成新塊。

  1. Create the blockchain and add the genesis block 
  2. blockchain = [create_genesis_block()] 
  3. previous_block = blockchain[0] 
  4.   
  5. # How many blocks should we add to the chain 
  6. after the genesis block 
  7. num_of_blocks_to_add = 20 
  8.   
  9. Add blocks to the chain 
  10. for i in range(0, num_of_blocks_to_add): 
  11.   block_to_add = next_block(previous_block) 
  12.   blockchain.append(block_to_add) 
  13.   previous_block = block_to_add 
  14.   # Tell everyone about it! 
  15.   print "Block #{} has been added to the blockchain!".format(block_to_add.index
  16.   print "Hash: {}\n".format(block_to_add.hash) 

下面來測試一下目前產(chǎn)生的區(qū)塊鏈。

看到了吧,這就是區(qū)塊鏈。如果希望在控制臺中查看更多信息,可以編輯完整的源文件并打印每個塊的時間戳或數(shù)據(jù)。

這就是SnakeCoin要提供的所有東西。為了使SnakeCoin規(guī)模達(dá)到今天生產(chǎn)區(qū)塊鏈的規(guī)模,必須添加更多的功能,比如服務(wù)器層,以跟蹤多臺機器上的鏈變化,以及在給定的時間段內(nèi)限制添加的塊數(shù)量的工作算法。

責(zé)任編輯:龐桂玉 來源: Python開發(fā)者
相關(guān)推薦

2018-01-30 22:07:18

Python區(qū)塊鏈比特幣

2018-07-12 09:51:04

Python代碼對象模型

2020-07-22 11:20:28

網(wǎng)絡(luò)安全信息安全技術(shù)

2019-06-05 15:00:28

Java代碼區(qū)塊鏈

2018-02-06 10:04:59

2018-06-19 08:35:51

情感分析數(shù)據(jù)集代碼

2018-03-19 17:40:10

Python區(qū)塊鏈

2021-12-31 08:56:13

程序員算法代碼

2020-05-06 10:10:06

JavaScript 3D 游戲

2018-01-23 09:17:22

Python人臉識別

2021-03-10 15:49:32

算法數(shù)據(jù)結(jié)構(gòu)前端

2021-07-29 16:58:22

區(qū)塊鏈比特幣數(shù)字貨幣

2021-06-29 07:04:38

爬蟲代碼Python

2018-05-15 10:26:10

區(qū)塊鏈數(shù)字貨幣比特幣

2019-11-20 14:29:57

區(qū)塊鏈人才招聘

2022-01-10 22:52:47

代碼Node.js簽到

2021-09-23 22:40:10

區(qū)塊鏈比特幣技術(shù)

2018-09-27 11:44:39

區(qū)塊鏈

2021-09-18 09:00:00

區(qū)塊鏈應(yīng)用JavaScript

2019-04-18 13:40:31

區(qū)塊鏈分布式賬本數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號