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

資訊專欄INFORMATION COLUMN

工作量證明

ninefive / 3278人閱讀

摘要:哈?,F金哈?,F金是一種工作量證明機制,在比特幣之前,哈?,F金被用于垃圾郵件的過濾。與郵件應用程序中的相比,比特幣加密電子貨幣網絡采用了不同的基于哈希的工作量證明,以實現比特幣的競爭挖掘。

一. 簡介

工作量證明(Proof Of Work,簡稱POW),簡單來講就是證明你完成了某一項工作。
維基百科的解釋:工作量證明系統是一種防止服務攻擊及其它服務濫用的經濟方式,它要求服務請求方完成某些工作——通常意味著需要請求方計算機完成一定計算量。這種方案的一個關鍵特征是不對成性:對請求方來說,所需要做的工作有較大難度;但對于服務提供方來說,工作量的驗證卻比較容易。
工作量證明中包含了兩層含義:

工作者需要完成的工作必須有一定的量,這個量由工作驗證者給出;

驗證者可以迅速的檢驗工作量是否達標,注意這里的檢驗完成過程必須簡單;

區(qū)塊鏈的一個關鍵點就是,一個人必須經過一系列困難的工作,才能將數據放入到區(qū)塊鏈中。正是這種困難的工作,才使得區(qū)塊鏈是安全和一致的。此外,完成這個工作的人也會獲得獎勵(這也就是通過挖礦獲得幣)。

在比特幣中,這個工作的目的是為了找到一個塊的哈希,同時這個哈希滿足了一些必要條件。這個哈希,也就充當了證明的角色。因此,尋求證明(尋找有效哈希),就是實際要做的事情。

二. 技術原理 2.1 哈希(hash)函數

工作量證明最常用的技術原理是哈希函數。哈希有以下幾個關鍵特性:

無法從一個哈希值恢復原始數據

對于特定的數據,只能有一個哈希,并且這個哈希是唯一的

即使是僅僅改變輸入數據中的一個字節(jié),也會導致輸出一個完全不同的哈希

由于輸入散列函數H()的任意值n,會對應到一個H(n)結果,而n只要變動一個比特,就會引起雪崩效應(avalanche effect),所以幾乎無法從H(n)反推回n,因此借由指定查找H(n)的特征,讓用戶進行大量的窮舉運算,就可以達成工作量證明。

在區(qū)塊鏈中,哈希被用于保證一個塊的一致性。哈希算法的輸入數據包含了前一個塊的哈希,因此使得不太可能去修改鏈中的一個塊:因為如果一個人想要修改前面一個塊的哈希,那么他必須要重新計算這個塊以及后面所有塊的哈希。

我們若指定H(n)的16進制值的前四值,求n,這樣統計上平均約要運行16的4次方次H(n)散列運算,才會得到答案,但驗算只要進行一次就可以了。如果想要增加難度,那就增加指定的位數即可。以SHA256函數舉例,假設我們要處理數據Hello World,并找出H(n)前四值為0000的n,如果從Hello World0開始加上一個十進制數ASCII進行窮舉猜測,到Hello World107105時才會得到匹配條件的H(n):

>>> import hashlib
>>> ss = "Hello World107105".encode()
>>> hashlib.sha256(ss).hexdigest()
"0000bfe6af4232f78b0c8eba37a6ba6c17b9b8671473b0b82305880be077edd9"

而驗算時只要將Hello World107105代入SHA256函數一次即可。

2.2 哈希現金(HashCash)

哈?,F金是一種工作量證明機制,在比特幣之前,哈?,F金被用于垃圾郵件的過濾。哈希現金(hashcash )的靈感來自于這樣一個想法,即一些數學結果難于發(fā)現而易于校驗。比特幣使用的原理就類似于HashCash。與郵件應用程序中的hashcash相比,比特幣加密電子貨幣網絡采用了不同的基于哈希的工作量證明,以實現比特幣的競爭挖掘。

盡管hashcash使用SHA-1散列,并且要求160個散列位中的前20個為零,但比特幣的工作證明使用兩個連續(xù)的SHA-256散列,并且最初需要至少256個散列位中的前32個為零。然而,比特幣網絡定期重置難度級別,以保持每小時6塊的平均創(chuàng)建速度。截至2017年8月(區(qū)塊#478608),比特幣網絡已經要求256個哈希位中的前72個必須為零。

三. 工作量證明

工作量證明的算法可以大概描述為:在一個時間段同時有多臺服務器對這一段時間的交易進行打包,打包完成后連帶區(qū)塊Header信息一起經過SHA256算法進行運算。在區(qū)塊頭以及獎勵交易coinbase里各有一個變量nonce,如果運算的結果不符合難度要求,那么就調整nonce的值繼續(xù)運算。如果有某臺服務器率先計算出了符合難度值的區(qū)塊,那么它可以廣播這個區(qū)塊。其他服務器驗證沒問題后就可以添加到現有區(qū)塊鏈上,然后大家再一起競爭下一個區(qū)塊。這個過程也稱為挖礦。

比特幣網絡中任何一個節(jié)點,如果想生成一個新的區(qū)塊并寫入區(qū)塊鏈,必須解出比特幣網絡出的工作量證明的迷題。這道題關鍵的三個要素是工作量證明函數、區(qū)塊及難度值。工作量證明函數是這道題的計算方法,區(qū)塊決定了這道題的輸入數據,難度值決定了這道題的所需要的計算量。

3.1 POW函數

和我們上節(jié)例子中用到的哈希函數一樣,比特幣系統中使用的工作量證明函正是SHA256。SHA是安全散列算法(Secure Hash Algorithm)的縮寫,是一個密碼散列函數家族。這一組函數是由美國國家安全局(NSA)設計,美國國家標準與技術研究院(NIST) 發(fā)布的,主要適用于數字簽名標準。SHA256就是這個函數家族中的一個,是輸出值為256位的哈希算法。到目前為止,還沒有出現對SHA256算法的有效攻擊。

3.2 區(qū)塊

比特幣的區(qū)塊由區(qū)塊頭及該區(qū)塊所包含的交易列表組成。區(qū)塊頭的大小為80字節(jié),由4字節(jié)的版本號、32字節(jié)的上一個區(qū)塊的散列值、32字節(jié)的Merkle Root Hash、4字節(jié)的時間綴(當前時間)、4字節(jié)的當前難度值、4字節(jié)的隨機數組成。區(qū)塊包含的交易列表則附加在區(qū)塊頭后面,其中的第一筆交易是coinbase交易,這是一筆為了讓礦工獲得獎勵及手續(xù)費的特殊交易。區(qū)塊的大致結構如下:

3.3 難度值

難度值(difficulty)是礦工們在挖礦時候的重要參考指標,它決定了礦工大約需要經過多少次哈希運算才能產生一個合法的區(qū)塊。比特幣的區(qū)塊大約每10分鐘生成一個,如果要在不同的全網算力條件下,新區(qū)塊的產生保持都基本這個速率,難度值必須根據全網算力的變化進行調整。簡單地說,難度值被設定在無論挖礦能力如何,新區(qū)塊產生速率都保持在10分鐘一個。

難度的調整是在每個完整節(jié)點中獨立自動發(fā)生的。每2016個區(qū)塊,所有節(jié)點都會按統一的公式自動調整難度,這個公式是由最新2016個區(qū)塊的花費時長與期望時長(期望時長為20160分鐘即兩周,是按每10分鐘一個區(qū)塊的產生速率計算出的總時長)比較得出的,根據實際時長與期望時長的比值,進行相應調整(或變難或變易)。也就是說,如果區(qū)塊產生的速率比10分鐘快則增加難度,比10分鐘慢則降低難度。
這個公式可以總結為如下形式:

New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)
四. 工作量證明的過程 4.1 證明過程

我們可以把比特幣礦工解這道工作量證明迷題的步驟大致歸納如下:

生成Coinbase交易,并與其他所有準備打包進區(qū)塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash

把Merkle Root Hash及其他相關字段組裝成區(qū)塊頭,將區(qū)塊頭的80字節(jié)數據(Block Header)作為工作量證明的輸入

不停的變更區(qū)塊頭中的隨機數即nonce的數值,并對每次變更后的的區(qū)塊頭做雙重SHA256運算(即SHA256(SHA256(Block_Header))),將結果值與當前網絡的目標值做對比,如果小于目標值,則解題成功,工作量證明完成。

該過程可用下圖表示:

4.2 計算量分析

Hash值是由數字和大小寫字母構成的字符串,每一位有62種可能性(可能為26個大寫字母、26個小寫字母,10個數字中任一個),假設任何一個字符出現的概率是均等的,那么第一位為0的概率是1/62(其他位出現什么字符先不管),理論上需要嘗試62次Hash運算才會出現一次第一位為0的情況,如果前兩2位為0,就得嘗試62的平方次Hash運算,以n個0開頭就需要嘗試62的n次方次運算。

五. 代碼實現

以下是區(qū)塊鏈POW部分代碼的精簡展示,完整代碼可參考地址

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

...
import hashlib
...

class Blockchain(object):
    ...

    def proof_of_work(self, last_proof):
        proof = 0
        while self.valid_proof(last_proof, proof) is False:
            proof += 1
        return proof

    @staticmethod
    def valid_proof(last_proof, proof):
        guess = f"{last_proof}{proof}".encode()
        guess_hash = hashlib.sha256(guess).hexdigest()
        return guess_hash[:4] == "0000"



參考

Pricing via Processing or Combatting Junk Mail

Learn Blockchains by Building One

Proof-of-work system - Wikipedia

什么是工作量證明?

Learn Blockchains by Building One

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41784.html

相關文章

  • 了解區(qū)塊鏈的基本(第二部分):作量證明(PoW)和股權證明(PoS)

    摘要:以太坊基金和以及在一起積極研究一個安全的去中心化的股權證明協議。總結在本文中,我們討論了工作量證明和股權證明,它們是實現了拜占庭容錯的共識算法,并在當今的區(qū)塊鏈系統中得到實際應用。 在第一部分中,我們討論了拜占庭將軍問題、如何實現拜占庭容錯以及他們與區(qū)塊鏈的關系。 在上一篇文章中提到的算法實際上就是實現拜占庭容錯的解決方案。但是,那個解決方案還不夠有效率,它的變型也是有限制的,即不到三...

    zhaofeihao 評論0 收藏0
  • 【董天一】IPFSFilecoin和復制證明

    摘要:作者簡介董天一中國區(qū)技術布道人指南作者。畢業(yè)于北京大學軟件與微電子學院曾擔任甲骨文亞洲研發(fā)中心中國數據庫開發(fā)工程師。資深區(qū)塊鏈技術開發(fā)者,現致力于在中國的技術推廣的競爭對手。 作者簡介:董天一 ,IPFS/Filecoin中國區(qū)技術布道人 ,《IPFS指南》作者。畢業(yè)于北京大學軟件與微電子學院曾擔任甲骨文亞洲研發(fā)中心(中國)數據庫開發(fā)工程師。 資深區(qū)塊鏈技術開發(fā)者,現致力于IPFS/F...

    wuaiqiu 評論0 收藏0
  • 深入研究 PoW 和 PoS 優(yōu)劣和取舍

    摘要:今天我們分享前共識協議安全隱私的研究員來為大家深入分析和優(yōu)劣取舍。熟悉的伙伴都知道,我們推崇比特幣的共識機制。比特幣引入了帶有延遲的無需許可網絡的概念。在比特幣網絡中,新的節(jié)點可以隨時加入,并且可以獲得可信的網絡歷史記錄。 在秘猿科技區(qū)塊鏈小課堂第 26 期開始,我們開始討論「構建加密經濟背后的三大支柱之一」的共識部分,淺談了 PoW 和 PoS 共識差異。今天我們分享前 Blocks...

    KoreyLee 評論0 收藏0
  • 一幅圖解釋區(qū)塊鏈結構

    摘要:先看比特幣的核心特點基于時間戳的鏈式區(qū)塊結構分布式節(jié)點間的共識機制基于共識算力的經濟激勵靈活可編程的智能合約機制。我認為區(qū)塊鏈的基礎技術兩點區(qū)塊鏈結構全網廣播機制。兩個小時后,將有一個攻擊時刻被散列在一個有個工作量證明的鏈中。 先看比特幣的核心特點:1)基于時間戳的鏈式區(qū)塊結構;2)分布式節(jié)點間的共識機制;3)基于共識算力的經濟激勵;4)靈活可編程的智能合約機制。 再來談區(qū)塊鏈的重要特...

    xietao3 評論0 收藏0
  • 比特幣如何達成共識 - 最長鏈的選擇

    摘要:第步在比特幣如何挖礦工作量證明一篇有提到過,下面著重講第步。比特幣將區(qū)塊間隔設計為分鐘,是在更快速的交易確認和更低的分叉概率間作出的妥協。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:比特幣如何達成共識 - 最長鏈的選擇原文已更新,請讀者前往原文閱讀 比特幣沒有中心機構,幾乎所有的完整節(jié)點都有一份公共總帳本,那么大家如何達成共識:確認哪一份才是公認權威的總賬本呢? 為什么要遵守協議 這其實是...

    Steve_Wang_ 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<