開發(fā)基于以太坊的DApp,都要會(huì)哪些技能?

圖片來源網(wǎng)絡(luò)

前言:

對(duì)于一個(gè)新手來說,想開發(fā)DApp,最頭痛是不知道怎么去學(xué)?怎么入手?應(yīng)該去學(xué)點(diǎn)什么?好,作為一個(gè)踩過坑的我,接下來給大家聊聊我目前知道的吧,這篇文章理論偏重,下篇文章開始會(huì)給大家寫點(diǎn)實(shí)戰(zhàn)點(diǎn)的。

文:謙益

能看到這篇文章的應(yīng)該對(duì)區(qū)塊鏈的一些基礎(chǔ)知識(shí)有一定了解了,比如:

  • 區(qū)塊鏈?zhǔn)巧叮?/li>
  • 以太坊是啥?
  • 公鏈和私鏈的區(qū)別
  • Truffle是啥?
  • solidity是啥?

我就當(dāng)做你們對(duì)上面的已經(jīng)了解了,不了解的可以看我以前寫過的筆記或者網(wǎng)上查找相應(yīng)的資料。

一、web3.js是啥?

如果你想開發(fā)一個(gè)DApp,可能網(wǎng)上看到最多的是web3.js之類的,有人就開始疑問了,他是做什么的?其實(shí)他就是一個(gè)js庫,和jQuery庫類似。

好了,回到DApp開發(fā)上,先來說說DApp的運(yùn)作流程,DApp我個(gè)人的理解,他的本質(zhì)其實(shí)是一個(gè)H5 網(wǎng)頁,也可以說是一個(gè)H5 App。

當(dāng)你操作這個(gè)網(wǎng)頁時(shí),比如轉(zhuǎn)賬呀,這時(shí)網(wǎng)頁的js會(huì)去調(diào)取對(duì)應(yīng)的方法,這個(gè)方法會(huì)去調(diào)web3.js里面對(duì)應(yīng)的方法。

二、這個(gè)web3.js里面做了什么呢?

要想知道web3.js里面做了什么,就得先知道下面的幾個(gè)點(diǎn)

  • 1、如果想在區(qū)塊鏈里轉(zhuǎn)賬,我們正常邏輯是怎么做的?如果沒有DApp我們得,先下載一個(gè)以太坊官方提供的錢包,再登錄我們的賬號(hào),再選擇轉(zhuǎn)賬輸入要轉(zhuǎn)賬的用戶點(diǎn)擊發(fā)送。
  • 2、以太坊賬號(hào)與賬號(hào)之間轉(zhuǎn)賬數(shù)據(jù)傳輸是怎么發(fā)送的?如果是采用的HTTP服務(wù),我們是否可以像傳統(tǒng)API那樣,發(fā)個(gè)POST請(qǐng)求就轉(zhuǎn)賬了。答案當(dāng)然不是了,以太坊區(qū)之間的傳輸采用的是RPC服務(wù),關(guān)于RPC服務(wù)如果不懂的,可以自行網(wǎng)上找資料,你可以理解他是一個(gè)類似HTTP服務(wù)那樣,起了一個(gè)固定的端口監(jiān)聽別人的請(qǐng)求,而傳輸過來的數(shù)據(jù)格式則是固定的json格式,可能像這樣的:
curl --data
{
"jsonrpc":“2.0”,
"method":“eth_sendtransaction”,
"params"[{
    "from":"0xeb85a5",
    "to":"0x6ff93",
    "data":"0xcddddd"
}]
"id":8}
localhost:8123

這里你先不管,里面這些參數(shù)是什么意思,當(dāng)以太坊的節(jié)點(diǎn)拿到拿到這樣的json數(shù)據(jù)請(qǐng)求就會(huì)處理轉(zhuǎn)賬了,然后再廣播給所有節(jié)點(diǎn)。至于為啥要采用RPC服務(wù)這里不展開討論。

好了,知道上面兩點(diǎn)再回到DApp 的web3.js做了什么的問題上。

其實(shí)web3.js里面就是對(duì)這些固定的操作,比如獲取賬號(hào)信息,轉(zhuǎn)賬,還有調(diào)取合約等功能做了封裝,而怎么調(diào)取這些功能,就是通過調(diào)用以太坊的 JSON RPC API 完成的。

看到這里是不是就有點(diǎn)DApp的開發(fā)思路了,對(duì)沒錯(cuò)。如果你的DApp所有數(shù)據(jù)存在以太坊里面,你可以不用再寫后臺(tái),就一個(gè)純H5網(wǎng)頁就能做出一個(gè)DApp,但是實(shí)際開發(fā)中并不是這樣,繼續(xù)往下看。

三、需要學(xué)習(xí)go語言么?nodejs呢?

我們現(xiàn)在需要做一個(gè)養(yǎng)寵物的DApp,我們不同基因的寵物他有不同的的特性,這些特性,我們?cè)撛趺刺幚恚?/p>

寫在js代碼里面 ,那后期如果想加些特性,就得更新代碼,那隨著特性越來越多代碼會(huì)越來越多,不利于維護(hù),往往做法是把某種基因的特性存到我們自己的服務(wù)器里面,通過請(qǐng)求我們提供的API去拿到這些特性。有人會(huì)說,這又變成中心化了,沒錯(cuò),目前由于一些技術(shù)瓶頸,還不能做到100%去中心化。

上面說的是把寵物的特性單獨(dú)存起來了,而一些寵物的交易,或者交配等這些操作,是需要調(diào)取合約的,web3.js里面又封裝好了調(diào)合約的方法,是不是這些操作有讓網(wǎng)頁的js自己處理呢?也可以,不過有部分人覺得這樣不利于維護(hù),有了另一種做法,把DApp和傳統(tǒng)H5 APP一樣,DApp只負(fù)責(zé)展示,所有數(shù)據(jù)像后臺(tái)去拿。于是便有了nodejs,go,java版本的SDK,而這些SDK里面其實(shí)做的事應(yīng)該也是和web3.js類似。

寫在后面的話

我也是才開始學(xué)習(xí)以太坊才2周左右,可能對(duì)一些理論,一些概念理解不是很準(zhǔn)確,或者是有誤的。發(fā)文只是想分享下我最近的學(xué)習(xí)心得,讓一些比我晚起步的少踩一些坑,如果你發(fā)現(xiàn)有哪里不對(duì)的,歡迎留言我會(huì)積極修正和接納。

謝謝你耐心的看完了。

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 中本聰作為一個(gè)老派C++程序員 編程水平并不高明 但運(yùn)氣不錯(cuò)——Vitalik Buterin 如果說比特幣是...
    007胡明閱讀 787評(píng)論 2 1
  • 起風(fēng)的時(shí)候想你 下雨的時(shí)候想你 你在的時(shí)候想你 你不在了 依舊想你... 看完虐心的韓劇 又接著看另一部 虐心的韓...
    狐貍的愛閱讀 301評(píng)論 0 0
  • 她到底在想什么,她對(duì)我的真實(shí)態(tài)度是什么?她對(duì)于這件事到底真實(shí)的看法是什么?在我們?nèi)粘I罟ぷ?學(xué)習(xí)交流中 我們很想...
    花好月圓_4c8c閱讀 107評(píng)論 0 1
  • 原因: 1 編譯器 是 煞筆2. 在 CollectionView 創(chuàng)建 之前注冊(cè),應(yīng)該創(chuàng)建后注冊(cè)
    愛喝農(nóng)藥de清涼閱讀 5,493評(píng)論 0 0
  • 今天我新買了一個(gè)玩具,是一個(gè)鯊魚小汽車,還有一個(gè)小匙。上邊發(fā)的圖片就是小鑰匙,它有很大的技能,鯊魚汽車背后...
    rx任曦閱讀 317評(píng)論 0 0

友情鏈接更多精彩內(nèi)容