本文首發於深刻淺出區塊鏈社區 原文連接:程序員如何切入區塊鏈去中心化應用開發原文已更新,請讀者前往原文閱讀php
前段時間一個以太坊遊戲應用:Fomo3D異常火爆,在短短的幾天內就吸引了幾萬的以太幣投入遊戲,第一輪遊戲一個「黑客」用了一個很是巧妙的利用以太坊規則成爲了最終贏家,拿走了1萬多以太幣獎金。html
區塊鏈應用的價值由這個遊戲反映的淋漓盡致,Fomo3D遊戲可以成功核心所依賴的是以太坊提供的一個可信、不可篡改平臺。當遊戲的規則肯定以後,一切都按規則運行,無人可干預。今天這篇就來介紹一下程序員如何切入去中心化應用開發。前端
做爲對比,先來看看中心化應用,其實就是現有的互聯網應用,爲何它是中心化應用,看看它的架構圖: git
平時咱們接觸的是應用的前端(或稱客戶端),前端能夠是HTML5的web頁面、 小程序、APP, 在前端展示的內容一般發送一個請求到服務器,服務器返回相應的內容給前端。在前端的動做一樣也會轉化請求發送到服務器,服務器處理以後返回數據到前端。也就是說咱們全部看到的內容或者操做都是中心化的服務器控制,所以說是中心化應用。程序員
而去中心化應用有什麼不一樣呢? 看看它的架構圖: 前端的表現上是同樣的, 仍是H5頁面、 小程序、APP,DAPP和傳統App關鍵是後端部分不一樣,是後端再也不是一箇中心化的服務器,而是分佈式網絡上任意節點,注意能夠是 任意一個節點,在應用中給節點發送的請求一般稱爲 交易,交易和中心化下的請求有幾個很大的不一樣是:交易的數據通過用戶我的簽名以後發送到節點,節點收到交易請求以後,會把 請求廣播到整個網絡,交易在網絡達成共識以後,纔算是真正的執行(真正其做用的執行不一是鏈接的後端節點,儘管後端也會執行)。以及中心化下的請求大多數都是同步的(及時拿到結果), 而交易大多數是異步的,這也是在開發去中心應用時須要注意的地方,github
從節點上得到數據狀態(好比交易的結果),通常是經過事件回調來得到。web
在開發中心化應用最重要兩部分是 客戶端UI表現和 後端服務程序, UI表現經過HTTP請求鏈接到後端服務程序,後端服務程序運行在服務器上,好比Nginx Apached等等。算法
開發一個去中心化應用最重要也是兩部分: 客戶端UI表現及 智能合約,智能合約的做用就像後端服務程序,智能合約是運行在節點的EVM上, 客戶端調用智能合約,是經過向節點發起RPC請求完成。小程序
下面是一個對比:後端
客戶端UI <=> 客戶端UI HTTP <=> RPC 後端服務程序 <=> 智能合約 Nginx/Apache <=> 節點
所以對於去中心化應用來講,程序員能夠從兩個方面切入:
一個是 去中心化應用的客戶端開發, 熟悉已經熟悉客戶端軟件(如Web\APP等)開發的同窗,只須要了解一下客戶端跟區塊鏈節點通訊的API接口,若是是在當前應用最普遍的區塊鏈平臺以太坊上開發去中心化應用,那麼須要瞭解Web3 這個庫,Web3對節點暴露出來的JSON-RPC接口進行了封裝,好比Web3提供的功能有:獲取節點狀態,獲取帳號信息,調用合約、監聽合約事件等等。
目前的主流語言都有Web3的實現,列舉一些實現給你們參考:
另外一個切入點是 智能合約的開發,在以太坊如今推薦的語言是Solidity,有一些同窗對新學一門語言有一些畏懼,Solidity的語法其實很簡潔,有過一兩門其餘語言基礎(開發經驗)的同窗三五天就能夠學會,我也錄製了一個視頻課程:深刻詳解以太坊智能合約語言Solidity。
下面用一個Hello合約,體會下Solidity的語法:
contract Hello { function hello() public returns(string) { return "Hello World"; } }
若是把上面的contract關鍵字更改成class,就和其餘語言定義一個類同樣。
有興趣的同窗能夠進一步學習一下這個DApp開發案例Web3與智能合約交互實戰,
在DAPP的開發過程當中,一些開發工具能夠幫助咱們事半功倍,如:Truffle開發框架以及Ganache工具來模擬節點等,這篇文章一步步教你開發、部署第一個去中心化應用
對於想切入到去中心化應用開發的同窗,對區塊鏈運行的原理了解確定會是加分項,尤爲是各種共識機制(POW,POS,DPOS等)的理解,P2P網絡的理解,以及各種加密和Hash算法的運用。有一些同窗想作區塊鏈底層開發,對區塊鏈運行的原理則是必須項。
歡迎來知識星球提問,星球內已經彙集了300多位區塊鏈技術愛好者。 深刻淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。