本教程为博主实操流程,超精细,仅用于技术开发测试参考。

一、准备工作

1.1基础环境准备

  1. 一台linux服务器,博主使用的centos,ubuntu也行,命令差不多
  2. 配置服务器基础环境执行系统更新以及必备软件安装命令
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs tree -y

1.2安装Geth及Tools

  1. Ethereum 在 这里 提供了针对各种版本的Geth及工具包的可执行文件下载,选可自行选择版本,一定要是Geth & Tools,不推荐使用最新版本,博主使用的版本是eth-alltools-linux-amd64-1.9.24-cc05b050最新版已经到1.10.26了。
    geth&tooldownload
  2. 复制该版本的下载地址,然后在终端输入以下命令,将压缩包下载到当前路径中,推荐/root路径。
wget -c https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz ./

  1. 解压Geth & Tools
tar -zxvf geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz

解压完成后显示如下目录
解压geth

  1. 将截图中圈起来的文件依次复制到/usr/local/bin 目录下,这样省了配置环境变量,也可以全局调用
// 进入geth-alltools-linux-amd64-1.9.24-cc05b050目录
cd geth-alltools-linux-amd64-1.9.24-cc05b050
//依次复制
cp ./abigen /usr/local/bin/abigen
cp ./bootnode /usr/local/bin/bootnode
cp ./clef /usr/local/bin/clef
cp ./evm /usr/local/bin/evm
cp ./geth /usr/local/bin/geth
cp ./puppeth /usr/local/bin/puppeth
cp ./rlpdump /usr/local/bin/rlpdump
  1. 测试是否可用,如下图即为配置成功
cd~
geth version

geth配置成功

不同版本显示可能不同,但是大致差不多,可自行分辨是否成功。

二、私有链配置与单节点启动

2.1创建以太坊私有链的数据文件夹与节点账号

  1. 在root目录下创建一个studychain/node文件夹

studychain为链的名字,不重要,可自行修改,此命令创建了一个studychain文件夹与node文件夹;如果不想在root目录下请自行调整目录

mkdir -p studychain/node
  1. 创建node节点的账号
cd studychain
geth --datadir node/ account new
// 执行命令后需设置密码,输入两次即可

流程如下图
创建节点账号

  1. 保存节点账号信息到studychain目录下,用于后面启动节点使用
echo "刚才创建的账户地址" >> accounts.txt
echo "刚才设置的密码" >> node1/password.txt

2.2使用puppeth配置创世json文件

// 执行命令
puppeth
  1. 第一步会提示让你设置链名称,博主这里以studychain为例
    puppeth链名称

  2. 选择要执行的操作,分别为

What would you like to do? (default = stats) //你要怎么做
 1. Show network stats //查看网络状态
 2. Configure new genesis //配置创世文件
 3. Track new remote server //跟踪新的网络
 4. Deploy network components //安装插件
 //这里我们选2-配置新的创世文件,输入2即可

ppupeth设置新创世文件

  1. 创建新的创世文件
What would you like to do? (default = create)
 1. Create new genesis from scratch //创建新的创世文件
 2. Import already existing genesis //导入已有的创世文件
 //这里选择1-创建新的创世文件

creategenesis

  1. 选择共识机制,我们以poa为例
Which consensus engine to use? (default = clique)
 1. Ethash - proof-of-work //POW
 2. Clique - proof-of-authority //POA
 // 这里选择2-POA共识机制

poachose

  1. 设置出块时间,默认为15,博主推荐2到5
How many seconds should blocks take? (default = 15)
>
以博主为例这里输入5

blocktime

  1. 为节点设置初始账户,并为初始账户初始化一些钱,好绕嘴
Which accounts are allowed to seal? (mandatory at least one)
> 0xb4784D93f76b7212fc86882c3294140fb92cb9A7
> 0x
//这里他输入了0x,记得复制地址的时候把自己的地址的0x删除掉
//然后按回车再按回车就进入下一步了

第5步可能要执行两遍,第一遍是设置地址,第二遍是初始化钱,操作一样,他的提示不一样

Which accounts should be pre-funded? (advisable at least one)
>0x
// 操作一样

oneaddress

  1. 接下来两步回车回车就行了
// 预资助的钱,回车默认即可
Should the precompile-addresses (0x1 .. 0xff) be pre-funded with 1 wei? (advisable yes)
> 
// 你的chainid,最好回车随机
Specify your chain/network ID if you want an explicit one (default = random)
> 
INFO [11-27|03:06:30.288] Configured new genesis block //设置完成
//选择2导出即可
What would you like to do? (default = stats)
 1. Show network stats
 2. Manage existing genesis
 3. Track new remote server
 4. Deploy network components
> 2
// 继续选择2导出
 1. Modify existing configurations
 2. Export genesis configurations
 3. Remove genesis configuration
> 2
 //然后ctrl+c退出puppeth

export

2.3初始化节点与启动

  1. 初始化节点

配置完创世文件并导出后你的studychain文件夹会有一个studychain.json文件。

geth --datadir node init studychain.json

initchain

出现上图的Successfully wrote genesis state即为初始化成功

  1. 启动当前节点
//这里博主使用守护进程启动,并将日志打印到no.log下
nohup geth --networkid 99898999 --datadir ./studychain/node --http --http.port 8868 --http.addr "0.0.0.0" --port 30309 --http.corsdomain "*"  --nodiscover --http.api "db,eth,net,web3,txpool,personal,miner,debug" --unlock 0 --password ./studychain/node/node/password.txt --allow-insecure-unlock > no.log 2>&1
//命令解析请查看博主geth命令大全文章

图片
3. 进入gethconsole控制台

cd ~
geth attach /studychain/node/geth.ipc

图片

到此单节点启动完成

三、开启出块(挖矿)与创建第二个节点并加入当前节点

3.1开启出块

3.2创建第二个节点

3.3节点二加入节点一

3.4为节点二授权并开启节点二挖矿

至此,一个拥有两个节点的私有链就创建完成啦,过程如果严谨些可以作为联盟链使用。