由於前面以太仿教程是匯智網的線上課程,所以後面重要的幾篇就不列出來了。畢竟是人家作者辛辛苦苦的勞動成果,列出來幾篇一是記錄下有點類似最近比較火的vlog,同時想著藉此機會宣傳下我的新書,沒想到還要等一段時間,上週ISBN號下來了,CIP號還未下來,可能要到下週才下來,二也是幫助作者宣傳一下課程,以太仿的課程確實不錯。
一、什麼是比特幣
當我們談到比特幣時,其實在不同的場景下有不同的指代。
比特幣首先是一種數字加密貨幣,使用者可以通過比特幣網路進行 比特幣轉賬或商品結算,就和傳統的貨幣一樣:
不過比特幣是基於密碼學技術的虛擬化貨幣,它沒有實體,僅僅 隱含在從傳送方到接收方的交易中,接收方必須使用其持有的金鑰來 消費收到的比特幣。
對於科技從業者而言,比特幣則更多了一層含義:比特幣對應著 一種劃時代的數字加密貨幣系統,其內容包含通訊協議、激勵機制、實現程式碼 與承載網路等:
事實上,比特幣是數十年來密碼學技術、分散式計算等領域的集大成者, 它不是第一個出現的數字貨幣,但無疑是最成功的,一個洞察了人性的 虛擬產品。
二、區塊鏈結構
比特幣是一個專用資料庫,它只儲存一種型別的資料記錄 —— 交易,例如 張三轉給李四幾個幣,或者李四轉給王五幾個幣:
一旦涉及到資金,大家都會變得慎重了。因此交易記錄最好在技術上可以保證 是不能篡改的,這樣出了問題可以翻翻老賬,這就要求賬本必須值得信賴。
比特幣採用一種特殊的資料結構區塊鏈/Blockchain來保障交易的不可篡改性, 每一個包含一批交易資料的區塊,同時也包含了前一個區塊的指紋:
在比特幣中,一個區塊的指紋是使用密碼學中常見的雜湊函式來實現的。 雜湊函式可以將大塊資料壓縮成精簡的表示,而且可以保證如果精簡 的表示不同,那麼其對應的原始資料也不同。
例如,在上圖中如果12#區塊被攻擊者篡改,那麼它的雜湊結果將不同於在 13#區塊中儲存的其原始指紋,這使得識別篡改的區塊這一任務很容易,或者 說篡改的難度很大 —— 攻擊者必須同時修改12#之後的所有區塊才能保證 指紋校驗成功。
另一方面,如果攻擊者直接篡改14#區塊(我們假設這是最後一個塊),那麼 顯然是可行的,因為它缺乏之後更多區塊的保護。這引入了在比特幣中常用 的一個概念:交易的確認數 / Confirmations。
交易一旦被確認打包到區塊中,它的確認數就是1,之後每增長一個區塊 則確認數加1。例如對於上圖中的標註交易,當鏈增長到14#塊時,該交易的 確認數就是3。
顯然一個交易的確認數越多,意味著攻擊者篡改交易的可能性越小。在比特幣 中的應用當中,交易的接收者通常需要在六個確認之後,才可以將該筆 交易視為成功。
三、去中心化機制
與當前流通的任何法幣都不同,比特幣是去中心化的,沒有一箇中央機構 來管理比特幣的發行與流通,因此比特幣網路是一個典型的P2P網路,在每個 (全)節點上都有完整的區塊鏈資料:
在這樣的分散式計算環境下,如何保證新的交易在各個節點區塊鏈中得以 一致的更新,就是經典的分散式一致性問題了 —— 每個節點都有可能提交 新的交易,而不同節點提交的交易也可能不相同,到底以哪個節點為準?
解決這種問題的經典方法就是(動態)選舉一個決策者,其他節點複製 決策者的行為即可避免節點之間的不一致了。比特幣的解決思路也一樣, 不過它採用了一種類似於搶答的機制來動態選擇勝出的節點,由勝出的 節點負責出塊並打包交易 —— 所有節點都同時求解同一個問題,最先得到結果 的節點獲勝並獲得出塊權利,其他節點則轉而求解下一次出塊的問題:
比特幣給出的問題不可以通過解析方法求解,節點必須在所有的可能 結果中暴力嘗試求解,由於勝出的節點可以獲得比特幣獎勵,使得 節點旳動機和行為頗為類似於淘金的西部牛仔,因此這一求解過程被 稱為挖礦/Mining。
理論上每個節點都有獲勝的概率,但顯然,在同樣的時間內,計算力強大的 節點會比其他節點嘗試的機會更多,因此獲勝的概率也越大 —— 在這種搶答機制下, 算力代替了智力,而這種依賴於暴力求解問題從而達成節點一致性的共識演算法 被稱為工作量證明/Proof Of Work。