比特幣的是怎麼樣運轉的?

比特幣是什麼?

那我們就從中本聰要實現的目標出發。如比特幣白皮書的標題所示,比特幣的目標是:

比特幣——一種點對點的電子現金系統

比特幣的是怎麼樣運轉的?

點對點,意味著不能有第三方機構來確認交易,那麼就需要有一個只能添加數據和查看數據的記賬系統(數據庫系統),添加完了以後就不能修改和刪除了。

為了實現這個目的,這個記賬系統需要是分佈式的,這樣就沒有人可以一下子修改全部的節點上的數據了。

節點是分佈式的,就需要用P2P技術進行數據的同步。而P2P技術的直觀感受就是——我們經常用種子下載電影的那種技術。

為了讓數據不能被修改,那麼需要把一段時間的交易數據放到一個盒子裡,然後想辦法把這個盒子存起來,不讓人修改,這個盒子就是區塊(block)。

比特幣的是怎麼樣運轉的?

單個的放數據的區塊還是可以人為的修改,那麼就需要想辦法把單個區塊前後串起來,修改其中任何一個,後面的就連不上了,從而保證任何一個塊一旦放到鏈當中就不可修改了。

用於連接的這個鏈,就是在後一個區塊中保存前一個區塊的哈希值。這樣,改動了前一個區塊中的任何一個數據,它的哈希值都會發生巨大的變化,就會和後一個區塊中所保存哈希值不相等。

所以,鏈入區塊鏈中的區塊是無法修改的。

至此,區塊鏈的雛形已經出現了,下面要解決的是轉賬的問題了。

為了保證轉賬的可靠性,用非對稱加密的解決方案最好。首先在一個很大的範圍(0-2^256)設置一個私鑰,根據概率學的原理(在附錄中說明),不可能有兩個人會有相同的私鑰,然後用這個私鑰給交易簽名。查詢和確認交易的人只需要用私鑰對應的公鑰進行解密就可以了。

比特幣的是怎麼樣運轉的?

下面要解決的就是記賬的問題了。記賬雖然也是機器處理的,但是每個節點的機器背後還是一些活生生的人,要想讓他們不作弊,就需要給予誠實的記賬以獎勵,同時也保證了這個系統中的貨幣的供給。這就是比特幣節點挖礦獎勵比特幣的原因了。

一個節點取得了記賬權,如果他好好記賬,那麼就可以拿到獎勵,如果有了記賬權,卻故意記錯了賬,那麼這個獎勵就沒有了。

記賬有獎勵,那很好,人人都想記賬,所以得想個公平公正的法子去爭奪記賬權了。於是就需要設計一個“共識算法”——讓所有節點都能達成共識,同意用這樣的方式來解決問題。

那就隨機唄,擲骰子。在加密的世界裡,哈希算法就是很隨機的擲骰子的方式。賬記完了,那我們就用這個賬本的內容,加上一個隨記的數字,去擲骰子(哈希計算),保證他們合在一起的哈希值前面有幾個零,誰先找到這個哈希誰就有記賬權。這個很公平隨機,不過誰的電腦計算的快就能更大概率地找到這個隨機數,但是隻要方法是公平公正的,硬件問題就需要記賬的人自己解決了。大家都升級硬件,只要每次獎勵的比特幣夠硬件升級的花費就行。

記完賬,問題又出現了。如果有人幾乎同一時間畫出兩筆BTC,而這個地址的餘額又不夠同時支付兩筆交易,怎麼辦?中本聰的辦法就是看交易的時間戳,哪個先發生就以哪個為合法的交易。

比特幣的是怎麼樣運轉的?

還有一個問題,如果由於網絡問題,上面所說的兩筆交易被不同的礦工幾乎同時打包進區塊又怎麼解決呢?中本聰的辦法是隨它去,讓區塊自由生長,最終以增長快的鏈為準,廢棄短的鏈。

以上解決問題的辦法看似不怎麼負責,但是卻是解決問題最簡單有效的途徑。所以我們在轉賬最終到賬需要若干個區塊的確認。因為當出塊的數量達到一定數量的時候,即使有分叉的鏈也不會比當前的鏈長,會被廢棄掉,從而使當前最長鏈中保存的交易也就不可篡改了。

繼續看礦工的選擇。好不容易輪到一次記賬權,只要誠實記賬就有獎勵,誰也不會亂記賬。即使有位作惡的礦工亂記賬,但是如果他算力不夠大,不能保證一直在錯誤的鏈上記賬下去,把錯誤的鏈打造成最長的鏈,也不會作惡成功。最終不僅作惡失敗,還失去了記賬的獎勵,賠了夫人又折兵,正常人都不會去做的。

比特幣的是怎麼樣運轉的?

如此這般,比特幣的系統差不多設計完成了。但是還有一點漏洞,如果作惡的礦工不僅壞,還擁有了超過了51%強大的算力,為了謀取自己的私利,故意記錯賬,怎麼辦呢。這個時候,由於比特幣會選擇最長的一條鏈,擁有超過51%算力的礦工可以製造出一條錯誤的較長的鏈,雖然顛倒黑白了,但是別人拿他也沒有辦法了。這個時候,作惡的礦工雖然拿到了雙重支付的好處,但是卻破壞了系統,會導致幣價大跌,作弊弄來的比特幣也不值錢了,連手上花重金買來的礦機都成廢鐵了。

所以,即使擁有超過51%算力的礦工也不會做損人不利己的事情,放棄作惡的行為。所以至今為止都沒有出現擁有巨大算力而為所欲為的礦工,因為他被綁定在了比特幣系統了,只有整個系統好他才會受益。


分享到:


相關文章: