欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年06月16日 11:40:12   作者:Gerald Nash  
這篇文章主要為大家詳細介紹了用不到50行的Python代碼構(gòu)建最小的區(qū)塊鏈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

譯者注:隨著比特幣的不斷發(fā)展,它的底層技術(shù)區(qū)塊鏈也逐步走進公眾視野,引起大眾注意。本文用不到50行的Python代碼構(gòu)建最小的數(shù)據(jù)區(qū)塊鏈,簡單介紹了區(qū)塊鏈去中心化的結(jié)構(gòu)與其實現(xiàn)原理。

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

區(qū)塊鏈

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

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

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

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

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

import hashlib as hasher

class Block:
 def __init__(self, index, timestamp, data, previous_hash):
 self.index = index
 self.timestamp = timestamp
 self.data = data
 self.previous_hash = previous_hash
 self.hash = self.hash_block()

 def hash_block(self):
 sha = hasher.sha256()
 sha.update(str(self.index) + 
    str(self.timestamp) + 
    str(self.data) + 
    str(self.previous_hash))
 return sha.hexdigest()

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

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

import datetime as date

def create_genesis_block():
 # Manually construct a block with
 # index zero and arbitrary previous hash
 return Block(0, date.datetime.now(), "Genesis Block", "0")

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

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

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

# Create the blockchain and add the genesis block
blockchain = [create_genesis_block()]
previous_block = blockchain[0]

# How many blocks should we add to the chain
# after the genesis block
num_of_blocks_to_add = 20

# Add blocks to the chain
for i in range(0, num_of_blocks_to_add):
 block_to_add = next_block(previous_block)
 blockchain.append(block_to_add)
 previous_block = block_to_add
 # Tell everyone about it!
 print "Block #{} has been added to the blockchain!".format(block_to_add.index)
 print "Hash: {}\n".format(block_to_add.hash) 

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

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

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

作者丨Gerald Nash
翻譯丨黑色巧克力

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Anaconda虛擬環(huán)境配置Python庫與Spyder編譯器的方法

    Anaconda虛擬環(huán)境配置Python庫與Spyder編譯器的方法

    在文章創(chuàng)建Anaconda虛擬Python環(huán)境的方法中,我們介紹了在Anaconda環(huán)境下,創(chuàng)建、使用與刪除Python虛擬環(huán)境的方法,而創(chuàng)建虛擬環(huán)境后,就需要在對應(yīng)的環(huán)境內(nèi)配置各類庫與軟件,本文就對這些操作加以介紹,感興趣的朋友感興趣的朋友一起看看吧
    2024-04-04
  • Python實現(xiàn)一個完整學(xué)生管理系統(tǒng)

    Python實現(xiàn)一個完整學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了如何利用python實現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο蟀妫?,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-01-01
  • 使用PyInstaller?打包配置文件

    使用PyInstaller?打包配置文件

    這篇文章主要介紹了使用PyInstaller?打包配置文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python安裝與基本數(shù)據(jù)類型教程詳解

    Python安裝與基本數(shù)據(jù)類型教程詳解

    這篇文章主要介紹了Python安裝與基本數(shù)據(jù)類型教程詳細講解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 用Python調(diào)用win命令行提高工作效率的實例

    用Python調(diào)用win命令行提高工作效率的實例

    今天小編就為大家分享一篇用Python調(diào)用win命令行提高工作效率的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python逐行讀寫txt文件的實例講解

    python逐行讀寫txt文件的實例講解

    下面小編就為大家分享一篇python逐行讀寫txt文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python:一行代碼,導(dǎo)入Python所有庫

    Python:一行代碼,導(dǎo)入Python所有庫

    在本篇內(nèi)容里小編給大家分享如何用一行代碼,導(dǎo)入Python所有庫,有需要的朋友們可以學(xué)習下,希望能夠給你帶來幫助
    2021-10-10
  • Python調(diào)用Jar包的兩種方式小結(jié)

    Python調(diào)用Jar包的兩種方式小結(jié)

    這篇文章主要介紹了Python調(diào)用Jar包的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • pandas實現(xiàn)按照多列排序-ascending

    pandas實現(xiàn)按照多列排序-ascending

    這篇文章主要介紹了pandas實現(xiàn)按照多列排序-ascending,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python Pygame實現(xiàn)兔子獵人守護城堡游戲

    Python Pygame實現(xiàn)兔子獵人守護城堡游戲

    這篇文章主要介紹了用python來制作的一個守護類小游戲兔子獵人守護城堡,文中的示例代碼介紹得很詳細,感興趣的小伙伴快來跟隨小編一起學(xué)習學(xué)習吧
    2021-12-12

最新評論