title: Solidity开发环境(1)–快速搭建以太坊私链
date: 2019-07-22 21:59:37
tags:
- solidity
- 区块链
categories: solidity
对于以太坊私链环境的搭建网上文章比较多,有的也比较详细,可以多参考一下。这里主要说一下关键步骤,对于虚拟机安装(ubuntu)、golang安装、git安装这些操作这里就不进行说明了。
1、下载geth
在gopath路径下,使用git命令clone源码https://github.com/ethereum/go-ethereum.git。
2、编译geth
在编译前需要修改一下挖矿难度,这样节点在挖矿时会出块快一些,方便测试,不然会很慢的。进入go-ethereum中找到consensus.go文件,找到方法func CalcDifficulty(config *params.ChainConfig, time uint64, parent *types.Header) *big.Int,将这个方法的返回值修改为return big.NewInt(10);,这样挖矿难度就不会逐渐增加了。然后再在go-ethereum目录下执行make all命令进行编译。
3、创建部署路径
上一步已经有了可执行文件,然后把go-ethereum/build/bin下的geth文件拷贝到单独的工作路径,比如建立一个~/work/geth-bin的文件夹,将geth拷贝至其下。
4、创建帐户
创建帐户其实是可以在节点启动后,通过geth命令来创建,但是我们需要在节点启动的时候预置一些币到帐户中,就必须先有帐户。这样节点一启动帐户就钱了,可以直接进行交易测试了,不需要等待挖矿来获取币了。一出生嘴里就含着金钥匙的感觉还是很爽的。使用./geth –datadir node1/data account new命令来创建帐户,本人一般喜欢创建3个节点,所以执行三次,每次路径改变一下就可以,比如node2/data、node3/data,这样就生成了三个帐户文件。每次创建帐户的时候把帐户地址复制下来,后续使用,当然也可以去node1/data/keystore查看,比如UTC–2018-12-12T08-03-06.473554277Z–7882005b83ee97c00817d9eaaadc340a7763b2f0,这是一个帐户文件,最后的一串数字就是帐户地址。
5、生成genesis.json文件
- 在alloc标签下指定三个帐户地址,以及他们的余额,余额可以弄多些,花的时候可以放开了花。
- difficulty不用修改了,因为已经通过源码修改过了,这里修改也没意义了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27{
"config": {
"chainId": 14,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {
"7882005b83ee97c00817d9eaaadc340a7763b2f0":{
"balance": "33333300000000000000000000000"
},
"1db644fbeb757f6e73b4b1917ced1c06f1b0cc97":{
"balance": "110000000000000000000000"
},
"414ca00f449873c510476cf3e85dd044f114a3b5":{
"balance": "90000000000000000"
}
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x00002",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
6、初始化节点
有了初始化配置文件,我们就可以初始化节点了,使用./geth –datadir node1/data init genesis.json命令来创建,和帐户对应,分别创建三次,即三个节点。
7、启动节点
启动命令./geth –networkid 14 –nodiscover –datadir node1/data –port 4001 –rpc –rpcapi net,eth,web3,personal –rpcaddr 0.0.0.0 –rpcport 9541 console,每次启动都要修改一下datadir、port、rpcport的值,这些是不可重复的。
1 | ./geth --networkid 14 --nodiscover --datadir node2/data --port 4002 --rpc --rpcapi net,eth,web3,personal --rpcaddr 0.0.0.0 --rpcport 9542 console |
7、节点发现
上边虽然启动了三个节点,可他们之前是互相独立的,没有建立连接,可以手动的将他们连接在一起。
在node1节点启动后的console中执行admin.nodeInfo.enode命令,会看到当前节点的url,比如enode://aa5bd995bf3ccdd693c46d54fd09598f3d58c99a4ac091ae2c31f725796c6e7ddffd2672fea5e4ff2d5085967a4c071915d7448fbb1757cf8f7411af94b25ed8@127.0.0.1:4001,然后在node2的console中执行admin.addPeer(“enode://aa5bd995bf3ccdd693c46d54fd09598f3d58c99a4ac091ae2c31f725796c6e7ddffd2672fea5e4ff2d5085967a4c071915d7448fbb1757cf8f7411af94b25ed8@127.0.0.1:4001”),这样node1和node2就建立了连接了,然后同样的可以把node1和node3,node2和node3建立连接。
8、测试
以上操作就搭建好了自己的以太坊私链了,然后你可以进行各种命令的测试了,看看你的帐户余额地址是多少,发发交易等等