因为本人最近项目负责以太坊智能合约的测试需要搭建测试环境,目前采用的方法是私链+truffle,要实现如下目标
- 搭建一条以太坊的私链
- 将爬虫爬到的合约(https://etherscan.io)部署到私有链中
本人部署使用的环境
- Ubuntu18.04
- Geth 1.7.3-stable
- Truffle v4.1.14(core:4.1.14)
- Solidity v0.4.25(直接编译二进制包)
通过truffle向以太坊私链部署合约
- 在用truffle向私链部署合约之前,需要解锁账户。账户被创建时默认为锁定状态
- 解锁账户(在geth控制台中操作):personal.unlockAccount(eth.account[0],”you account passwd”,15000)
- 第三个参数是解锁时间——单位秒
- 确保以太坊私链启动中,并有矿工在挖矿(出块)
- 保持该操作:miner.start()——部署合约时保持运行状态
- 部署智能合约
- 部署合约需要检查以下前提是否成立
- 首先需要有一个账户并成为矿工地址(默认第一个账户就是矿工地址)
- 需要解锁上一步骤中的账户
- 账户里面需要有钱——如没有,先挖一段时间矿
- 最后要保持持续出块,即保持客户端在挖矿
- 检查完毕后进入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
- 部署合约需要检查以下前提是否成立