為什麼比特幣需要工作量證明

買賣虛擬貨幣
2008年10月31日,中本聰(Satoshi)發表了《比特幣——一種點對點電子現金系統》白皮書,這是革命性貨幣體系的組成部分,也是比特幣的規範協議。
2009年1月3日,隨著Satoshi發表了第一個實現該論文的Block# 0 Genesis Block,該白皮書開始生效。這些程式碼大部分是用c++編寫的,並且是開源的,可以在github上找到。比特幣是什麼?比特幣建立在區塊鏈系統之上,純粹的點對點電子現金系統將允許直接從一方傳送到另一方的線上支付,而無需經過金融機構。為什麼是點對點?
節點是執行比特幣軟體(比特幣客戶機)的計算機。節點連線到其他計算機以建立網路。每個節點都相互連線,所以形成了一個網路,每個節點都是對等的。節點之間相互通訊,傳遞關於n/w其他部分的資訊。所以現在我們有了一組執行比特幣軟體的節點,這些節點連線在一起形成一個比特幣n/w。讓我們舉個例子。Alice想透過Bob的比特幣錢包傳送5比特幣,這個錢包建立了一個交易,並將其插入比特幣的n/w節點。網路上的每個節點執行3個功能:1. 遵循一套用比特幣客戶端軟體編寫的規則。如:檢查這個人是否有足夠的餘額來消費,如果是,則接受該交易,如果沒有拒絕,則將其傳遞給其他節點。因此,只有有效的交易才會被代理。2. 擅自進行交易。有兩種型別的交易是主動的—最近進入網路的新交易,已確認的交易,這些交易以塊的形式共享,而不是單獨的3. 將已確認的交易追加到其區塊鏈。什麼是區塊鏈?
區塊鏈可以看作是可以儲存為一個平面檔案或一個簡單的資料庫塊鏈。例如,比特幣的核心客戶將區塊鏈儲存在谷歌的一級資料庫。區塊鏈的特性:1. 區塊鏈是一個連結串列資料結構。每個節點都有資料(塊,稍後我們將看到每個塊是什麼)和指向前一個塊雜湊的連結。因此,每個節點都與之前的節點進行了隱式連結,使得每個節點不可變,篡改會破壞鏈。

2. 去中心化。區塊鏈的副本存在於網路中的所有節點上,就像公共分類賬一樣。區塊鏈就像比特幣對點網路上的BitTorrent檔案一樣可以共享。 


挖礦目的n/w上的每個節點都有一個記憶體池,一個臨時儲存緩衝區。每個節點還有一個本地儲存到節點的區塊鏈。當節點從其他節點接收到交易時,它將驗證該交易並將其新增到記憶體池中。最終目標是建立一個包含這些交易的塊,驗證它們並將其新增到區塊鏈上。一旦交易被新增到區塊鏈中,它們就會被“確認”,這就允許比特幣的新主人使用他們在這些交易中收到的比特幣。
誰建立了塊,誰將交易新增到塊中——“礦工”。比特幣n/w中的任何節點都可以成為礦工。1. 挖礦用於確保不使用欺詐性交易。例如雙重支出問題。2. 挖礦會產生新的比特幣,如果有新的區塊,就會產生新的比特幣,就像央行印新錢一樣。比特幣的數量是固定的,並隨著時間的推移而遞減。(這是用比特幣協議寫的)。礦工提供比特幣n/w的處理能力,作為回報。新增到記憶體池中的交易將等待挖掘程式拾取。礦工建立一個新塊,將記憶體池中的部分或全部交易(基於優先順序)新增到這個新的候選塊中,並與其他礦工競爭,以解決一個基於加密雜湊演算法的數學難題。這個“工作量證明”問題的解決方案包含在塊中,它可以作為採礦者花費了大量計算工作的證明。第一個解決該問題的礦工將獲得獎勵,驗證塊將被新增到區塊鏈中。採礦者可以從採礦中獲得兩種獎勵——創造新代幣並給予採礦者交易費。新代幣的產生是固定的,並在不斷減少,2009年開始是50比特幣,2012年減半至25比特幣,2016年減半至12.5比特幣,大約每四年減少一次。預計每10分鐘開採一個新區塊。比特幣軟體對比特幣總量有一個最高限額,即2100萬比特幣。所以到2140年左右,所有的比特幣都將發行,之後不會再發行新的比特幣。礦工只能從交易費中獲利。比特幣區塊鏈中的塊是什麼?
礦工建立的每個新塊都有一個頭塊和一個主塊。所有選定的交易都新增到主塊中。1. 上一個塊雜湊。2. 時間戳,建立此塊的日期/時間。3. 難度目標,為使塊生成時間保持在10分鐘以內,難度目標是一個可以自行調整的動態值。4. Nonce,一個初始化為0的計數器(稍後我們將看到它是什麼)5. Merkle root hash, Merkle tree是一種資料結構,用於有效地總結塊中的所有交易。(我們將在接下來的部落格中看到merkle樹是什麼以及它是如何構建的)。
挖礦過程它使用SHA-256雜湊函式。挖掘的是塊頭的雜湊,反覆更改一個引數(nonce),直到得到的雜湊小於或等於一個特定的目標。什麼是難度目標?為了使塊生成時間保持在10分鐘,難度會相應地進行調整。如果n/w查詢塊的速度超過10分鐘,則難度增加,如果塊的查詢速度較慢,則難度降低。您可以在power .cpp中的github上的reference erence實現中找到設定當前難度的程式碼。工作量證明演算法如何工作?
挖掘器負責構造一個充滿交易的候選塊,雜湊塊頭以檢視它是否小於或等於當前目標,如果不是,則修改nonce(通常遞增1),然後重試,直到找到解決方案。挖掘需要大量的計算能力,因此現在節點使用ASIC硬體,其中100 -1000秒的積體電路並行執行SHA-256 algo。一旦找到一個解決方案,用於解決這個問題的nonce就被插入到塊中的nonce欄位中,節點立即將這個塊傳輸給它的所有對等節點。它們接收、驗證(驗證規則可以在CheckBlock和checkblockheader檔案中找到)並生成新塊。當節點在網路周圍波動時,每個節點將其新增到自己的區塊鏈中,並將其擴充套件到一個新的高度。因此挖掘就是在這個塊上建立新的塊,聚集和新增的新交易,在這個塊之上執行演算法的證明可以找到這個問題的答案,透過投資計算能力和預期回報(新生成的比特幣和交易費用)宣傳這一塊。為什麼使用工作量證明演算法?工作量證明基本上確保了礦工不作弊,他們負責比特幣的生成和建立新的區塊新增到區塊鏈。我們無法相信網路中的每個人都是誠實的,因此,我們如何確保礦工不會透過在區塊中新增交易、給自己帶來比特幣,來建立對自己有利的區塊。它的工作原理是,你讓一群人都試著猜這道數學題的答案,沒有人知道誰會先得到正確的答案。首先得到正確答案的人將獲得獎勵,但前提是所有其他礦工同意接受該交易記錄(如果某個礦工明顯在建立欺詐性交易,那麼其他礦工可以集體拒絕接受他們的貢獻)。這就是為什麼建立一個新塊的過程被設計成能源密集型的原因,因此,建立每個新塊都有相關的成本。這就阻止了礦工們簡單地創造出一大堆新的欺詐性區塊,並寄希望於這些區塊可能會被接受,因為這樣做的成本抵消了潛在的回報。如果要求每臺計算機在傳送每封郵件之前花一分鐘處理PoW問題,那麼只有真正有訊息的人才會同意花時間。花費一分鐘的電腦時間對一個人來說是非常低的成本,但是一個正在傳送1000萬封垃圾郵件的人卻等不起1000萬分鍾。所以回到比特幣上來看,每一個礦工解決每一個區塊的機會是非常小的,因為解決這些區塊需要花費大量的努力,他們不能只是用解決方案向網路傳送垃圾郵件。這意味著只有當他們的貢獻被網路接受時,他們才會被激勵去付出努力。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;