关于区块链,程序员需要了解什么
作者 | 曹嚴(yán)明
如果說比特幣是對(duì)傳統(tǒng)貨幣的一種顛覆,那么比特幣的基礎(chǔ)技術(shù)——區(qū)塊鏈則是對(duì)傳統(tǒng)編程范式的一種顛覆。
?
區(qū)塊鏈技術(shù)被看作是一次Paradigm Shift。也許很多人對(duì) “顛覆”這種說法不以為然,因?yàn)楝F(xiàn)在這個(gè)詞已經(jīng)被用濫了(如今哪個(gè)好一點(diǎn)兒的詞沒有被用濫呢?),但是明眼人在匆忙做出“這又是個(gè)噱頭”這樣的結(jié)論之前會(huì)謹(jǐn)慎地去了解它背后的東西。
?
這篇文章的目的就是為程序員介紹區(qū)塊鏈的獨(dú)特技術(shù),以及這些技術(shù)如何運(yùn)用到項(xiàng)目或者產(chǎn)品的開發(fā)過程中。
?
即使你不想進(jìn)入全新的區(qū)塊鏈應(yīng)用開發(fā)大潮,你也會(huì)發(fā)現(xiàn)其底層技術(shù)對(duì)平日的應(yīng)用開發(fā)有不少啟發(fā)和借鑒作用。
?
一個(gè)新技術(shù)的誕生有它順應(yīng)時(shí)代的合理性(黑格爾語“存在就是合理的”)。作為程序員我們應(yīng)該去了解它的合理性所在之處,取而用之。我們不一定非要用新技術(shù)去顛覆一個(gè)老應(yīng)用,但可以用新技術(shù)去重塑一個(gè)老應(yīng)用。
?
本篇主要討論區(qū)塊鏈在三個(gè)方面的獨(dú)特性:去中心和去中介、隱私保護(hù)、時(shí)間戳。
去中心和去中介
1994年凱文 · 凱利(國內(nèi)稱KK)出版了一本預(yù)言式的巨著《失控》,書中充滿了關(guān)于智慧生命及其社會(huì)進(jìn)化機(jī)制的真知灼見。書中提到的很多概念,比如云計(jì)算、物聯(lián)網(wǎng)、網(wǎng)絡(luò)社區(qū)等,在二十多年后的今天已經(jīng)成為普遍事實(shí)。
“去中心化”是凱文 · 凱利在書中提出的“九律”中的一條。
一個(gè)去中心化的系統(tǒng),沒有一個(gè)中央的、至上而下的控制主體,而完全是由大量相互聯(lián)結(jié)看似無組織的小個(gè)體構(gòu)成,這些個(gè)體有一定的獨(dú)立性,可以相互作用,它們自發(fā)地形成一個(gè)整體以后,由量變引起質(zhì)變,結(jié)果整體的能力、智慧、適應(yīng)性和靈活性,都大大超過了個(gè)體的簡單相加。
這樣的去中心化系統(tǒng)生命力極強(qiáng),遭到破壞可以自我修復(fù),因而很難被完全摧毀。
互聯(lián)網(wǎng)就是一個(gè)典型去中心化的例子,極強(qiáng)的適應(yīng)性和抗破壞性是互聯(lián)網(wǎng)的根本。不過如今的互聯(lián)網(wǎng)卻有了中心化的趨勢。
中心化的后果見仁見智,對(duì)崇尚多種選擇的人來說,中心化代表著選擇自由的喪失,服務(wù)質(zhì)量的下降,活力的倒退和創(chuàng)新的萎縮。微博做為新一代互聯(lián)網(wǎng)媒體的翹楚,它的興起、沒落以及再次復(fù)興,從內(nèi)容的產(chǎn)生和傳播來說,就是一個(gè)從一開始的去中心化,到由大V們控制的中心化,再到去中心化的歷程。
總之,只有那些賦予其中每個(gè)個(gè)體充分發(fā)展的自由的系統(tǒng),那些抗拒中心化趨勢的系統(tǒng),才是生機(jī)勃勃、有創(chuàng)新力、能夠不斷進(jìn)化的系統(tǒng)。
?
站在2016-2017年之交,智能機(jī)器時(shí)代似乎離我們不遠(yuǎn)了。
芯片、存儲(chǔ)、網(wǎng)絡(luò)、移動(dòng)、物聯(lián)網(wǎng)技術(shù),都極大增強(qiáng)了各種網(wǎng)絡(luò)終端(edge)的能力,無論這些終端是人、手機(jī)、汽車、機(jī)器人,或是其他設(shè)備。以前由于存儲(chǔ)、網(wǎng)絡(luò)或者計(jì)算能力等限制而選擇中心化的應(yīng)用程序設(shè)計(jì),現(xiàn)在的程序員則有更大的自由去選擇一種去中心化的設(shè)計(jì)。去中心化的系統(tǒng)更加靈活,更具適應(yīng)性,更有活力。
?
另一方面,現(xiàn)實(shí)社會(huì)中的各種交易活動(dòng),由于交易雙方缺乏信任、信息不對(duì)稱、搜尋成本、匹配效率、交易費(fèi)用等因素,需要有交易雙方共同信任的中介參與。
比如銀行間的跨境支付,中間需要通過SWIFT網(wǎng)絡(luò)和代理銀行,而不能直接進(jìn)行點(diǎn)對(duì)點(diǎn)交易。
中介的產(chǎn)生源自于降低交易成本的目的,但是隨著新技術(shù)的出現(xiàn)和普及,雙方直接交易成為可能,而且成本更低。在這樣的情況下中介變得多余了,交易雙方通過去中介化來降低交易成本。
?
去中心和去中介有多種不同層次,可以體現(xiàn)在業(yè)務(wù)模式、業(yè)務(wù)數(shù)據(jù)的產(chǎn)生和傳播、應(yīng)用系統(tǒng)的架構(gòu)、應(yīng)用系統(tǒng)的開發(fā)、運(yùn)行、維護(hù)、升級(jí)等方面。比特幣和區(qū)塊鏈?zhǔn)且环N比較徹底的去中心和去中介應(yīng)用,它包含以下幾種去中心和去中介技術(shù):
1. 點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)(P2P network)
點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)并不是什么新概念,網(wǎng)上的很多文件共享和視頻直播服務(wù)就是用P2P網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的。P2P是對(duì)等網(wǎng)絡(luò),網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)的地位相當(dāng),沒有任何節(jié)點(diǎn)處于中央控制的地位,也沒有任何節(jié)點(diǎn)扮演交易中介的角色;每個(gè)節(jié)點(diǎn)既是Server,又是Client;節(jié)點(diǎn)可以選擇隨時(shí)加入,隨時(shí)退出;節(jié)點(diǎn)可以選擇運(yùn)行所有的功能(Full node),也可以選擇運(yùn)行部分的功能;節(jié)點(diǎn)越多,整個(gè)系統(tǒng)的運(yùn)算能力越強(qiáng),數(shù)據(jù)安全性越高,抗破壞能力越強(qiáng)。
?
2. 去中心化數(shù)據(jù)庫
例如Bitcoin的分布式總帳。
?
3. 去中心化應(yīng)用 (Decentralized App,簡稱 DApp)
例如在Ethereum上運(yùn)行的智能合約應(yīng)用。
?
4. 共識(shí)算法
無中心、無中介、無需相互信任的對(duì)等網(wǎng)絡(luò)的節(jié)點(diǎn)間需要協(xié)調(diào)一種共識(shí)算法,以便共同維護(hù)一個(gè)統(tǒng)一的分布式數(shù)據(jù)庫,以及協(xié)同工作以保障整個(gè)系統(tǒng)的安全性和適應(yīng)性。有多種共識(shí)算法,包括:
?
PoW–Proof of Work工作量證明
?
PoS – Proof of Stake權(quán)益證明
?
DPoS–Delegated Proof of Stake授權(quán)權(quán)益證明
?
PBFT–Practical Byzantine FaultTolerance實(shí)用拜占庭容錯(cuò)
?
PoET–Proof of Elapsed Time流逝時(shí)間量證明等。
?
作為一個(gè)程序員或者架構(gòu)師,這些思路和技術(shù)有什么幫助呢?你的應(yīng)用需要去中心或者去中介嗎?你的下一個(gè)應(yīng)用需要采用去中心化的架構(gòu)嗎?設(shè)計(jì)去中心化的架構(gòu)需要作哪些改變?需要哪些基礎(chǔ)設(shè)施?在時(shí)下這股區(qū)塊鏈的淘金熱里,已經(jīng)有很多創(chuàng)業(yè)公司準(zhǔn)備顛覆傳統(tǒng)的中心化應(yīng)用。幾乎所有的應(yīng)用,都開始有相應(yīng)的基于區(qū)塊鏈技術(shù)的去中心化版本。如果你認(rèn)為目前沒有必要或者不可能去中心化,未雨綢繆總是不會(huì)錯(cuò)的。
?
隱私保護(hù)
個(gè)人隱私信息泄露在中國是一個(gè)非常嚴(yán)重的現(xiàn)象。
盜取、販賣個(gè)人信息已經(jīng)有完整的黑市產(chǎn)業(yè)鏈,部分互聯(lián)網(wǎng)征信和數(shù)據(jù)公司,從黑市上購買數(shù)據(jù),甚至雇傭黑客盜取數(shù)據(jù)?;ヂ?lián)網(wǎng)用戶普遍意識(shí)到個(gè)人隱私信息的重要,對(duì)隱私保護(hù)的要求會(huì)更高。程序員有責(zé)任從技術(shù)上加強(qiáng)個(gè)人隱私的保護(hù)。
?
在傳統(tǒng)的應(yīng)用架構(gòu)設(shè)計(jì)中,隱私保護(hù)或者安全性設(shè)計(jì)的優(yōu)先級(jí)并不是很高,現(xiàn)在這種情況必須有所改變,架構(gòu)師需要提升隱私保護(hù)設(shè)計(jì)的優(yōu)先級(jí)。
?
區(qū)塊鏈應(yīng)用領(lǐng)域采用了很多密碼學(xué)的技術(shù),例如哈希算法、加密算法、公鑰密碼學(xué)、默克爾樹、和零身份證明。
?
Bitcoin在保護(hù)用戶身份方面,使用哈希過的公鑰作為個(gè)人賬號(hào),這樣在交易時(shí)隱藏了個(gè)人信息。另外,個(gè)人賬號(hào)可以設(shè)計(jì)成一次性的,每次交易都使用新賬號(hào),這樣就很難通過追蹤某個(gè)賬號(hào)的交易來推測用戶身份。Bitcoin的總帳是公開的,上面每筆交易記錄包含付費(fèi)賬號(hào)、收費(fèi)賬號(hào)以及轉(zhuǎn)賬金額。
?
如果覺得這樣的隱私保護(hù)還不夠,另一個(gè)數(shù)字貨幣Zcash在Bitcoin之上增加了一些協(xié)議,將付費(fèi)賬號(hào)、收費(fèi)賬號(hào)以及轉(zhuǎn)賬金額都隱藏了起來,采用的方法仍然是加密、哈希、默克爾樹和零知識(shí)證明。
?
盡管比特幣出自于一群無政府主義者之手,但他們秉承的一些諸如保護(hù)個(gè)人隱私的信念,在這個(gè)信息泛濫的互聯(lián)網(wǎng)時(shí)代還是非常可取的。
?
你的應(yīng)用是否收集了超越應(yīng)用需要的個(gè)人信息?(保護(hù)隱私的最好辦法就是不收集它們)在處理交易時(shí),是否可以傳遞盡可能少的個(gè)人身份信息?或者使用一次性賬號(hào)?在日志中是否可以記錄盡可能少的個(gè)人身份信息?或者完全不需記錄?緩存數(shù)據(jù)庫中的個(gè)人信息是否安全?消息傳遞時(shí)不僅采用Session Key加密,是否還可以采用Message Key?如今,哈希算法、公鑰加密,默克爾樹,這些加密技術(shù)唾手可得。程序員應(yīng)該養(yǎng)成新的習(xí)慣,在應(yīng)用設(shè)計(jì)中采用各種加密技術(shù)保護(hù)個(gè)人隱私信息,包括個(gè)人賬戶、交易、瀏覽、日志信息等。
時(shí)間戳
傳統(tǒng)關(guān)系型數(shù)據(jù)庫在設(shè)計(jì)表時(shí)一般會(huì)有一個(gè)或多個(gè)時(shí)間戳(timestamp)字段,用來標(biāo)記一行記錄添加或修改時(shí)的時(shí)間。
基本上,這些時(shí)間戳是給應(yīng)用內(nèi)部使用的。當(dāng)數(shù)據(jù)被共享給其他應(yīng)用時(shí),這些時(shí)間戳并沒有多大意義,因?yàn)闀r(shí)間戳可以偽造。
?
在數(shù)據(jù)黑市上,一個(gè)數(shù)據(jù)掮客可以將一份銀行VIP客戶數(shù)據(jù)進(jìn)行注水,摻入一半的假數(shù)據(jù)。
?
一家保險(xiǎn)公司為了攪亂市場上競爭對(duì)手的視線,故意污染數(shù)據(jù),將高凈值用戶放入騙保用戶黑名單,將騙保用戶放入高凈值用戶名單,然后讓污染后的數(shù)據(jù)故意泄露出去。
?
如果每條數(shù)據(jù)都帶有一個(gè)真實(shí)可信的時(shí)間戳(這條數(shù)據(jù)產(chǎn)生的真實(shí)時(shí)間點(diǎn)),這樣的造假行為就比較難奏效,因?yàn)榧贁?shù)據(jù)的時(shí)間戳一般都是最近的。
?
以前我們很少關(guān)心數(shù)據(jù)的時(shí)間戳,很少去了解時(shí)間戳對(duì)數(shù)據(jù)的意義,一個(gè)原因也許是我們不知道如何用技術(shù)去實(shí)現(xiàn)這樣的時(shí)間戳。
?
如果技術(shù)實(shí)現(xiàn)完全可行,那么這個(gè)時(shí)間戳對(duì)我們來說就有了全新的意義。
首先,我們有了真正可以信任的歷史數(shù)據(jù)。
第二,這些數(shù)據(jù)因?yàn)榭尚抛兊酶袃r(jià)值,可以在應(yīng)用之外被其他應(yīng)用或者分析工具使用。
第三,我們可以基于這些可信的歷史記錄生成信用。
最后,我們真正進(jìn)入一個(gè)信用社會(huì)。
?
想象一下,如果我們想在未來某天證明自己的數(shù)據(jù)是在今天產(chǎn)生的,可以在今天對(duì)今天的所有數(shù)據(jù)進(jìn)行某種形式的哈希(比如默克爾樹),最終得到一個(gè)哈希值,然后在第二天的《參考消息》上登一個(gè)廣告,把哈希值發(fā)布出去。明天的《參考消息》就成了我們的時(shí)間戳。
如果明天我們想做同樣的事,可以如法炮制,另外有一個(gè)關(guān)鍵點(diǎn),那就是要記得把今天的哈希值也給哈希進(jìn)去。這樣每天的哈希值就包含了以前所有數(shù)據(jù)的哈希信息。
?
區(qū)塊鏈在P2P網(wǎng)絡(luò)上通過節(jié)點(diǎn)間的共識(shí)算法實(shí)現(xiàn)了一個(gè)分布式的時(shí)間戳服務(wù)。
?
區(qū)塊鏈?zhǔn)窃跁r(shí)間上有序的、由記錄塊(區(qū)塊)組成的一根鏈條。一個(gè)區(qū)塊包含兩個(gè)部分:區(qū)塊頭(Block Header)和記錄部分。區(qū)塊中的所有記錄通過默克爾樹(Merkle Tree)組織起來,默克爾樹根(Root)的哈希值做為本區(qū)塊里所有記錄的數(shù)字指紋被放入?yún)^(qū)塊頭。
區(qū)塊頭還包含以下字段:前一個(gè)區(qū)塊頭的哈希值(這是前一個(gè)區(qū)塊的數(shù)字指紋,也可以看做是指向前一個(gè)區(qū)塊的哈希指針),本區(qū)塊的時(shí)間戳、高度(Hight,即從第一個(gè)區(qū)塊開始數(shù)本區(qū)塊是第幾個(gè)塊),以及一些其他信息。系統(tǒng)的共識(shí)算法保證了每過固定的一段時(shí)間(Bitcoin是大約10分鐘),參與整個(gè)系統(tǒng)記賬的節(jié)點(diǎn)會(huì)達(dá)成共識(shí)在區(qū)塊鏈上添加下一個(gè)新的區(qū)塊。
?
時(shí)間戳的這種設(shè)計(jì),使得更改一條記錄的困難程度按時(shí)間的指數(shù)倍增加,越老的記錄越難更改。這是因?yàn)?#xff0c;如果改動(dòng)某個(gè)區(qū)塊里的一條記錄,意味著該區(qū)塊原來的默克爾樹根失效了,需要改動(dòng)區(qū)塊頭,該區(qū)塊的數(shù)字指紋隨之失效。又由于下一個(gè)區(qū)塊的區(qū)塊頭包含這個(gè)哈希指針,這就意味著下一個(gè)區(qū)塊也需要改動(dòng)。如此直到最新的那個(gè)區(qū)塊。
?
可見要想改動(dòng)一個(gè)區(qū)塊,必須同時(shí)改動(dòng)該區(qū)塊后面的所有區(qū)塊。因?yàn)閷⒁粋€(gè)區(qū)塊放入?yún)^(qū)塊鏈中需要消耗非常多的資源(資源種類依共識(shí)算法的不同而不同,可以是計(jì)算力,流逝的時(shí)間,擁有的權(quán)益等),隨著后面添加的區(qū)塊越來越多,要想改動(dòng)某個(gè)區(qū)塊幾乎是不可能的。
?
對(duì)一個(gè)普通應(yīng)用來說,如何實(shí)現(xiàn)這樣一個(gè)時(shí)間戳服務(wù)呢?我們需要自己創(chuàng)建一個(gè)區(qū)塊鏈嗎?其實(shí)沒必要,Bitcoin就是一個(gè)很好的時(shí)間戳服務(wù),我們可以把哈希值寫到Bitcoin的區(qū)塊鏈中。這是一種存在證明(Proof of Existence)。Factom也提供類似的服務(wù),它收集所有的哈希,每隔10分鐘生成一個(gè)哈希值,寫到Bitcoin的區(qū)塊鏈中。
?
哪些數(shù)據(jù)需要有時(shí)間戳?必須是不能變更的數(shù)據(jù),特別適合存檔文件。需要現(xiàn)在就考慮實(shí)施時(shí)間戳嗎?這個(gè)跟你的數(shù)據(jù)戰(zhàn)略相關(guān)。在大數(shù)據(jù)時(shí)代,擁有高質(zhì)量的數(shù)據(jù)就是擁有了價(jià)值。時(shí)間戳可以一定程度上保證數(shù)據(jù)的可信度,至少這些數(shù)據(jù)是經(jīng)過“時(shí)間考驗(yàn)”的。
總結(jié)
2009年1月Bitcoin發(fā)布,2015年7月Ethereum發(fā)布,到今年區(qū)塊鏈開始大熱。對(duì)于程序員和架構(gòu)師來說,區(qū)塊鏈帶來了新的思維,新的程序設(shè)計(jì)范式,它所基于的技術(shù)也是一般程序員不太熟悉的。它號(hào)稱要顛覆傳統(tǒng)應(yīng)用,要構(gòu)造一個(gè)“價(jià)值互聯(lián)網(wǎng)”。
?
本文討論了區(qū)塊鏈三個(gè)有意思的方面:去中心和去中介、隱私保護(hù)、時(shí)間戳。程序員有必要了解這些有益的思路和技術(shù),審視自己的應(yīng)用和產(chǎn)品,看看是否可以借鑒,是否可以提升用戶體驗(yàn),增加數(shù)據(jù)價(jià)值,降低運(yùn)營成本,或者是否有新的業(yè)務(wù)場景,也許還可以開創(chuàng)一條全新的業(yè)務(wù)模式。
作者簡介:曹嚴(yán)明,SAP咨詢服務(wù)部架構(gòu)師,專注于保險(xiǎn)業(yè)核心系統(tǒng)、電子商務(wù)、企業(yè)移動(dòng)應(yīng)用等解決方案。曾就職于微軟和HCL,參與過SQL Server、SharePoint、Visual Studio等產(chǎn)品的研發(fā)。
掃碼加入「CSDN 區(qū)塊鏈技術(shù)交流群」
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的关于区块链,程序员需要了解什么的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重庆江北火车站候车里面有化妆品卖吗?
- 下一篇: 上海人口占全国多少人口?