Setp 1 环境搭建
- Geth客户端的安装
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
Setp 2 创世区块的建立与修改
在目录中新建一个eth文件夹,在其中创建一个genesis.json文件存放创世区块的配置
{
"config": {
//创建的区块链的ID,以太坊主链ID是1.
"chainId": 21,
//homesteadBlock为0表示使用ethereum homestead release,Homestead是第二个重要的以太坊版本
"homesteadBlock": 0,
//eip155Block为0表示,该块支持EIP(ethereum改进建议)155.EIP描述了以太坊平台的标准,包括核心
//协议规范,客户端API和合同标准
"eip155Block": 0,
//eip158Block为0表示,该块支持EIP(ethereum改进建议)158
"eip158Block": 0
},
//用来预置账号以及账号的以太币数量,应该也就是所谓的预挖
//我这里不需要预挖,所以给了个空对象
//如果需要可以这样加
//"alloc": {
//"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
//"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
//}
"alloc" : {},
//币基地址,也就是默认的钱包地址,因为我没有地址,所以全0,为空
//后面运行Geth后创建新账户时,如果Geth发现没有币基地址,会默认将第一个账户的地址设置为币基地址
//默认矿工账号,挖矿成功时会默认吧所得的挖矿奖励存入这个帐号
"coinbase" : "0x0000000000000000000000000000000000000000",
//挖矿难度,你可以随便控制哦,这里设置的难度比较小,因为我喜欢钱来得快
"difficulty" : "0x4000",
//附加信息,随便填个文本或不填也行,类似中本聪在比特币创世块中写的报纸新闻
"extraData" : "",
//gas最高限制,以太坊运行交易,合约等所消耗的gas最高限制,限制区块能包含交易信息的总和,这里
//设置为最高
"gasLimit" : "0xffffffff",
//64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊黄皮书中的要求
//直接用我这个也可以
"nonce" : "0x0000000000000042",
//由上一个区块的一部分生成的Hash,和Nonce组合用于找到满足POW算法的条件
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
//上一个区块的Hash值,因为是创世块,石头里蹦出来的,没有在它前面的,所以是0
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
//创世块的时间戳,这里给0就好
"timestamp" : "0x00"
}
同时在eth目录下创建一个data文件用于存放区块链数据
geth --datadir eth/data --networkid 20181110 --port 16333 --rpcport 8564 init genesis.json哦
--datadir 选择区块数据存放的位置
--networkid 表示制定私有链的网络id为20181110.以太坊公网id是1,如果不指定默认也是1
--port --rpcport 端口号 注意之后再启动其他节点端口号不能重复
init 表示选择创世区块的数据文件
Setp 3 启动区块链
geth --datadir eth/data --networkid 20181110 --port 16333 --rpcport 8564 console
Setp 4 基本操作
-
创建账户
personal.newAccount(''password'')
账户创建完成之后会显示一个地址
查看账户列表
eth.accounts
挖矿
eth.coinbase//首先设置挖矿默认账户(获得挖矿钱的账户)
personal.unlockAccount(eth.accounts[0],''password'',time) //将账户解锁 时间可以设置长一些
miner.start(x) //开启挖矿 x代表启用的线程
miner.stop() //停止挖矿
- 查看账户余额
eth.getBalance(''account_address'')
- 转账
web3.eth.sendTransaction({from:'A_address',to:'B_address',value:web3.toWei(x)})
这时查询B账户余额并不能查到,因为交易信息还在交易池中,没有被区块确认
txpool.status //查看交易池中的信息
在启动挖矿之后B就能收到转账的钱
Setp 5 多节点接入
在eth目录下新建一个data1文件 加载创世区块并链接如之前的私链网络
geth --datadir eth/data1 --networkid 20181110 --port 16334 --rpcport 8565 init genesis.json
networkid一定要相同,因为要连入一个相同的私链网络,但是port rpcport不能一样
之后启动方式同之前一样
查看B的节点信息
admin.nodeInfo.enode
之后在节点A的控制台中添加B节点信息
admin.addPeer(''node_B'')
静态添加节点
在/node1/geth/ 下创建static-nodes.json文件,将需要加入的节点的enode信息加入 ','分隔
["enode://f4642fa65af50cfdea8fa7414a5def7bb7991478b768e296f5e4a54e8b995de10
2e0ceae2e826f293c481b5325f89be6d207b003382e18a8ecba66fb
af6416c0@172.16.29.11:30303"]
之后重启节点,输入net.peerCount
就可以查看节点已经连入网络中