學(xué)習(xí)Ethereum blockchain platform有一段時間了,越看越興奮,根本停不下來。關(guān)于Ethereum的學(xué)習(xí)資料,包括文章、視頻、文檔等有很多,但無法滿足系統(tǒng)化的學(xué)習(xí)需求,有點(diǎn)懵逼。還有一點(diǎn)是,Ethereum發(fā)展很快,很多文檔或資料已經(jīng)過時了。經(jīng)過一段時間的學(xué)習(xí)和總結(jié),對Ethereum的整體概念和運(yùn)作方式有了基礎(chǔ)的了解。本篇文章會以web開發(fā)者的角度介紹一下Ethereum,作為開發(fā)者,如何基于以太坊,創(chuàng)建去中心化的應(yīng)用?
如果你是一個web開發(fā)人員,你會很了解web應(yīng)用的整體架構(gòu):

web應(yīng)用部署在服務(wù)器上,用戶們會和一個中心化的應(yīng)用進(jìn)行交互。這里用戶可以是瀏覽器,app,api接口等。當(dāng)用戶向服務(wù)端發(fā)起請求時,服務(wù)端通過對數(shù)據(jù)庫或緩存的增刪改查來響應(yīng)用戶的請求。
這樣的架構(gòu)在目前來講是很合理的。如果這個中心化的數(shù)據(jù)庫是公開的,每個人都有權(quán)限訪問,且你不需要這個應(yīng)用的開發(fā)者來掌管你的數(shù)據(jù)就能保證數(shù)據(jù)的安全性,這些條件在一些場景下構(gòu)建的應(yīng)用會更合理一些。
比如淘寶。如果你在淘寶上業(yè)績很好,且擁有龐大的用戶積累,但是有一天你的賬號因為某些原因被禁了,你在淘寶上賣不了東西了,這會嚴(yán)重影響你的生意,因為脫離的淘寶,你的一切信用積累,用戶積累就都沒了。假如你可以方便的把歷史成交數(shù)據(jù),評價數(shù)據(jù),用戶數(shù)據(jù)等移植到另外一個平臺上,繼續(xù)做你的生意,聽起來是不是很好?這就是去中心化應(yīng)用的由來。Ethereum使得開發(fā)者很方便的創(chuàng)建去中心化的應(yīng)用(Dapp, decentralized application)。
Dapp的整體架構(gòu)大概如下:

你會發(fā)現(xiàn),每個client會跟他所屬的應(yīng)用實(shí)例進(jìn)行交互,沒有一個中心的server。這就意味著,用戶在使用Dapp前,需要將該應(yīng)用已有的blockchain完全復(fù)制到自己的電腦或者手機(jī)上。乍一聽很荒唐,這多費(fèi)流量,多影響用戶體驗啊。但這是一個去中心化應(yīng)用必要的流程,這樣做可以使得應(yīng)用不依賴一于一個中心化的server。
其實(shí)復(fù)制整個blockchain消耗不了多少時間和容量,已經(jīng)有很完善的技術(shù)方案在保證去中心化特點(diǎn)的同時,又使得交互變得很簡單,很流暢,這里就不展開了(我還沒看懂- -!)
那么,在Ethereum中,blockchain的作用是什么呢?
Database
在以太坊網(wǎng)絡(luò)中所有的transactions都被存住在block中(這里牽扯到hash pointer, merklin tree,區(qū)塊頭等btc里面的知識點(diǎn),就不展開了),block之間通過hash pointer指向另一個block,形成一條不可篡改的blockchain?;氐教詫毜睦?,用戶在淘寶的交易,不管是買家還是賣家,產(chǎn)生的一切行為都被記錄在區(qū)塊中,且所有人都有權(quán)限訪問很驗證。
Code
blockchain用來存儲數(shù)據(jù),如何進(jìn)行增刪改查的邏輯操作呢?以太坊提供了Solidity語言編寫dapp,或叫做contract。編譯,部署你的contract到以太坊網(wǎng)絡(luò)中,你的去中心化應(yīng)用就可以使用了。
Ethereum提供了web3.js框架方便開發(fā)者使用javascript處理邏輯層和blockchain節(jié)點(diǎn)之間的通訊和邏輯關(guān)系。所以,你只需要在熟悉的框架下,如reactjs, angularjs 等引用web3.js,就可以方便的創(chuàng)建web based 去中心化應(yīng)用了。
這里只是介紹了以太坊的基礎(chǔ)知識,很多知識點(diǎn)沒有展開,后續(xù)學(xué)習(xí)過程中有了更深刻的理解,我會及時補(bǔ)充。
接下來我會通過一個投票應(yīng)用來完整的介紹基于Ethereum的去中心化應(yīng)用的開發(fā)流程,敬請期待。