chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過(guò)這7個(gè)函數(shù)來(lái)探索區(qū)塊鏈

C語(yǔ)言專(zhuān)家集中營(yíng) ? 來(lái)源:工程師曾玲 ? 2019-02-02 14:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我想對(duì)很多人來(lái)說(shuō),區(qū)塊鏈是一種很難理解的技術(shù),雖然我也看了很多視頻和文章,但從我個(gè)人角度來(lái)講,直到我開(kāi)始寫(xiě)一些簡(jiǎn)單的區(qū)塊鏈應(yīng)用,我才真正理解了它是什么以及它的潛在應(yīng)用。

我對(duì)區(qū)塊鏈的看法是,它是一個(gè)公開(kāi)的加密數(shù)據(jù)庫(kù)。舉個(gè)例子,亞馬遜也許想利用這種技術(shù)來(lái)跟蹤庫(kù)存水平,那么使用區(qū)塊鏈?zhǔn)欠裼幸饬x呢?大概率沒(méi)有,因?yàn)橄M(fèi)者不會(huì)愿意花費(fèi)資源來(lái)驗(yàn)證亞馬遜的區(qū)塊鏈?zhǔn)欠窨尚?,更別說(shuō)亞馬遜總是在網(wǎng)站上宣稱(chēng)商品“只剩最后一個(gè)!”。

關(guān)于區(qū)塊鏈未來(lái)可能的應(yīng)用場(chǎng)景留給您自己思考,廢話(huà)不多說(shuō),讓我們一起通過(guò)這7個(gè)函數(shù)來(lái)探索區(qū)塊鏈吧。

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ū)塊鏈的核心是哈希函數(shù),如果不加密,區(qū)塊鏈將很容易被操縱,交易將能夠被欺騙性地插入到區(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

所謂的“狀態(tài)”是交易完成后的資產(chǎn)分配記錄。比如,我有10個(gè)幣,我把其中1個(gè)幣給了Medium,那么當(dāng)前的“狀態(tài)”就是如下字典中的值。

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

值得注意的是,在這個(gè)體系中,透支是不可能存在的。如果我只有10個(gè)幣,那么我不可能將11個(gè)幣給別人。下面的函數(shù)將驗(yàn)證我們嘗試進(jìn)行的交易確實(shí)是有效的。而且,交易必須平衡,我不可能給了對(duì)方5個(gè)幣,但他只收到4個(gè)幣,否則會(huì)引起幣的銷(xiāo)毀和創(chuàng)建。

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)在我們可以構(gòu)建自己的區(qū)塊了。讀取上一個(gè)區(qū)塊的信息,并將其鏈接到下一個(gè)區(qū)塊,這也是區(qū)塊鏈的核心技術(shù)之一,看起來(lái)有效交易可以被欺詐性地插入到區(qū)塊鏈中,但是對(duì)前面所有的區(qū)塊進(jìn)行解密在計(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ù),用于檢查前一個(gè)區(qū)塊的哈希值。

def check_block_hash(block):

expected_hash = hash_function(block['contents'])

if block['hash'] is not expected_hash:

raise

return

一旦我們把所有的東西整合起來(lái),就是時(shí)候創(chuàng)建自己的區(qū)塊了。接下來(lái)我們將更新區(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ū)塊鏈必須經(jīng)過(guò)驗(yàn)證:

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è)交易函數(shù),將所有上述功能整合在一起:

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ù),那么怎樣使用它們呢?首先,我們需要一個(gè)創(chuàng)世塊來(lái)開(kāi)始我們的區(qū)塊鏈,這也是新幣產(chǎn)生的開(kāi)始。在這篇文章里,我將會(huì)從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}

那么,當(dāng)我將一些幣給Medium之后發(fā)生了什么呢?

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

狀態(tài)”的值將會(huì)被更新為當(dāng)前各人擁有多少個(gè)幣:

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

然后生成的區(qū)塊鏈會(huì)如下所示:

[{'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'}]

至此,我們的第一個(gè)交易已經(jīng)創(chuàng)建并被插入到堆棧的頂部。現(xiàn)在,我希望這些已經(jīng)激起你的好奇心,并且有興趣將代碼復(fù)制下來(lái)跑一跑。在我看來(lái),這是學(xué)習(xí)新技術(shù)的最佳途徑。

請(qǐng)嘗試運(yùn)行代碼去創(chuàng)造自己的幣。思考一下,如果您想提供比現(xiàn)存更多的幣,會(huì)發(fā)生什么情況?如果您不斷創(chuàng)建新的收款人,會(huì)發(fā)生什么?

還有,您能想到區(qū)塊鏈在未來(lái)會(huì)被應(yīng)用到哪些場(chǎng)景呢?歡迎在評(píng)論中留言。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 區(qū)塊鏈
    +關(guān)注

    關(guān)注

    112

    文章

    15568

    瀏覽量

    108401

原文標(biāo)題:通過(guò)7個(gè)函數(shù)解密區(qū)塊鏈

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專(zhuān)家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    區(qū)塊如何改變AI

    于決策、評(píng)估和理解某些模式和數(shù)據(jù)集,最終產(chǎn)生自主交互。人工智能和區(qū)塊共同擁有幾個(gè)特點(diǎn),可以確保在不久的將來(lái)能夠?qū)崿F(xiàn)無(wú)縫互動(dòng)。下面列出了三個(gè)主要特點(diǎn)。I.人工智能和區(qū)塊
    發(fā)表于 02-27 14:01

    什么是區(qū)塊 區(qū)塊有什么用

    賬本的數(shù)據(jù)。同時(shí),區(qū)塊還具有去中介化、信息透明等特點(diǎn)。  “區(qū)塊技術(shù)本質(zhì)上是一種數(shù)據(jù)庫(kù)技術(shù),具體講就是一種賬本技術(shù)。賬本記錄一個(gè)或多個(gè)賬
    發(fā)表于 03-26 11:31

    區(qū)塊不是泡沫 馬云或?qū)?chuàng)造新的神話(huà)

    那時(shí)候根本沒(méi)明白什么是區(qū)塊,但聽(tīng)說(shuō)東西能夠解決數(shù)據(jù)的安全和隱私,阿里巴巴就開(kāi)始投入區(qū)塊?!蓖瑫r(shí)馬云也強(qiáng)調(diào),
    發(fā)表于 05-18 18:10

    區(qū)塊在商業(yè)方面的應(yīng)用如何

    ,形成一個(gè)數(shù)據(jù)記錄,通過(guò)區(qū)塊可以讓交易的各方交易過(guò)程更加透明,更方便對(duì)資金及物流進(jìn)行監(jiān)管,避免虛假交易的產(chǎn)生。供應(yīng)金融管理應(yīng)用系統(tǒng)。 隨
    發(fā)表于 07-14 11:31

    區(qū)塊將改革供應(yīng)

    團(tuán)隊(duì)攜手研發(fā)出區(qū)塊應(yīng)用系統(tǒng),它對(duì)于整個(gè)供應(yīng)的權(quán)益有以下幾點(diǎn):1) 對(duì)于生產(chǎn)者:通過(guò)消費(fèi)者對(duì)商品的購(gòu)買(mǎi)數(shù)據(jù)以及零售商的銷(xiāo)售業(yè)績(jī)來(lái)推動(dòng)生產(chǎn)者的進(jìn)步,
    發(fā)表于 08-08 11:11

    區(qū)塊熱度不止,參考架構(gòu)9個(gè)部分解密

    應(yīng)用。其中,區(qū)塊技術(shù)仍然處于實(shí)驗(yàn)探索階段,各方對(duì)于區(qū)塊的概念、適用場(chǎng)景、架構(gòu)、技術(shù)特點(diǎn)、發(fā)展路線(xiàn)及治理與監(jiān)管尚未形成共識(shí)。比較常見(jiàn)的觀(guān)點(diǎn)
    發(fā)表于 09-06 17:48

    區(qū)塊技術(shù)開(kāi)發(fā)公司談區(qū)塊賺錢(qián)滿(mǎn)足人哪些需求

    在日常生活中需要什么?  第一,利益保護(hù)需求  我們知道的區(qū)塊是賺錢(qián)的,它所使用的整個(gè)系統(tǒng)是非常安全的。因?yàn)槊總€(gè)人都會(huì)建立自己的制度來(lái)最大化自己的利益。當(dāng)我們?cè)?b class='flag-5'>區(qū)塊中賺錢(qián)時(shí),我們可
    發(fā)表于 11-19 17:14

    淺談區(qū)塊對(duì)銀行業(yè)的發(fā)展

    `區(qū)塊軟件談區(qū)塊對(duì)銀行業(yè)的發(fā)展前者是通過(guò)人來(lái)記賬,后者則是通過(guò)計(jì)算機(jī)來(lái)記賬。因?yàn)槿颂奥斆鳌?/div>
    發(fā)表于 11-19 17:19

    區(qū)塊將如何優(yōu)化產(chǎn)業(yè)

    ,他供應(yīng)了各種開(kāi)發(fā)言語(yǔ)(相似JAVA等)幫忙開(kāi)發(fā)者開(kāi)發(fā)或許將原有的一些互聯(lián)網(wǎng)運(yùn)用移植再造到去中心化的網(wǎng)絡(luò)構(gòu)建中。所以,整個(gè)區(qū)塊的工業(yè)開(kāi)端衍生出了各個(gè)不同的生態(tài)層次。  區(qū)塊
    發(fā)表于 12-13 15:19

    區(qū)塊對(duì)我們的生活有什么影響

    未來(lái)是光明的,它是由區(qū)塊驅(qū)動(dòng)的。區(qū)塊技術(shù)已經(jīng)通過(guò)顛覆性的應(yīng)用程序改變了金融行業(yè),但金融業(yè)只是冰山一角。
    發(fā)表于 07-10 04:20

    區(qū)塊+從全球50個(gè)案例看區(qū)塊的應(yīng)用與未來(lái)》高清pdf

    技術(shù)發(fā)展到今天,已經(jīng)進(jìn)入了一個(gè)全新的時(shí)代:由信息互聯(lián)逐步發(fā)展至價(jià)值互聯(lián),而實(shí)現(xiàn)關(guān)鍵轉(zhuǎn)變需要一種能適用于全球的底層價(jià)值互聯(lián)網(wǎng)技術(shù)。在這個(gè)背景下,區(qū)塊技術(shù)以“安全、公開(kāi)、透明、數(shù)據(jù)不可
    發(fā)表于 03-13 00:42

    區(qū)塊錢(qián)包軟件開(kāi)發(fā),區(qū)塊錢(qián)包源碼搭建

    什么是區(qū)塊錢(qián)包?區(qū)塊錢(qián)包本質(zhì)上是一個(gè)工具,目前絕大多數(shù)的區(qū)塊
    發(fā)表于 05-26 16:30

    區(qū)塊分成兩部分, 一個(gè)區(qū)塊,一個(gè)

    了上一個(gè)區(qū)塊的HASH值(通過(guò)散列函數(shù)變換的散列值)和本區(qū)塊的HASH值。本區(qū)塊的HASH,又在
    發(fā)表于 03-20 08:55

    什么是區(qū)塊?區(qū)塊都有哪些應(yīng)用?

    什么是區(qū)塊區(qū)塊未來(lái)的應(yīng)用前景怎樣?
    發(fā)表于 06-28 09:20

    用不到50行的 Python 2.x代碼實(shí)現(xiàn)一個(gè)簡(jiǎn)單的區(qū)塊

    現(xiàn)在我們可以創(chuàng)建創(chuàng)世區(qū)塊了,我們需要一個(gè)函數(shù)來(lái)生成該區(qū)塊中的后繼區(qū)塊。該
    的頭像 發(fā)表于 03-29 15:29 ?6218次閱讀
    用不到50行的 Python 2.x代碼實(shí)現(xiàn)一<b class='flag-5'>個(gè)</b>簡(jiǎn)單的<b class='flag-5'>區(qū)塊</b><b class='flag-5'>鏈</b>