區塊鏈礦工如何經過七個步驟挖礦並進行交易

你有沒有想過區塊鏈的挖掘過程如何進行的,或者你的交易如何獲得確認並添加到了區塊鏈?好吧,我也是如此。因爲我找不到任何明確的逐步解釋這個過程文章,我決定深刻研究並本身編寫指南。如下是區塊鏈交易如何經過七個步驟從你的錢包處理到區塊鏈中。php

步驟1

用戶註銷交易從他們的錢包應用程序,嘗試從他們發送某個加密幣或代幣給其餘人。java

步驟2

交易由錢包應用程序廣播,如今等待礦工在相應的區塊鏈上接收。只要它沒有被挖掘,它就會在「未經證明的交易池」中徘徊。此池是網絡上等待處理的交易的集合。這些未經證明的交易一般不會收集在一個巨型池中,但更常見的是在小型細分的本地池中。node

步驟3

網絡上的礦工(有時稱爲節點,但不徹底相同!)從這些池中選擇交易並將其造成「塊」。除了一些元數據以外,塊基本上是交易的集合(此時,仍然是未經證明的交易)。每一個礦工都構建他們本身的區塊,可是多個礦工能夠選擇要包含在他們區塊中的相同交易。python

示例:兩名礦工,礦工A和礦工B。礦工A和礦工B均可以決定將交易X包含在他們的區塊中。塊具備最大數據大小。在比特幣區塊鏈中,塊的最大大小是最大1MB的數據。但在將交易添加到其塊以前,小型企業須要根據區塊鏈歷史檢查交易是否有資格執行。若是發件人的錢包餘額根據現有的區塊鏈歷史記錄具備足夠的資金,則該交易被認爲是有效的而且能夠添加到該塊中。礦工一般會優先考慮設置高交易費的交易,由於這會給他們更高的回報。android

步驟4

經過選擇交易並將其添加到其區塊,礦工建立一個交易塊。要將此交易塊添加到區塊鏈(以使全部其餘節點和礦工註冊交易),該塊首先須要簽名。此簽名是經過解決每一個交易塊所特有的很是複雜的數學問題來建立的。每一個塊都有不一樣的數學問題,這意味着每一個礦工都會處理他們構建的塊所特有的不一樣問題,但全部這些問題一樣難以解決。爲了解決這個數學問題,須要大量的計算能力(所以須要大量的電力)。這是稱爲挖掘的過程。若是你想了解更多有關其工做原理的信息,請繼續閱讀下面的內容,不然請跳至第5步。程序員

挖掘aka哈希(工做量證實算法)

當嘗試向區塊鏈添加塊時,每一個礦工面臨的數學問題是找到其塊中的數據的哈希輸出(也稱爲簽名),其以必定量的連續零開始。這聽起來很複雜吧?但實際上並不那麼難。讓我試着用一個簡單的方法向你解釋。web

在咱們繼續以前,解哈希函數是什麼很重要。不用擔憂,我不會涉及太多的技術細節。哈希函數只是一個很難解決的數學問題,但答案很容易驗證。算法

哈希函數接受數字和字母的輸入字符串(字面意思是任意字符串的隨機字母,數字和/或符號),並將其轉換爲由隨機字母和數字組成的新的32位字符串。這個32位數字符串是哈希輸出。若是輸入字符串中的任何數字或字母發生更改,則哈希輸出也將隨機更改。可是,相同的輸入字符串將始終提供相同的輸出字符串。mongodb

如今考慮塊內的數據做爲哈希輸入(一串數據)。當對此輸入進行哈希處理時,它會提供哈希輸出(32位數字符串)。比特幣區塊鏈的一個規則是該輸出字符串須要以連續數量的零開始,以便有資格做爲塊簽名。這是每一個礦工在嘗試向區塊鏈添加區塊時所尋找的東西;以必定量零開始的輸出字符串。可是若是塊的數據字符串沒有哈希到以零的數量開頭的輸出字符串中呢?好吧,這就是爲何礦工們反覆更改其塊內的一部分數據,稱爲nonce。因爲隨機數會一直在變化,所以哈希函數的輸入數據也會發生變化,從而致使不一樣的哈希輸出。最終,礦工但願找到一個輸入字符串(塊數據和字符串的字符串),這些字符串哈希爲符合條件的輸出字符串(以零的數量開頭)。下面的例子使用七個零,但這個零的數量實際上取決於區塊鏈的區塊難度。若是你還沒準備好,請不要點擊它。編程

這就是礦工們須要找到符合條件的簽名的方式,這也是解決這個數學問題須要如此大的計算能力的緣由。猜想這麼多不一樣的nonce須要花費大量的時間和計算能力。若是你順利完成了很好的工做,如今讓咱們繼續前進到第5步。

注意:此過程實際上並未定義爲數學問題,而是定義爲肯定性事項——計算機正在對數字執行預約操做以查看輸出是否合乎須要。

步驟5

礦工首先爲其區塊找到符合條件的簽名(解決方案),將此簽名廣播給全部其餘礦工。

步驟6

其餘礦工如今驗證該解決方案是否與發件人塊的問題相對應(若是哈希輸入實際上致使該簽名)。若是有效,其餘礦工將確認解決方案並贊成該塊能夠添加到區塊鏈中。這就是「工做量證實」定義的來源。找到解決方案的礦工將其「工做量證實」(又稱解決方案)發送給其餘礦工,而後他們將驗證解決方案是否合法。若是是,那麼其餘礦工將贊成而且就區塊鏈達成「共識」。如今能夠將塊添加到區塊鏈中,並將其廣播到網絡上的全部其餘節點及其簽名。只要塊內的交易與該時間點的當前錢包餘額(交易歷史)正確對應,其餘節點將接受該塊並將其保存到其交易數據中。

步驟7

若是大多數礦工達成共識,則塊被添加到區塊鏈中。每次在此塊的頂部添加另外一個塊時,它將被視爲其下方塊的另外一個「確認」。例如,若是個人交易包括在塊502中,而且區塊鏈是507個區塊長,則意味着個人交易有5個確認(507-502)。這也是Etherscan在向你展現交易詳情時所指的內容。你的交易確認越多,攻擊者就越難以改變它。當新區塊被添加到區塊鏈時,全部礦工將不得不在第3步從新開始,造成一個新的交易區塊。礦工們不能繼續(好吧,他們能夠,但這是可有可無的)採礦也解決了他們正在研究的區塊問題,緣由有兩個。

  • 1.它可能包含已被添加到區塊鏈的最後一個塊確認的交易,所以其中一些交易如今可能無效,使得整個塊無效。
  • 2.每一個塊都須要添加哈希輸出添加到區塊鏈的最後一個塊到其元數據中。

這就是它成爲區塊鏈的緣由。若是礦工繼續挖掘他們已經在處理的塊,其餘礦工會注意到哈希輸出與區塊鏈上最新添加的塊的輸出不對應,所以將拒絕該塊。

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

分享一些以太坊、EOS、比特幣等區塊鏈相關的交互式在線編程實戰教程:

  • java以太坊開發教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智能合約開發交互,進行帳號建立、交易、轉帳、代幣開發以及過濾器和交易等內容。
  • 以太坊入門教程,主要介紹智能合約與dapp應用開發,適合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • C#以太坊,主要講解如何使用C#開發基於.Net的以太坊應用,包括帳戶管理、狀態與交易、智能合約開發與交互、過濾器和交易等。
  • EOS教程,本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、帳戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最後綜合運用各知識點完成一個便籤DApp的開發。
  • java比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Java工程師不可多得的比特幣開發學習課程。
  • php比特幣開發教程,本課程面向初學者,內容即涵蓋比特幣的核心概念,例如區塊鏈存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中集成比特幣支持功能,例如建立地址、管理錢包、構造裸交易等,是Php工程師不可多得的比特幣開發學習課程。
  • tendermint區塊鏈開發詳解,本課程適合但願使用tendermint進行區塊鏈開發的工程師,課程內容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀態庫等,也包括代幣發行等豐富的實操代碼,是go語言工程師快速入門區塊鏈開發的最佳選擇。

匯智網原創翻譯,轉載請標明出處。這裏是原文區塊鏈礦工如何以七個步驟處理挖掘工做並進行交易

相關文章
相關標籤/搜索