使用truffle框架部署并测试以太坊智能合约

使用truffle框架部署并测试以太坊智能合约

安装solidity编译器

Mac下安装

brew tap ethereum/ethereum
brew install solidity
# 查看当前安装的solc编译器版本号
solc --version 

安装 node

Mac下安装

brew install node
# 查看当前安装的node版本号
npm -v 

安装 truffle

Mac下安装

npm install -g truffle
# 查看当前安装的truffle版本号
truffle version

安装 ganache

ganache是truffle官方推荐的一个以太私有链客户端,无缝继承truffle,并有完善的图形化界面供展示。

ganache下载链接

使用truffle官方示例合约进行测试

1. 为你的truffle工程新建一个空白的目录

mkdir MetaCoin
cd MetaCoin

2. 下载官方示例合约

truffle unbox metacoin

3. 编译示例合约

truffle compile

你会看到下面的输出:

Compiling .\contracts\ConvertLib.sol...
Compiling .\contracts\MetaCoin.sol...
Compiling .\contracts\Migrations.sol...

Writing artifacts to .\build\contracts

4. 启动ganache客户端

你会看到默认给你创建了10个账户,区块的生成是只有交易发生的时候才会产区块。

5. 导入当前truffle工程的配置文件

  1. 点击右上角的设置键

  2. 点击 ADD PROJECT导入当前truffle工程目录下的truffle-config.js文件

  3. ganache主板上的CONTRACTS上会看到当前truffle目录下的合约文件

    扫描二维码关注公众号,回复: 8514457 查看本文章

6. 部署合约到ganache私有链上

在MetaCoin目录下执行:

truffle migrate

会看到如下的输出:

Starting migrations...
======================
> Network name:    'develop'
> Network id:      4447
> Block gas limit: 6721975

1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x3fd222279dad48583a3320decd0a2d12e82e728ba9a0f19bdaaff98c72a030a2
   > Blocks: 0            Seconds: 0
   > contract address:    0xa0AdaB6E829C818d50c75F17CFCc2e15bfd55a63
   > account:             0x627306090abab3a6e1400e9345bc60c78a8bef57
   > balance:             99.99445076
   > gas used:            277462
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00554924 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00554924 ETH

2_deploy_contracts.js
=====================

   Deploying 'ConvertLib'
   ----------------------
   > transaction hash:    0x97e8168f1c05fc40dd8ffc529b9a2bf45cc7c55b07b6b9a5a22173235ee247b6
   > Blocks: 0            Seconds: 0
   > contract address:    0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6
   > account:             0x627306090abab3a6e1400e9345bc60c78a8bef57
   > balance:             99.9914458
   > gas used:            108240
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.0021648 ETH

   Linking
   -------
   * Contract: MetaCoin <--> Library: ConvertLib (at address: 0xfb39FeaeF3ac3fd46e2123768e559BCe6bD638d6)

   Deploying 'MetaCoin'
   --------------------
   > transaction hash:    0xee4994097c10e7314cc83adf899d67f51f22e08b920e95b6d3f75c5eb498bde4
   > Blocks: 0            Seconds: 0
   > contract address:    0x6891Ac4E2EF3dA9bc88C96fEDbC9eA4d6D88F768
   > account:             0x627306090abab3a6e1400e9345bc60c78a8bef57
   > balance:             99.98449716
   > gas used:            347432
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00694864 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00911344 ETH

Summary
=======
> Total deployments:   3
> Final cost:          0.01466268 ETH

上面的信息显示了部署合约的交易id以及合约对应的地址。

7. 测试查看信息以及MetaCoin币的转账

  1. 打开链的终端交互界面

    truffle console
    
  2. 和部署的合约进行交互

    • 获取部署合约的实例以及私链上创建的所有账户

      truffle(ganache)> let instance = await MetaCoin.deployed()
      truffle(ganache)> let accounts = await web3.eth.getAccounts()
      
    • 检测部署合约账户下Metacoin币的余额

      truffle(ganache)> let balance = await instance.getBalance(accounts[0])
      truffle(ganache)> balance.toNumber()
      
    • 转账Metacoin

      truffle(ganache)> instance.sendCoin(accounts[1], 500)
      
    • 检测接收Metacoin币账户下的余额是否正确

      truffle(ganache)> let received = await instance.getBalance(accounts[1])
      truffle(ganache)> received.toNumber()
      
    • 检测转出Metacoin币账户下的余额是否正确

      truffle(ganache)> let newBalance = await instance.getBalance(accounts[0])
      truffle(ganache)> newBalance.toNumber()
      

参考资料

  1. truffle官方文档
发布了6 篇原创文章 · 获赞 5 · 访问量 129

猜你喜欢

转载自blog.csdn.net/asdliman0110/article/details/103084083