從比特幣的瘋漲的浪潮爷绘,再到人們意識到比特幣的泡沫。現(xiàn)在人們開始回歸到比特幣背后技術(shù)支持进倍,而這具有革命性意義的技術(shù)被稱為區(qū)塊鏈技術(shù)土至。我為了更準(zhǔn)確地去理解區(qū)塊鏈,決定先研究中本聰?shù)恼撐模?a target="_blank" rel="nofollow">https://bitcoin.org/bitcoin.pdf)開始入手猾昆,然后運(yùn)行一個(gè)節(jié)點(diǎn)來實(shí)踐比特幣陶因,最后才大量閱讀文獻(xiàn)來理解區(qū)塊鏈。下面以比特幣開始垂蜗,慢慢闡述我對區(qū)塊鏈的理解楷扬。
一、區(qū)塊鏈總覽
個(gè)人覺得贴见,要從淺層理解為什么不可篡改烘苹,為什么需要浪費(fèi)大量資源來做proof-of-Work這種“奇怪”的機(jī)制,以及如何解決double-pay問題等等核心的問題片部,要首先弄清楚區(qū)塊鏈技術(shù)的業(yè)務(wù)架構(gòu)圖镣衡,從協(xié)議層開始分析,再到應(yīng)用層分析。下面先從最底層開始說起廊鸥。
1. 交易(Transactions)
交易是區(qū)塊鏈的最小單元望浩,也是電子現(xiàn)金系統(tǒng)最重要的一點(diǎn)。比特幣的所以設(shè)計(jì)都是為了確保交易可以穩(wěn)定地被創(chuàng)建惰说,存儲(chǔ)磨德,驗(yàn)證。所以先討論電子現(xiàn)金的實(shí)現(xiàn)和如何實(shí)現(xiàn)交易的助被。
在 http://www.weidai.com/bmoney.txt 上有提到(比特幣的白皮書關(guān)于電子現(xiàn)金的引用)
"The transfer of money. If Alice (owner of pseudonym K_A) wishes to
transfer X units of money to Bob (owner of pseudonym K_B), she broadcasts
the message "I give X units of money to K_B" signed by K_A. Upon the
broadcast of this message, everyone debits K_A's account by X units and
credits K_B's account by X units, unless this would create a negative
balance in K_A's account in which case the message is ignored."
如上圖所示剖张,檔Owner1跟Owner2交易的時(shí)候。
- 先用Owner1的公鑰來驗(yàn)證這個(gè)錢是否是屬于Owner1的
- 使用Owner1的私鑰揩环,對前一次交易的hash值和Owner2公鑰進(jìn)行數(shù)字簽名
- 一條包含交易雙方加密貨幣地址、數(shù)量幅虑、時(shí)間戳和有效簽名等信息(其中
時(shí)間戳由timestampserver提供)丰滑,然后會(huì)廣播到全網(wǎng)絡(luò)。 - 生成交易的節(jié)點(diǎn)和其他節(jié)點(diǎn)都要驗(yàn)證這個(gè)交易正確性
- 成功交易倒庵,寫入?yún)^(qū)塊鏈
顯然褒墨,這個(gè)實(shí)現(xiàn)難點(diǎn)是在于驗(yàn)證交易。還得深趴一下如何驗(yàn)證交易擎宝。
1.2. 交易驗(yàn)證
根據(jù)中本聰?shù)恼撐挠袈瑁?yàn)證交易很簡單,可以不用遍歷全節(jié)點(diǎn)就可以查詢交易記錄是否存在Merkle樹中绍申,如果存在噩咪,那么就相當(dāng)于區(qū)塊接受了交易,交易驗(yàn)證成功极阅。然而論文并沒有討論交易檢驗(yàn)的細(xì)節(jié)胃碾,這讓十分困惑。(原文如下)
It is possible to verify payments without running a full network node. A user only needs to keep
a copy of the block headers of the longest proof-of-work chain, which he can get by querying
network nodes until he's convinced he has the longest chain, and obtain the Merkle branch
linking the transaction to the block it's timestamped in. He can't check the transaction for
himself, but by linking it to a place in the chain, he can see that a network node has accepted it,
and blocks added after it further confirm the network has accepted it.
后來為了弄清楚底層實(shí)現(xiàn)筋搏,拜讀了mastering bitcoin(https://unglueit-files.s3.amazonaws.com/ebf/05db7df4f31840f0a873d6ea14dcc28d.pdf)P128頁
1.2.1. P2PKH(公開哈希)
P2PKH是礦工用來檢驗(yàn)交易是否正確的算法仆百。實(shí)現(xiàn)時(shí)為了保證穩(wěn)定性,采用了圖靈無狀態(tài)的設(shè)計(jì)語言奔脐。
(https://0dayzh.gitbooks.io/bitcoin_developer_guide/content/p2pkh_script_validation.html)
假設(shè)Alice轉(zhuǎn)100Bit給Bob俄周,廣播全網(wǎng)絡(luò)的時(shí)候需要攜帶三個(gè)關(guān)鍵信息,Bob提供的公鑰髓迎,Alice提供的公鑰Hash峦朗,Bob提供的簽名
- 先對Bob的公鑰進(jìn)行Hash運(yùn)算
- 判斷Bob公鑰的Hash跟Alice提供的Hash是否相同
- 檢測Bob 提供的簽名是不是授權(quán)了Bob提供的現(xiàn)在認(rèn)證的公鑰
- 如果2和3都成功,那么就是檢驗(yàn)成功
2. 區(qū)塊鏈
正如總覽所說竖般,先討論完交易之后甚垦,就討論區(qū)塊以及區(qū)塊鏈。交易信息是通過Merkle樹來進(jìn)行整合到區(qū)塊里面的,每一個(gè)區(qū)塊互相以鏈狀結(jié)構(gòu)連接結(jié)構(gòu)就是區(qū)塊鏈艰亮,如下圖所示闭翩。以問題來帶入來說明區(qū)塊鏈的技術(shù)會(huì)比較好,以區(qū)塊鏈主要要解決的問題來帶入迄埃。
[圖片上傳失敗...(image-a78d30-1519541860650)]
2.1. 雙重支付問題(double-pay)
The problem of course is the payee can't verify that one of the owners did not double-spend
the coin. A common solution is to introduce a trusted central authority, or mint, that checks every
transaction for double spending. After each transaction, the coin must be returned to the mint to
issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent.
The problem with this solution is that the fate of the entire money system depends on the
company running the mint, with every transaction having to go through them, just like a bank
為了解決這個(gè)問題疗韵,中本聰提出一個(gè)(Timestamp Server),它用于對以區(qū)塊形式存在的一組數(shù)據(jù)實(shí)施隨機(jī)散列而加上時(shí)間戳侄非,并且對其隨機(jī)散列進(jìn)行廣播蕉汪。而我們需要構(gòu)建一組分散化的時(shí)間服務(wù)器,我們還需要引入工作量來防止作弊現(xiàn)象逞怨。(https://0dayzh.gitbooks.io/bitcoin_developer_guide/proof_of_work.html)
因?yàn)樾湃巫铋L鏈者疤,所以假如攻擊者要修改記錄,那么就需要把這個(gè)最長鏈全部修改叠赦。但是每一個(gè)區(qū)塊的Hash值計(jì)算都要需要很大的算力的驹马,并且最長鏈越長,攻擊者的代價(jià)就越高除秀,難度就越高糯累。
2.2. 工作量證明問題
上面也提及到,區(qū)塊挖掘用算力來做代價(jià)可以讓攻擊者花費(fèi)昂貴的代價(jià)册踩。但是這個(gè)算力的工作量控制也是一個(gè)問題泳姐。比特幣是這樣讓礦工做這樣的事情:"算出一個(gè)不超過某個(gè)特定值的區(qū)塊頭的哈希值。比如暂吉,如果這個(gè)哈希值最大為 2^256-1胖秒,你可以證明你算出一個(gè)小于 2^255 的哈希值做了至多兩次組合"。這個(gè)明顯是一個(gè)NP-Hard問題借笙。而且扒怖,比特幣設(shè)定了一個(gè)線性的概率,目標(biāo)閾值越小业稼,你需要嘗試計(jì)算的哈希值次數(shù)越多(平均來說)盗痒。
為了控制幣區(qū)出塊速度,比特幣使用了一個(gè)會(huì)不斷增加的Nonce常數(shù)低散。公式如下俯邓。因?yàn)殚撝翟叫。y度越大熔号。所以出塊的難度會(huì)越來越大稽鞭。
目標(biāo)閾值 = 目標(biāo)閾值 / Nonce常數(shù)
2.3. 無知識交易驗(yàn)證問題
在上面討論交易的時(shí)候就已經(jīng)說過,用戶需要查找區(qū)塊記錄來判斷是否交易成功引镊;但是為了不要用戶獲取區(qū)塊內(nèi)容朦蕴,但是又可以支持快速判斷用戶是否用戶對應(yīng)的Hash值篮条。比特幣使用了Merkle樹,Merkle支持零知識證明吩抓。構(gòu)造一個(gè)默克爾樹涉茧,公布 N0,N1疹娶,N4伴栓,Root,D0 擁有者可以很容易檢測 D0 存在雨饺,但不知道其它內(nèi)容钳垮。
2.4. 一致性問題,共識機(jī)制(解決拜占庭問題)
在分布式系統(tǒng)中额港,一致性(Consistency饺窿,早期也叫 Agreement)是指對于系統(tǒng)中的多個(gè)服務(wù)節(jié)點(diǎn),給定一系列操作移斩,在協(xié)議(往往通過某種共識算法)保障下短荐,試圖使得它們對處理結(jié)果達(dá)成某種程度的一致。
工作量證明是礦工在處理交易數(shù)據(jù)(對數(shù)據(jù)也是進(jìn)行哈希)的同時(shí)不斷的進(jìn)行哈希計(jì)算蜻牢,求得一位前23位為0的哈希值卡辰,這個(gè)值成為nonce黃金數(shù)。當(dāng)全網(wǎng)有一位礦工哈希出nonce時(shí),他就會(huì)把自己打包的區(qū)塊公布出去啦租,其他節(jié)點(diǎn)收到區(qū)塊驗(yàn)證區(qū)塊后就會(huì)一致性認(rèn)為這個(gè)區(qū)塊接到了區(qū)塊鏈上,就繼續(xù)進(jìn)行下一個(gè)區(qū)塊的打包和哈希計(jì)算深员。在這個(gè)過程中嗓违,中本聰大神是通過算力的比拼犧牲了一部分最終一致性(因?yàn)闀?huì)有分叉的產(chǎn)生)并且需要等待多個(gè)確認(rèn),但是這種簡單暴力的方法卻保證了整個(gè)區(qū)塊鏈系統(tǒng)的合法性哺徊,而且把區(qū)塊鏈系統(tǒng)的健壯性提升到極致室琢,就算全網(wǎng)只剩下一個(gè)節(jié)點(diǎn)運(yùn)行,這個(gè)區(qū)塊鏈系統(tǒng)還是會(huì)繼續(xù)運(yùn)行下去落追。最后POW也充分提高了區(qū)塊鏈系統(tǒng)的安全性盈滴,依靠51%攻擊理論去破壞區(qū)塊鏈系統(tǒng)是只有政府或者瘋子才會(huì)采取的方法。
二轿钠、區(qū)塊鏈前景
This is the distributed trust network that the Internet always needed and never had. ---來自《區(qū)塊鏈革命》
比特幣實(shí)現(xiàn)的實(shí)質(zhì)就是一個(gè)分布式可信網(wǎng)絡(luò)巢钓,在區(qū)塊鏈出現(xiàn)之前,從沒發(fā)生過兩個(gè)或者多個(gè)參與方之間直接進(jìn)行可信的交易疗垛≈⑿冢總的來說,區(qū)塊鏈技術(shù)具有的特點(diǎn)是分布式的贷腕,加密的背镇,公開的一個(gè)分布式賬本咬展。
這段時(shí)間一直在思考,也有接觸一些區(qū)塊鏈的產(chǎn)品瞒斩。毫無疑問破婆,這是一個(gè)革命性的技術(shù)。比特幣熱潮后的冷靜讓我們更加關(guān)注技術(shù)本身意義济瓢。個(gè)人認(rèn)為荠割,區(qū)塊鏈技術(shù)可以創(chuàng)造第二代互聯(lián)網(wǎng)。我們可以在區(qū)塊鏈上創(chuàng)建軟件旺矾、服務(wù)蔑鹦、商業(yè)模式、市場箕宙、機(jī)構(gòu)甚至是政 府事務(wù)方面的原則嚎朽。基于區(qū)塊鏈的應(yīng)用產(chǎn)品有以下的優(yōu)點(diǎn):
- 網(wǎng)絡(luò)化誠信
- 分布式權(quán)力
- 把價(jià)值作為激勵(lì)
- 安全性
- 隱私
- 權(quán)利保護(hù)
- 包容性/惠普
不過現(xiàn)在顯然還在萌芽階段柬帕,國家和社會(huì)都還不知道怎么用好區(qū)塊鏈哟忍,或者說從中心化到去中心化這個(gè)階段不僅僅是技術(shù)可以決定的,期間困難重重陷寝。但是盡管如此锅很,我依然很看好這個(gè)技術(shù)。
這段時(shí)間凤跑,我也關(guān)注了以下幾個(gè)比較區(qū)塊鏈產(chǎn)品爆安。
以太坊
白皮書:http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6
官網(wǎng):https://www.ethereum.org/
技術(shù)特點(diǎn):
開發(fā)了Solidity合同語言
教程:https://www.ethereum.org/token
與傳統(tǒng)的編程語言不同,Solidity異常簡單仔引。我們可以很簡單地編寫自己的智能合同扔仓,基于以太坊。這是我最看好的技術(shù)特定咖耘。
常見應(yīng)用:
1. ICO眾籌
https://www.ethereum.org/crowdsale
沒有第三方平臺(tái)翘簇,多了信任,少了跑路儿倒。不過感覺很多還是在圈錢版保。最近了解了一下,中大的陳偉立博士剛剛被采納的CCFA論文《Detecting Ponzi Schemes on Ethereum: Towards Healthier Blockchain Technology》义桂。里面就是說用機(jī)器學(xué)習(xí)的方法來識別龐氏騙局找筝。我與陳博士聯(lián)系了一下,也交流了想法慷吊。我們都很看好以太坊的智能合約袖裕。但是現(xiàn)在很多都還沒成熟,圈錢套路的很多溉瓶。
2.創(chuàng)建一個(gè)民主自治組織
對這個(gè)不太了解急鳄,引用官方的一句話:
"On the Blockchain, no one knows you're a fridge"
這是一個(gè)絕對平等的組織谤民,沒有任何階級歧視,機(jī)器人和人類一視同仁疾宏。個(gè)人覺得理念不錯(cuò)的张足,感覺會(huì)在社區(qū)先發(fā)展起來。而區(qū)塊鏈的最大助力就是社區(qū)的力量了坎藐。也是看好为牍。
3. 構(gòu)建去中心應(yīng)用
在金融,保險(xiǎn)這些行業(yè)可能會(huì)率先進(jìn)入去中心化岩馍,降低信托成本的革命碉咆。不過感覺還是很多阻礙,個(gè)人保持觀望吧蛀恩。主要還是看國家和高管的態(tài)度疫铜。
1. NAS(星云幣)
星云是一個(gè)去中心化的搜索引擎。說實(shí)話双谆,我暫時(shí)沒看懂壳咕。技術(shù)介紹(https://nebulas.io/cn/technology.html)。 站在技術(shù)的層面顽馋,可以看出NAS是一個(gè)很牛逼谓厘,很牛逼的東西。其中自進(jìn)化能力寸谜,我甚是不解庞呕。據(jù)說可以避免硬分叉(以太坊就是從以太幣硬分叉出來的)。
不過據(jù)我了解程帕,NAS的Merkle樹很先進(jìn),并且NAS解決拜占庭問題是另外一種方法不是像比特幣那樣基于算力的地啰。
如果沒有記錯(cuò)的化愁拭,應(yīng)該是使用dBFT:小蟻區(qū)塊鏈(delegated BFT,授權(quán)拜占庭容錯(cuò)機(jī)制)
優(yōu)點(diǎn):
- 專業(yè)化的記賬人
- 可以容忍任何類型的錯(cuò)誤
- 記賬由多人協(xié)同完成亏吝,每一個(gè)區(qū)塊都有最終性岭埠,不會(huì)分叉
- 算法的可靠性有 嚴(yán)格的數(shù)學(xué)證明
應(yīng)用落地我不太了解,不過我挺看好這個(gè)技術(shù)蔚鸥。
2.SMT
比較關(guān)注的是SMT惜论,概念很贊!但是官網(wǎng)和白皮書都丑得難以接受止喷,怪不得很難發(fā)展馆类。不懂包裝。(http://smartmesh.io/)
SmartMesh:基于區(qū)塊鏈的物聯(lián)網(wǎng)底層協(xié)議弹谁,連接全球手機(jī)的P2P網(wǎng)絡(luò)乾巧。其實(shí)物聯(lián)網(wǎng)是很需要區(qū)塊鏈去幫助進(jìn)一次革命的句喜。SmartMesh是物聯(lián)網(wǎng)的底層協(xié)議,它可以讓網(wǎng)絡(luò)設(shè)備在無網(wǎng)情況下實(shí)現(xiàn)相互連接沟于,同時(shí)咳胃,它內(nèi)置區(qū)塊鏈輕節(jié)點(diǎn),可以實(shí)現(xiàn)無網(wǎng)的通信旷太、無網(wǎng)支付展懈、無網(wǎng)游戲等。(注意是無網(wǎng)9╄怠存崖!無網(wǎng)!J雀怠=鹁洹)
其實(shí)在偏遠(yuǎn)地區(qū),接近20億人吧(好像有人統(tǒng)計(jì)過)吕嘀,網(wǎng)絡(luò)條件都很差违寞,無法進(jìn)行網(wǎng)絡(luò)支付。如果這個(gè)技術(shù)落地了偶房,將會(huì)直接推動(dòng)整個(gè)地球的生產(chǎn)力趁曼。
至于其他,就沒有多大的關(guān)注了棕洋。很看好以太坊挡闰。其實(shí)關(guān)注的地方還遠(yuǎn)遠(yuǎn)不止這么點(diǎn),但是限于篇幅問題掰盘,就到此為止吧摄悯。總的來說愧捕,區(qū)塊鏈技術(shù)確實(shí)具有跟AI奢驯,VR等未來的技術(shù)一起討論的價(jià)值,相對來說需要研究人員有很高的開發(fā)能力和學(xué)習(xí)能力次绘,前景很看好瘪阁。