最近一年,我一直在關(guān)注基于區(qū)塊鏈技術(shù)的加密數(shù)字貨幣——比如「比特
幣」者祖、「以太坊」等立莉,并且我認為雖然「加密數(shù)字貨幣」可能因為會威脅(各
國)央行的地位而無法發(fā)揮更大的作用,但是其底層的支持技術(shù)(區(qū)塊鏈)可
能會改變互聯(lián)網(wǎng)的形態(tài)(至少對于互金領(lǐng)域來說 )七问。
所以一年來我一直在和我司的程序員小哥摸索學(xué)習(xí)區(qū)塊鏈技術(shù)蜓耻,我將在之后的文
章里逐步整理和分享基于「以太坊」(Ethereum)的私有區(qū)塊鏈網(wǎng)絡(luò),實現(xiàn)智能
合約的筆記械巡。
但是我想說的是刹淌,這并不是一個給程序員小哥來看的開發(fā)文章,而是希望能夠讓
一個產(chǎn)品經(jīng)理對區(qū)塊鏈技術(shù)有所了解讥耗。因為這個系列不會特別深入的去將其中的
編程原理有勾,更多是一些基礎(chǔ)性的概念。
說到區(qū)塊鏈葛账,我們一般都會想到以「比特幣」為代表的加密數(shù)字貨幣柠衅。所以我們
就通過「比特幣」網(wǎng)絡(luò)是如何工作的來理解區(qū)塊鏈。
就目前的金融情況而言籍琳,我們?nèi)绻M行轉(zhuǎn)賬需要找到一個可以信任的第三方(比
如銀行或第三方支付公司)菲宴,由這些可信任的第三方來確保交易的有效性,但可
信任第三方的存在在一定程度上增加了交易的成本趋急。而基于加密數(shù)字貨幣可以在
交易中摒棄可信任的第三方喝峦,讓任意兩人直接的交易成為可能。
比特幣交易如何進行
有一個很著名的 Alice 與 Bob 的轉(zhuǎn)賬故事來講清楚比特幣交易的運轉(zhuǎn)過程呜达,我
就將其簡化一下谣蠢,注意斜體字部分:
1. Alice 想將一些錢(假設(shè)是1 btc)轉(zhuǎn)賬給 Bob。
2. Alice 通過基于 P2P 技術(shù)(這里的 P2P 可不是網(wǎng)絡(luò)借貸,而是點對點網(wǎng)
絡(luò)眉踱,就是快播用的那個技術(shù))的比特幣網(wǎng)絡(luò)向 Bob 發(fā)起比特幣轉(zhuǎn)賬挤忙。這里
他們必須想網(wǎng)絡(luò)提供基于密碼學(xué)(非對稱加密算法)的加密證明(也就是密
鑰)來證明他們的身份。
3. Alice 與 Bob 的交易記錄會被記錄在一個「區(qū)塊」(「block」)中谈喳,并
且這個「區(qū)塊」會被通知給比特幣網(wǎng)絡(luò)中其它的節(jié)點進行確認册烈。
4. 在比特幣網(wǎng)絡(luò)中的其它節(jié)點通過計算一個「難計算、易驗證」的數(shù)學(xué)問題
來完成驗證婿禽。節(jié)點驗證的動機是因為轉(zhuǎn)賬手續(xù)費以及在驗證過程中新產(chǎn)生的
比特幣作為找到新塊的獎勵赏僧。在比特幣網(wǎng)絡(luò)中,塊的驗證被稱為「挖礦」扭倾。
5. 比特幣網(wǎng)絡(luò)中的每個節(jié)點都將會保留之前驗證過的所有這些交易的賬本副
本(分布式記賬):同周期內(nèi)的交易組成「區(qū)塊」淀零,按照時間順序區(qū)塊會連
成鏈,即「區(qū)塊鏈」膛壹,從而形成「交易」——>「區(qū)塊」——>「區(qū)塊鏈」
的三層結(jié)構(gòu)驾中。
6. 一旦網(wǎng)絡(luò)中有一個節(jié)點解決了之前提到的「難計算、易驗證」的數(shù)學(xué)問
題模聋,交易即被確認哀卫。新得到的確認的「區(qū)塊」就會被解決問題的節(jié)點添加到
這個區(qū)塊鏈中,并向網(wǎng)絡(luò)內(nèi)其它節(jié)點廣播撬槽。
7. 接下來此改,網(wǎng)絡(luò)內(nèi)的其它節(jié)點將驗證解決問題的節(jié)點的廣播(數(shù)學(xué)問題),
并達成共識侄柔,即交易成功共啃,并且各節(jié)點都已經(jīng)收到。一旦達成共識暂题,每個節(jié)
點都將更新各自的交易記錄副本移剪。
8. 這時候,區(qū)塊鏈的特性開始展現(xiàn)薪者,因為「賬本副本」會存在于網(wǎng)絡(luò)中的每
一個節(jié)點纵苛,理論上任何記錄都是
公開的、不可修改的言津。試圖偽造的交易將無法通過網(wǎng)絡(luò)內(nèi)節(jié)點的驗證,其形成的
「區(qū)塊」將被舍棄攻人。
9. 當(dāng)完成以上所有步驟后,Alice 的比特幣賬戶余額將減少1 btc悬槽,Bob 的
余額中講增加 1 btc.
上邊說到了幾個詞語怀吻,需要解釋一下:
點對點網(wǎng)絡(luò)(P2P 網(wǎng)絡(luò))
P2P 網(wǎng)絡(luò)并不是一個新出現(xiàn)的技術(shù),又叫「對等網(wǎng)絡(luò)」初婆。在這個網(wǎng)絡(luò)環(huán)境中蓬坡,沒
有中心服務(wù)器猿棉,依托用戶群交換信息。每個參與者的地位處于平等地位屑咳,并沒有
主從之分萨赁。每個參與者既是服務(wù)的提供者(server),也是服務(wù)的獲取這
(client)。和我們生活最貼近的就是媒體播放了兆龙。下圖為 P2P 網(wǎng)絡(luò)示意圖:
非對稱加密算法與加密證明
我們都說比特幣是匿名的位迂,但是按照上文提到「比特幣交易步驟」,還是需要去
證明他們的身份详瑞,那么是如何確保「匿名性」的呢臣缀?
在比特幣網(wǎng)絡(luò)中坝橡,身份(錢包地址)并不是和姓名或者其它的信息對應(yīng)的,身份
(錢包地址)只簡單關(guān)聯(lián)一個根據(jù)「非對稱加密算法」來隨機生成的公有/私有密
鑰(key)精置。錢包里的錢屬于掌握這個私有密鑰(key)并可以使用私有密鑰(key)
來確認交易的人计寇。使用私有密鑰(key) 來確認交易同樣不需要姓名或者其他的
信息。
一個比特幣錢包地址就是一個公鑰Key脂倦,它是一串由數(shù)字和字母組成的「亂碼」番宁,
比如1A2SH4r5z1gufQw7cj9aLunWhYRyTDbRFW
這就要說到「非對稱加密算法」,如果直接搬 Wikipedia 上的講解會比較枯燥赖阻,
我們接著舉栗子:我用化名寫了一本書蝶押,這本書非常受歡迎。現(xiàn)在有個人冒充
我火欧,自稱他是真的「張小璋」棋电,我們叫他「小璋 A」所有的東西都是他寫的。那
我應(yīng)該如何來證明呢苇侵?
這時我們就可以采用「非對稱加密算法」來幫助我們解決這個問題:在書籍出版
前我利用非對稱加密技術(shù)生成了一個密鑰對(公/私密鑰)并將公鑰聲明在書中赶盔,
任何人都可以使用公鑰來加密我書中的任意一段文字。誰能將其解密就可以證明
誰是這本書的作者谎势。因為「非對稱加密算法」公鑰用來加密强霎,但只有使用私鑰才
能夠進行解密融求。「小璋 A」無法對該段文字進行解密烘浦,而我可以。這就證明了我
是本書的作者萍鲸,卻從未透露你的個人身份谎倔。當(dāng)然,如果我丟了私鑰或者「小璋
A」通過其他手段獲得了密鑰(比如威脅我交出密鑰)這不在我們的討論范圍了猿推。
比特幣網(wǎng)絡(luò)并沒有限制每個節(jié)點生成「錢包地址」的數(shù)量片习,你可以盡情的生成足
夠過的「錢包地址」從而實現(xiàn)身份匿名的捌肴。同時只需要確保正確的密鑰來確認交
易,既可以完成比特幣網(wǎng)絡(luò)交易的驗證藕咏。
什么是「區(qū)塊」
上文提到:區(qū)塊鏈網(wǎng)絡(luò)是由「交易」——>「區(qū)塊」——>「區(qū)塊鏈」的三層結(jié)構(gòu)
組成状知,每個添加到「區(qū)塊鏈」上的「區(qū)塊」都永久記錄了交易的數(shù)據(jù)。
每個區(qū)塊鏈都會包含以下內(nèi)容:
上一個區(qū)塊鏈的 hash 散列孽查,既可以實現(xiàn)區(qū)塊的鏈連接也也可以防止篡
改饥悴。畢竟理論上不同內(nèi)容但是出現(xiàn)同一 hash 散列值的可能性比外星人明天
入侵地球還要小。
隨機數(shù)盲再,即之前提到的「難計算西设、易驗證」的數(shù)學(xué)問題的解。這個隨機
數(shù)可以用來其它節(jié)點對交易進行驗證答朋,同時這個隨機數(shù)對于每一個區(qū)塊來說
都是獨一無二的贷揽。
交易記錄和時間戳。
顯然梦碗,如果沒有「隨機數(shù)」或者「隨機數(shù)」被其它節(jié)點驗證是錯誤的禽绪,新的區(qū)塊
將不會被提交到「鏈」上,因此「挖礦」的過程本質(zhì)上是在「求數(shù)學(xué)解」的過
程洪规,目前這個過程一般為10分鐘印屁。
共識機制及分布式記賬
先說「共識機制」,在比特幣網(wǎng)絡(luò)中采用的是 PoW 算法(即工作量證明)斩例,簡單
來說就是多勞多得雄人。節(jié)點(礦工)通過依賴專門的機器(礦機)來進行數(shù)學(xué)運算
獲得記賬權(quán)。誰解決了那個「難計算念赶、易驗證」的數(shù)學(xué)問題柠衍,誰就可以得到網(wǎng)絡(luò)
上新產(chǎn)生的比特幣和 Alice 在轉(zhuǎn)賬過程中要付出的交易費用。同時晶乔,獲得記賬權(quán)
的節(jié)點會向網(wǎng)絡(luò)中其它的節(jié)點宣布新的區(qū)塊鏈(舊的區(qū)塊鏈加上新的區(qū)塊)的主
張珍坊,網(wǎng)絡(luò)上其它的節(jié)點通過檢查這個主張(驗證隨機數(shù))來確認其有效性。
確認完成后(比如7個節(jié)點確認正罢,或者10個節(jié)點確認)阵漏,這個主張將會被同步到該
網(wǎng)絡(luò)中所有的網(wǎng)絡(luò)節(jié)點中,同時翻具,該區(qū)塊鏈上的所有交易都可以追溯到第一個
「創(chuàng)世」區(qū)塊履怯。因此交易是不可篡改的(任何試圖篡改交易的行為會被整個網(wǎng)絡(luò)
上的節(jié)點檢測到并被因為驗證失敗而被拋棄)。這也意味著區(qū)塊鏈上的數(shù)據(jù)操作
與傳統(tǒng)數(shù)據(jù)庫操作不一樣:傳統(tǒng)數(shù)據(jù)庫我們講的是「增刪改查」裆泳,但在區(qū)塊鏈上
只有「增查」兩項叹洲,一旦數(shù)據(jù)記錄你將無法編輯(改)或者刪除這條數(shù)據(jù)。
好了工禾,文字寫的也不少了运提,基本上包含了區(qū)塊鏈的基礎(chǔ)知識蝗柔,如果你想更深入的
了解,我推薦你讀一下中本聰關(guān)于比特幣機制的論文民泵。(如果你讀到這里了癣丧,就
不要問我中本聰是誰……O(∩_∩)O~)