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