摘要:所以不用多說,讓我們看看我們的個函數(shù)區(qū)塊鏈的核心是函數(shù)。讀取前一個區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心。以太坊開發(fā)教程,主要是針對和程序員進行區(qū)塊鏈以太坊開發(fā)的詳解。
我想對于那里的很多人來說,區(qū)塊鏈就是這種現(xiàn)象,很難不讓你頭腦發(fā)熱。我開始觀看視頻和閱讀文章,但對我個人而言,直到我編寫自己的簡單區(qū)塊鏈,我才真正理解它是什么以及它的潛在應(yīng)用價值。
我對區(qū)塊鏈的看法是它是一個公開的加密數(shù)據(jù)庫。如果你是亞馬遜并且你想使用該技術(shù)來跟蹤庫存水平,那么使用區(qū)塊鏈?zhǔn)欠裼幸饬x?可能沒有,因為你的客戶不想花費資源來驗證你的區(qū)塊鏈,因為他們只顧看著網(wǎng)站說Only 1 left!。
我會讓你考慮未來的應(yīng)用。所以不用多說,讓我們看看我們的7個函數(shù)!
def hash_function(k): """Hashes our transaction.""" if type(k) is not str: k = json.dumps(k, sort_keys=True) return hashlib.sha256(k).hexdigest()
區(qū)塊鏈的核心是hash函數(shù)。如果沒有加密,區(qū)塊鏈將易于操作,并且交易將能夠以欺詐方式寫入。
def update_state(transaction, state): state = state.copy() for key in transaction: if key in state.keys(): state[key] += transaction[key] else: state[key] = transaction[key] return state
state是來記錄誰擁有代幣交易情況。例如,我有10個代幣,我給1到Medium,然后狀態(tài)state將是下面字典的值。
{‘transaction’: {‘Tom’: 9, ‘Medium’: 1}}
值得注意的是,透支不可能存在。如果現(xiàn)有只有10個代幣,那么我就不能給某人11個代幣。以下函數(shù)驗證我們嘗試進行的交易確實有效。此外,交易總體上必須平衡。我不能給5個代幣并讓收件人收到4個代幣幣,因為這樣可以銷毀和生成代幣。
def valid_transaction(transaction, state): """A valid transaction must sum to 0.""" if sum(transaction.values()) is not 0: return False for key in transaction.keys(): if key in state.keys(): account_balance = state[key] else: account_balance = 0 if account_balance + transaction[key] < 0: return False return True
現(xiàn)在,我們可以制作我們的區(qū)塊。讀取前一個區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心??梢試L試以欺騙性的方式將看似有效的交易插入到區(qū)塊鏈中,但是解密所有先前的塊在計算上(幾乎)是不可能的,這就保留了區(qū)塊鏈的完整性。
def make_block(transactions, chain): """Make a block to go into the chain.""" parent_hash = chain[-1]["hash"] block_number = chain[-1]["contents"]["block_number"] + 1 block_contents = { "block_number": block_number, "parent_hash": parent_hash, "transaction_count": block_number + 1, "transaction": transactions } return {"hash": hash_function(block_contents), "contents": block_contents}
下面是一個小輔助函數(shù)來檢查前一個塊的哈希值:
def check_block_hash(block): expected_hash = hash_function(block["contents"]) if block["hash"] is not expected_hash: raise return
一旦我們將所有東西組合在一起,就有時間來創(chuàng)建我們的區(qū)塊。我們現(xiàn)在將更新區(qū)塊鏈。
def check_block_validity(block, parent, state): parent_number = parent["contents"]["block_number"] parent_hash = parent["hash"] block_number = block["contents"]["block_number"] for transaction in block["contents"]["transaction"]: if valid_transaction(transaction, state): state = update_state(transaction, state) else: raise check_block_hash(block) # Check hash integrity if block_number is not parent_number + 1: raise if block["contents"]["parent_hash"] is not parent_hash: raise return state
在我們完成之前,必須驗證區(qū)塊鏈:
def check_chain(chain): """Check the chain is valid.""" if type(chain) is str: try: chain = json.loads(chain) assert (type(chain) == list) except ValueError: # String passed in was not valid JSON return False elif type(chain) is not list: return False state = {} for transaction in chain[0]["contents"]["transaction"]: state = update_state(transaction, state) check_block_hash(chain[0]) parent = chain[0] for block in chain[1:]: state = check_block_validity(block, parent, state) parent = block return state
最后,需要一個交易功能,它將以上所有內(nèi)容掛起:
def add_transaction_to_chain(transaction, state, chain): if valid_transaction(transaction, state): state = update_state(transaction, state) else: raise Exception("Invalid transaction.") my_block = make_block(state, chain) chain.append(my_block) for transaction in chain: check_chain(transaction) return state, chain
所以,現(xiàn)在我們有了7個函數(shù)。我們?nèi)绾闻c它互動?好吧,首先我們需要用Genesis Block啟動我們的區(qū)塊鏈。這是我們的新代幣(或庫存等)的開始。出于本文解釋說明的目的,我會說我是Tom,將從擁有10個代幣開始。
genesis_block = { "hash": hash_function({ "block_number": 0, "parent_hash": None, "transaction_count": 1, "transaction": [{"Tom": 10}] }), "contents": { "block_number": 0, "parent_hash": None, "transaction_count": 1, "transaction": [{"Tom": 10}] }, } block_chain = [genesis_block] chain_state = {"Tom": 10}
現(xiàn)在,看看當(dāng)我將一些代幣交給Medium時會發(fā)生什么:
chain_state, block_chain = add_transaction_to_chain(transaction={"Tom": -1, "Medium": 1}, state=chain_state, chain=block_chain)
state更新顯示誰擁有多少代幣:
{"Medium": 1, "Tom": 9}
區(qū)塊鏈看起來像這樣:
[{"contents": {"block_number": 0, "parent_hash": None, "transaction": [{"Tom": 10}], "transaction_count": 1}, "hash": "064d0b480b3b92761f31831d30ae9f01954efaa62371b4b44f11465ec22abe93"}, {"contents": {"block_number": 1, "parent_hash": "064d0b480b3b92761f31831d30ae9f01954efaa62371b4b44f11465ec22abe93", "transaction": {"Medium": 1, "Tom": 9}, "transaction_count": 2}, "hash": "b4ae25f0cc0ee0b0caa66b9a3473e9a108652d53b1dc22a40962fef5c8c0f08c"}]
我們創(chuàng)建了第一個新交易并將其插入到堆棧頂部?,F(xiàn)在,我希望我已經(jīng)激起了你的好奇心,并且有興趣將代碼復(fù)制下來并使用它。在我看來,這是學(xué)習(xí)新技術(shù)的最佳方式 ——進入它。
玩代碼并制作自己的代幣。如果你試圖提供比目前存在的更多代幣會怎么樣? 如果你繼續(xù)創(chuàng)造新的收款人,會發(fā)生什么?
你能想到區(qū)塊鏈的未來應(yīng)用嗎?
======================================================================
分享一些以太坊、EOS、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實戰(zhàn)教程:
python以太坊,主要是針對python工程師使用web3.py進行區(qū)塊鏈以太坊開發(fā)的詳解。
java以太坊開發(fā)教程,主要是針對java和android程序員進行區(qū)塊鏈以太坊開發(fā)的web3j詳解。
php以太坊,主要是介紹使用php進行智能合約開發(fā)交互,進行賬號創(chuàng)建、交易、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和交易等內(nèi)容。
以太坊入門教程,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門。
以太坊開發(fā)進階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實現(xiàn)去中心化電商DApp實戰(zhàn),適合進階。
C#以太坊,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理、狀態(tài)與交易、智能合約開發(fā)與交互、過濾器和交易等。
EOS教程,本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發(fā)。
java比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
php比特幣開發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開發(fā)學(xué)習(xí)課程。
這里是原文
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24334.html
摘要:所以不用多說,讓我們看看我們的個函數(shù)區(qū)塊鏈的核心是函數(shù)。讀取前一個區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心。以太坊開發(fā)教程,主要是針對和程序員進行區(qū)塊鏈以太坊開發(fā)的詳解。 我想對于那里的很多人來說,區(qū)塊鏈就是這種現(xiàn)象,很難不讓你頭腦發(fā)熱。我開始觀看視頻和閱讀文章,但對我個人而言,直到我編寫自己的簡單區(qū)塊鏈,我才真正理解它是什么以及它的潛在應(yīng)用價值。 我對區(qū)塊鏈的看...
摘要:第步啟用與以太坊區(qū)塊鏈交互從獲得后。我希望本教程介紹了通過在操作系統(tǒng)中設(shè)置托管以太坊節(jié)點的基本步驟。這里是原文和中設(shè)置以太坊托管節(jié)點 如果你想與以太坊區(qū)塊鏈進行交互以獲取最新區(qū)塊的詳細(xì)信息,可以使用以太網(wǎng)節(jié)點、本地節(jié)點或托管節(jié)點連接到以太坊區(qū)塊鏈的交易信息或發(fā)送交易。由于有許多第三方插件和應(yīng)用程序可用于執(zhí)行此操作,你可能會認(rèn)為我們?yōu)槭裁葱枰粋€節(jié)點。如果要部署智能合約或使用腳本自動與智...
摘要:第步啟用與以太坊區(qū)塊鏈交互從獲得后。我希望本教程介紹了通過在操作系統(tǒng)中設(shè)置托管以太坊節(jié)點的基本步驟。這里是原文和中設(shè)置以太坊托管節(jié)點 如果你想與以太坊區(qū)塊鏈進行交互以獲取最新區(qū)塊的詳細(xì)信息,可以使用以太網(wǎng)節(jié)點、本地節(jié)點或托管節(jié)點連接到以太坊區(qū)塊鏈的交易信息或發(fā)送交易。由于有許多第三方插件和應(yīng)用程序可用于執(zhí)行此操作,你可能會認(rèn)為我們?yōu)槭裁葱枰粋€節(jié)點。如果要部署智能合約或使用腳本自動與智...
摘要:通過入門區(qū)塊鏈本文翻譯自的文章原文地址區(qū)塊鏈可能是繼互聯(lián)網(wǎng)之后最重大和最具突破性的技術(shù)。先不管對比特幣和其他加密貨幣價格的瘋狂行情,本文旨在幫助讀者入門區(qū)塊鏈技術(shù)。 通過Python入門區(qū)塊鏈 本文翻譯自 Adil Moujahid 的文章 A Practical Introduction to Blockchain with Python原文地址:http://adilmoujahi...
閱讀 1620·2023-04-26 02:43
閱讀 3039·2021-11-11 16:54
閱讀 1361·2021-09-23 11:54
閱讀 1180·2021-09-23 11:22
閱讀 2371·2021-08-23 09:45
閱讀 855·2019-08-30 15:54
閱讀 3106·2019-08-30 15:53
閱讀 3196·2019-08-30 15:53