应该有很多小伙伴和我一样,一直想去入手学习区块链,但是总无从下手,有些概念感觉理解了,有感觉没理解。其实这都是***“没实践”**的锅。
所谓看十遍不如想一遍,想一遍不如做一遍。这不最近星云链nebulas正有开发者激励计划,每提交一个应用都可以获得奖励,所以正好借此机会,开发第一个DAPP,并且理解所谓的DAPP到底是一个什么样的东西。
这篇文章几乎是DAPP开发零基础的踩坑经历,记录下来,勉强对零基础的同学可以成为教程~
在开始开发之前,需要进行一系列的准备操作。包括钱包的制备,环境的搭建等等。这里对各种概念,我尽量以通俗易懂的话来描述,因为我也是小白,可能会因此描述的不够准确,所以欢迎大家拍砖讨论。
注册钱包
作为开发的第一步,首先肯定是需要申请一个钱包。
这里的钱包你可以想象成你显示世界的钱包。里面存放着你的大洋。现实生活中,你的钱包在你手里,所以别人拿不走,再数字生活中,你需要有一个密码来解锁你的钱包,当你的密码丢失的时候,就等于你的钱包丢失,无法找回,并且造成财产丢失。
首先在GitHub上面,把官方web钱包clone下来:https://github.com/nebulasio/web-wallet
其次打开index.html文件
这样你就打开了web版的钱包,输入你想要的密码(一定不能忘记的),点击新建钱包,其次点击下载密码库文件,将钱包文件保存在本地(一定不能丢失),此时生成了一个以n1开头的文件:
这个文件的名称就是你的钱包地址。 任何人有了你的钱包地址,就可以与你发生 交易,意思就是别人可以向你的钱包里面转账。
此时点击钱包信息,上传你的钱包并且解锁,可以看到你的账户的当前信息。期中包括你的余额等资料。
此时你已经注册了你的一个钱包,完成了第一部准备。
接下来进行下一步准备,那就是领取测试网的测试币。在https://testnet.nebulas.io/claim/每天可以领取1NAS的测试币,注意这个币领取是在测试网,与主网没有任何关系。 主网和测试网的意思你可以理解为两个不同的链,事实上区块链本身就是数据库,其实就是主网和测试网是两个不同的数据库的数据,测试网的数据只用来测试不产生实际价值。你也可以把做好的dapp移植到主网,需要的也仅仅是换一些链接。当然主网是需要使用NAS币的,你可以去交易所购买NAS,例如币安交易所,可以用我的邀请链接注册:www.binance.com 这样可以省一些手续费。
领取完毕之后,再打开钱包,在钱包右上角可以切换主网和测试网,这时切换到测试网。 查询钱包余额,发现已经领取完毕(如果没有显示成功,请耐心等待,区块确认有延迟,意思是把数据写入区块链里,需要等待各个区块确认该数据有效安全,才可以将数据写入区块链,所以会有延迟)
你已经成功领取了第一个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,如果你想来交流区块链技术