为什么要搭建私有链?
在以太坊的公有链上部署智能合约、发起交易需要花费以太币,要同步公有链数据块(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 就是当前目录下用此目录存放区块链数据
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”
日志
开始挖矿
miner.start()
开始挖矿,可以用start(2) 来启动2个线程挖矿。
miner.stop()
停止挖矿
查看帐号的余额,还是0,查看一下log文件,如下:
这是第一次启动挖矿会先生成挖矿所需的DAG
文件,这个过程有点慢,等进度达到100%后,就会开始挖矿。
执行一段时间,还没开始挖矿,就出现错误了,内存不够???
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]
开始挖矿了…
停止挖矿
换一个账户挖矿
OK,先到这。
参考1
参考2