前段時間一個以太坊遊戲應用:Fomo3D異常火爆,在短短的幾天內就吸引了幾萬的以太幣投入遊戲,第一輪遊戲一個“黑客”用了一個非常巧妙的利用以太坊規則成為了最終贏家,拿走了1萬多以太幣獎金。
區塊鏈應用的價值由這個遊戲反映的淋漓盡致,Fomo3D遊戲能夠成功核心所依賴的是以太坊提供的一個可信、不可篡改平臺。當遊戲的規則確定之後,一切都按規則執行,無人可干預。今天這篇就來介紹一下程式設計師如何切入去中心化應用開發。
中心化應用
作為對比,先來看看中心化應用,其實就是現有的網際網路應用,為什麼它是中心化應用,看看它的架構圖:
平時我們接觸的是應用的前端(或稱客戶端),前端可以是HTML5的web頁面、 小程式、APP, 在前端展現的內容通常傳送一個請求到伺服器,伺服器返回相應的內容給前端。在前端的動作同樣也會轉化請求傳送到伺服器,伺服器處理之後返回資料到前端。也就是說我們所有看到的內容或者操作都是中心化的伺服器控制,因此說是中心化應用。
去中心化應用DAPP
而去中心化應用有什麼不同呢? 看看它的架構圖:
前端的表現上是一樣的, 還是H5頁面、 小程式、APP,DAPP和傳統App關鍵是後端部分不同,是後端不再是一箇中心化的伺服器,而是分散式網路上任意節點,注意可以是 任意一個節點,在應用中給節點傳送的請求通常稱為 交易,交易和中心化下的請求有幾個很大的不同是:交易的資料經過使用者個人簽名之後傳送到節點,節點收到交易請求之後,會把 請求廣播到整個網路,交易在網路達成共識之後,才算是真正的執行(真正其作用的執行不一是連線的後端節點,儘管後端也會執行)。以及中心化下的請求大多數都是同步的(及時拿到結果), 而交易大多數是非同步的,這也是在開發去中心應用時需要注意的地方,
從節點上獲得資料狀態(比如交易的結果),一般是通過事件回撥來獲得。
如何開發
在開發中心化應用最重要兩部分是 客戶端UI表現和 後端服務程式, UI表現通過HTTP請求連線到後端服務程式,後端服務程式執行在伺服器上,比如Nginx Apached等等。
開發一個去中心化應用最重要也是兩部分: 客戶端UI表現及 智慧合約,智慧合約的作用就像後端服務程式,智慧合約是執行在節點的EVM上, 客戶端呼叫智慧合約,是通過向節點發起RPC請求完成。
下面是一個對比:
客戶端UI <=> 客戶端UI
HTTP <=> RPC
後端服務程式 <=> 智慧合約
Nginx/Apache <=> 節點
因此對於去中心化應用來說,程式設計師可以從兩個方面切入:
一個是 去中心化應用的客戶端開發, 熟悉已經熟悉客戶端軟體(如WebAPP等)開發的同學,只需要瞭解一下客戶端跟區塊鏈節點通訊的API介面,如果是在當前應用最廣泛的區塊鏈平臺以太坊上開發去中心化應用,那麼需要了解Web3
這個庫,Web3對節點暴露出來的JSON-RPC介面進行了封裝,比如Web3提供的功能有:獲取節點狀態,獲取賬號資訊,呼叫合約、監聽合約事件等等。
目前的主流語言都有Web3的實現,列舉一些實現給大家參考:
- JavaScript Web3.js
- Python Web3.py
- Haskell hs-web3
- Java web3j
- Scala web3j-scala
- Purescript purescript-web3
- PHP web3.php
- PHP ethereum-php
另一個切入點是 智慧合約的開發,在以太坊現在推薦的語言是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多位區塊鏈技術愛好者。
深入淺出區塊鏈 – 系統學習區塊鏈,打造最好的區塊鏈技術部落格。