区块链创世文件出错(二)搭建基于以太坊的Windows私有链

区块链研究(二)搭建基于以太坊的Windows私有链

1.准备创世块文件(接下来有诸多试错的问题,可直接翻到第3节上面查看最终创始块配置文件)

配置自己的创世块是为了区分公有链,同一个网络中,创世块必须是一样的,否则无法联通。

新建文件fflngenesis.json,输入如下内容并保存,路径随意。

我的路径是: F:appEthereumBlockchain 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()  进行挖矿


注意点:
1. 挖矿挖到的ether币会默认保在第一个账户中,即eth.acccounts[0]中。
2. 挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能合约的调用也会不起作用。
3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿
4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存在的链,此时应该删除之前的数据。即删除Ethash文件夹和里面的文件即可。(Windows:$(HOME)/Appdata/Ethash,Linux/Mac:$(HOME)/.ethash)
当使用输入日志的方式时,可以输入命令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”即表示你区块链网络是正常的



原文地址:https://www.cnblogs.com/hushuning/p/12761009.html