基本原理
區(qū)塊鏈的基本原理理解起來并不難晶丘∮行颍基本概念包括:
- 交易(Transaction):一次操作,導致賬本狀態(tài)的一次改變晕鹊,如添加一條記錄松却;
- 區(qū)塊(Block):記錄一段時間內發(fā)生的交易和狀態(tài)結果暴浦,是對當前賬本狀態(tài)的一次共識;
- 鏈(Chain):由一個個區(qū)塊按照發(fā)生順序串聯(lián)而成晓锻,是整個狀態(tài)變化的日志記錄歌焦。
如果把區(qū)塊鏈作為一個狀態(tài)機,則每次交易就是試圖改變一次狀態(tài)砚哆,而每次共識生成的區(qū)塊同规,就是參與者對于區(qū)塊中交易導致狀態(tài)改變結果的確認
比特幣中的區(qū)塊鏈
客戶端發(fā)起一項交易后,會廣播到網絡中并等待確認窟社。網絡中的節(jié)點會將一些等待確認的交易記錄打包在一起(此外還要包括此前區(qū)塊的哈希值等信息),組成一個候選區(qū)塊绪钥。然后灿里,試圖算出一道難題(找到一個 nonce 串放到區(qū)塊里,使得候選區(qū)塊的 hash 結果滿足一定條件(比如小于某個值))程腹。一旦算出來這個區(qū)塊在格式上就合法了匣吊,就可以進行全網廣播。大家拿到提案區(qū)塊寸潦,進行驗證色鸳,發(fā)現(xiàn)確實符合約定條件了,就承認這個區(qū)塊是一個合法的新區(qū)塊见转,被添加到鏈上命雀。當然,在實現(xiàn)上還會有很多的細節(jié)斩箫。
區(qū)塊鏈的抽象特征:
- 分布式的數據記錄本
- 只允許添加吏砂、不允許刪除
- 其結構是一個線性的鏈表,由一個個“區(qū)塊”串聯(lián)組成
- 新的數據要加入乘客,必須放到一個新的區(qū)塊中狐血,而這個塊(以及塊里的交易)是否合法,可以通過一些手段快速檢驗出來
- 維護節(jié)點都可以提議一個新的區(qū)塊易核,然而必須經過一定的共識機制來對最終選擇的區(qū)塊達成一致
比特幣中的區(qū)塊信息
- 賬戶匈织、地址:非對稱加密
- 交易信息:付款人地址、付款人簽字牡直、付款人資金來源缀匕、交易金額、收款人地址碰逸、收款人公鑰弦追、時間戳
- 交易驗證:是否已被處理過、信息是否合法
- 區(qū)塊:版本號花竞、上一個區(qū)塊HASH劲件、交易集合的Merkle樹根HASH掸哑、時間戳、難度指標零远、Nonce苗分、交易個數
Hash算法
- 正向快速:給定明文和 hash 算法,在有限時間和有限資源內能計算出 hash 值
- 逆向困難:給定(若干) hash 值牵辣,在有限時間內很難(基本不可能)逆推出明文
- 輸入敏感:原始輸入信息修改一點信息摔癣,產生的 hash 值看起來應該都有很大不同
- 沖突避免:很難找到兩段內容不同的明文,使得它們的 hash 值一致(發(fā)生沖突)
Merkle樹
底層數據的任何變動纬向,都會傳遞到其父親節(jié)點择浊,一直到樹根
- 快速比較大量數據
- 速定位修改
- 零知識證明
PoW工作量證明
- Proof of Work,通過計算來猜測一個數值(nonce)逾条,得以解決規(guī)定的 hash 問題琢岩。保證在一段時間內,系統(tǒng)中只能出現(xiàn)少數合法提案
- 參與 PoW 計算比賽的人师脂,如果有人惡意破壞担孔,需要付出大量的經濟成本
- 分叉也能保證一致性:例如超市排隊
hash 問題具有不可逆的特點,因此吃警,目前除了暴力計算外糕篇,還沒有有效的算法進行解決。反之酌心,如果獲得符合要求的 nonce拌消,則說明在概率上是付出了對應的算力。誰的算力多安券,誰最先解決問題的概率就越大拼坎。當掌握超過全網一半算力時,從概率上就能控制網絡中鏈的走向完疫。這也是所謂 51% 攻擊 的由來泰鸡。
參與 PoW 計算比賽的人,將付出不小的經濟成本(硬件壳鹤、電力盛龄、維護等)。當沒有成為首個算出的“幸運兒”時芳誓,這些成本都將被沉沒掉余舶。這也保障了,如果有人惡意破壞锹淌,需要付出大量的經濟成本匿值。也有設計試圖將后算出結果者的算力按照一定比例折合進下一輪比賽考慮。
超市付款需要排成一隊赂摆,可能有人不守規(guī)矩要插隊挟憔。超市管理員會檢查隊伍钟些,認為最長的一條隊伍是合法的,并讓不合法的分叉隊伍重新排隊绊谭。只要大部分人不傻政恍,就會自覺在最長的隊伍上排隊。
SHA256D(Blockheader) < F(nBits)
挖礦
- 挖礦是參與維護比特幣網絡的節(jié)點达传,通過協(xié)助生成新區(qū)塊來獲取一定量新增的比特幣
- 每 10 分鐘左右生成一個不超過 1 MB 大小的區(qū)塊
- 每個區(qū)塊的成功提交者可以得到系統(tǒng) 12.5 個比特幣的獎勵(一定區(qū)塊數后才能使用)
- 每個區(qū)塊的獎勵一開始是 50 個比特幣篙耗,每隔 21 萬個區(qū)塊自動減半,即 4 年時間宪赶,最終比特幣總量穩(wěn)定在 2100 萬個
比特幣的這種基于算力的共識機制被稱為 Proof of Work(PoW)宗弯。目前,要讓 hash 結果滿足一定條件并無已知的啟發(fā)式算法搂妻,只能進行暴力嘗試蒙保。嘗試的次數越多,算出來的概率越大叽讳。通過調節(jié)對 hash 結果的限制,比特幣網絡控制約 10 分鐘平均算出來一個合法區(qū)塊坟募。算出來的節(jié)點將得到區(qū)塊中所有交易的管理費和協(xié)議固定發(fā)放的獎勵費(目前是 12.5 比特幣岛蚤,每四年減半)。也即俗稱的挖礦懈糯。
很自然會有人問涤妒,能否進行惡意操作來破壞整個區(qū)塊鏈系統(tǒng)或者獲取非法利益。比如不承認別人的結果赚哗,拒絕別人的交易等她紫。實際上,因為系統(tǒng)中存在大量的用戶屿储,而且用戶默認都只承認他看到的最長的鏈贿讹。只要不超過一半的用戶協(xié)商,最終最長的鏈將很大概率上是合法的鏈够掠,而且隨著時間增加民褂,這個概率會越大。
閃電網絡
比特幣的交易網絡最為人詬病的一點便是交易性能:全網每秒 7 筆的交易速度疯潭,遠低于傳統(tǒng)的金融交易系統(tǒng)赊堪;同時,等待 6 個塊的可信確認導致約 1 個小時的最終確認時間竖哩。
閃電網絡的主要思路十分簡單 — 將大量交易放到比特幣區(qū)塊鏈之外進行哭廉。
比特幣的區(qū)塊鏈機制自身提供了很好的可信保障,但是很慢相叁;另一方面考慮遵绰,對于大量的小額交易來說辽幌,是否真實需要這么高的可信性?閃電網絡通過智能合約來完善鏈下的交易渠道街立。
核心的概念主要有兩個:RSMC(Recoverable Sequence Maturity Contract)和 HTLC(Hashed Timelock Contract)舶衬。前者解決了鏈下交易的確認問題,后者解決了支付通道的問題赎离。
RSMC
Recoverable Sequence Maturity Contract逛犹,中文可以翻譯為“可撤銷的順序成熟度合同”。這個詞很繞梁剔,其實主要原理很簡單虽画,就是類似準備金機制。
我們先假定交易雙方之間存在一個“微支付通道”(資金池)荣病。雙方都預存一部分資金到“微支付通道”里码撰,之后每次交易,就對交易后的資金分配方案共同進行確認个盆,同時簽字作廢舊的版本脖岛。當需要提現(xiàn)時,將最終交易結果寫到區(qū)塊鏈網絡中颊亮,被最終確認柴梆。可以看到终惑,只有在提現(xiàn)時候才需要通過區(qū)塊鏈绍在。
任何一個版本的方案都需要經過雙方的簽名認證才合法。任何一方在任何時候都可以提出提現(xiàn)雹有,提現(xiàn)需要提供一個雙方都簽名過的資金分配方案(意味著肯定是某次交易后的結果)偿渡。在一定時間內,如果另外一方提出證明表明這個方案其實之前被作廢了(非最新的交易結果)霸奕,則資金罰沒給質疑成功方溜宽。這就確保了沒人會拿一個舊的交易結果來提現(xiàn)。
另外质帅,即使雙方都確認了某次提現(xiàn)坑质,首先提出提現(xiàn)一方的資金到賬時間要晚于對方,這就鼓勵大家盡量都在鏈外完成交易临梗。
HTLC
微支付通道是通過 Hashed Timelock Contract 來實現(xiàn)的涡扼,中文意思是“哈希的帶時鐘的合約”。這個其實就是限時轉賬盟庞。理解起來其實也很簡單吃沪,通過智能合約,雙方約定轉賬方先凍結一筆錢什猖,并提供一個哈希值票彪,如果在一定時間內有人能提出一個字符串红淡,使得它哈希后的值跟已知值匹配(實際上意味著轉賬方授權了接收方來提現(xiàn)),則這筆錢轉給接收方降铸。
不太恰當的例子在旱,約定一定時間內,有人知道了某個暗語(可以生成匹配的哈希值)推掸,就可以拿到這個指定的資金桶蝎。
推廣一步,甲想轉賬給丙谅畅,丙先發(fā)給甲一個哈希值登渣。甲可以先跟乙簽訂一個合同,如果你在一定時間內能告訴我一個暗語毡泻,我就給你多少錢胜茧。乙于是跑去跟丙簽訂一個合同,如果你告訴我那個暗語仇味,我就給你多少錢呻顽。丙于是告訴乙暗語,拿到乙的錢丹墨,乙又從甲拿到錢廊遍。最終達到結果是甲轉賬給丙。這樣甲和丙之間似乎構成了一條完整的虛擬的“支付通道”带到。
HTLC 的機制可以擴展到多個人昧碉,大家可以想象一下英染,想象出來了就理解了閃電網絡揽惹。
閃電網絡
RSMC 保障了兩個人之間的直接交易可以在鏈下完成,HTLC 保障了任意兩個人之間的轉賬都可以通過一條“支付”通道來完成四康。整合這兩種機制搪搏,就可以實現(xiàn)任意兩個人之間的交易都可以在鏈下完成了。
在整個交易中闪金,智能合約起到了中介的重要角色疯溺,而區(qū)塊鏈則確保最終的交易結果被確認。
現(xiàn)實中的比特幣區(qū)塊鏈
中本聰在創(chuàng)世區(qū)塊中創(chuàng)建的第一個區(qū)塊
區(qū)塊鏈的分類
根據參與者的不同哎垦,可以分為公開(Public)鏈囱嫩、聯(lián)盟(Consortium)鏈和私有(Private)鏈。
公開鏈漏设,顧名思義墨闲,任何人都可以參與使用和維護,典型的如比特幣區(qū)塊鏈郑口,信息是完全公開的鸳碧。
如果引入許可機制盾鳞,包括私有鏈和聯(lián)盟鏈兩種。
私有鏈瞻离,則是集中管理者進行限制腾仅,只能得到內部少數人可以使用,信息不公開套利。
聯(lián)盟鏈則介于兩者之間推励,由若干組織一起合作維護一條區(qū)塊鏈,該區(qū)塊鏈的使用必須是有權限的管理日裙,相關信息會得到保護吹艇,典型如銀聯(lián)組織。
目前來看昂拂,公開鏈將會更多的吸引社區(qū)和媒體的眼球受神,但更多的商業(yè)價值應該在聯(lián)盟鏈和私有鏈上。
根據不同的分類格侯,可以看到現(xiàn)在區(qū)塊鏈技術的三種典型應用場景:
定位 | 功能 | 一致性 | 權限 | 類型 | 性能 | 代表 |
---|---|---|---|---|---|---|
公信的數字貨幣 | 記賬功能 | PoW | 無 | 公有鏈 | 較低 | 比特幣 |
公信的交易處理 | 智能合約 | PoW鼻听、PoS | 無 | 公有鏈 | 受限 | 以太坊 |
帶權限的交易處理 | 商業(yè)處理 | 多種,可插拔 | 支持 | 聯(lián)盟鏈 | 可擴展 | Hyperledger |
誤區(qū)
目前联四,對區(qū)塊鏈的認識還存在不少誤區(qū)撑碴。
首先,區(qū)塊鏈不是數據庫朝墩。雖然區(qū)塊鏈也可以用來存儲數據醉拓,但它要解決的問題是多方的互信問題。單純從存儲數據角度收苏,它的效率可能不高亿卤,筆者也不推薦把大量的原始數據放到區(qū)塊鏈上。
其次鹿霸,區(qū)塊鏈不是要顛覆現(xiàn)有技術排吴。作為基于多項已有技術而出現(xiàn)的新事物,區(qū)塊鏈跟現(xiàn)有技術的關系是一脈相承的懦鼠,在解決多方合作和可信處理上多走了一步钻哩,但并不意味著它將徹底顛覆已有的商業(yè)模式。很長一段時間里肛冶,區(qū)塊鏈的適用場景仍需摸索街氢,跟已有系統(tǒng)必然是合作共存的關系。
小結
區(qū)塊鏈是第一個試圖自帶信任化和防止篡改的分布式記錄系統(tǒng)睦袖。它的出現(xiàn)珊肃,讓大家意識到,除了互聯(lián)網這樣的盡力而為的基礎設施外,我們還能打造一個彼此信任的基礎設施近范。
類似比特幣這樣的大規(guī)模長時間自治運行的系統(tǒng)嘶摊,也為區(qū)塊鏈技術的應用開啟了更多遐想的空間。如果人與人之間的交易無法偽造评矩,合同都能確币抖眩可靠執(zhí)行,世界是不是更美好一些了呢斥杜?這是技術進步再次給人類發(fā)展帶來福利虱颗。
不提這種去中心化的金融系統(tǒng)是否能在現(xiàn)實中普及,在跨國交易蔗喂、跨組織合作日益頻繁的今天忘渔,已經有了不少有意的嘗試和參考。
更進一步缰儿,比特幣只是基于區(qū)塊鏈技術的一種金融應用(而且是直接嵌入區(qū)塊鏈中)畦粮,區(qū)塊鏈技術還能帶來更通用的計算能力。Hyperledger 和 Ethereum 就試圖做類似的事情乖阵,基于區(qū)塊鏈再做一層平臺層宣赔,讓別人基于平臺開發(fā)應用變得更簡單。
另外瞪浸,區(qū)塊鏈本身可以作為分布式存儲儒将,也自然可以作為分布式計算引擎《云眩可以想象钩蚊,整個加入集群的設備都是計算引擎,大家通過付費來使用計算力蹈矮,是不是就有點普適計算的意味了砰逻?
有理由相信,隨著更多商業(yè)應用場景的出現(xiàn)含滴,區(qū)塊鏈技術將在未來金融和信息技術領域占據一席之地诱渤。