成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

50 行代碼構(gòu)建區(qū)塊鏈

Coding01 / 2586人閱讀

摘要:區(qū)塊鏈技術(shù)催生了數(shù)字化的貨幣,如比特幣和,這些貨幣并不是由權(quán)威機(jī)構(gòu)發(fā)行或管理的。在本文中,我用創(chuàng)建一個(gè)簡(jiǎn)單的區(qū)塊鏈。為了幫助確保整個(gè)區(qū)塊鏈的完整性,每個(gè)塊都有一個(gè)值作為標(biāo)識(shí)符。來(lái)看看運(yùn)行結(jié)果全新的區(qū)塊鏈就這樣實(shí)現(xiàn)的。

簡(jiǎn)評(píng):區(qū)塊鏈如今大火大熱,如果你還不知道什么是區(qū)塊鏈,可以通過(guò)這 50 行代碼來(lái)幫助你的理解。

區(qū)塊鏈
在更通用的術(shù)語(yǔ)中,它是一個(gè)公共數(shù)據(jù)庫(kù),在這個(gè)數(shù)據(jù)庫(kù)中,新數(shù)據(jù)存儲(chǔ)在一個(gè)名為 Block 的容器中,并將其添加到一個(gè)不可變鏈中。對(duì)于比特幣和其他加密貨幣,這些數(shù)據(jù)是一組交易。當(dāng)然,數(shù)據(jù)也可以是任何類型。

區(qū)塊鏈技術(shù)催生了數(shù)字化的貨幣,如比特幣和 Litecoin,這些貨幣并不是由權(quán)威機(jī)構(gòu)發(fā)行或管理的。區(qū)塊鏈還像 Ethereum 這樣的技術(shù),革新了分布式計(jì)算,它引入了一些有趣的概念,比如智能合同。

在本文中,我用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的區(qū)塊鏈。我稱它為 SnakeCoin。

首先我們需要定義一個(gè) Block。在區(qū)塊鏈中,每個(gè)塊都存儲(chǔ)了一個(gè)時(shí)間戳和一個(gè)索引。在 SnakeCoin 中,我們將存儲(chǔ)兩者。為了幫助確保整個(gè)區(qū)塊鏈的完整性,每個(gè)塊都有一個(gè) hash 值作為標(biāo)識(shí)符。與比特幣一樣,通過(guò)對(duì) Block 的索引、時(shí)間戳、數(shù)據(jù)做哈希加密得到每個(gè) Block 的哈希值。數(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()

區(qū)塊鏈中我們已經(jīng)定義了 Block,我們需要在實(shí)際的鏈中添加塊。正如我前面提到的,每個(gè) Block 都需要前一個(gè) Block 的信息(區(qū)塊鏈的第一個(gè) Block 稱為起源 Block(genesis block),在很多情況下,它是需要手動(dòng)添加的,或者有獨(dú)特的邏輯把它添加到鏈表頭)。

這里創(chuàng)建一個(gè)函數(shù),它簡(jiǎn)單地返回起源 Block。該塊是索引 0,他的數(shù)據(jù)可以是任意的值。

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)建了一個(gè)起源 Block,我們還需要一個(gè)函數(shù)來(lái)生成塊鏈中的后續(xù) Block。 該函數(shù)將鏈中的前一個(gè) Block 作為參數(shù),創(chuàng)建一個(gè)新的 Block(新的 Block 的 hash 值依賴于前一個(gè) Block 的哈希值) ,并添加到不變鏈表中。 這個(gè)哈希鏈作為加密證明,有助于確保一旦塊被添加到塊鏈中,它不能被替換或刪除。

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)

現(xiàn)在我們可以創(chuàng)建我們的區(qū)塊鏈了,在我們的例子中,區(qū)塊鏈本身就是一個(gè)簡(jiǎn)單的 Python 列表。 列表的第一個(gè)元素是起源 Block(genesis block)。 當(dāng)然,我們需要添加后續(xù)的塊。 因?yàn)?SnakeCoin 是一個(gè)小型的區(qū)塊鏈,所以我們只添加 20 個(gè)新的塊。 我們可以用 for 循環(huán)來(lái)做到這一點(diǎ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: {}
".format(block_to_add.hash) 

來(lái)看看運(yùn)行結(jié)果

全新的區(qū)塊鏈 SnakeCoin 就這樣實(shí)現(xiàn)的 。 當(dāng)然這里只是實(shí)現(xiàn)了區(qū)塊鏈最最基礎(chǔ)部分的代碼, 如果想讓 SnakeCoin 運(yùn)作起來(lái) ,我們必須添加更多的功能,如服務(wù)器層,以跟蹤多臺(tái)機(jī)器上鏈的變化,并提供工作證明算法,以限制在限定時(shí)間內(nèi)允許添加 Block 的數(shù)量。

這項(xiàng)研究由三星,谷歌,F(xiàn)acebook 英特爾和華盛頓大學(xué)資助。研究團(tuán)隊(duì)將于 8 月 2 日在洛杉磯的 SIGGRAPH 會(huì)議上詳細(xì)介紹他們的發(fā)現(xiàn)。

原文:Let’s Build the Tiniest Blockchain

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23922.html

相關(guān)文章

  • 用 Go 構(gòu)建一個(gè)區(qū)塊 ---- Part 1: 基本原型

    摘要:在區(qū)塊鏈中,存儲(chǔ)有效信息的是區(qū)塊。存儲(chǔ)的是前一個(gè)塊的哈希。正是由于這個(gè)特性,才使得區(qū)塊鏈?zhǔn)前踩?。這樣的結(jié)構(gòu),能夠讓我們快速地獲取鏈上的最新塊,并且高效地通過(guò)哈希來(lái)檢索一個(gè)塊。 翻譯的系列文章我已經(jīng)放到了 GitHub 上:blockchain-tutorial,后續(xù)如有更新都會(huì)在 GitHub 上,可能就不在這里同步了。如果想直接運(yùn)行代碼,也可以 clone GitHub 上的教程倉(cāng)...

    ZoomQuiet 評(píng)論0 收藏0
  • Python以太坊區(qū)塊交互將數(shù)據(jù)存入數(shù)據(jù)庫(kù)

    摘要:是一個(gè)用于連接以太坊區(qū)塊鏈的庫(kù)。網(wǎng)絡(luò)執(zhí)行以太坊協(xié)議,該協(xié)議定義節(jié)點(diǎn)彼此之間的交互規(guī)則及網(wǎng)絡(luò)上的智能合約。數(shù)據(jù)庫(kù)設(shè)計(jì)下一步是設(shè)計(jì)數(shù)據(jù)庫(kù)。 關(guān)于區(qū)塊鏈介紹性的研討會(huì)通常以易于理解的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)和銀行分類賬這類故事開(kāi)頭,然后直接跳到編寫(xiě)智能合約,這顯得非常突兀。因此,想象自己走進(jìn)叢林,想象以太坊區(qū)塊鏈?zhǔn)且粋€(gè)你即將研究的奇怪生物。今天我們將觀察該生物,并與其進(jìn)行交互然后將有關(guān)它的所有數(shù)據(jù)收集到一...

    paulli3 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<