国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

通過(guò)7個(gè)Python函數(shù)來(lái)解釋區(qū)塊鏈

MrZONT / 2230人閱讀

摘要:所以不用多說(shuō),讓我們看看我們的個(gè)函數(shù)區(qū)塊鏈的核心是函數(shù)。讀取前一個(gè)區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心。以太坊開(kāi)發(fā)教程,主要是針對(duì)和程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。

我想對(duì)于那里的很多人來(lái)說(shuō),區(qū)塊鏈就是這種現(xiàn)象,很難不讓你頭腦發(fā)熱。我開(kāi)始觀(guān)看視頻和閱讀文章,但對(duì)我個(gè)人而言,直到我編寫(xiě)自己的簡(jiǎn)單區(qū)塊鏈,我才真正理解它是什么以及它的潛在應(yīng)用價(jià)值。

我對(duì)區(qū)塊鏈的看法是它是一個(gè)公開(kāi)的加密數(shù)據(jù)庫(kù)。如果你是亞馬遜并且你想使用該技術(shù)來(lái)跟蹤庫(kù)存水平,那么使用區(qū)塊鏈?zhǔn)欠裼幸饬x?可能沒(méi)有,因?yàn)槟愕目蛻?hù)不想花費(fèi)資源來(lái)驗(yàn)證你的區(qū)塊鏈,因?yàn)樗麄冎活櫩粗W(wǎng)站說(shuō)Only 1 left!

我會(huì)讓你考慮未來(lái)的應(yīng)用。所以不用多說(shuō),讓我們看看我們的7個(gè)函數(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ù)。如果沒(méi)有加密,區(qū)塊鏈將易于操作,并且交易將能夠以欺詐方式寫(xiě)入。

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是來(lái)記錄誰(shuí)擁有代幣交易情況。例如,我有10個(gè)代幣,我給1到Medium,然后狀態(tài)state將是下面字典的值。

{‘transaction’: {‘Tom’: 9, ‘Medium’: 1}}

值得注意的是,透支不可能存在。如果現(xiàn)有只有10個(gè)代幣,那么我就不能給某人11個(gè)代幣。以下函數(shù)驗(yàn)證我們嘗試進(jìn)行的交易確實(shí)有效。此外,交易總體上必須平衡。我不能給5個(gè)代幣并讓收件人收到4個(gè)代幣幣,因?yàn)檫@樣可以銷(xiāo)毀和生成代幣。

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ū)塊。讀取前一個(gè)區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心。可以嘗試以欺騙性的方式將看似有效的交易插入到區(qū)塊鏈中,但是解密所有先前的塊在計(jì)算上(幾乎)是不可能的,這就保留了區(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}

下面是一個(gè)小輔助函數(shù)來(lái)檢查前一個(gè)塊的哈希值:

def check_block_hash(block):
    expected_hash = hash_function(block["contents"])

    if block["hash"] is not expected_hash:
        raise

    return

一旦我們將所有東西組合在一起,就有時(shí)間來(lái)創(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

在我們完成之前,必須驗(yàn)證區(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

最后,需要一個(gè)交易功能,它將以上所有內(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個(gè)函數(shù)。我們?nèi)绾闻c它互動(dòng)?好吧,首先我們需要用Genesis Block啟動(dòng)我們的區(qū)塊鏈。這是我們的新代幣(或庫(kù)存等)的開(kāi)始。出于本文解釋說(shuō)明的目的,我會(huì)說(shuō)我是Tom,將從擁有10個(gè)代幣開(kāi)始。

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時(shí)會(huì)發(fā)生什么:

chain_state, block_chain = add_transaction_to_chain(transaction={"Tom": -1, "Medium": 1}, state=chain_state, chain=block_chain)

state更新顯示誰(shuí)擁有多少代幣:

{"Medium": 1, "Tom": 9}

區(qū)塊鏈看起來(lái)像這樣:

[{"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)建了第一個(gè)新交易并將其插入到堆棧頂部。現(xiàn)在,我希望我已經(jīng)激起了你的好奇心,并且有興趣將代碼復(fù)制下來(lái)并使用它。在我看來(lái),這是學(xué)習(xí)新技術(shù)的最佳方式 ——進(jìn)入它。

玩代碼并制作自己的代幣。如果你試圖提供比目前存在的更多代幣會(huì)怎么樣? 如果你繼續(xù)創(chuàng)造新的收款人,會(huì)發(fā)生什么?

你能想到區(qū)塊鏈的未來(lái)應(yīng)用嗎?

======================================================================

分享一些以太坊、EOS、比特幣等區(qū)塊鏈相關(guān)的交互式在線(xiàn)編程實(shí)戰(zhàn)教程:

python以太坊,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。

java以太坊開(kāi)發(fā)教程,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的web3j詳解。

php以太坊,主要是介紹使用php進(jìn)行智能合約開(kāi)發(fā)交互,進(jìn)行賬號(hào)創(chuàng)建、交易、轉(zhuǎn)賬、代幣開(kāi)發(fā)以及過(guò)濾器和交易等內(nèi)容。

以太坊入門(mén)教程,主要介紹智能合約與dapp應(yīng)用開(kāi)發(fā),適合入門(mén)。

以太坊開(kāi)發(fā)進(jìn)階教程,主要是介紹使用node.js、mongodb、區(qū)塊鏈、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn),適合進(jìn)階。

C#以太坊,主要講解如何使用C#開(kāi)發(fā)基于.Net的以太坊應(yīng)用,包括賬戶(hù)管理、狀態(tài)與交易、智能合約開(kāi)發(fā)與交互、過(guò)濾器和交易等。

EOS教程,本課程幫助你快速入門(mén)EOS區(qū)塊鏈去中心化應(yīng)用的開(kāi)發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶(hù)與錢(qián)包、發(fā)行代幣、智能合約開(kāi)發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開(kāi)發(fā)。

java比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Java工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。

php比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制、密鑰與腳本、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能,例如創(chuàng)建地址、管理錢(qián)包、構(gòu)造裸交易等,是Php工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程。

這里是原文

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24334.html

相關(guān)文章

  • 通過(guò)7個(gè)Python函數(shù)來(lái)解釋區(qū)塊

    摘要:所以不用多說(shuō),讓我們看看我們的個(gè)函數(shù)區(qū)塊鏈的核心是函數(shù)。讀取前一個(gè)區(qū)塊的信息,并將其用于將其鏈接到新區(qū)塊。這也是區(qū)塊鏈理念的核心。以太坊開(kāi)發(fā)教程,主要是針對(duì)和程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。 我想對(duì)于那里的很多人來(lái)說(shuō),區(qū)塊鏈就是這種現(xiàn)象,很難不讓你頭腦發(fā)熱。我開(kāi)始觀(guān)看視頻和閱讀文章,但對(duì)我個(gè)人而言,直到我編寫(xiě)自己的簡(jiǎn)單區(qū)塊鏈,我才真正理解它是什么以及它的潛在應(yīng)用價(jià)值。 我對(duì)區(qū)塊鏈的看...

    wangzy2019 評(píng)論0 收藏0
  • 如何利用Python庫(kù)Web3.py和Infura在Windows中設(shè)置托管以太坊節(jié)點(diǎn)

    摘要:第步啟用與以太坊區(qū)塊鏈交互從獲得后。我希望本教程介紹了通過(guò)在操作系統(tǒng)中設(shè)置托管以太坊節(jié)點(diǎn)的基本步驟。這里是原文和中設(shè)置以太坊托管節(jié)點(diǎn) 如果你想與以太坊區(qū)塊鏈進(jìn)行交互以獲取最新區(qū)塊的詳細(xì)信息,可以使用以太網(wǎng)節(jié)點(diǎn)、本地節(jié)點(diǎn)或托管節(jié)點(diǎn)連接到以太坊區(qū)塊鏈的交易信息或發(fā)送交易。由于有許多第三方插件和應(yīng)用程序可用于執(zhí)行此操作,你可能會(huì)認(rèn)為我們?yōu)槭裁葱枰粋€(gè)節(jié)點(diǎn)。如果要部署智能合約或使用腳本自動(dòng)與智...

    jaysun 評(píng)論0 收藏0
  • 如何利用Python庫(kù)Web3.py和Infura在Windows中設(shè)置托管以太坊節(jié)點(diǎn)

    摘要:第步啟用與以太坊區(qū)塊鏈交互從獲得后。我希望本教程介紹了通過(guò)在操作系統(tǒng)中設(shè)置托管以太坊節(jié)點(diǎn)的基本步驟。這里是原文和中設(shè)置以太坊托管節(jié)點(diǎn) 如果你想與以太坊區(qū)塊鏈進(jìn)行交互以獲取最新區(qū)塊的詳細(xì)信息,可以使用以太網(wǎng)節(jié)點(diǎn)、本地節(jié)點(diǎn)或托管節(jié)點(diǎn)連接到以太坊區(qū)塊鏈的交易信息或發(fā)送交易。由于有許多第三方插件和應(yīng)用程序可用于執(zhí)行此操作,你可能會(huì)認(rèn)為我們?yōu)槭裁葱枰粋€(gè)節(jié)點(diǎn)。如果要部署智能合約或使用腳本自動(dòng)與智...

    AlphaGooo 評(píng)論0 收藏0
  • 通過(guò)Python入門(mén)區(qū)塊

    摘要:通過(guò)入門(mén)區(qū)塊鏈本文翻譯自的文章原文地址區(qū)塊鏈可能是繼互聯(lián)網(wǎng)之后最重大和最具突破性的技術(shù)。先不管對(duì)比特幣和其他加密貨幣價(jià)格的瘋狂行情,本文旨在幫助讀者入門(mén)區(qū)塊鏈技術(shù)。 通過(guò)Python入門(mén)區(qū)塊鏈 本文翻譯自 Adil Moujahid 的文章 A Practical Introduction to Blockchain with Python原文地址:http://adilmoujahi...

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

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

0條評(píng)論

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