DAPP开发教程

合约准备

Remix是一个开源的Solidity智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity是以太零官方支持的开发语言,专门用于编写智能合约。http://remix.etherzero.org ,Remix作为在线的开发环境,不需要安裝,可以直接在任何浏览器启动Remix。网站第一次打开加载能容较多,需要耐心等待一段时间,之后打开会很快。

下面将介绍基于Remix的以太零Dapp的开发过程,描述如何在以太零正式网络上部署测试智能合约。

使用 Remix编译合约

点右上角 + 新增一个合约

名称任意只要扩展名是 “.sol”。

以一个简单合约为例,编写相应的代码內容到该合约并编译。合约使用的solidity语法学习可以参考官方学习网站http://solidity.readthedocs.io/en/v0.4.24/

Remix默认设置会自动编译,只要旁边没有弹出红色的 error 提示就代表编译成功。

以太零智能合约部署

打开GoETZ,默认连接上以太零主网,可以显示你账户中的ETZ余额。

代码编译没有错误,在Remix中选择Injected Web3,会自动将GoETZ插件钱包中的地址导入进来。

点击Deploy发送交易,就可以将合约部署到以太零网络。稍等片刻,部署成功后合约的使用界面就会出来,这样你就完成了一个以太零平台智能合约的部署,是不是很简单。

合约部署问题

如果点击Deploy发送交易后,remix报如下错误,则表示该交易的Power值不够,这种情况下,可以将发送交易的GasPrice调低,比如调整为1或者2,再进行尝试。

在网络拥堵的情况下,较低的GasPrice可能需要等待较长的时间,这时候也可以通过增加账户以太零余额的方式来满足要求。

应用代码

web3对区块链功能进行了封装.目前以太零的web3与以太坊的web3除power功能外接口是一致的,可以使用以太坊的web3与以太零节点进行交互.现在web3有python、java、JavaScript等实现,下面以使用比较广泛的web3.js作为例子.

node.js使用web3

首先需要在项目中引入web3库

npm i -S web3

引入后就可以通过下面代码实例化web3对象,填入的url地址可以使用自己搭建的节点地址.下面这种方式实例化的web3是通过http协议与节点通信的,事件监听等功能会有限制,可以使用ws或者ipc的方式连接保证相应功能使用.

var Web3 = require('web3');
var web3 = new Web3("HTTP://etzrpc.org");

引入web3后就可以通过web3对象的与节点通信,以及使用一些以太零相关的加解密功能,具体可以参照web3文档.

浏览器环境使用web3

安装了goetz的话浏览器会有一个web3的全局对象,可以直接使用,但是一般不建议这么做,一方面goetz提供的web3对象是0.20版本,落后与当前版本(1.0.0.37),另一方面这个web3对象仅仅是goetz自身使用的一个代理对象,不保证其中行为,所以最好在页面中引入自己的web3(可从github上下载).dist/web3.min.js更换成自己的web3文件路径.

<script src="dist/web3.min.js" charset="utf-8"></script>

引入完成后浏览器会带有Web3这个类,接下来通过实例化这个类重新创建web3对象.

var web3 = new Web3(web3_etz.givenProvider); //goetz
var web3 = new Web3(ethereum); //metamask

接下来就可以调用web3的api进行开发了.

参考文档

solidity: https://solidity.readthedocs.io/en/v0.5.2/

web3文档: https://web3js.readthedocs.io/en/1.0/