第兩百二十一章 區塊鏈(2/2)
這個時候小王需要廣播的交易信息就是:
之前交易小白支付給小王60BTC,你支付給小王60BTC。
當前交易小白支付給小黃20BTC,你支付給小黃10BTC,你支付給小黃10BTC。
這裡說一句,「你支付給小王20BTC」中的20BTC是一個整體,無法分割,因此無法只從中拿出10BTC交易。
還有最後一個改進就是不留證明,改留比特幣帳號。就是用戶A並不用留下自己的名字,而是用一個字符串來代表自己進行交易,同理,用戶B和C也是如此,只留下了一個字符串。
所以你們室友在帳本里都不寫名字,而是寫下跟各自對應的字符串,即比特幣帳戶。
雖然對於你們四個人的寢室這純屬脫褲子放屁,但如果對於規模更大的系統,比如前文提到的整個學校而言,這種操作可以極大提升隱私性。
我們只能知道每個帳戶,而無法知道誰擁有這個帳戶,這就保證了隱私性。
而區塊鏈呢,就是從這一節開始進入正題。
前面我們提到了這個帳本是分布式存儲的,每個人都有一個自己獨立管理的帳本。
當這個帳本系統變得很大時,一致性問題就必須要考慮。
比如,如果你有室友在交易記錄發布時不在寢室,那麼他就錯了這次消息,使得這次消息不會出現在他的帳本里。
換回比特幣系統,也就是部分電腦可能處於關機或者未聯網狀態,會錯過部分交易。
此外,還可能會有黑客入侵部分電腦,篡改交易記錄。
此外,還有一個更嚴重的問題就是,實際網絡拓撲非常複雜,鏈路質量的隨機性很大。
因此,如果用戶A(假設帳戶里有10BTC)連續廣播兩條相互矛盾的消息,比如:
交易信息1:用戶A支付10BTC給B。
交易信息2:用戶A支付10BTC給C。
有的讀者應該會覺得,那我們就採信先收到的交易信息1,忽略與之矛盾的腳印信息2不就行了。
但問題是,因為網絡鏈路的複雜性,所以很可能存在部分用戶先收到交易信息1,又有部分用戶先收到交易信息2。如果依靠先後順序辨別有效性,那麼就會存在不同用戶記錄的交易信息不一致。
所以為了解決這個問題,中本聰才提出了區塊鏈的概念。
每個用戶如果願意,都可以整理自己從網絡中接收到的交易信息,然後檢查其是否合理,也就是每筆交易是否由足夠余,然後數字簽名是否正確後,再將交易記錄打包成一個區塊。
因此每個交易記錄都是以區塊的形式存儲,然後再廣播到系統中的其他用戶中。
而區塊之間相互連接,形成一條由系統內全體用戶共同維護的區塊鏈。
因此其他用戶收到廣播的區塊時,就會把這個區塊加到自己維護的帳本,也就是區塊鏈的尾部。
但如果只是這樣,並沒有解決任何問題。網際網路節點遍布全球,廣播過程也需要時間,因此肯定會存在不同節點收到不同區塊存儲的問題。
所以如此一來這個網絡就亂套了。
而為了降低傳播時間的影響,一個簡單粗暴的方式就是從系統設計中就限制區塊生成的速度。
所以比特幣系統的核心思想采就是用算力限制區塊的生成速度。
比特幣系統要求,每個用戶在發布新區塊前,必須先完成一個任務。
這個任務就是根據前一區塊的一些信息加上新區快的一些信息,生成一個字符串S,選擇一個字符串B,與S合併成「BC」,且要求「BC」的哈希映射滿足某個條件,比如映射結果的前72位為0。
所以上面的第二步,除了一個個試以外是沒有捷徑的,而且結果是否滿足要求可以快速試出。
舉個例子就相當於給你一個銀行卡,讓你挨個試密碼。
那你沒有任何辦法,只能000000到999999挨個試驗,最後雖然能試出來,但也會花費大量時間。
而且你把試出來的結果告訴別人後,別人可以很快驗證你的結果是否正確。
但是時間恰好是我們宇宙中最稀缺的資源。
因此可以調節這個難度,比如使得系統中所有平均每二十分鐘才會有一台設備完成要求的任務,猜出符合要求的字符串B。
如此一來,撞車的概率就會大大降低。補充一句,這個難度是不斷調節的,以適應硬體算力的提升。
雖然概率大大降低,但仍然無法排除存在撞車的概率。因此,區塊鏈驗證中最核心的思想就是——相信最長的區塊鏈。
也就是在原有的到區塊鏈N的情況後,短時間內出現了兩個不同的區塊,這個時候,我們需要做的只有一件事情,那就是等待。
因為同時產生區塊的小概率事件,總不可能連續發生。
所以如果有人想對區塊鏈造假,那麼他就需要一直搶先生成假的新區塊,並廣播出去。
這就要求造假者生產新區塊的速度,要快於系統中的其他所有用戶的生成能力之和。
換句話說,造假者需要用戶有和其他用戶算力之和匹敵的算力。
假設這個造假者擁有系統總算力的百分之八十,而剩下用戶擁有百分之二十……
所以……這個假設顯然不可能。如此一來,在造假者廣播了一個假的區塊後,就有百分之八十的概率先於其他用戶生成新區塊,然後連在自己之前生成的假區塊後,此時造假才有可能成功。
但實際是,每個用戶用的算力相比系統總算力都是微不足道的。
這就使得造假變得不可能,也使得造假的成本變得無法接受。
系統為了鼓勵大家生成新的區塊,於是在開始時就定下規則:每當一個新區塊加入主鏈,這個區塊的發行者就會被贈與50個BTC;然後每二十一萬個區塊後,獎勵額度縮水一半;這也就解釋了,為什麼比特幣上限不算多了。
因為這個機制牢牢限制死了比特幣的總量,使得比特幣不可能超發,濫發。