主页 > imtoken钱包最新官网下载 > 【区块链】以太坊Geth私有链(单节点多节点)
【区块链】以太坊Geth私有链(单节点多节点)
主网是产生真正有价值的以太坊的网络,是全球化的,部署在互联网环境中。 智能合约的代码、执行、区块调用一目了然。 而且所有节点都是全球化的,速度比较慢。
TestNet是为用户开发、调试和测试而设计的。 如果开发一个简单的智能合约以太坊私有链案例,使用测试网就足够了,用户可以更专注于智能合约的编写。 但是,由于官方提供了网络,所以对于以太坊技术的底层实现,Geth的各种参数接口,以及整个以太坊技术的真实表现的理解都会弱很多。 所以从开发者的角度来说,更好的选择是Private Network,它可以从技术底层深入理解以太坊。
以太坊私有网络(私有网络)
以太坊私网是用户通过Geth自行创建的私网。 是一个非常适合开发、调试和测试的网络。 私有网络可以方便开发者深入了解以太坊底层技术。
(1)安装虚拟机
根密码:123456
管理员密码:1234
(2) 虚拟机联网
vmware网卡vmnet8主机ipv4的IP地址为:192.168.2.3
虚拟机ip地址为:192.168.2.12
(3) 安装Go语言环境1.10.3
由于后面会出现版本兼容问题,所以这里需要把golong版本改成新版本:官网地址
比如我在2018.6.18下载了1.10.3:1.10.3
1、下载复制到:opt/ethfan目录:
如果之前安装过,删除无效的go
2.解压tar -xvf
文件名:tar -xvf go1.10.3.linux-amd64.tar.gz
3.配置环境:gedit /etc/profile
4.查看版本
1.8.1
老版本参考1.8.1安装:访问go官网下载
下载并复制到:opt/ethfan目录
解压 tar -xvf 文件名
配置 GOPATH 环境变量
(四)配置yum
如果没有配置yum,必须先配置yum
(v) 下载并编译 Geth
安装C编译器,但是:centos7中没有这个apt-get install -y build-essential
我安装的是:yum -y install gcc
克隆Github项目
混帐克隆
进入文件目录,源码安装
cd go-ethereum
make geth
报错说我的版本是:1.8.1不符合,至少要改成1.9
解决办法:要么换golong版本,要么换geth版本
把golong版本改成1.10.3:就好了
检查是否安装成功
查看命令:build/bin/geth –help
检查版本:build/bin/geth version
配置geth环境
源/etc/配置文件
⑥ 查看geth版本
Geth搭建私有网络Step1:定义私有创世状态
[admin@localhost ~]$ cd 代码/区块链
[admin@localhost 区块链]$ mkdir go-ethereum
[admin@localhost 区块链]$ geditgenesis.json
[admin@localhost 区块链]$ mkdir privateNetwork
新建文件夹privateNetwork,存放genesis.json文件和后续私链
将以下内容复制到 genesis.json 中:
{
"config": {
"chainId": 14,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x05000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
或者内容为:
{
"config": {
"chainId": 22,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000032",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
官方文档中的chainId为0,应改为非零值,否则会导致gas * price + value资金不足
难度表示挖矿的难度值。 官方文档中为0x20000。 由于测试机配置低,修改为0x05000。
Step2:创建创世块
运行以下命令:
[admin@localhost 区块链]$ geth --datadir "./privateNetwork" init go-ethereum/genesis.json
结果如下:
然后在privateNetwork中可以找到两个新文件geth和keystore。
Step3:创建自己的私有链
运行以下命令:
[admin@localhost privateNetwork]$ geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhostconsole 2>>geth.log
nodiscover的意思是不被其他节点自动发现(可以手动添加节点)
或者命令类似为:geth --identity "TestNode" --rpc --rpcport "8545" --datadir /opt/ethfan/path/to/datadir --port "30303" --nodiscover console
console 是启动geth控制台。 如果不加这个选项以太坊私有链案例,geth启动后会成为后台进程,不会自动结束。
最后将geth中的日志信息导入geth.log,方便了解geth的运行情况。
注意路径要加引号,否则会出问题。
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options
稍后像这样运行重新进入:
输入geth
创建账户:这里的语法使用javascript输入密码123456两次显示生成的账户
使用密码“ycx”和地址“0x41b80248049bfa17e30beaa16c9f0e6b0e98fa6e”创建一个新用户
>personal.newAccount("ycx")
Step4:在自己的私链上创建用户
查看私链现有账号,已经有账号(我创建了两次)。
>eth.accounts
查看账户余额
Step5:尝试挖矿
继续在控制台输入:
>miner.start()
开始挖矿,查看终端geth.log,如下:
一段时间后,停止挖矿,查看账户,只要不为0,则挖矿成功
Geth搭建多节点私有链搭建节点0
参考:以上
构建节点 1
[root@localhost admin]# cd Code/blockchain/
[admin@localhost blockchain]$ mkdir data
创建步骤与之前相同。 如果要保证两个节点工作在同一个区块链上,首先要保证创世区块链是同一个,所以注意使用同一个genesis.json文件创建。分别用两个端口创建
[root@localhost blockchain]$ geth --datadir "data/chain0" init go-ethereum/genesis.json
[root@localhost blockchain]$ geth --datadir "data/chain1" init go-ethereum/genesis.json
如果报错:
启动节点 0 和 1
为了让两个节点同时启动,注意使用不同的端口和rpc端口。
启动节点 0:
geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhost console 2>>geth0.log
如果报错:可以查看端口
geth --networkid 14 --nodiscover --datadir "data/chain0" --port 30303--rpc --rpcapi net,eth,web3,personal --rpcport 8545--rpcaddr localhost console 2>>geth0.log
启动节点 1:
geth --networkid 14 --nodiscover --datadir "data/chain1" --port 55554 --rpc --rpcapi net,eth,web3,personal --rpcport 8101 --rpcaddr localhost console 2>>geth1.log
参数说明:
--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--port 网络监听端口,默认30303
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务
--rpcport ipc服务端口,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境
添加节点
通过 addPeer 添加节点。 Geth JavaScript控制台的具体api可以查看官方文档:
先看节点1的enode
在节点0的控制台,添加节点1
检查是否添加成功
查看连接节点数和连接节点列表:
net.peerCount
admin.peers