挖礦工作原理以及區塊鏈交易處理的七個步驟

2021-09-29 15:41:31 字數 2531 閱讀 2389

注:本文為翻譯,略微改動,原文:

你曾經好奇在挖礦在區塊鏈上是怎樣進行的嗎?

想知道一筆交易是如何確認並且新增到區塊鏈上的嗎?

我也有過這樣的疑問。我找了沒有找到對這些過程的處理一步步清晰的描述,所以我決定自己把這些理解寫出來。下面我將分為七個步驟來講述在區塊鏈上乙個交易如何被處理並記錄上鏈的。

一、交易者用錢包客戶端對一筆交易進行簽名,目的是傳送特定的數字貨幣或者 token 令牌給其他的交易者

二、這筆交易由錢包客戶端廣播給區塊鏈上正在挖礦的礦工,在沒有礦工記錄這筆交易前,交易被儲存在 「待確認交易池」 中。」待確認交易池「 是保留在網路上等待被處理交易的集合。這種池子通常不是乙個巨大的池子,而是以小的細分的本地池的形式存在。

三、網路上的礦工(通常被稱為是節點,但並不十分準確)在這些 」待確認交易池「 中選取一部分交易形成乙個區塊。區塊通常是多個交易的集合(這時交易還未被確認),再加上一些額外的元資料。每個礦工生成自己的區塊。其他的礦工也可以把這些相同的交易寫進他們自己的區塊中。

舉個例子:

礦工 a 和礦工 b 可以同時把交易 x 記錄到他們的區塊當中。每乙個區塊都有它的最大容量。在位元幣中,乙個區塊的最大容量是 1mb 的資料。在把交易記錄進他們的區塊之前,礦工需要根據區塊鏈上記錄的歷史交易來確定當前交易是否合法。如果位元幣的擁有者,想要讓他的交易更快的被確認,他可以選擇提供更高的支付獎勵。礦工想獲取更高的報酬,所以會優先選擇記錄 」待確認交易池「 中獎勵更高的交易。

挖礦又叫做 hash 計算(工作量證明的共識演算法)

每個礦工想要在區塊鏈上新增乙個區塊,需要解決的數學計算問題就是:給該區塊中的資料計算出乙個 以確定的 0 的個數開頭的 hashcode(又稱簽名)。這聽起來很複雜?但實際上並不是很複雜。

簡單來說,首先,了解 hash 函式是什麼很重要(譯者說:這裡直接描述 hash 函式是不準確的,hash 函式有很多種,原作者這裡描述的應該是特指位元幣區塊計算的 hash 函式,下面不再強調說明)。這個 hash 函式需要是一種計算非常難,但是驗證起來很簡單的 hash 函式。

hash 函式是一種接收任意長度的字串和數字組合,然後輸出乙個 32 個字元(位元幣的 hash 演算法用的是雙重的 sha256,輸出應該是 256bit 的資料即 32 個位元組,一般處理為 16 進製字元來輸出,應該是有 64 個字元,這裡原作者用 32 個字元不恰當)的數字和字母的隨機組合字串。如果輸入中有任何字元改動,輸出也將產生隨機的改動,但是相同的輸入經過 hash 函式計算出的結果總是相同的。(關於 hash 函式想要有更多的了解可以參考我的那篇 《白話講 hash》)

現在想這樣乙個問題,乙個區塊上記錄的交易資料是確定的, hash 函式對於相同的輸入計算出的輸出總是相同的,而且要想記錄在位元幣的區塊鏈上,又要求這個 hash 輸出的前面確定的位數是 0 。這時候如果區塊記錄的交易資料計算出的 hash 輸出不滿足要求怎麼辦?位元幣的做法是,礦工可以在區塊中資料中新增乙個隨機數,然後再進行 hash 計算 。每次計算都改變這個隨機數,由於隨機數改變,hash 計算輸出也會改變。

礦工無限期的重複改變隨機數計算 hash,直到撞上滿足輸出結果前面是指定數量的 0,比如說 7 個 0。實際上前面 0 的數量取決於區塊鏈的計算難度。區塊的結構稍微複雜一些,下面是區塊結構圖:

這就是礦工要記錄乙個區塊需要大量算力計算出數學問題的原因。猜測許多不同的隨機數會耗費大量的算力。當大量的算力加入到區塊鏈計算中,數學計算的難度也會增加(要求 hashcode 前面 0 的位數增多),同時將導致更多的電力消耗。關於計算難度和電力消耗更多的資訊請參考:

注意:這個處理過程實際上不應該定位為數學問題,而是一件確定性的事情-計算機對數字執行預定的操作,以檢視輸出是否滿足要求

五、礦工找到乙個合法的簽名(上過程計算出的 hashcode),將簽名和區塊一起廣播給所有其他礦工

六、其他礦工檢測收到廣播的區塊和簽名的合法性,計算這個區塊上的交易資料和隨機數是否滿足輸出的hashcode 前面有指定數量的 0(還記得前面說的嗎?計算十分困難,驗證比較簡單)。如果它是合法的,其他礦工將承認該區塊的合法性,並將這個區塊新增到區塊鏈上(他們達成共識,基於共同的共識演算法)。這就是工作量證明定義的由來。這個簽名就是工作量的保證(計算出符合規則的簽名消耗了大量算力)。這個區塊現在可以被新增到區塊鏈上,並且廣播給網路上的每乙個礦工。只要區塊內的交易根據之前區塊的歷史記錄計算出來是合法的,其他的節點就會接受並且儲存這個區塊。

如果這個區塊中與當前區塊鏈上最後乙個區塊有相同的交易(所有礦工都在挖礦,選擇交易記錄),則這個區塊的所有交易被認為是不合法的。因為,交易者的錢可能已經不夠支付。

每個區塊需要新增前乙個區塊的簽名到自己的元資料裡。這是區塊組成區塊鏈的必要條件。如果乙個礦工對已經在區塊鏈上的區塊進行挖礦,其它礦工將會注意到它的元資料和區塊鏈上的最後乙個區塊簽名不一致,將拒接新增該區塊到區塊鏈上。

區塊鏈介紹 一 礦工挖礦過程

區塊鏈礦工挖礦時機問題 當礦工接到競爭者傳送的新區塊時,就放棄當前工作。更新區塊,準備開始下乙個區塊競爭。根據區塊鏈 預計沒十分鐘生成乙個區塊。但是實際上,礦工並沒有統一的演算法保證收集到特定數量的交易後才開始開工。具體的時間不同客戶端設定不盡相同。極端情況下空區塊鏈也是合法的。如下圖統計 二 交易...

區塊鏈學習筆記 挖礦與礦工

區塊鏈是乙個分布式公共賬本,是乙個記帳系統。位元幣採用了一種共識機制pow,雖然說在區塊鏈中每個節點都可以有參與記賬的權利,但事實上這是怎麼記賬的呢,pow這種共識機制決定了由誰來記賬,pow proof of work 是 工作量證明 的意思,簡答來說就是算力最大,工作量最大的那個節點去記賬。小二...

區塊鏈工作原理(二)

1.傳送節點將新的資料記錄向全網進行關閉 2.接受節點對收到的資料記錄資訊進行驗證,比如資訊是否安全合法,通過檢驗後,資料記錄將被納入乙個區塊中 3.全網所有接受節點對區塊鏈執行共識演算法 工作量證明,權益證明等 4.區塊通過共識演算法過程後被正式納入區塊鏈儲存,全網節點均表示接受改區塊,而表示接受...