主页 > imtoken钱包最新官网下载 > 【区块链】以太坊Geth私有链(单节点多节点)

【区块链】以太坊Geth私有链(单节点多节点)

imtoken钱包最新官网下载 2024-01-26 05:07:35

主网是产生真正有价值的以太坊的网络,是全球化的,部署在互联网环境中。 智能合约的代码、执行、区块调用一目了然。 而且所有节点都是全球化的,速度比较慢。

TestNet是为用户开发、调试和测试而设计的。 如果开发一个简单的智能合约以太坊私有链案例,使用测试网就足够了,用户可以更专注于智能合约的编写。 但是,由于官方提供了网络,所以对于以太坊技术的底层实现,Geth的各种参数接口,以及整个以太坊技术的真实表现的理解都会弱很多。 所以从开发者的角度来说,更好的选择是Private Network,它可以从技术底层深入理解以太坊。

以太坊私有网络(私有网络)

以太坊私网是用户通过Geth自行创建的私网。 是一个非常适合开发、调试和测试的网络。 私有网络可以方便开发者深入了解以太坊底层技术。

(1)安装虚拟机

Root密码:123456

根密码:123456

Admin密码:1234

管理员密码:1234

(2) 虚拟机联网

vmware netword adapter vmnet8主机ipv4的IP地址为:192.168.2.3

vmware网卡vmnet8主机ipv4的IP地址为:192.168.2.3

虚拟机ip地址为:192.168.2.12

虚拟机ip地址为:192.168.2.12

(3) 安装Go语言环境1.10.3

由于后面会出现版本兼容问题,所以这里需要把golong版本改成新版本:官网地址

比如我在2018.6.18下载了1.10.3:1.10.3

1、下载复制到:opt/ethfa​​n目录:

1.1

1.2

如果之前安装过,删除无效的go

1.3

2.解压tar -xvf

文件名:tar -xvf go1.10.3.linux-amd64.tar.gz

2.1 解压

3.配置环境:gedit /etc/profile

3.1

4.查看版本

版本

1.8.1

老版本参考1.8.1安装:访问go官网下载

下载并复制到:opt/ethfa​​n目录

下载

解压 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 version

⑥ 查看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

结果如下:

ubuntu以太坊私有链_以太坊私有链案例_以太坊私有链钱包

然后在privateNetwork中可以找到两个新文件geth和keystore。

ubuntu以太坊私有链_以太坊私有链案例_以太坊私有链钱包

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

以太坊私有链钱包_以太坊私有链案例_ubuntu以太坊私有链

稍后像这样运行重新进入:

以太坊私有链钱包_ubuntu以太坊私有链_以太坊私有链案例

输入geth

创建账户:这里的语法使用javascript输入密码123456两次显示生成的账户

ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

使用密码“ycx”和地址“0x41b80248049bfa17e30beaa16c9f0e6b0e98fa6e”创建一个新用户

>personal.newAccount("ycx")
以太坊私有链钱包_以太坊私有链案例_ubuntu以太坊私有链

Step4:在自己的私链上创建用户

查看私链现有账号,已经有账号(我创建了两次)。

>eth.accounts
以太坊私有链案例_ubuntu以太坊私有链_以太坊私有链钱包

查看账户余额

以太坊私有链钱包_ubuntu以太坊私有链_以太坊私有链案例

Step5:尝试挖矿

继续在控制台输入:

>miner.start()

开始挖矿,查看终端geth.log,如下:

以太坊私有链钱包_ubuntu以太坊私有链_以太坊私有链案例

一段时间后,停止挖矿,查看账户,只要不为0,则挖矿成功

以太坊私有链钱包_ubuntu以太坊私有链_以太坊私有链案例

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
ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

[root@localhost blockchain]$ geth --datadir "data/chain1" init go-ethereum/genesis.json
ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

如果报错:
ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

启动节点 0 和 1

为了让两个节点同时启动,注意使用不同的端口和rpc端口。

启动节点 0:

geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhost console 2>>geth0.log
ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

如果报错:可以查看端口

以太坊私有链案例_ubuntu以太坊私有链_以太坊私有链钱包

以太坊私有链案例_ubuntu以太坊私有链_以太坊私有链钱包

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

ubuntu以太坊私有链_以太坊私有链钱包_以太坊私有链案例

参数说明:

--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

以太坊私有链钱包_ubuntu以太坊私有链_以太坊私有链案例

在节点0的控制台,添加节点1

以太坊私有链钱包_以太坊私有链案例_ubuntu以太坊私有链

检查是否添加成功

查看连接节点数和连接节点列表:

net.peerCount
admin.peers

以太坊私有链钱包_以太坊私有链案例_ubuntu以太坊私有链