环境搭建:Truffle

什么是 Truffle

Truffle 是以太坊开发套件,它包含有:

  • Ganache:带有 UI 界面的本地以太坊虚拟机
  • Truffle CLI:命令行工具
  • Truffle Dashboard:用于查看
  • VS Code 插件:用于在 VS Code 中进行合约的编译、部署和调试。

您可以使用上面整套的 Truffle 套件,也可以根据需要安装。

安装 Ganache

Ganache 可以让您在本地运行一个以太坊虚拟机,以用于部署、执行和调度合约。

Ganache 命令行版

如果你不需要 UI 界面,你可以直接使用 npm 安装 Ganache:

npm
复制
npm install -g ganache

直接运行:

shell
复制
ganache

输出如下:

Ganache
复制
...
RPC Listening on 127.0.0.1:8545

表明 Ganache 运行成功,我们可以通过本地的 8545 端口连接本地以太坊虚拟机,进行合约的部署和执行。

Ganache 客户端版

Ganache 客户端版可以在 Github 页面下载到:Ganache 桌面版

安装完成后直接打开:

Ganache 桌面版

点击 QUICKSTART,快速建立一个本地以太坊:

Ganache 账号面板

上面的 RPC Service 处显示 HTTP://127.0.0.1:7545,表明可以通过本地的 7545 端口连接以太坊虚拟机,进行合约的部署和执行。

Ganache 账号面板

最上面可以看到可以切换的各个面板:

  • ACCOUNTS:账号面板,Ganache 会自动创建 10 个 ETH 账号,每个账号 100 ETH,用于开发测试
  • BLOCKS:区块面板,用于查看当前的以太坊区块链上的区块信息
  • TRANSACTIONS:交易面板,用于查看交易信息
  • CONTRACTS:合约面板,用于查看部署到以太坊上的合约信息
  • EVENTS:事件面板,用于查看合约发出的事件
  • LOGS:日志面板,用于查看以太坊区块链日志

Truffle

安装 Truffle

npm
复制
npm install -g truffle

新建一个文件夹用于创建一个 Solidity 项目

shell
复制
mkdir HelloWorld
cd HelloWorld
truffle init

执行后查看当前文件夹:

shell
复制
ls
.
├── contracts/           <-- 用于存放智能合约
├── migrations/          <-- 用于存放迁移脚本(migration scripts)
├── test/                <-- 用于存放测试脚本
└── truffle-config.js    <-- truffle 配置文件

Truffle 还带有许多开箱示例项目可供参考。

开箱一个 MetaCoin 项目:

shell
复制
mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin

运行 truffle compile 编译 contracts 中的合约:

shell
复制
> truffle compile
➜  MetaCoin truffle compile

Compiling your contracts...
===========================
✓ Fetching solc version list from solc-bin. Attempt #1
✓ Downloading compiler. Attempt #1.
> Compiling ./contracts/ConvertLib.sol
> Compiling ./contracts/MetaCoin.sol
> Artifacts written to ...MetaCoin/build/contracts
> Compiled successfully using:
   - solc: 0.8.13+commit.abaa5c0e.Emscripten.clang

运行 truffle migrate 运行 migrations/ 文件中的迁移脚本,将编译后的合约部署到以太坊虚拟机(此时需要运行 Ganache)。

shell
复制
> truffle migrate
...
Starting migrations...
======================
> Network name:    'ganache'
> Network id:      5777
> Block gas limit: 6721975 (0x6691b7)

1_deploy_contracts.js
=====================
   Deploying 'ConvertLib'
   Deploying 'MetaCoin'
   -------------------------------------
   > Total cost:     0.001894367934056634 ETH

Summary
=======
> Total deployments:   2
> Final cost:          0.001894367934056634 ETH

运行 truffle test 进行测试:

shell
复制
> truffle test
...
  TestMetaCoin
    ✔ testInitialBalanceUsingDeployedContract
    ✔ testInitialBalanceWithNewMetaCoin

  Contract: MetaCoin
    ✔ should put 10000 MetaCoin in the first account (41ms)
    ✔ should call a function that depends on a linked library
    ✔ should send coin correctly (46ms)


  5 passing (3s)

Truffle Dashboard

我们在部署合约、调用合约时,是需要消耗 ETH 以太币的。因此以往在部署时,需要自己管理自己的以太坊账号和私钥,特别是私钥保存在项目文件中或者复制来复制去,会有安全问题。使用 Truffle Dashboard 就可以利用 MetaMask 等钱包软件来为我们管理账号私钥。

Truffle Dashboard 是默认跟随 Truffle 一起安装的:

shell
复制
> truffle dashboard
Truffle Dashboard running at http://localhost:24012
DashboardProvider RPC endpoint running at http://localhost:24012/rpc

运行后用浏览器打开 http://localhost:24012 就可以看到 Truffle Dashboard 界面:

Truffle Dashboard

Truffle Dashboard 会启用一个本地网络,我们让所有的以太坊请求发向 Truffle Dashboard 网络,这样在 Truffle Dashboard 中就可以对这些请求进行确认,Truffle Dashboard 会帮我们调用 MetaMask 进行签名确认。

VS Code 插件

在 VS Code 中搜索安装插件 Truffle for VS Code

truffle for vs code

安装后使用 cmd+alt+pctrl+alt+p 打开命令面板,输入 Truffle: New Solidity Project 可以创建一个新项目。相当于前面的 truffle init

打开一个 Truffle 项目:

Truffle for VS Code

可以看到当前项目的合约。可以选择合约进行编译、部署等。

插件会自动检测 Truffle Dashboard 本地网络,可以手动添加本地 Ganache 以太坊网络,也可以查看部署合约。