geth默认的web3版本是0.2.xx版本(推荐0.2.xx中文版本:http://cw.hubwiz.com/card/c/web3.js/1/1/1/)
最重要的就是看官方文档:https://github.com/ethereum/go-ethereum
推荐一个中文翻译的版本:https://www.cnblogs.com/tinyxiong/p/7918706.html
搭建私有链初始化常见错误:Fatal: Failed to write genesis block: database already contains an incompatible genesis block (have d4e56740f876aef8, new 6e65df9fe4f4877c)
解决办法:先移除已有的初始化区块(目录有时候看不到数据,可能是隐藏了!)---运行命令!
geth --datadir . removedb
第一步:指定私有区块链的保存目录,并创建一个或多个账号,以便在初始化创世纪区块的时候,设置初始化余额!
注:创建账号有两种方式
第一种:直接使用命令创建,不进入console模式
geth --datadir D:\myPrivateBlockchian account new
命令行运行结果输出(点--代表当前目录) -----可以多运行几次,运行一下就创建一个新账号!
PS D:\myPrivateBlockchian> geth --datadir . account new
输出结果为:
INFO [03-14|21:11:50.512] Maximum peer count ETH=25 LES=0 total=25
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {de8ba55fbf277223246b6c661225624b3babb0b2}
第二种: 进入console模式,然后在交互命令行中创建
geth --datadir D:\myPrivateBlockchian console
> personal.newAccount('123456')
"0xf09dca9e10f3f1d0adfe9af7beeeb579c1d1dd37"
或更安全的方式:
> personal.newAccount()
Passphrase:
Repeat passphrase:
"0xf6c677017eb036f984cbf590e5dde030d1fe8df1"
第二步:在私有区块链目录下,把第一步创建的账号输入alloc属性,创建一个genesis.json文件(创世纪区块和初始化账号余额)
geth --datadir . init D:\myPrivateBlockchian\genesis.json
输出结果为Successfully即创世纪区块创建成功!(一定要指定--datadir路径初始化)
PS D:\myPrivateBlockchian> geth --datadir . init D:\myPrivateBlockchian\genesis.json
输出结果为:Successfully,务必注意:初始化的路径必须是指定的私有链区块路径--datadir
INFO [03-15|09:52:31.232] Maximum peer count ETH=25 LES=0 total=25
INFO [03-15|09:52:31.427] Allocated cache and file handles database=D:\\myPrivateBlockchian\\geth\\chaindata cache=16 handles=16
INFO [03-15|09:52:31.450] Writing custom genesis block
INFO [03-15|09:52:31.453] Persisted trie from memory database nodes=3 size=409.00B time=0s gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-15|09:52:31.460] Successfully wrote genesis state database=chaindata hash=0e4217…184db1
INFO [03-15|09:52:31.466] Allocated cache and file handles database=D:\\myPrivateBlockchian\\geth\\lightchaindata cache=16 handles=16
INFO [03-15|09:52:31.484] Writing custom genesis block
INFO [03-15|09:52:31.487] Persisted trie from memory database nodes=3 size=409.00B time=0s gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [03-15|09:52:31.494] Successfully wrote genesis state database=lightchaindata
genesis.json文件模板:
特别注意属性alloc,初始化账号的余额(第一步创建的账号添加进来初始化余额)!
alloc的账号记得加上0x开通哦!
{
"config": {
"chainId": 0,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {"0xde8ba55fbf277223246b6c661225624b3babb0b2": {"balance": "100000000000000000000000000000000000000000000000"},
"0x405edef7ed276a0887887987633d43845cb1b3cb": {"balance": "100000000000000000000000000000000000000000000000"}},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
第三步:进入私有区块链console(--rpc是开启服务器,--rpccorsdomain是跨域设置*代表所有)
geth --datadir . --rpc --rpccorsdomain * console
最后:私有链搭建成功后目录结构,keystore是账号信息(用go语言写个程序可以转码生成秘钥),geth是区块链的数据!
关于geth账号之增删改查请查看这里:https://blog.csdn.net/billwzf/article/details/83145706
这篇文章比较详细:http://www.cnblogs.com/WPF0414/p/10046481.html
启动&停止挖矿
- 通过
miner.start()
来启动挖矿 - 通过
miner.stop()
来停止挖矿 - eth.coinbase查看旷工账号
- miner.setEtherbase(addr)设置为旷工账号
其中start的参数表示挖矿使用的线程数。第一次启动挖矿会先生成挖矿所需的DAG文件,这个过程有点慢,等进度达到100%后,就会开始挖矿,此时屏幕会被挖矿信息刷屏。
矿工账户: 挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做coinbase,默认情况下coinbase是本地账户中的第一个账户,通过miner.setEtherbase()可将其他账户设置成coinbase。
getBalance()返回值的单位是wei,wei是以太币的最小单位,1个以太币=10的18次方个wei。要查看有多少个以太币,可以用web3.fromWei()将返回值换算成以太币:
> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
160