前言:
对于一个新手来说,想开发DApp,最头痛是不知道怎么去学?怎么入手?应该去学点什么?好,作为一个踩过坑的我,接下来给大家聊聊我目前知道的吧,这篇文章理论偏重,下篇文章开始会给大家写点实战点的。
文:谦益
能看到这篇文章的应该对区块链的一些基础知识有一定了解了,比如:
- 区块链是啥?
- 以太坊是啥?
- 公链和私链的区别
- Truffle是啥?
- solidity是啥?
我就当做你们对上面的已经了解了,不了解的可以看我以前写过的笔记或者网上查找相应的资料。
一、web3.js是啥?
如果你想开发一个DApp,可能网上看到最多的是web3.js之类的,有人就开始疑问了,他是做什么的?其实他就是一个js库,和jQuery库类似。
好了,回到DApp开发上,先来说说DApp的运作流程,DApp我个人的理解,他的本质其实是一个H5 网页,也可以说是一个H5 App。
当你操作这个网页时,比如转账呀,这时网页的js会去调取对应的方法,这个方法会去调web3.js里面对应的方法。
二、这个web3.js里面做了什么呢?
要想知道web3.js里面做了什么,就得先知道下面的几个点
- 1、如果想在区块链里转账,我们正常逻辑是怎么做的?如果没有DApp我们得,先下载一个以太坊官方提供的钱包,再登录我们的账号,再选择转账输入要转账的用户点击发送。
- 2、以太坊账号与账号之间转账数据传输是怎么发送的?如果是采用的HTTP服务,我们是否可以像传统API那样,发个POST请求就转账了。答案当然不是了,以太坊区之间的传输采用的是RPC服务,关于RPC服务如果不懂的,可以自行网上找资料,你可以理解他是一个类似HTTP服务那样,起了一个固定的端口监听别人的请求,而传输过来的数据格式则是固定的json格式,可能像这样的:
curl --data
{
"jsonrpc":“2.0”,
"method":“eth_sendtransaction”,
"params"[{
"from":"0xeb85a5",
"to":"0x6ff93",
"data":"0xcddddd"
}]
"id":8}
localhost:8123
这里你先不管,里面这些参数是什么意思,当以太坊的节点拿到拿到这样的json数据请求就会处理转账了,然后再广播给所有节点。至于为啥要采用RPC服务这里不展开讨论。
好了,知道上面两点再回到DApp 的web3.js做了什么的问题上。
其实web3.js里面就是对这些固定的操作,比如获取账号信息,转账,还有调取合约等功能做了封装,而怎么调取这些功能,就是通过调用以太坊的 JSON RPC API 完成的。
看到这里是不是就有点DApp的开发思路了,对没错。如果你的DApp所有数据存在以太坊里面,你可以不用再写后台,就一个纯H5网页就能做出一个DApp,但是实际开发中并不是这样,继续往下看。
三、需要学习go语言么?nodejs呢?
我们现在需要做一个养宠物的DApp,我们不同基因的宠物他有不同的的特性,这些特性,我们该怎么处理?
写在js代码里面 ,那后期如果想加些特性,就得更新代码,那随着特性越来越多代码会越来越多,不利于维护,往往做法是把某种基因的特性存到我们自己的服务器里面,通过请求我们提供的API去拿到这些特性。有人会说,这又变成中心化了,没错,目前由于一些技术瓶颈,还不能做到100%去中心化。
上面说的是把宠物的特性单独存起来了,而一些宠物的交易,或者交配等这些操作,是需要调取合约的,web3.js里面又封装好了调合约的方法,是不是这些操作有让网页的js自己处理呢?也可以,不过有部分人觉得这样不利于维护,有了另一种做法,把DApp和传统H5 APP一样,DApp只负责展示,所有数据像后台去拿。于是便有了nodejs,go,java版本的SDK,而这些SDK里面其实做的事应该也是和web3.js类似。
写在后面的话
我也是才开始学习以太坊才2周左右,可能对一些理论,一些概念理解不是很准确,或者是有误的。发文只是想分享下我最近的学习心得,让一些比我晚起步的少踩一些坑,如果你发现有哪里不对的,欢迎留言我会积极修正和接纳。
谢谢你耐心的看完了。
参考文档
- RPC服务和HTTP服务对比
http://blog.csdn.net/wangyunpeng0319/article/details/78651998 - 以太坊与节点的交互 JSON RPC API 和Web3.js
http://blog.csdn.net/DDFFR/article/details/74639418 - web3.js与合约交互
http://blog.csdn.net/ddffr/article/details/73771940