国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【大神課堂】關于區塊鏈發展及數字構架的深入了解

lviY_AI_shequ ? 來源:未知 ? 作者:steve ? 2018-04-19 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在前面區塊鏈的架構部分介紹過區塊鏈的產生過程,如下圖

【大神課堂】關于區塊鏈發展及數字構架的深入了解

簡單來說,區塊鏈就是把(加密)數據存入區塊中,經“挖礦”加入整個鏈條,生成的永久、不可逆向修改的記錄。在本節中,將從代碼的角度深入理解這一過程。實踐是最好的老師,下面將動手實現一個簡單的區塊鏈。

為方便講解區塊鏈基礎,在下面開始用Python實現一個簡化版的區塊鏈。區塊的數據結構包含下面幾個字段:

identifier: 一個唯一的字符串作為標示

previous_hash: 前一個區塊的哈希值

data:區塊中的數據

nonce:隨機數,用來找到正確的哈希值

其中identifier這個唯一的字符串可以用python的uuid庫uuid4()生成。previous_hash是在接入區塊鏈的時候賦值。data是區塊中寫入的任意數據。比較特別的是nonce,它有什么用呢?它的作用很簡單,用來找到正確哈希值。

至于為什么要找正確的哈希值,就要講到區塊的有效性。由上圖中可以看到,區塊鏈中的區塊不是新生成就完成,而是需要通過“挖礦”這一步驟才可以。簡單來說,挖礦的本質就是找到一個合適的nonce值使得區塊的哈希值有效。

【大神課堂】關于區塊鏈發展及數字構架的深入了解

挖礦

哈希值是通過哈希算法計算得到的一段二進制值,不同的數據得到不同的哈希值。

In[1]:

# 這里舉個簡單的例子# 導入相關類庫import hashlib# 定義數據data = "Hello World"# 計算哈希值msg = hashlib.sha256()msg.update(data.encode('utf-8')) # 主要計算前必須將數據轉成utf-8msg.hexdigest()

Out[1]:

'a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e'

上面就一個哈希值,如果修改數據,比如添加一個nonce值就可以產生不同的哈希值

In[2]:

nonce = 0msg = hashlib.sha256()msg.update(data.encode('utf-8'))msg.update(str(nonce).encode("utf-8"))msg.hexdigest()

Out[2]:

'1370eeaaba7a6c7a234b1f82cc3b6d013a0088fd5e16408300f05b28b0015463'

在區塊鏈中區塊的哈希值必須滿足一定條件才能算是有效的區塊。這里設定區塊的哈希值必須以0000開頭才是有效的區塊。為了得到以0000開頭的哈希值,需要不斷的修改nonce(挖礦)直到滿足條件。下面定義一個函數來尋找該nonce值。

In[3]:

def mine(data): nonce = 0 # nonce初始值為0 # 尋找正確的哈希值 while True: msg = hashlib.sha256() msg.update(data.encode("utf-8")) msg.update(str(nonce).encode("utf-8")) hash_code = msg.hexdigest() # 如果滿足條件,打印相應值并退出循環 if hash_code.startswith("0000"): print("nonce:{}".format(nonce)) print("hash:{}".format(hash_code)) break # 否則繼續尋找 else: nonce += 1

In[4]:

mine("Hello, World")
nonce:104803hash:000022635160d3ae1c8c90261e0df5eb6538d7f6d42108d6ffdec17b585fb464

【大神課堂】關于區塊鏈發展及數字構架的深入了解

上面只是用data和nonce來計算哈希值,實際區塊鏈中還會包含其他字段。下面定義一個區塊的數據結構。

實現區塊結構

In[83]:

# block.pyimport hashlibimport uuidclass Block(object): def __init__(self, data=None, previous=None): self.identifier = uuid.uuid4().hex # 產生唯一標示 self.previous = previous # 父節點 if previous: self.previous_hash = previous.hash() # 父節點哈希值 else: self.previous_hash = None self.data = data # 區塊內容 self.nonce = 0 # nonce值 def hash(self): ''' 計算區塊的哈希值,包括區塊的標示、數據、前一區塊的哈希值和nonce值 ''' message = hashlib.sha256() message.update(self.identifier.encode('utf-8')) message.update(str(self.nonce).encode('utf-8')) message.update(str(self.data).encode('utf-8')) if self.previous: message.update(str(self.previous_hash.encode('utf-8'))) return message.hexdigest() def refresh_hash(self): if self.previous: self.previous_hash = previous.hash() # 父節點哈希值 else: self.previous_hash = None def mine(self): ''' 挖礦函數 ''' # 初始化nonce為0 cur_nonce = self.nonce or 0 # 循環直到生成一個有效的哈希值 while True: if self.hash_is_valid(): # 如果生成的哈希值有效 break # 退出 else: self.nonce += 1 # 若當前哈希值無效,更新nonce值,進行加1操作 def hash_is_valid(self): ''' 校驗區塊哈希值有否有效 ''' return self.hash().startswith('0000') def __repr__(self): return 'Block'.format(self.identifier)

以上就是一個區塊結構,這里的區塊包含一個唯一標識符、父節點的哈希值、nonce值和該區塊的內容字段。其中定義一個mine函數用了尋找合適的nonce值。另外定義了一個hash_is_valid函數用來判斷這個是否以0000開頭,即是否有效。下面對這個區塊結構進行初始化。

In[84]:

# 創建一個內容為hello world的內容塊block = Block('Hello, World')

In[85]:

# 區塊鏈的有效性block.hash_is_valid()

Out[85]:

False

In[86]:

# 挖礦,循環直至找到合適的nonceblock.mine()

In[87]:

# 再次檢查區塊的有效性block.hash_is_valid()

Out[87]:

True

至此,第一個有效的區塊生成完成,下面開始實現區塊鏈。

實現區塊鏈結構

In[88]:

class BlockChain(object): def __init__(self): self.head = None # 指向最新的一個區塊 self.blocks = {} # 包含所有區塊的一個字典 ''' 添加區塊函數 ''' def add_block(self, new_block): new_block.previous = new_block.previous new_block.mine() self.blocks[new_block.identifier] = block self.head = new_block def __repr__(self): num_existing_blocks = len(self.blocks) return 'Blockchain<{} Blocks, Head: {}>'.format( num_existing_blocks, self.head.identifier if self.head else None )

定義好區塊鏈結構后,下面就開始初始化一條區塊鏈。

In[89]:

# 初始化chain = BlockChain()# 打印chain

Out[89]:

Blockchain<0 Blocks, Head: None>

In[90]:

# 添加區塊chain.add_block(block)# 打印chain

Out[90]:

Blockchain<1 Blocks, Head: 1294d073adf5476db720d7b2e752d62b>

In[91]:

# 添加更多的區塊for i in range(6): new_block = Block(i) chain.add_block(new_block) # 打印chain

Out[91]:

Blockchain<7 Blocks, Head: 7f8291bedac845af8637112136c41fd3>

In[92]:

for i,v in chain.blocks.items(): if v.hash_is_valid(): print("{} is valid".format(k)) else: print("\033[0;31m{} is invalid\033[0m")a70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valida70c66dec8154a37864838638bc1ef71 is valid

以上就是一個簡單區塊鏈,可以看到當前的區塊都是有效的。但是,值的注意的是,每個區塊包括前一個區塊的哈希值,所以,當區塊鏈中一個區塊被改變后,這個區塊的哈希就會改變,從而影響到這塊區塊之后的區塊。

In[93]:

# 比如改變第一個區塊的內容block.data = "Modify Data"block.hash_is_valid()

Out[93]:

False

【大神課堂】關于區塊鏈發展及數字構架的深入了解

這將使這個區塊哈希值改變并導致區塊無效,并且,這個修改將影響之后的區塊,因為之后的區塊中的previous_hash依賴于前面的區塊。改變如下:

In[95]:

for k,v in chain.blocks.items(): # 更新區塊 v.refresh_hash() if v.hash_is_valid(): print("{} is valid".format(k)) else: print("\033[0;31m{} is invalid\033[0m".format(k))b41171e618334412871495fb6d6f1a28 is invalid1294d073adf5476db720d7b2e752d62b is invalid97dd4e3905584c18ab2028c92b3afaad is invalid02cb150841d6420ead9388d0ecfa3eef is invalid7f8291bedac845af8637112136c41fd3 is invalid2cfe78eac1db48f099a10ea968d468dd is invalid2119e357b03442e1bbc12f355ffdf00c is invalid

可以看到由于前面區塊的改變導致之后的區塊也無效了。

【大神課堂】關于區塊鏈發展及數字構架的深入了解

以上模擬了單個用戶的區塊鏈操作,在實際過程中挖礦和校驗的行為由區塊鏈中其他用戶進行的,并根據挖礦產生的勞動得到對應的報酬。這樣就保證了單個用戶無法修改區塊鏈中的數據。并且這個過程是通過加密算法進行的,這就實現了區塊鏈的去信任。

【大神課堂】關于區塊鏈發展及數字構架的深入了解


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 區塊鏈技術
    +關注

    關注

    5

    文章

    676

    瀏覽量

    15163

原文標題:從零開始學區塊鏈(3)--深入淺出區塊鏈(四)--區塊鏈基礎

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深入了解TPS2114A與TPS2115A:雙電源切換的理想選擇

    深入了解TPS2114A與TPS2115A:雙電源切換的理想選擇 在電子設備的設計過程中,電源管理一直是至關重要的一環,尤其是在需要多個電源輸入的情況下,如何實現電源的無縫切換和有效保護,是工程師們
    的頭像 發表于 02-28 17:20 ?1021次閱讀

    深入了解LM25066I/A:全方位的系統電源管理與保護方案

    深入了解LM25066I/A:全方位的系統電源管理與保護方案 在當前復雜的電子系統中,高效且可靠的電源管理與保護至關重要。Texas Instruments的LM25066I和LM25066IA作為
    的頭像 發表于 02-28 11:20 ?135次閱讀

    深入了解LM70:高性能數字溫度傳感器的應用與特性

    深入了解LM70:高性能數字溫度傳感器的應用與特性 在電子設備的設計中,溫度監測是一個至關重要的環節。今天,我們就來詳細探討一款來自德州儀器(TI)的溫度傳感器——LM70。 文件下載
    的頭像 發表于 02-26 11:45 ?211次閱讀

    深入了解MAX14748 USB Type-C充電器:特性、應用與設計要點

    深入了解MAX14748 USB Type-C充電器:特性、應用與設計要點 引言 在當今的電子設備領域,USB Type-C接口憑借其高速數據傳輸和強大的電力傳輸能力,正逐漸成為主流。而與之相匹配
    的頭像 發表于 02-24 11:30 ?263次閱讀

    深入了解Renesas E1/E20 Emulator:從規范到應用

    深入了解Renesas E1/E20 Emulator:從規范到應用 引言 在微控制器(MCU)的開發過程中,調試工具起著至關重要的作用。Renesas的E1/E20 Emulator就是一款強大
    的頭像 發表于 02-10 15:25 ?149次閱讀

    深入了解PCM510x-Q1系列立體聲DAC:技術特性與應用指南

    深入了解PCM510x-Q1系列立體聲DAC:技術特性與應用指南 在當今的音頻處理領域,數字到模擬轉換器(DAC)的性能對于音質的優劣起著關鍵作用。PCM510x-Q1系列作為一款專為汽車
    的頭像 發表于 02-09 15:05 ?150次閱讀

    深入了解Microchip PIC16C5X系列:8位單片機的卓越之選

    深入了解Microchip PIC16C5X系列:8位單片機的卓越之選 在當今電子設備飛速發展的時代,各類單片機產品層出不窮,為廣大電子工程師提供了豐富多樣的選擇。今天,我們就來深入
    的頭像 發表于 02-09 11:25 ?248次閱讀

    深入了解 LM4881 雙聲道 200mW 耳機放大器:特性、參數與應用設計

    深入了解 LM4881 雙聲道 200mW 耳機放大器:特性、參數與應用設計 在電子設備日新月異的今天,音頻放大器作為眾多設備中不可或缺的一部分,其性能和特點對整個系統的音效體驗起著至關重要的作用
    的頭像 發表于 02-04 16:50 ?586次閱讀

    深入了解SN74LVC1G66單雙邊模擬開關

    深入了解SN74LVC1G66單雙邊模擬開關 在電子設計領域,模擬開關是一種常見且關鍵的元件,它在信號路由、切換等方面發揮著重要作用。今天我們就來詳細探討一下德州儀器(TI)的SN74LVC1G66
    的頭像 發表于 01-16 10:35 ?401次閱讀

    深入了解LM5111:高性能雙路柵極驅動器的技術剖析

    深入了解LM5111:高性能雙路柵極驅動器的技術剖析 在電子工程師的日常工作中,選擇合適的柵極驅動器至關重要。它直接影響著電路的性能和穩定性。今天,我們就來深入探討一款性能卓越的雙路柵極驅動器
    的頭像 發表于 01-11 18:00 ?1074次閱讀

    深入了解 S32K312EVB-Q172 開發板:硬件特性與使用指南

    深入了解 S32K312EVB-Q172 開發板:硬件特性與使用指南 在嵌入式開發領域,一款優秀的開發板能夠極大地提升開發效率和項目的成功率。NXP 的 S32K312EVB-Q172 開發板就是
    的頭像 發表于 12-25 09:30 ?266次閱讀

    深入剖析DS80PCI102:PCIe路擴展的得力助手

    和信號衰減的問題,如何有效擴展PCIe路的傳輸距離成為了工程師們面臨的挑戰。今天,我們就來深入了解一款能夠解決這一問題的利器——DS80PCI102。 文件下載: ds80pci102.pdf 一、產品
    的頭像 發表于 12-23 15:00 ?335次閱讀

    深入了解SRF7038A系列共模扼流圈

    深入了解SRF7038A系列共模扼流圈 在電子設計的領域中,共模扼流圈是解決電磁干擾(EMI)問題的關鍵元件之一。今天,我們就來詳細探討一下BOURNS的SRF7038A系列共模扼流圈,看看它有
    的頭像 發表于 12-22 14:10 ?376次閱讀

    深入了解X-ray自動設備的核心優勢與應用領域

    。面對復雜多變的工業環境和嚴格的品質標準,企業如何借助自動化X射線檢測設備優化生產流程、提升檢測準確度?本文將圍繞X-ray自動設備的核心優勢與應用領域展開詳盡解讀,幫助您深入了解該技術帶來的變革與價值。無論您是工廠質量管
    的頭像 發表于 11-04 14:34 ?260次閱讀

    如何為不同的電機選擇合適的驅動芯片?納芯微帶你深入了解

    在現代生活中,電機廣泛使用在家電產品、汽車電子、工業控制等眾多應用領域,每一個電機的運轉都離不開合適的驅動芯片。納芯微提供豐富的電機驅動產品選擇,本期技術分享將重點介紹常見電機種類與感性負載應用,幫助大家更深入了解如何選擇合適的電機驅動芯片。
    的頭像 發表于 07-17 14:00 ?1611次閱讀
    如何為不同的電機選擇合適的驅動芯片?納芯微帶你<b class='flag-5'>深入了解</b>!