文章目錄
- 區塊鏈的歷史
- 位元幣白皮書
- 傳統交易存在的問題
- 位元幣的解決方案
- 總結
區塊鏈的歷史
2008年10月31日,一個密碼學極客中本聰在“metzdowd.com(密碼朋克)”網站的郵件串列中發表了一篇論文,題為《位元幣:一種點對點的電子現金系統》,人稱“位元幣白皮書”,隨即,位元幣在極客圈和密碼朋克圈掀起了一股浪潮,
3年后,位元大陸創始人吳忌寒將位元幣白皮書翻譯成中文,并首次提出了”區塊鏈“一詞,此后,人們也用”區塊鏈“來描述位元幣的底層技術和設計思想,
隨著十余年的發展,區塊鏈技術蓬勃發展,加拿大Vitalik Buterin在2013年首次提出以太坊的概念,并于2014年成功上線支持圖靈完備的區塊鏈平臺—以太坊,通過以太坊,開發者第一次實作了在區塊鏈上發布智能合約的設想,
2015年12月,由Linux基金會主導并牽頭,IBM、Intel、Cisco等巨頭同時宣布了Hyperledger聯合專案成立,超級賬本將區塊鏈技術引入到聯盟鏈的應用場景中,為未來基于區塊鏈技術打造高效率的商業網路打下基礎,
而到了今天,在國家政策的號召下,區塊鏈技術的應用和創新正在加速發展,區塊鏈概念正在被更多的人接受,但是絕大多數人并不了解區塊鏈到底是什么,以及區塊鏈的由來,請繼續閱讀這篇文章,相信你能找到答案,
位元幣白皮書
要想深入理解區塊鏈思想,更好地應用區塊鏈技術,閱讀位元幣白皮書(下稱"白皮書")是必不可少的一步,限于篇幅,這里就直接給出某場景,如下:
A在購物商城上購買B的貨物,通過第三方金融機構來處理電子交付,
傳統交易存在的問題
上面場景會存在什么問題呢?
- 交易信任問題:交易的前提是買賣雙方都信任第三方金融機構,但在某些場景下,并不存在完全可信的第三方機構,此時交易可能不會發生,甚至買賣房某一方上當
- 交易成本問題:一般交易程序只涉及到買賣雙方,第三方的介入增加了交易的成本,如交易時間、交易數量等
- 交易毀約問題:在某些情況下,交易可能存在反悔的可能,比如買方需要退貨、或者賣方終止交易,此時無端的耗費了某一方的資源,并降低了雙方的信任度
- 交易透明度問題:傳統的交易只發生在三方之間,對外界保密,因此存在內部交易等其他問題
因此,中本聰建立一個電子支付系統,此系統建立在密碼學基礎上(而不是信任),允許任意有意愿的雙方直接轉賬而不需要第三方介入,并且交易是不可撤銷的,這將保護賣方權益防止被騙,此外此系統應該是完全透明的,任何交易都對系統內的其他人可見,最后要保證系統是安全的,
位元幣的解決方案
信任問題
位元幣誕生之初就完全開源,任何用戶都可通過運行開源代碼從而接入區塊鏈網路,產生交易的代碼完全公開透明
所有位元幣交易都是基于密碼學的,也就是說交易是基于物理規則而不是信任的,其完全隔離了人為因素
交易記錄公開透明,位元幣(區塊鏈)的所有交易記錄都是公開透明的,所有人都可以在網路上查到每一筆交易記錄,
交易成本問題(去第三方)
系統內的用戶需要遵守一套規則(共識機制),以此實作去中心化,系統內人人平等,任何用戶下線或上線都不影響運行,
交易毀約問題
區塊鏈的資料結構和運行機制保證了所有資料都能真實記錄,無法被篡改,
**白皮書節選1:** 我們把一種電子幣定義成一條數字簽名鏈,
每一個所有者把幣轉給下一個人的時候,是通過將前一個交易的哈希和下一個所有者的公鑰進行數字簽名,
并把這些追加在幣的后面,收款人可以通過驗證數字簽名來確認鏈的所有者,

上面可以看到,每一條記錄都與上一條記錄相關,因此無法篡改之前的歷史記錄,并且由于位元幣是一種分布式記賬系統,不同節點間的資料完全同步,篡改系統內所有節點上的資料需要的作業量是不可能實作的,
雙花問題——共識機制
在交易發生時,存在一個無法避免的問題——雙花問題:收款人無法驗證其中的一個所有者是否同一個幣花了兩次(雙花),一個普遍的做法是引入一個信任的鑄幣廠,每次交易后幣必須回傳鑄幣廠,并再次發行新幣,只有直接從鑄幣廠發行的幣才被相信是沒有被雙花的,但這違背了去中心化的思想,
為了在無第三方參與的情況下,我們需要讓收款人知道幣并沒有被上一個交易者使用,僅有的可以確認某交易是否雙花的方法是知道所有交易,因此我們需要將交易對公眾進行廣播,
并且我們需要一個共識機制,那就是公眾要認同一個按收到的交易順序排列的歷史記錄,收款人需要證據來說明在每一筆交易的時候,大多數節點一致認為這個交易是第一時間到達的,(我的理解是如果存在交易雙花問題,那么在系統內的所有交易順序將會存在不同,比如某交易同時到達A、B,再經過共識排序后,A、B的交易串列將會不一致)
時間戳服務器——共識機制的前提
我們提出的解決方案從一個時間戳服務器開始,這個服務器作業方式是,對條目所在的區塊的哈希加蓋時間戳,并且廣泛的公布這些哈希,比如通過報紙或新聞組郵件,顯然,為了能進入這個哈希序列,時間戳證明的資料在那個時間必須存在,每一個時間戳和以前的時間戳,形成一條鏈,每一個追加的時間戳都是對前一個時間戳進行加強,
此時,每條發生的交易都存在一個時間戳,也就存在了排序的可能
作業量證明——實作時間戳服務器
為了基于點對點的基礎實作一個分布式的時間戳服務器,我們將需要一個作業量證明的系統,這個系統和亞當·貝克的哈希現金類似,而不是報紙或新聞組郵件,這個作業量包含尋找一個哈希值,比如用哈希演算法SHA-256,這個哈希值以若干0開頭,平均作業量和開頭的0的個數是指數關系,并且驗證很簡單,只需要執行一次單獨的哈希計算,
在我們的時間戳網路里,是這樣實作作業量證明的,就是不斷增加區塊里的一個臨時的數值,直到找到一個值使得區塊的哈希值滿足開頭0的個數的要求, 一旦CPU花費算力計算滿足了作業量證明的要求,這個區塊鏈就無法修改,除非重新計算,隨著后面的區塊不斷產生,想要改變這個區塊,需要重做它后面所有區塊的作業量,

并且隨著鏈長度的增加,落后的攻擊者追上的概率呈指數級減小,
網路運行
運行這個網路的步驟如下:
1) 新交易給所有節點廣播,
2) 每個節點將新交易放到一個區塊,
3) 每個節點開始為這個區塊尋找相應難度的作業量證明,
4) 當一個節點找到了這個作業量證明,把這個區塊廣播給所有節點,
5) 如果區塊里所有的交易是有效的并且是沒有被花費的,節點就會接受這個區塊,
6) 節點把這個區塊的哈希作為上一個哈希,并開始進行作業以競爭創建下一個區塊,
節點總是認為最長的鏈是正確的,并且不斷的作業去延長它,如果兩個節點同時廣播下一個區塊,一些節點可能接受其中一個,也可能是另一個,這種情況下,他們在最先收到的區塊上作業,但是也會保存另外一個分支以防它會變得更長,當下一個作業量被找到并且一個分支變得更長時,這種情況就會被打破,在另外一個分支上作業的節點將會切換到這個長的鏈上,
新交易廣播不一定要廣播到所有節點,只要他們能到達很多節點,這個交易很快就會進入下一個塊,區塊廣播也能接受訊息丟失,如果一個節點沒有收到區塊,當它收到下一個塊時會發現自己少了一個區塊,它就會請求來獲得少的這個區塊,
總結
上面,我對為什么提出位元幣(區塊鏈技術)給出了自己的看法,并借助白皮書來簡略的介紹了一下位元幣的實作,下一篇將繼續深入介紹位元幣的實作,
順嘴一提,我本人之前是做區塊鏈落地實作,在一次面試中與面試官交流時,其旁征博引使我自慚形穢,尤其是在區塊鏈基礎知識方面,因此寫下此文,以此感謝面試官的教誨!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304090.html
標籤:java
