环境搭建:Truffle
什么是 Truffle
Truffle
是以太坊开发套件,它包含有:
- Ganache:带有 UI 界面的本地以太坊虚拟机
- Truffle CLI:命令行工具
- Truffle Dashboard:用于查看
- VS Code 插件:用于在 VS Code 中进行合约的编译、部署和调试。
您可以使用上面整套的 Truffle 套件,也可以根据需要安装。
安装 Ganache
Ganache 可以让您在本地运行一个以太坊虚拟机,以用于部署、执行和调度合约。
Ganache 命令行版
如果你不需要 UI 界面,你可以直接使用 npm 安装 Ganache:
npm install -g ganache
直接运行:
ganache
输出如下:
...
RPC Listening on 127.0.0.1:8545
表明 Ganache 运行成功,我们可以通过本地的 8545
端口连接本地以太坊虚拟机,进行合约的部署和执行。
Ganache 客户端版
Ganache 客户端版可以在 Github 页面下载到:Ganache 桌面版
安装完成后直接打开:
点击 QUICKSTART
,快速建立一个本地以太坊:
上面的 RPC Service
处显示 HTTP://127.0.0.1:7545
,表明可以通过本地的 7545
端口连接以太坊虚拟机,进行合约的部署和执行。
最上面可以看到可以切换的各个面板:
ACCOUNTS
:账号面板,Ganache
会自动创建10
个 ETH 账号,每个账号 100 ETH,用于开发测试BLOCKS
:区块面板,用于查看当前的以太坊区块链上的区块信息TRANSACTIONS
:交易面板,用于查看交易信息CONTRACTS
:合约面板,用于查看部署到以太坊上的合约信息EVENTS
:事件面板,用于查看合约发出的事件LOGS
:日志面板,用于查看以太坊区块链日志
Truffle
安装 Truffle
:
npm install -g truffle
新建一个文件夹用于创建一个 Solidity 项目
:
mkdir HelloWorld
cd HelloWorld
truffle init
执行后查看当前文件夹:
ls
.
├── contracts/ <-- 用于存放智能合约
├── migrations/ <-- 用于存放迁移脚本(migration scripts)
├── test/ <-- 用于存放测试脚本
└── truffle-config.js <-- truffle 配置文件
Truffle
还带有许多开箱示例项目可供参考。
开箱一个 MetaCoin
项目:
mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin
运行 truffle compile
编译 contracts
中的合约:
> 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)。
> 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
进行测试:
> 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 一起安装的:
> 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 会帮我们调用 MetaMask 进行签名确认。
VS Code 插件
在 VS Code 中搜索安装插件 Truffle for VS Code
:
安装后使用 cmd+alt+p
或 ctrl+alt+p
打开命令面板,输入 Truffle: New Solidity Project
可以创建一个新项目。相当于前面的 truffle init
。
打开一个 Truffle 项目:
可以看到当前项目的合约。可以选择合约进行编译、部署等。
插件会自动检测 Truffle Dashboard
本地网络,可以手动添加本地 Ganache
以太坊网络,也可以查看部署合约。