以太坊DAPP最佳开发实践-工具篇

版权声明

-----------------------------------------

随着最近Fomo3d的兴起,基于以太坊的DApp开发受到越来越多人的关注。但如何开发一款DApp,其基本开发环境是什么?如何测试,部署,都是一个很大问题。网上的资料分散且陈旧,缺少一个实时的更新和梳理。笔者部署过100+合约到链上,接触各类型的合约,亲历几款DApp的开发,对此略有心得,摸索出比较靠谱的环境和开发流程,特意分享给大家,希望能探讨出更加合理的流程。

DApp介绍

DApp(Decentralization Application): 分布式应用。区别于基于Android或者iOS的App关键在于D字。我们一般指基于区块链的应用,现在最流行的是基于以太坊的应用。当然由于EOS的性能卓越,也逐渐兴起。我们接下来谈DApp就特指基于以太坊的应用。

这种应用的特点在于,核心数据存储在以太坊上,只需要一个前端的应用展示。所以,它可以做到Serverless。传统的后端数据全部在以太坊上,前端js通过以太坊提供的web3.js提供的接口去读写合约,发起交易。

Tips: 命名为web3.js是有讲究的,对比与传统的web2.0, 它意味一种全新的web应用

当然,作为一个更加纯粹的DApp,我们甚至可以把前端都部署在区块链上,比如大热的IPFS。这样,所有的数据,连基本的静态文件存储都在链上,基本上是一个永久存在的应用。但目前受限于基础条件,还很难做到这一点,区块链的存储还无法应付大规模的访问。

工具集合

Pairty

parity作为以太坊的一个节点,可以用来部署私链,开发链,主链等不同网络类型。用在开发,测试,部署的不同环节。其UI流程,交互方便。可以方便进行账户转账,合约部署和执行等各种操作。具体的版本,建议用1.8.x。最新的2.0在原来的基础上套了一个壳,极其难用,整个连接的跳转全部丢失,千万别用。1.9.x系列也改的非常奇怪。真有一种每况愈下的感觉,感觉整个Parity团队都去搞新项目Polkadot,没用心做下去。

Truffle

truffle提供了一整套DApp的开发脚手架,有很多不错的工程框架可以直接unbox下来。建议大家把他的文档:

https://truffleframework.com/docs/truffle/overview

从头到尾仔细读一遍。具体的使用流程可以参考他们的文档,非常值得研究,可以把上面的示例都跟着做一遍。

zeppelin

这是一个基于solidity的合约开发组件。他的意义有两个:

1. 把合约开发一些通用的组件开发出来,可以方便地复用

2. 合约组件经过严格的测试,至今为出现漏洞

各位写合约,特别是写发币的合约,一定要多参考他们家。今年年中有两家因为合约漏洞导致代币归零的项目,就是没有好好使用zeppelin上的安全函数,也不会直接继承已经成熟的ERC20代码。这真是十亿级别的大教训。

MetaMask

人称小狐狸。它是一款基于浏览器插件的钱包。有了MetaMask,DApp中在发起交易的时候可以直接拉起DApp,然后把交易上链。整个流程才能打通。如果没有这个,每次交易的时候,需要用各种其他手段,比如找一个钱包扫码,然后通过手机钱包应用把交易上链,整个体验是中断的。而且truffle提供了完整的Metamask的接入流程,直接参考下面的文档即可:

https://truffleframework.com/docs/truffle/getting-started/truffle-with-metamask

年初的以太猫应用,通过MetaMask的使用,给大家提供很好的范例。通过这种方式的结合原来可以把DApp做得如此丝滑流畅。当然,这套体验流程目前在PCWeb上是没问题的,在手机上就很麻烦。手机浏览器不存在类似的插件。

为此有些钱包提供商为提供类似的解决方案,能解决用户在手机上也能玩DApp的问题。笔者所在的团队正在做类似的事情,有需求可以联系。

VSCode

编辑器方面我严重推荐VSCode。微软在开发编辑器的能力实属业内一流。此款编辑支持各种语言,对Solidity的支持也非常棒。重要的是,打开很多文件都是飞速,定制能力也强。

Infura

Infura项目非常牛气。看下图:

简单来说他就是以太坊的接入网关。目前可以接入以太坊的不同网络,包括主网和各种测试网。当然,他们还支持IPFS。他们一天访问超过10Billion。真的很吓人。但有些人可能不信,你分析下Fomo3d的前端就知道了,每5s的样子就的去刷新一下接口,通过infura访问以太坊上的数据。我们在实际部署DApp时,就可以直接用他们提供的服务。

当然为了加速,也可以自己部署线上的以太坊节点。笔者作为钱包服务商,有打算闲来时,提供一套更为完备的节点网关,出了以太坊,涵盖所有的主流公链。

etherscan.io

搞区块链的不知道这个网站实属耻辱。它已经是我使用频次最高的网站。每次补完合约或者转账完都会去刷新一下,看看有没有上链。合约部署完成之后也会上去提交下源码。另外,它还提供了很多其他丰富的功能,大家多用,多研究,肯定能挖掘出很多有意思的东西。

区块链上的数据,一切都是公开透明的,数据的背后,有太多隐藏的秘密!

Solidity

以太坊合约的开发其实是可以使用多种语言的,但目前来看Solidity已经成为事实的标准。大家在用它去学合约,在这一块也积累了大量有益的实践经验,特别是安全方面的。所以,可以重点掌握一下这门语言。他也有很多有意思的特性。

其他

笔者在上面特意精选DApp开发过程中用到的。初次之外,各位在学习DApp开发的过程中会遇到一些其他的软件,我简单介绍下,然后说明为啥不用,或者应急情况下也可以凑合用用。

Remix

我初次接入合约开发的时候,能看到很多地方讨论这个东西。地址:

https://remix.ethereum.org/

可以直接访问这个网站,也可以在本地起一个服务。我推荐后者,能稳定快速点。

这东西看着功能强大,丰富。好像还能调试的样子,但它调试起来经常跳,没法定位到具体的代码。但界面实在丑陋。在上面写代码,干事情,眼睛都要花掉。

部署完合约,在读写合约方面操作起来,太不方便。你用过Parity的合约读写操作,会很享受那种酸爽的感觉,在也不会用remix。

geth/mist

官方提供的钱包,但除了转转帐,体验一下web3的那些接口。在合约部署上,跟parity比相差太远。我曾经还被它坑死过一次,花了两天,最后找到原因,是它的一个bug。找谁说理去。

上面也可以看出,对于Parity我是不惜各种溢美之词。谁用谁知道,下文会正对一个具体的应用,我们在parity做一个详细的使用介绍。敬请期待!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180810G001T000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券