1.准备创世块文件(接下来有诸多试错的问题,可直接翻到第3节上面查看最终创始块配置文件)
配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通。
新建文件fflngenesis.json,输入如下内容并保存,路径随意。
我的路径是: F:\app\Ethereum\Blockchain Env\
{
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "FFLN GenesisBlock",
"gasLimit":"0xffffffff"
}
解释一下各个参数的作用:
2.创建创世区块
命令行进入fflngenesis.json存放地址目录,输入命令geth --datadir "./" init fflngenesis.json
出现错误“Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix
into Go struct field Genesis.extraData of type hexutil.Bytes”
百度翻译结果:“致命错误:无效的成因:JSON数据文件:不能没有0x前缀字符串
去hexutil型结构genesis.extradata字节领域。”
修改fflngenesis.json的extraData域为"0x00000000",保存后重新输入命令,又报错
Fatal: Failed to write genesis block: genesis has no chain configuration
这是版本问题。Geth1.6(含)以上需要配置config域
保存后再次输入命令,结果又报错,崩溃。
再看错误日志,原来是忘记加逗号,无语...
Fatal: invalid genesis file: invalid character '"' after object key:value pair
加入逗号后再次执行
接着报错:
Fatal: invalid genesis file: invalid character '}' looking for beginning of object key string
嗯,config大括号后面的逗号,不需要的。
删除最后一个多余的逗号,继续执行,终于成功!
正确配置文件:
{
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x4000",
"alloc": {},
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00000000",
"gasLimit":"0xffffffff",
"config":{
"chainId": 666,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
3.创建私有链
输入命令:geth --datadir "./" --nodiscover console 2>>geth.log
当看到Welcome to the Geth JavaScript console!的提示,说明已经启动成功
4.在私有链上创建账户
输入命令:personal.newAccount("123456")
"123456"表示此账号的密码.
输入命令eth.accounts可以查看新账户
这样,通过这两个命令可以创建出多个用户出来
若输入命令:personal.newAccount()
则系统会提示你输入账号密码,并确认,最后会显示一个新生成的账号
5.挖矿
输入命令:miner.start() 或者miner.start(1)
后者表示只使用一个线程工作,这样系统不会太卡
出现null是因为在第3步:创建私有链时设置了结果输出到日志,所以无法显示。这时可以退出重来,不设置输出到日志
输入命令:exit
然后再输入:geth --datadir "./" --nodiscover console 2
再输入:miner.start() 进行挖矿
当使用输入日志的方式时,可以输入命令tail -f geth.log 来跟踪挖矿进度如何
如果tail -f 命令无效,出现错误
则可查看此文解决:http://www.cnblogs.com/hantianwei/archive/2012/03/14/2395634.html
6.查看主账户中以太币的数量
输入命令: eth.getBalance(eth.accounts[0]) 结果不为0,说明挖矿成功
7.启动windows下私有链图形节点
打开安装好的Ethereum Wallet.exe,这时会有一段漫长的Downloading new node...
如果一直down不下来,推荐查看此文,或许有所收获。
地址:http://blog.csdn.net/fengmm521/article/details/78446520
主页面如下:
可以看到,主账户有了5620个以太币。上方红色的字体“PRIVATE-NET”即表示你区块链网络是正常的