摘要:區(qū)塊鏈應(yīng)用的價(jià)值由這個(gè)游戲反映的淋漓盡致,游戲能夠成功核心所依賴的是以太坊提供的一個(gè)可信不可篡改平臺(tái)。今天這篇就來介紹一下程序員如何切入去中心化應(yīng)用開發(fā)。
本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)
原文鏈接:程序員如何切入?yún)^(qū)塊鏈去中心化應(yīng)用開發(fā)原文已更新,請(qǐng)讀者前往原文閱讀
前段時(shí)間一個(gè)以太坊游戲應(yīng)用:Fomo3D異常火爆,在短短的幾天內(nèi)就吸引了幾萬的以太幣投入游戲,第一輪游戲一個(gè)“黑客”用了一個(gè)非常巧妙的利用以太坊規(guī)則成為了最終贏家,拿走了1萬多以太幣獎(jiǎng)金。
區(qū)塊鏈應(yīng)用的價(jià)值由這個(gè)游戲反映的淋漓盡致,F(xiàn)omo3D游戲能夠成功核心所依賴的是以太坊提供的一個(gè)可信、不可篡改平臺(tái)。當(dāng)游戲的規(guī)則確定之后,一切都按規(guī)則運(yùn)行,無人可干預(yù)。今天這篇就來介紹一下程序員如何切入去中心化應(yīng)用開發(fā)。
中心化應(yīng)用作為對(duì)比,先來看看中心化應(yīng)用,其實(shí)就是現(xiàn)有的互聯(lián)網(wǎng)應(yīng)用,為什么它是中心化應(yīng)用,看看它的架構(gòu)圖:
平時(shí)我們接觸的是應(yīng)用的前端(或稱客戶端),前端可以是HTML5的web頁面、 小程序、APP, 在前端展現(xiàn)的內(nèi)容通常發(fā)送一個(gè)請(qǐng)求到服務(wù)器,服務(wù)器返回相應(yīng)的內(nèi)容給前端。在前端的動(dòng)作同樣也會(huì)轉(zhuǎn)化請(qǐng)求發(fā)送到服務(wù)器,服務(wù)器處理之后返回?cái)?shù)據(jù)到前端。也就是說我們所有看到的內(nèi)容或者操作都是中心化的服務(wù)器控制,因此說是中心化應(yīng)用。
去中心化應(yīng)用DAPP而去中心化應(yīng)用有什么不同呢? 看看它的架構(gòu)圖:
前端的表現(xiàn)上是一樣的, 還是H5頁面、 小程序、APP,DAPP和傳統(tǒng)App關(guān)鍵是后端部分不同,是后端不再是一個(gè)中心化的服務(wù)器,而是分布式網(wǎng)絡(luò)上任意節(jié)點(diǎn),注意可以是 任意一個(gè)節(jié)點(diǎn),在應(yīng)用中給節(jié)點(diǎn)發(fā)送的請(qǐng)求通常稱為 交易,交易和中心化下的請(qǐng)求有幾個(gè)很大的不同是:交易的數(shù)據(jù)經(jīng)過用戶個(gè)人簽名之后發(fā)送到節(jié)點(diǎn),節(jié)點(diǎn)收到交易請(qǐng)求之后,會(huì)把 請(qǐng)求廣播到整個(gè)網(wǎng)絡(luò),交易在網(wǎng)絡(luò)達(dá)成共識(shí)之后,才算是真正的執(zhí)行(真正其作用的執(zhí)行不一是連接的后端節(jié)點(diǎn),盡管后端也會(huì)執(zhí)行)。以及中心化下的請(qǐng)求大多數(shù)都是同步的(及時(shí)拿到結(jié)果), 而交易大多數(shù)是異步的,這也是在開發(fā)去中心應(yīng)用時(shí)需要注意的地方,
從節(jié)點(diǎn)上獲得數(shù)據(jù)狀態(tài)(比如交易的結(jié)果),一般是通過事件回調(diào)來獲得。
如何開發(fā)在開發(fā)中心化應(yīng)用最重要兩部分是 客戶端UI表現(xiàn)和 后端服務(wù)程序, UI表現(xiàn)通過HTTP請(qǐng)求連接到后端服務(wù)程序,后端服務(wù)程序運(yùn)行在服務(wù)器上,比如Nginx Apached等等。
開發(fā)一個(gè)去中心化應(yīng)用最重要也是兩部分: 客戶端UI表現(xiàn)及 智能合約,智能合約的作用就像后端服務(wù)程序,智能合約是運(yùn)行在節(jié)點(diǎn)的EVM上, 客戶端調(diào)用智能合約,是通過向節(jié)點(diǎn)發(fā)起RPC請(qǐng)求完成。
下面是一個(gè)對(duì)比:
客戶端UI <=> 客戶端UI HTTP <=> RPC 后端服務(wù)程序 <=> 智能合約 Nginx/Apache <=> 節(jié)點(diǎn)
因此對(duì)于去中心化應(yīng)用來說,程序員可以從兩個(gè)方面切入:
一個(gè)是 去中心化應(yīng)用的客戶端開發(fā), 熟悉已經(jīng)熟悉客戶端軟件(如WebAPP等)開發(fā)的同學(xué),只需要了解一下客戶端跟區(qū)塊鏈節(jié)點(diǎn)通信的API接口,如果是在當(dāng)前應(yīng)用最廣泛的區(qū)塊鏈平臺(tái)以太坊上開發(fā)去中心化應(yīng)用,那么需要了解Web3
這個(gè)庫,Web3對(duì)節(jié)點(diǎn)暴露出來的JSON-RPC接口進(jìn)行了封裝,比如Web3提供的功能有:獲取節(jié)點(diǎn)狀態(tài),獲取賬號(hào)信息,調(diào)用合約、監(jiān)聽合約事件等等。
目前的主流語言都有Web3的實(shí)現(xiàn),列舉一些實(shí)現(xiàn)給大家參考:
JavaScript Web3.js
Python Web3.py
Haskell hs-web3
Java web3j
Scala web3j-scala
Purescript purescript-web3
PHP web3.php
PHP ethereum-php
另一個(gè)切入點(diǎn)是 智能合約的開發(fā),在以太坊現(xiàn)在推薦的語言是Solidity,有一些同學(xué)對(duì)新學(xué)一門語言有一些畏懼,Solidity的語法其實(shí)很簡潔,有過一兩門其他語言基礎(chǔ)(開發(fā)經(jīng)驗(yàn))的同學(xué)三五天就可以學(xué)會(huì),我也錄制了一個(gè)視頻課程:深入詳解以太坊智能合約語言Solidity。
下面用一個(gè)Hello合約,體會(huì)下Solidity的語法:
contract Hello { function hello() public returns(string) { return "Hello World"; } }
如果把上面的contract關(guān)鍵字更改為class,就和其他語言定義一個(gè)類一樣。
有興趣的同學(xué)可以進(jìn)一步學(xué)習(xí)一下這個(gè)DApp開發(fā)案例Web3與智能合約交互實(shí)戰(zhàn),
在DAPP的開發(fā)過程中,一些開發(fā)工具可以幫助我們事半功倍,如:Truffle開發(fā)框架以及Ganache工具來模擬節(jié)點(diǎn)等,這篇文章一步步教你開發(fā)、部署第一個(gè)去中心化應(yīng)用
補(bǔ)充對(duì)于想切入到去中心化應(yīng)用開發(fā)的同學(xué),對(duì)區(qū)塊鏈運(yùn)行的原理了解肯定會(huì)是加分項(xiàng),尤其是各類共識(shí)機(jī)制(POW,POS,DPOS等)的理解,P2P網(wǎng)絡(luò)的理解,以及各類加密和Hash算法的運(yùn)用。有一些同學(xué)想做區(qū)塊鏈底層開發(fā),對(duì)區(qū)塊鏈運(yùn)行的原理則是必須項(xiàng)。
歡迎來知識(shí)星球提問,星球內(nèi)已經(jīng)聚集了300多位區(qū)塊鏈技術(shù)愛好者。
深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24262.html
摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請(qǐng)讀者前往原文閱讀 本章的文章越來越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...
摘要:在中,一個(gè)文件的哈希值完全取決于其內(nèi)容,修改它的內(nèi)容,其相應(yīng)的值也會(huì)發(fā)生改變。則是用一個(gè)哈希指向一個(gè)真實(shí)內(nèi)容文件的,文件更新這更改哈希的指向,當(dāng)然更新指向需要有哈希對(duì)應(yīng)的私鑰。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:站在Web3.0 理解IPFS是什么原文已更新,請(qǐng)讀者前往原文閱讀 盡管網(wǎng)絡(luò)上,已經(jīng)有不少文章討論IPFS,不過真正講明白IPFS想做什么的很少,文本嘗試站在未來Web3....
摘要:最初,我對(duì)以太坊區(qū)塊鏈,智能合約和應(yīng)用程序提出了大量疑問。即使需要額外的工具來設(shè)置開發(fā)環(huán)境,現(xiàn)在微軟將使用新的針對(duì)以太坊區(qū)塊鏈產(chǎn)品。 最近區(qū)塊鏈技術(shù)引起了我的注意。我剛開始了解它,就看到了區(qū)塊鏈去中心化架構(gòu)的巨大潛力,并且它能夠簡化各種現(xiàn)有繁瑣的流程,通過各種形式的合約。 作為一名.NET開發(fā)人員,我主要使用的是一些提供中心數(shù)據(jù)源的架構(gòu),因此區(qū)塊鏈的去中心化概念對(duì)我來說是全新的。我很快...
摘要:是企業(yè)與區(qū)塊鏈相遇的地方。的框架旨在成為開發(fā)區(qū)塊鏈解決方案的支柱。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 如果你想將區(qū)塊鏈合并到一個(gè)Java項(xiàng)目中,現(xiàn)在我們來看看就是這個(gè)細(xì)分領(lǐng)域中三個(gè)最大的OSS玩家。 好的伙計(jì)們,我們都聽說過比特幣,以太坊或其他加密貨幣,其中有一些時(shí)髦的名字圍繞著我們常見的新聞,但我們作為Java開發(fā)人員知道如何輕松地與這些區(qū)塊鏈技術(shù)進(jìn)行交互嗎?以...
閱讀 1798·2021-11-24 10:21
閱讀 1208·2021-09-22 15:25
閱讀 3170·2019-08-30 15:55
閱讀 708·2019-08-30 15:54
閱讀 3461·2019-08-30 14:20
閱讀 1659·2019-08-30 14:06
閱讀 638·2019-08-30 13:11
閱讀 3144·2019-08-29 16:43