應該有很多小伙伴和我一樣,一直想去入手學習區塊鏈,但是總無從下手,有些概念感覺理解了,有感覺沒理解。其實這都是“沒實踐”的鍋。
所謂看十遍不如想一遍,想一遍不如做一遍。這不最近星雲鏈nebulas正有開發者激勵計划,每提交一個應用都可以獲得獎勵,所以正好借此機會,開發第一個DAPP,並且理解所謂的DAPP到底是一個什么樣的東西。
這篇文章幾乎是DAPP開發零基礎的踩坑經歷,記錄下來,勉強對零基礎的同學可以成為教程~
如果你看了本篇教程並且開發了你自己的DAPP,可以點擊這里注冊NAS
用我的推廣鏈接提交,這樣你提交的時候我會得到另外一部分獎勵,作為對我寫作的激勵~
在開始開發之前,需要進行一系列的准備操作。包括錢包的制備,環境的搭建等等。這里對各種概念,我盡量以通俗易懂的話來描述,因為我也是小白,可能會因此描述的不夠准確,所以歡迎大家拍磚討論。
注冊錢包
作為開發的第一步,首先肯定是需要申請一個錢包。
這里的錢包你可以想象成你顯示世界的錢包。里面存放着你的大洋。現實生活中,你的錢包在你手里,所以別人拿不走,再數字生活中,你需要有一個密碼來解鎖你的錢包,當你的密碼丟失的時候,就等於你的錢包丟失,無法找回,並且造成財產丟失。
首先在GitHub上面,把官方web錢包clone下來:https://github.com/nebulasio/web-wallet
其次打開index.html文件
這樣你就打開了web版的錢包,輸入你想要的密碼(一定不能忘記的),點擊新建錢包,其次點擊下載密碼庫文件,將錢包文件保存在本地(一定不能丟失),此時生成了一個以n1開頭的文件:
這個文件的名稱就是你的錢包地址。 任何人有了你的錢包地址,就可以與你發生 交易,意思就是別人可以向你的錢包里面轉賬。
此時點擊錢包信息,上傳你的錢包並且解鎖,可以看到你的賬戶的當前信息。期中包括你的余額等資料。
此時你已經注冊了你的一個錢包,完成了第一部准備。
接下來進行下一步准備,那就是領取測試網的測試幣。在https://testnet.nebulas.io/claim/每天可以領取1NAS的測試幣,注意這個幣領取是在測試網,與主網沒有任何關系。 主網和測試網的意思你可以理解為兩個不同的鏈,事實上區塊鏈本身就是數據庫,其實就是主網和測試網是兩個不同的數據庫的數據,測試網的數據只用來測試不產生實際價值。
領取完畢之后,再打開錢包,在錢包右上角可以切換主網和測試網,這時切換到測試網。
查詢錢包余額,發現已經領取完畢(如果沒有顯示成功,請耐心等待,區塊確認有延遲,意思是把數據寫入區塊鏈里,需要等待各個區塊確認該數據有效安全,才可以將數據寫入區塊鏈,所以會有延遲)
你已經成功領取了第一個NAS,接下來你將會用測試的NAS來部署測試你的智能合約。
編寫部署智能合約
在開始這部分之前,先來解釋一些如何理解智能合約,或者說如何理解一個DAPP的運作原理。
智能合約簡單的白話來講,就是一段存儲在區塊鏈上,運行在區塊鏈代碼執行引擎的一個代碼片。這部分的代碼,提供給DAPP前端一些必要的接口,用來存儲或者查詢數據。你可以理解為:智能合約就是后端,提供接口的。他所用的數據庫就是區塊鏈本身。
智能合約貌似理解了,那么區塊鏈本身是數據庫如何理解呢?
區塊鏈(block-chain),顧名思義,是以區塊形成的鏈表,所有數據保存在稱為“區塊”的東西上,每個區塊的大小有限,所有用鏈表把他們串聯起來,如圖:
這樣就應該很好理解了,那么說完了后端和數據庫,是不是就差前端了?
一個DAPP的前端,可以是任何形式的,比如WEB版,比如Android版,比如iOS版,但是因為市面上大多數區塊鏈開發都屬於前期,官方只提供了WEB版的sdk來接入區塊鏈,所以目前一般的DAPP是以WEB版為主,畢竟跨平台。
那么接下來,我們來開始編輯我們的智能合約,也就是所謂的后台。此部分參考官方dictionary的demo進行修改。
這里假設我們要做一個名為“小小公開信”的DAPP,主要的功能是任何區塊鏈上的用戶都可以發表一篇標題不重復的公開信,如果標題被占用,就只能查看這篇公開信。
首先新建一個js文件,編寫我們所需要的實體,比如一公開信,他應該有標題,內容,以及作者。
其次,我們應該可以有權限訪問我們自己智能合約的存儲空間,所以根據官方的API來創建存儲空間:
這里的數據是以kep-value形式存儲的。相信大家很容易理解。
接下來,只需要再編寫兩個函數,一個是存儲公開信,一個是查詢公開信,邏輯比較簡單,直接貼代碼:
這樣,我們就完成了一個簡單的智能合約。
部署智能合約
還記得你剛才領取的測試網的1枚NAS嗎,他開始派上用場了。要知道,把我們的代碼部署到鏈上可不是免費的,要不然白白浪費資源誰都不願意干啊,所以我們需要支付一定量的GAS,只要是交易,或者理解為向區塊鏈這個數據庫寫入數據,就需要支付GAS,GAS是NAS的一個計量單位(當然首創在ETH中)。為什么需要GAS呢,其中除了為了保證運行的代碼不是無價值的,還有一個原因是要防止有人惡意發布代碼,比如寫一個死循環。
現在,打開你的錢包,點擊合約,再點擊部署,把你剛才的智能合約代碼復制到合約代碼里面,之后解鎖錢包,點擊測試,發現沒有返回錯誤,就可以點擊提交部署:
部署成功之后,會告訴你交易的hash以及合約地址,一定要好好保存起來,否則目前會丟失(好像官方錢包還沒提供查詢歷史交易的功能)
這里合約地址就是你剛才部署代碼的地址,每個智能合約都有一個合約地址,通過合約地址以及支付一些GAS,就可以調用合約的代碼。
測試智能合約
點擊錢包的執行,此時我們測試一下寫入一封公開信,這里函數寫合約定義的
save()
參數傳入:
[“給初學者的一封公開信”,”大家持之以恆不斷努力,終會成功”]
目的地址寫剛才的合約地址如圖:
點擊測試,發現沒有錯誤,則提交。
等待區塊確認之后,我們再來查詢一下,剛才的數據有沒有提交成功:
點擊測試,可以看到結果:
成功把我們的公開信返回了。至此合約部署完畢。
開發前端頁面
既然我們的智能合約部署好了,就說明我們擁有一個數據庫為區塊鏈的后台服務器了。現在只需要編寫一個前端,展示給用戶使用就可以了。
官方提供了js版的api,可以讓瀏覽器接入區塊鏈獲取數據,sdk地址如下:
https://github.com/nebulasio/neb.js
首先把項目clone下來:
git clone https://github.com/nebulasio/neb.js.git
- 1
- 2
然后,需要用到一個打包工具叫做gulp
所以使用npm安裝:
npm install -g gulp
- 1
安裝完畢后,運行glup打包
打包完畢后,會在項目文件夾下生成一個/dist的文件夾,把這個文件夾復制到我們的工作目錄,作為文件依賴使用。
因為筆者沒有接觸過前端開發,所以這里前端選擇bootstrap+jQuery,因為他們對新手很友好,零基礎即可快速上手。
首先在html文件里,引入需要的依賴文件:
<script type="text/javascript" src="./dist/nebulas.js"></script> <script type="text/javascript" src="./jquery-3.3.1.min.js"></script> <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
- 1
- 2
- 3
- 4
- 5
然后編寫前端樣式,這里的前端比較簡單,提供一個搜索框,一個展示框,一個錄入框:
當用戶輸入信件名稱的時候,調用neb的接口,來獲取數據,根據回調來展示數據:
比如,此時我搜索一篇文章,名為《給初學者的一封公開信》,反饋如下:
這樣代表,已經查詢到了內容。接下來來完成提交內容的部分。
此時根據nebpay的api,可以調用起chrome錢包插件進行支付:
其中nebPay是根據官方示例拷貝下來的文件。
<script type="text/javascript" src="./dist/nebPay.js"></script>
- 1
- 2
這個時候,編輯一封公開信,點擊提交,即可彈出錢包頁面進行GAS支付:
等提交完畢,即可查詢到你寫的公開信的內容。
如果你點擊沒有反應,那么說明你沒有安裝chrome插件的錢包,點擊這里安裝https://github.com/ChengOrangeJu/WebExtensionWallet
如此一來遍大功告成!
因為是靜態網頁,所以直接部署到你的服務器上,讓其他用戶訪問即可。
當你開發部署完畢,即可去官網提交DAPP獲取激勵大獎~~
如果本文對你有幫助,請點擊喜歡並且擴散~~
本文中DAPP已提交,並且部署以及開源
應用地址是:http://androidwing.net/nas-dapps/theletter/
項目地址是:https://github.com/githubwing/TheLetter
歡迎star,如果你想來交流區塊鏈技術,可以加qq群:615075629