Windows环境下跑通Truffle开发环境

时间:2022-05-03
本文章向大家介绍Windows环境下跑通Truffle开发环境,主要内容包括Atom和Sublime Text是非常流行的源代码编辑器,微软也不甘寂寞,推出了VSCode。VSCode是一款轻量编辑器,也支持丰富的插件,安装solidity插件后就可以支持solidity语言。、想跑起来Truffle,需要安装node.js 5.0以上的开发环境,可直接到https://nodejs.org 下载和安装环境,我安装了8.9.4 LTS(Long Term Support)版本,全部用默认的参数安装即可。、http://truffleframework.com/docs/getting_started/installation、从开始菜单中打开一个node.js command Prompt窗口,用一行命令即可安装好Truffle。、Truffle的版本更新得非常频繁,我用的是4.0.5,用下面命令查看版本。、truffle version、我在D盘的根目录下建立一个MetaCoin项目。、从 https://code.visualstudio.com 下载vscode,默认安装即可,我安装的是1.19.2。启动vscode之后,需要安装solidity和Solidity Extended两个插件,安装完成后重启vscode,则可以看到solidity源代码的高亮显示。、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在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 ---