1. 什么是truffle
truffle是用于编译部署测试solidity合约的一个套件, 方便使用.
2. truffle的依赖
truffle是编译部署测试solidity合约用的,
编写solidity合约可以使用remix-ide(https://remix.ethereum.org/)
编译solidity使用solc-js, truffle会自动安装
部署solidity需要一个ethereum客户端, 可以用ganache-cli, 早期常用的是rpctest
3. 安装truffle
npm install -g truffle
3.1 使用其他版本的solc-js
目前新的truffle是5.x版本, 使用的solc版本默认是0.5.x, 编译一些老版本的solidity合约可能会有问题, 指定其他版本的solc编译器
修改truffle-config.js
compilers: {
solc: {
version: "0.4.24", // Fetch exact version from solc-bin (default: truffle's version)
truffle会自动下载指定版本的solc.
4. 部署ERC20合约
下面看一个具体的例子吧.
ERC20合约大概是ethereum上最流星的合约了, 我们看看怎么部署自己的ERC20
4.1 openzeppelin-solidity
openzeppelin-solidity提供了一下标准合约的实现, 减少开发的工作量, 推荐使用
pragma solidity 0.4.24;
import "openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
import "openzeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol";
contract SimpleToken is DetailedERC20, StandardToken {
string _name = "Simple Token A";
string _symbol = "STA";
uint8 _decimals = 18;
uint256 _amount = 1000;
constructor()
DetailedERC20(_name, _symbol, _decimals)
public
{
require(_amount > 0, "amount has to be greater than 0");
totalSupply_ = _amount.mul(10 ** uint256(_decimals));
balances[msg.sender] = totalSupply_;
emit Transfer(address(0), msg.sender, totalSupply_);
}
}
4.2 初始化truffle工程
执行命令'truffle init' 来初始化truffle工程, 这会自动创建一些truffle需要的文件,不详细说.
4.3 编译truffle工程
$truffle compile
这个命令会自动查找contracts目录下的文件编译, 子目录下的文件也会编译,无需担心.
4.4 部署truffle工程
$truffle deploy
这个命令会读取migrations目录下的文件, 按照前缀的数字标号顺序执行. 如果需要部署新的合约, 只需要添加或者修改migrations目录下对应的部署文件即可. migrations目录下会自动生成一个名为"1_initial_migration.js"的文件, 顾名思义是部署truffle自己的migration用的.我们不管他, 我们添加一个自己的文件. "2_deploy.js"
$ cat migrations/2_deploy.js
const Owned = artifacts.require("SimpleToken")module.exports = async function(deployer){
await deployer.deploy(SimpleToken)
这个文件负责部署SimpleToken这个合约. 即使合约放在子目录下, truffle也可以找到 不用担心.