怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈

這篇文章主要介紹“怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈”,在日常操作中,相信很多人在怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)專注于貴南企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。貴南網(wǎng)站建設(shè)公司,為貴南等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

區(qū)塊鏈

區(qū)塊鏈?zhǔn)且粋€(gè)公開的數(shù)字賬本,它按時(shí)間順序記錄比特幣或其他加密貨幣發(fā)生的交易。

更一般的講,區(qū)塊鏈?zhǔn)且粋€(gè)公共數(shù)據(jù)庫,新的數(shù)據(jù)將存儲(chǔ)在一個(gè)被稱為”塊“的容器中,然后 塊會(huì)被添加到一個(gè)不可篡改的鏈,因此被稱為”區(qū)塊鏈“。當(dāng)我們談到比特幣或其他加密貨幣時(shí), 這些數(shù)據(jù)指的是交易記錄。當(dāng)然,你可以將任何類型的數(shù)據(jù)存入?yún)^(qū)塊鏈。

區(qū)塊鏈技術(shù)已經(jīng)催生了全新的、完全數(shù)字化的貨幣,如比特幣和萊特幣,這些貨幣并不是由 中央政府發(fā)行或管理的。這一技術(shù)給那些不認(rèn)可當(dāng)前銀行系統(tǒng)人帶來了新的自由。 區(qū)塊鏈同時(shí)也為分布式計(jì)算帶來了革命性的創(chuàng)新,例如,以太坊區(qū)塊鏈引入了一些有趣的概念, 比如智能合約。

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

我們首先將定義“塊”的數(shù)據(jù)結(jié)構(gòu)。在區(qū)塊鏈中,每個(gè)塊都存儲(chǔ)一個(gè)時(shí)間戳和一個(gè)可選地索引。在SnakeCoin中, 我們將把兩者都存儲(chǔ)起來。為了確保整個(gè)區(qū)塊鏈的完整性,每個(gè)塊都有一個(gè)用于自我標(biāo)識(shí)的哈希。 與比特幣一樣,每個(gè)塊的哈希將是對塊索引、時(shí)間戳、數(shù)據(jù)和前塊哈希計(jì)算出的加密哈希值。其中 你可以在數(shù)據(jù)中保存任何內(nèi)容。

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()

太棒了!現(xiàn)在有了塊的數(shù)據(jù)結(jié)構(gòu),不過我們的目的是實(shí)現(xiàn)一個(gè)區(qū)塊鏈,所以需要將塊添加到一個(gè)鏈中。 如前所述,每個(gè)塊都需要前一個(gè)塊的信息。但是按照這個(gè)說法就會(huì)有一個(gè)問題,如何添加區(qū)塊鏈的第一個(gè)塊? 嗯,鏈中的第一個(gè)塊,或者說創(chuàng)世塊,是一個(gè)特殊的塊。在很多情況下需要手動(dòng)添加或者采用單獨(dú)的 處理邏輯。

下面將創(chuàng)建一個(gè)函數(shù),它的作用就是簡單地返回一個(gè)創(chuàng)世塊。這個(gè)塊的索引為0:

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)建好了創(chuàng)世塊,接下來需要一個(gè)函數(shù),以便在區(qū)塊鏈中生成后續(xù)的塊。這個(gè)函數(shù)將 以鏈中的前一個(gè)塊為參數(shù),生成并返回新塊。當(dāng)新塊的哈希值計(jì)算利用了來自前面塊的信息時(shí), 區(qū)塊鏈的完整性就會(huì)隨著每個(gè)新塊而增加。如果不這樣的話,外部組織就更容易“改變過去”,用他們 偽造的塊來取代鏈中的塊。這一系列的塊哈??梢宰鳛榧用艿淖C據(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ū)塊鏈了!在我們的實(shí)現(xiàn)中,區(qū)塊鏈就是一個(gè)簡單的 Python列表。列表的第一個(gè)元素是創(chuàng)世塊。當(dāng)然,我們還需要添加后續(xù)的塊。因?yàn)镾nakeCoin可以說 是世界上最迷你的區(qū)塊鏈,我們在這里只添加20個(gè)新的塊??梢杂胒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)

下面來測試一下我們的區(qū)塊鏈。

怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈

到此,關(guān)于“怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

分享題目:怎么用python代碼實(shí)現(xiàn)區(qū)塊鏈
分享URL:http://muchs.cn/article24/phoeje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作、電子商務(wù)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)