区块链DAPP开发实战——在安卓下调用本地节点发行的代币和智能合约

作 者 简 介
刘其康——Android系统工程师
5年以上开发经验,在多领域跨平台开发的经验丰富,负责京东 直播 的开发和设计工作,热衷于探索新技术新方向,并实际应用。
引言
目前,有关区块链相关技术和方向持续升温,但是,基于 区块链技术 的DAPP(去中心化应用)尚处于早期探索状态,还没有大规模实际应用价值的DAPP出现。但不可否认的是区块链技术带给了我们巨大的想象空间,从现在的情形来看打造完全去中心化的App至少还需要几年时间。DAPP能否打败APP还是一个未知数,但DApp的发展是个必然趋势。所以我们要紧跟时代的步伐,勇敢的去探索新技术新方向,成为下一个时代的先驱者。
>>>> 一、背景与目的
>>>> 1、背景
本文在区块链火爆的今天,给想学习这方面知识但又无从下手的同学提供了一个方向,文中涉及多种不同技术进行整合,信息量较大,基本已经将开发过程中可能会遇到的问题解决或者绕开,以方便您的顺畅学习。
>>>> 2、目的
通过本文的学习,你将收获以下几点:
- 区块链常用开发环境部署与搭建
- 基于truffle框架开发与部署Solidity智能合约
- 在安卓中通过web3j来访问本地节点部署的代币与合约
>>>> 二、开发环境准备
>>>> 1、PowerShell
powerShell是一款比cmd权限更高的命令提示工具,cmd.exe微软已明确不在维护,通过开始搜索powerShell可以打开。
>>>> 2、Nodejs
使用nodejs 命令行工具 npm方便下载开发所需的相关库,开发所用到的大部分第三方库或者框架都是用过npm进行下载(http://nodejs.cn/download/)
注意 :npm指令由于某种原因会导致连接不上外网的情况,可以修改npm下载源地址为淘宝地址,命令行执行npm config set registry(https://registry.npm.taobao.org)
>>>> 3、Charles
Charles是一款抓包工具,我们需要用他来配置代理,以便手机/模拟器来访问到本地https://127.0.0.1:9545端口。
>>>> 4、Web3j.bat
Web3j.bai智能合约包装器,可以把已编译好的智能合约文件.json转化成.java类文件,方便程序识别调用(https://github.com/web3j/web3j/releases/tag/v3.3.1)
>>>> 5、Atom
Atom是一款好用的开发solidity的IDE,有多个支持Solidity开发的插件方便使用,包括代码提示工具等(https://atom.io)
Atom开发Solidity插件安装:
打开Atom,File-Setting-Install 搜索要安装的插件名,如果网络好的话可下载,不过因为某种原因,我们是下不了这个插件的,所以采用从git上下载源码安装的方式。

要安装的两个插件:
- language-ethereum(代码提示) git:https://github.com/caktux/language-ethereum
- autocomplete-solidity(智能补全) git: https://github.com/AustP/autocomplete-solidity
下载的压缩包解压到安装地址,每个人不同

打开windows PowerShell,cd C:\Users\liuqikang\.atom\packages到目标目录下,输入指令apm install language-ethereum(language-ethereum是解压后的文件夹名),也可以到解压后文件夹下通过npm install安装,安装成功后再次回到Atom中Setting搜索插件会显示已安装,结果如下:

>>>> 三、开发阶段
>>>> 1、本地节点搭建,开发智能合约并部署
Truffle是一款以太坊Solidity编程语言开发框架(官方样例网址:https://truffleframework.com/boxes),我们要使用truffle的基础工程tutorialtoken来开发自己的代币(https://truffleframework.com/boxes/tutorialtoken)
a、构建tutorialtoken工程
打开PowerShell建立一个文件夹tokentest,并进入

通过根据官网教程部署tutorialtoken工程,truffle unbox tutorialtoken(如果失败或者报错,请确保上面npm的源已切换),Tutorialtoken工程部署成功后,如下图所示:

此时官方工程已经下载成功了。
b、工程分析,开发智能合约
使用atom .命令打开这个工程(atom安装成功后会自动配置到系统环境变量中)


我们来分析一下工程目录:
- Build :构建目录
- Contracts :智能合约.sol 文件夹
- Migrations :智能合约部署文件夹
- Node_modules :第三方库文件夹
- Src :相关js内容,因为这个是一个web工程
- Test :测试文件夹
- package.json :每一个nodejs工程必备,里面调用了truffle.js
- truffle.js :truffle框架入口文件
继续阅读官方教程后可以发现一个官方的提示

官方提示说我们这个工程不是一个完整的dapp工程,我们需要依赖于OpenZepplin第三方库自己补全这个工程,点开Open Zeepelin的链接,从第三部开始(前两部我们已经做过了),在当前工程目录下安装open zeppelin

安装成功后,继续按照open zeppelin教程,在Atom的contracts文件夹下创建一个合约TutorialToken.sol,并填入初始内容
pragma solidity ^0.4.24;
import "openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
contract TutorialToken is StandardToken {