# 以太坊开发（一）——Truffle和Ganache

By [xiaoming.eth](https://paragraph.com/@xiaoming) · 2022-01-09

---

ruffle是目前最流行的以太坊开发框架，采用JavaScript编写，支持智能合约的编译、部署和测试。

一、安装Truffle

1.  首先安装Truffle依赖的NodeJS：
    

curl -sL [https://deb.nodesource.com/setup\_9.x](https://deb.nodesource.com/setup_9.x) | sudo -E bash -

sudo apt-get install -y nodejs

sudo apt-get install npm

sudo npm config set registry [http://registry.npm.taobao.org](http://registry.npm.taobao.org)

1.  安装Truffle
    

sudo npm install -g truffle

二、创建工程

如果想创建一个空工程，可以用下面的命令：

truffle init

在早期版本的truffle中，刚刚创建的工程中还会包含metacoin的示例代码。新版本truffle引入了box的概念，所有的示例代码都以box的形式提供。因此我们不需要用truffle init命令，用下面的命令就可以直接下载metacoin的示例代码：

truffle unbox metacoin

代码结构如下图所示：

主要分为3个部分：

● contracts目录中包含Solidity合约代码，其中Migrations.sol是必须的，其他就是你自己写的合约代码了。

● migrations目录中包含合约部署脚本，其中1\_initial\_migration.js就是用来部署Migrations.sol的，其他的脚本会按照顺序依次执行。

● test目录中就是测试代码了。

三、安装以太坊客户端

智能合约必须要部署到链上进行测试。可以选择部署到一些公共的测试链比如Rinkeby或者Ropsten上，缺点是部署和测试时间比较长，而且需要花费一定的时间赚取假代币防止out of gas。

还有一种方式就是部署到私链上，Truffle官方推荐使用以下两种客户端：

● Ganache

● truffle develop

1.  Ganache
    

Ganache这个名字比较陌生，但是它的前身testRPC却是大名鼎鼎，网上的很多老文章里都是用testRPC。Ganache是奶油巧克力的意思，据说是很久之前有个学徒做巧克力的放多了牛奶，师傅正要骂他，结果一尝发现味道还真不错，于是一种新的巧克力就诞生了~ Truffle是松露巧克力，一般是以Ganache为核，然后上面撒上可可粉，所以这两个产品的名字还是很贴切的。

Ganache现在有两个版本，一个是带图形界面的版本，下载地址：

[https://github.com/trufflesuite/ganache/releases](https://github.com/trufflesuite/ganache/releases)

这些可执行文件的后缀都比较奇葩，参见下面的对应关系：

● Windows: Ganache-\*.appx

● Mac: Ganache-\*.dmg

● Linux: Ganache-\*.AppImage

还有一个就是命令行版本了，下载方法：

sudo npm install -g ganache-cli

具体的命令行参数配置参见github：

[https://github.com/trufflesuite/ganache-cli](https://github.com/trufflesuite/ganache-cli)

本文采用带图形界面的Ganache版本。

1.  truffle develop
    

这个是truffle内置的客户端，跟命令行版本的Ganache基本类似。唯一要注意的是在truffle develop里执行truffle命令的时候需要省略前面的“truffle”，比如“truffle compile”只需要敲“compile”就可以了。

四、编译和部署合约

Ganache默认运行在7545端口，可以在界面右上方的“设置”里进行更改。运行后默认创建10个账号，每个账号里有100ETH的余额。

要部署到链上，需要把IP、端口、网络ID告诉truffle。修改truffle.js：

module.exports = {

    networks: {
    
        development: {
    
            host: 'localhost',
    
            port: '7545',
    
            network_id: '*' // Match any network id
    
        }
    
    }
    

};

然用下面两条命令编译和部署：

truffle compile

truffle migrate

五、测试合约

metacoin的示例代码里已经把测试代码写好了，直接用下面的命令运行就可以了：

truffle test

去Ganache上看一下运行结果：

● Accounts标签：第一个账户里ETH略有减少，因为交易消耗了gas

● Blocks标签：Ganache是自动挖矿，生成了6个新区块，每个区块里有一个交易

● Transactions标签：有6笔新交易，可以点开看交易详情

● Logs标签：显示交易和挖矿日志

---

*Originally published on [xiaoming.eth](https://paragraph.com/@xiaoming/truffle-ganache)*
