1. 安装Geth
http://ethfans.org/wikis/Ethereum-Geth-Mirror,本文使用版本:1.8.3
2. 创世区块
在刚刚Geth安装目录下放置初始化创世块文件名字为genesis.json
{
"config": {
"chainId": 101,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x400",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
chainId : 以太坊区块链网络Id,ethereum主链是1,私有链只用不要与主链冲突即可。
alloc : 预留账户,如下
"alloc":{
"0x0000000000000000000000000000000000000001":{"balance":"121312321"},
"0x0000000000000000000000000000000000000002":{"balance":"121312321"},
}
Coinbase: 旷工账户
Difficulty: 挖矿难度,0x400,这个是简单。
extraData:相当于备注
gasLimit:最小消耗gas
nonce : 64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求
parentHash : 上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0
Timestamp : 时间戳
3.初始化私有节点0
geth --datadir data0 init genesis.json
4.进入客户端
geth --identity "TestNode1" --datadir "data0" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --rpcport "8486" --port "30304" --networkid "29382" console
5.初始化私有节点1
geth --datadir data1 init genesis.json
6.进入客户端
geth --identity "TestNode2" --datadir "data1" --rpc --rpcapi "db,eth,net,web3" --rpcaddr "127.0.0.1" --ipcpath "data1\geth\geth.ipc" --rpcport "8487" --port "30305" --networkid "29382" console
7.主节点添加新节点
新节点上执行命令:admin.nodeInfo.enode
主节点上执行命令:admin.addpeer(上一步命令的结果并修改IP地址)
8.创建账户并挖矿
personal.newAccount("123456")
miner.start(1)
geth命令
使用命令 geth -h 可以查看geth 相关的帮助文档。这里我说几个常用的属性。
--Identity : 节点身份标识,起个名字
--datadir : 指定节点存在位置,“data0”
--rpc : 启用http-rpc服务器
--rpcapi : 基于http-rpc提供的api接口。eth,net,web3,db...
--rpcaddr : http-rpc服务器接口地址:默认“127.0.0.1”
--rpcport : http-rpc 端口(多节点时,不要重复)
--port : 节点端口号(多节点时,不要重复)
--networkid : 网络标识符 随便指定一个id(确保多节点是统一网络,保持一致)
客户端操作
新建用户
personal.newAccount('11111111')
查询账户
eth.accounts
不支持删除账户
查询账户余额
eth.getBalance(eth.accounts[0])
挖矿
miner.start()
停止挖矿
miner.stop()
查看区块数
eth.blockNumber
查看区块信息
eth.getBlock(5)
解锁账户
personal.unlockAccount(eth.accounts[0])
命令
eth.accounts // 查询账户列表
personal.listAccounts // 查询账户列表
personal.newAccount("xxx") // 新建账户,xxx为账户账户
web3.eth.coinbase // 节点挖矿的账户地址,默认为账户列表的第一个账户
personal.listAccounts[0] // 查看账户列表的第一个账户
eth.getBalance("xxx") // 查看对应账户的余额,xxx为账户地址
miner.start() // 开始挖矿
miner.stop() // 停止挖矿
txpool.status // 查看交易的状态
eth.blockNumber // 查看交易的区块号
eth.getTransaction // 查看交易区块信息
eth.getBlock(xxx) // 根据区块号查看区块信息,xxx为区块号
miner.setEtherbase(xxx) // 设置挖矿的账户,xxx为账户地址
getBalance() // 返回值的单位是wei,wei是以太币的最小单位,1个以太币=10^18wei。
web3.fromWei() // 将返回值换算成以太币