应该有不少小伙伴和我同样,一直想去入手学习区块链,可是总无从下手,有些概念感受理解了,有感受没理解。其实这都是“没实践”的锅。javascript
所谓看十遍不如想一遍,想一遍不如作一遍。这不最近星云链nebulas正有开发者激励计划,每提交一个应用均可以得到奖励,因此正好借此机会,开发第一个DAPP,而且理解所谓的DAPP究竟是一个什么样的东西。css
这篇文章几乎是DAPP开发零基础的踩坑经历,记录下来,勉强对零基础的同窗能够成为教程~html
若是你看了本篇教程而且开发了你本身的DAPP,能够点击这里注册NAS
用个人推广连接提交,这样你提交的时候我会获得另一部分奖励,做为对我写做的激励~前端
在开始开发以前,须要进行一系列的准备操做。包括钱包的制备,环境的搭建等等。这里对各类概念,我尽可能以通俗易懂的话来描述,由于我也是小白,可能会所以描述的不够准确,因此欢迎你们拍砖讨论。java
做为开发的第一步,首先确定是须要申请一个钱包。jquery
这里的钱包你能够想象成你显示世界的钱包。里面存放着你的大洋。现实生活中,你的钱包在你手里,因此别人拿不走,再数字生活中,你须要有一个密码来解锁你的钱包,当你的密码丢失的时候,就等于你的钱包丢失,没法找回,而且形成财产丢失。android
首先在GitHub上面,把官方web钱包clone下来:https://github.com/nebulasio/web-walletgit
其次打开index.html文件github
这样你就打开了web版的钱包,输入你想要的密码(必定不能忘记的),点击新建钱包,其次点击下载密码库文件,将钱包文件保存在本地(必定不能丢失),此时生成了一个以n1开头的文件:web
这个文件的名称就是你的钱包地址。 任何人有了你的钱包地址,就能够与你发生 交易,意思就是别人能够向你的钱包里面转帐。
此时点击钱包信息,上传你的钱包而且解锁,能够看到你的帐户的当前信息。期中包括你的余额等资料。
此时你已经注册了你的一个钱包,完成了第一部准备。
接下来进行下一步准备,那就是领取测试网的测试币。在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
而后,须要用到一个打包工具叫作gulp
因此使用npm安装:
npm install -g gulp
安装完毕后,运行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>
而后编写前端样式,这里的前端比较简单,提供一个搜索框,一个展现框,一个录入框:
当用户输入信件名称的时候,调用neb的接口,来获取数据,根据回调来展现数据:
好比,此时我搜索一篇文章,名为《给初学者的一封公开信》,反馈以下:
这样表明,已经查询到了内容。接下来来完成提交内容的部分。
此时根据nebpay的api,能够调用起chrome钱包插件进行支付:
其中nebPay是根据官方示例拷贝下来的文件。
<script type="text/javascript" src="./dist/nebPay.js"></script>
这个时候,编辑一封公开信,点击提交,便可弹出钱包页面进行GAS支付:
等提交完毕,便可查询到你写的公开信的内容。
若是你点击没有反应,那么说明你没有安装chrome插件的钱包,点击这里安装https://github.com/ChengOrangeJu/WebExtensionWallet
如此一来遍大功告成!
由于是静态网页,因此直接部署到你的服务器上,让其余用户访问便可。
当你开发部署完毕,便可去官网提交DAPP获取激励大奖~~
若是本文对你有帮助,请点击喜欢而且扩散~~
本文中DAPP已提交,而且部署以及开源
应用地址是:http://androidwing.net/nas-dapps/theletter/
项目地址是:https://github.com/githubwing/TheLetter
欢迎star,若是你想来交流区块链技术,能够加qq群:615075629