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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏区块链入门

第5课 EOS环境搭建入门(私链节点-钱包-密钥-账号)

【本文目标】 通过本文实践,能在已编译的EOS V1.0.5版本环境上,完成私链节点启动,钱包创建,密钥导入和账号创建等内容。 【前置条件】 你已完成了E...

3683
来自专栏IT笔记

前后端分离之SpringBoot项目Token认证

写在开始 有人说,爱上一座城,是因为城中住着某个喜欢的人。其实不然,爱上一座城,也许是为城里的一道生动风景,为一段青梅往事,为一座熟悉老宅。或许,仅仅为的只是这...

4429
来自专栏区块链入门

第二十三课 如何部署TRUFFLE智能合约到以太坊主网(以宠物商店为例)1,摘要2, 操作内容3,常见问题和解决方法4, 参考

通过《第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)》 学习,大家掌握了一个DAPP的编程和以太坊私有测试环境调试,本文做进一步的技术深入学习...

1674
来自专栏区块链

在Office 文档的属性中隐藏攻击载荷

Microsoft Office中的文档属性通常包含与文档和各种其他元数据详细信息相关的信息。但是,此位置可用于存储并执行SMB或HTTP服务器上托管的有效载荷...

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

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

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

7883
来自专栏区块链大本营

如何用Python&Fabric打造区块链“淘宝”商城

Hyperledger Fabric 是一个开源的区块链框架,可以用来创建私有区块链(许可区块链)业务网络,在网络中每个成员的身份和角色都被其他成员所知。

2343
来自专栏酷玩时刻

支付宝支付-常用支付API详解(查询、退款、提现等)

Maven项目引用JAR包可以参考 支付宝Wap支付你了解多少? 里面有详细的介绍

4452
来自专栏along的开发之旅

使用Cmder代替Cmd进行程序开发

只有方便的快速切换到当前目录,才能提高生产力.要不然先Win+X调用命令提示符,然后再CD %指定Path%,黄花菜都凉了.

4574
来自专栏极客编程

EOS区块链平台智能合约示例HelloWorld

一般环境设置通过上一篇文章已经说明,这方面的问题大家可以看本博客上一篇文章,本文引用了官方EOS在Git上的示例。

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

比特币白皮书发布10周年,才活跃着这么几个节点

2008年10月31日,中本聪在一个邮件列表中首次发布了著名的比特币白皮书,今天正好是10周年纪念日。比特币网络是一个去中心化的网络,任何人用一台普通的电脑就可...

792

扫码关注云+社区