使用Truffle向私链部署合约

Posted by 谢智健 on October 5, 2018

You may find interesting:


2018.1.18区块链论文讨论班通知


Nothing at stake problem of PoS

参考地址

因为本人最近项目负责以太坊智能合约的测试需要搭建测试环境,目前采用的方法是私链+truffle,要实现如下目标

  1. 搭建一条以太坊的私链
  2. 将爬虫爬到的合约(https://etherscan.io)部署到私有链中

本人部署使用的环境

  • Ubuntu18.04
  • Geth 1.7.3-stable
  • Truffle v4.1.14(core:4.1.14)
  • Solidity v0.4.25(直接编译二进制包)

通过truffle向以太坊私链部署合约

官方使用说明

  1. 在用truffle向私链部署合约之前,需要解锁账户。账户被创建时默认为锁定状态
    • 解锁账户(在geth控制台中操作):personal.unlockAccount(eth.account[0],”you account passwd”,15000)
    • 第三个参数是解锁时间——单位秒
  2. 确保以太坊私链启动中,并有矿工在挖矿(出块)
    • 保持该操作:miner.start()——部署合约时保持运行状态
  3. 部署智能合约
    • 部署合约需要检查以下前提是否成立
      • 首先需要有一个账户并成为矿工地址(默认第一个账户就是矿工地址)
      • 需要解锁上一步骤中的账户
      • 账户里面需要有钱——如没有,先挖一段时间矿
      • 最后要保持持续出块,即保持客户端在挖矿
    • 检查完毕后进入truffle工程目录中(笔者创建了新的目录truffleTest),执行:truffle migrate –reset –network development
      • –network development:根据truffle.js文件里面定义的网络使用
      • reset: 使用reset可以重新执行所有(默认只执行新增而未之执行的)migration脚本,但在真实的网络中这样所不切实际,因为每次执行都需要消耗gas。我们需要把部署脚本放在migrations目录下,再执行truffle migrate truffle.js文件内容如下:
              networks: {
        
                  development: {
        
                  host: "127.0.0.1",
        
                  port: 8545,
        
                  network_id: "10" // 这里的id必须与创世区块genesis里的chainId一样。
        
                  }
        
              }
        

        等待执行结果,成果将返回Successful