Windows环境下跑通Truffle开发环境

最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上不断地记录我的成长过程。

https://steemit.com/cn/@speeding/smart-contract-development0

Ethereum上的智能合约开发对Windows不太友好,培训课上的所有例子都是运行在老师提前安装好的一个Ubuntu虚拟机上,为了加深对课程的印象,我在Windows上把Truffle等安装过程跑了一遍。

一、几个术语介绍


1、Solidity

Solidity是在进行以太坊智能合约(Smart Contract)开发时最流行的一种语言,Solidity语法与C++和Javascript比较像,通过Solidity编译器,可以把高级语言编译成跑在以太坊虚拟机(EVM)上的低级语言,可以极大地减轻智能合约编程的工作量。

2、Truffle

以太坊上的智能合约要与数字资产进行频繁交互,编程过程中稍微考虑不周,会造成漏洞,很可能造成用户的巨大财产损失,所以Solidity程序都要经过严格的单元测试和集成测试,最后才能部署到正式的以太坊网络中。

而Truffle框架是一个非常成熟的框架,可以方便地编译、运行和测试一个合约,整个过程都在一个以太坊的测试网络中搞定,不用等待漫长的挖矿过程就能快速看到测试结果,节省了很多开发成本。

3、TestRPC和Ganache

geth是一个老牌的以太坊钱包客户端,搞程序开发的不能一上来就在geth上测试,每次消耗的gas都让人受不了,更别说还需漫长的挖矿时间等待了。而TestRPC就是一个在本地使用内存模拟的一个以太坊环境,还提供丰富的命令行,可以查询以太坊的状态。

后来TestRPC改名为Ganache CLI,成为truffle中的一个重要成员,而Ganache就专指带图形界面的程序,它需要运行在Windows 10上,不需要记忆一大堆复杂的字符命令。

  • http://truffleframework.com/blog/testrpc-is-now-ganache
  • https://github.com/trufflesuite/ganache-cli

4、vscode

Atom和Sublime Text是非常流行的源代码编辑器,微软也不甘寂寞,推出了VSCode。VSCode是一款轻量编辑器,也支持丰富的插件,安装solidity插件后就可以支持solidity语言。

5、web3.js

web3.js是以太坊提供的一个javascript库,提供了一系列与区块链交互的Javascript对象和函数,可以调用智能合约、查看网络状态、本地账户、交易信息、区块信息等等,写前端程序或测试用例也要用到它。

下面进入安装过程,最好的参考材料仍是Truffle的官方网站。

http://truffleframework.com

二、安装Node.js

想跑起来Truffle,需要安装node.js 5.0以上的开发环境,可直接到https://nodejs.org 下载和安装环境,我安装了8.9.4 LTS(Long Term Support)版本,全部用默认的参数安装即可。

http://truffleframework.com/docs/getting_started/installation

三、安装Truffle


从开始菜单中打开一个node.js command Prompt窗口,用一行命令即可安装好Truffle。

npm install -g truffle

Truffle的版本更新得非常频繁,我用的是4.0.5,用下面命令查看版本。

truffle version

四、创建一个新项目


我在D盘的根目录下建立一个MetaCoin项目。

mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin

老的truffle版本要用 truffle init 命令来新建项目,现在可以直接从网上下载一个现成的项目(称为box),执行完truffle unbox命令后,在d:\MetaCoin文件夹之下就有三个子文件夹和几个文件。

D:\MetaCoin
│  truffle-config.js
│  truffle.js
│
├─contracts   
│      ConvertLib.sol
│      MetaCoin.sol
│      Migrations.sol
│
├─migrations
│      1_initial_migration.js
│      2_deploy_contracts.js
│
└─test
        metacoin.js
        TestMetacoin.sol

五、安装vscode


从 https://code.visualstudio.com 下载vscode,默认安装即可,我安装的是1.19.2。启动vscode之后,需要安装solidity和Solidity Extended两个插件,安装完成后重启vscode,则可以看到solidity源代码的高亮显示。

六、安装ganache

1、Ganache

图形界面的ganache访问网址: http://truffleframework.com/ganache/

下载的安装包是appx格式,需要Windows 10系统的支持,其默认端口为7545。

2、Truffle develop

另外还有一种客户端可供选择,就是truffle develop,默认端口为9545。

在运行truffle develop命令时,可能会遇到命令无法执行的问题,这是truffle.js的名字冲突造成的,可用以下的一种办法解决:

  • 每次调用truffle的时候,用truffle.cmd
  • 从PATHEXT环境变量中把 .JS 删除掉(我采用的办法)

这个客户端的功能还比较弱,可以用.help看帮助,用.exit退出。

3、Ganache CLI

如果机器是Windows 7,又不喜欢功能较弱的truffle develop,则可以使用Ganache CLI,它其实就是大名鼎鼎的TestRPC,其安装过程非常简单。

npm install -g ganache-cli

使用它的测试网络,我们还需要修改truffle.js文件,配置一下网络参数。

module.exports = {
  networks: {
    development: { //部署在开发网络上
      host: "127.0.0.1",
      port: 8545,
      network_id: "*" // Match any network id
    }
  }
};

带图形界面的Ganache的默认端口是7545,Ganache-cli的默认端口是8545,truffle develop的默认端口是9545。truffle.js中的端口参数要与以太坊客户端的端口保持一致。

启动ganache-cli的测试网络:

ganache-cli

七、编译和部署

此时应该可以成功编译并部署合约了。

truffle compile
truffle migrate

在Ganache的图形界面上可以看到新挖出的区块和各笔交易的详细信息。

八、单元测试

运行下面命令行即可进行单元测试。

truffle test

在test子文件夹下,需要编写相应的单元测试文件,有.js和.sol两种编写方式,各有优缺点。

九、web3交互

写一个程序肯定会遇到各式各样的问题,图形界面的ganache查询区块和交易状态非常方便,如果用程序或命令行来操作,就需要用到强大的web3.js。

truffle console

在 truffle(development)> 之后可以输入各种web3的指令,最重要的对象是web3.eth,详细的说明见文档:

https://github.com/ethereum/wiki/wiki/JavaScript-API

MetaCoin.deployed().then(contract => {meta = contract})
meta.getBalance.call('0x24ed8dfbc1457944e27437308a773ba3d38dd66e')

十、boxes

从零构建一个智能合约的难度非常大,truffle中提供了一些boxes,这些boxes包含一些有用的模块、Solidity合约以及前端代码等,在此基础上开发会省不少力气。

http://truffleframework.com/boxes

列在第一位的box是react框架,运行truffle unbox react 即可下载所有的源代码,这里面提供了一个叫做SimpleStorage的合约,可以当作Hello World来使用。运行下面命令之后,会打开浏览器访问http://localhost:3000,获取智能合约中保存的数据。

truffle compile
truffle migrate
npm run start

提示:如果你用TestRPC或Ganache-cli,需要修改getWeb3.js中的provider为http://127.0.0.1:8545。

上述过程只是跑通了各种软件在Windows上的安装、部署和测试过程,真正让人捉急的是单元测试无法通过时,不知道如何去定位BUG的位置,我得抓紧去做第五课的作业了。

--- END ---

原文发布于微信公众号 - 申龙斌的程序人生(slbGTD)

原文发表时间:2018-01-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

解决cmder进入D盘目录不正确的方法

前两天就有群友问我cmder装好以后,进入D盘有点问题,输入d:,会进入到D:\cmder\config\profile.d 的路径下

1242
来自专栏区块链技术专栏

EOS 权限管理之-权限的使用 (你绝对找不到的干货)

相信看这篇教程的人,对我之前的一些账户操作已经进行了了解,如果不了解的,可以移步 https://eosfans.io/topics/372.

6103
来自专栏coding

这一次,真正掌握composercomposer是现代PHP的基石初识composercomposer包管理规范

现代高级编程语言,依赖管理工具是必不可少的。Java有Maven,Python有pip,Nodejs有npm, 而在composer出现之前,PHP只有被广为诟...

932
来自专栏皮振伟的专栏

[linux][storage]Linux存储栈

前言: 随着Linux的版本升高,存储栈的复杂度也随着增加。作者在这里简单介绍目前Linux存储栈。 分析: 1,storage stack ? 在用户态,可...

64213
来自专栏申龙斌的程序人生

Bitcoin Core钱包常用的命令行参数

对于踏入币圈的朋友,我一直强烈建议要学习Bitcoin Core钱包软件,因为BitcoinCore这款全节点钱包是中本聪(比特币的发明人)最早实现的,虽然下载...

1192
来自专栏京东技术

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

5年以上开发经验,在多领域跨平台开发的经验丰富,负责京东直播的开发和设计工作,热衷于探索新技术新方向,并实际应用。

930
来自专栏FreeBuf

更适合作为主系统使用的Parrot Security简介

Parrot 是一个基于Debian的专注于渗透测试和隐私保护的Linux发行版,但是更加方便日常使用,有贴心的使用体验,丰富的工具,更注重隐私保护。 The...

4885
来自专栏杨建荣的学习笔记

Oracle 12c中DBCA搭建备库体验(r11笔记第92天)

Oracle 12c中DBCA有一个特性看起来蛮有意思,就是直接通过DBCA来搭建Data Guard,当然这么说也有点噱头,我们来实际看看。 Ora...

3346
来自专栏非著名程序员

如何在 Windows 下像 Mac 一样优雅开发

起因:之前一直用 Mac 开发,换了家公司,只许用 Windows 下开发,说实话,一开始我是拒绝的,可自从看到了这几个工具以后...... 下文大标题说明:(...

3119
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–资产会计(162)-24定期处理-AJRW会计年度更改

4.7.8 AJRW会计年度更改 从系统角度看,会计年度的更改表示公司代码的新会计年度的创建。在更改会计年度时,将上一会计年度的资产值累计结转至新的会计年度。...

3088

扫码关注云+社区