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 条评论
登录 后参与评论

相关文章

来自专栏Jackson0714

【网站开发】在新浪SAE上搭建一个博客

2795
来自专栏娱乐心理测试

第一个微信小程序

2106
来自专栏FreeBuf

关于yubikey对web应用的杞人之忧

Yubikey 是一个小型的USB设备,在电脑看来,它是一个USB键盘设备。当将Yubikey接入电脑后,其上会亮起一个绿色的圆环,代表这个USB键盘已经可以正...

19610
来自专栏玄魂工作室

不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析

先声明一点,本文作者不是搜狗的 然后 只是从技术的角度探讨问题---- 目录 不明恶意攻击致<搜狗搜索><搜索结果>跳转<百度搜索>技术原理分析 目录 * 前...

3289
来自专栏姬小光

微信里的“授权”到底是几个意思?

作为普通用户,在使用微信的过程中,我们经常会看到各种“授权”,体验着当领导的感觉的同时,也会担心自己的隐私是否会暴露的问题。并且,即使是互联网从业者,也未必都能...

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

块67:Steemit注册教程

《区块链生存训练》饭团从今天起开始软分叉,引入创作团队为大家提供优质内容,本文作者:黄黎,微信订阅号:黎心力。 一、steemit是什么 steemit是什么...

3638
来自专栏北京马哥教育

在 Amazon AWS 搭建及部署网站:申请、设置 AWS 服务

野猫阿罗哈 http://www.cnblogs.com/deltacat/p/amazon-aws-web-1.html Linux运维学习的过程中,实战无疑...

5298
来自专栏程序员的SOD蜜

探寻背后的机制化繁为简:网站程序升级不过是文件同步

苹果落到地上而不是天上,这是重力的作用; 树叶从树枝上飘落的样子谁也无法预测,这是混沌过程; 热恋中的恋人总是难分难舍,这是荷尔蒙等激素作用于下丘脑的结果; 。...

1995
来自专栏ThoughtWorks

RESTful架构风格下的4大常见安全问题|洞见

伴随着RESTful架构风格的大量应用,一些本来难以察觉到的安全问题也逐渐开始显现出来。在我经历过的各种采用RESTful架构风格的应用中,某些安全问题几乎在每...

3514
来自专栏cnblogs

vue 实现 tomato timer(蕃茄钟)

近期在学习【时间管理】方面的课程,其中有一期讲了蕃茄工作法,发现是个好多东西。蕃茄工作法核心思想就是:工作25分钟,休息5分钟。如果您好了解更多可以自行度娘。 ...

1938

扫描关注云+社区