使用truffle编译部署合约

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也可以找到 不用担心.

 

 

 

 

 

你可能感兴趣的:(ethereum,solidity)