搭建以太坊私有网络
Geth安装
MacOs:
brew install ethereum
Ubuntu:
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
创建临时私有链以创建初始账号
genesis.json
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
}
}
上面的difficulty最好设置的比较低,否则需要很久才能挖出一个区块,不利于我们实践
//创建私有链
geth --datadir ./data/01 init ./genesis.json
//启动私有链及终端
geth --datadir ./data/01 --networkid 15 --rpc --rpcaddr 0.0.0.0 --rpcport 8100 --rpcapi personal,db,eth,net,web3,miner --nodiscover --verbosity 5 console
这样就进入了geth的终端,创建新账号
//下面输入的密码必须记住,它是你后面操作这个账号的钥匙
> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d"
创建带初始账号的私有链
//备份账号信息
cp data/01/keystore/UTC--2018-04-25T03-32-37.408413034Z--4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d /tmp/
//删除临时链
rm -rf data/d01
给前面创建的账号分配初始balance, 即将genesis修改为如下:
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
"4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d": {
"balance": "20000009800000000000000000000"
}
}
}
上面的绿色地址请改为你们前面生成的地址
geth --datadir ./data/01 init ./genesis-alloc.json
//恢复账号文件
cp /tmp/UTC--2018-04-25T03-32-37.408413034Z--4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d data/01/keystore/
查看账号及挖矿操作实践
//启动私有链及终端
geth --datadir ./data/01 --networkid 15 --rpc --rpcaddr 0.0.0.0 --rpcport 8100 --rpcapi personal,db,eth,net,web3,miner --nodiscover --verbosity 5 console
//看,已经恢复了那个账号
> eth.accounts
["0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d”]
//接着看,这个账号的balance是不是20000009800000000000000000000
> eth.getBalance(eth.accounts[0])
2.00000098e+28
//接着可以挖矿
> miner.start()
//执行完大概1分钟,就可以看到挖出了几个块
> eth
{
accounts: ["0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d"],
blockNumber: 3,
coinbase: "0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d",
compile: {
lll: function(),
serpent: function(),
solidity: function()
},
后台运行模式
正常情况,我们是需要geth作为服务在后台运行的,以免终端被kill掉导致geth服务中断
nohup geth --datadir ./data/01 --networkid 15 --rpc --rpcaddr 0.0.0.0 --rpcport 8100 --rpcapi personal,db,eth,net,web3,miner --nodiscover --verbosity 5 &
然后操作可以通过geth attach实现
geth attach data/01/geth.ipc
> eth
{
accounts: ["0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d"],
blockNumber: 37,
coinbase: "0x4d4ae95f8bffbf7d0246e102e6c18c2bd7608a7d",
compile: {
然后就可以和前面一样执行geth终端命令了
/********************************
* 本文来自****博主"爱踢门"
******************************************/