咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

1.1、基于Geth搭建私链

为什么要搭建私有链?

在以太坊的公有链上部署智能合约、发起交易需要花费以太币,要同步公有链数据块(xGB)。而在私有链,上面这些都不用,我们进行智能合约开发测试就很方便了,开发完成了,再部署到公有链。

环境

vmware内的ubuntu14.04,字符终端,通过ssh连接。

安装Geth
1
2
3
4
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
1
2
3
4
5
6
7
8
9
10
11
kevinwen@vm:~$ geth version
Geth
Version: 1.8.2-stable
Git Commit: b8b9f7f4476a30a0aaf6077daade6ae77f969960
Architecture: 386
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9.4
Operating System: linux
GOPATH=
GOROOT=/usr/lib/go-1.9
准备创世区块配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
kevinwen@vm:~$ mkdir private-geth
kevinwen@vm:~$ cd private-geth/
kevinwen@vm:~/private-geth$ vim genesis.json
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": { }
}
初始化创世区块
1
kevinwen@vm:~/private-geth$ geth --datadir data0 init genesis.json

data0 就是当前目录下用此目录存放区块链数据

初始化.png

目录结构.png

geth中保存的是区块链的相关数据,keystore中保存的是该链条中的用户信息

启动自己的私有链条
1
2
3
4
5
kevinwen@vm:~/private-geth$ geth --datadir data0 --networkid 1108 --nodiscover console 2>>geth.log
> eth.accounts
[]
> personal.newAccount("kevin")
"0xf3ddc02af85fe4272398c53f60561ce01d01d757"

--nodiscover 是不要让公网上的节点发现本私有链。

2>>geth.log 是把日志写入到文件,不打印到终端。

personal.newAccount(“kevin”) 创建一个帐号,密码为 “kevin”

启动和创建帐号

日志
新建账号日志.png

开始挖矿

miner.start() 开始挖矿,可以用start(2) 来启动2个线程挖矿。

miner.stop() 停止挖矿

挖矿.png

查看帐号的余额,还是0,查看一下log文件,如下:

log.png

这是第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿。

执行一段时间,还没开始挖矿,就出现错误了,内存不够???

error.png

1
2
runtime: out of memory: cannot allocate 2164260864-byte block (675676160 in use)
意思就是无法生成2GB大小的DAG文件,系统的600MB内存已经被使用了。

这是测试机的配置(原本500M内存,调高了还是不行)太低了,看来要换台机啊!

换机器

环境:

vmware内的ubuntu16.04,GNOME图形界面。

这次在 创世纪块alloc 初始化两个账户,里面初始化一些以太币。账户可以先进入console创建,再写到 genesis.json 文件,然后才初始化创世纪块。

1
2
3
4
5
6
7
8
# 我没有先创建,以下账号地址不是真实的。
sam@ubuntu:~/private-geth$ geth console
> persional.newAccont("123456")
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82"
> persional.newAccont("123456")
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde"
> eth.accounts
["7df9a875a174b3bc565e6424a0050ebc1b2d1d82","f41c74c9ae680c1aa78f42e5647a62f353b7bdde"]

编写 genesis.json 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": {
"balance": "300000"
},
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": {
"balance": "400000"
}
}
}

设置账户7df9a875a174b3bc565e6424a0050ebc1b2d1d82为默认的挖矿账户。不设置时,默认为第一个账户,即account[0]

1212.png

2323.png

开始挖矿了…

4545.png

停止挖矿

7878.png

换一个账户挖矿

啊啊啊.png

aaa.png

OK,先到这。

参考1

参考2