因为本人最近项目负责以太坊智能合约的测试需要搭建测试环境,目前采用的方法是私链+truffle,要实现如下目标
- 搭建一条以太坊的私链
- 将爬虫爬到的合约(https://etherscan.io)部署到私有链中
本人部署使用的环境
- Ubuntu18.04
- Geth 1.7.3-stable
- Truffle v4.1.14(core:4.1.14)
- Solidity v0.4.25(直接编译二进制包)
搭建私有连
- 创建目录ethTest :mkdir ethTest
- 编写创世区块,放入ethTest目录下,命名为genesis.json
{ "config": { "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
解释一下参数:
- chainId:是EIP155(EIP是以太方改进建议)里定义的发送交易到哪种链的方式。这里设置为10,truffle.js(truffle的初始化文件)的network_id也得是10,否则truffle将无法找到创建的私链
- lloc:用来预设账号和账号的以太币数量,此处不预设,需要时候自己创建
- gasLimit:gas的限制,私链测试时尽量设值加大,避免部署失败
- difficulty:挖矿的难度,测试链尽量降低
CHAIN_ID | Chain(s) |
---|---|
1 | Ethereum mainnet |
2 | Morden (disused), Expanse mainnet |
3 | Ropsten |
4 | Rinkeby |
30 | Rootstock mainnet |
31 | Rootstock testnet |
42 | Kovan |
61 | Ethereum Classic mainnet |
62 | Ethereum Classic testnet |
1337 | Geth private chains (default) |
- 创建创世块:geth –datadir “./” init genesis.json1.
- datadir:是指定区块连数据和账户的存储目录。
- 这句话的意思是创建2个数据库chaindata和lightchaindata,并把genesis.json的数据分别写入这两个leveldb中。
- 启动以太坊,同时进入js交互控制台:geth –datadir “./” –rpc –rpccorsdomain=”*” console
- rpccorsdomain是允许chrome插件MetaMask,remix等跨域访问web3接口
- 在启动矿工进行挖矿之前我们必须创建一个账户,并将其设为ether base账户(默认第一个创建的账户为基础账户,挖到的以太币会自动保存到此账户)–在geth客户端里面操作
- 具体步骤
- 创建账户:personal.newAccount(“密码”)
- 返回一个账户地址:0xad30387c05b527a85f45186c2b8aab5e1af2f227
- 这个账户将会保存在 ./datadir/keystore 文件下
- 将某个账号设置为矿工etherbase(一般默认第一个账户eth.accounts[0]为矿工无需设置):miner.setEtherbase(eth.accounts[0])