本教程为博主实操流程,超精细,仅用于技术开发测试参考。
一、准备工作
1.1基础环境准备
- 一台linux服务器,博主使用的centos,ubuntu也行,命令差不多
- 配置服务器基础环境执行系统更新以及必备软件安装命令
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs tree -y
1.2安装Geth及Tools
- Ethereum 在 这里 提供了针对各种版本的Geth及工具包的可执行文件下载,选可自行选择版本,一定要是
Geth & Tools
,不推荐使用最新版本,博主使用的版本是eth-alltools-linux-amd64-1.9.24-cc05b050
最新版已经到1.10.26了。
- 复制该版本的下载地址,然后在终端输入以下命令,将压缩包下载到当前路径中,推荐
/root
路径。
wget -c https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz ./
- 解压
Geth & Tools
tar -zxvf geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz
解压完成后显示如下目录
- 将截图中圈起来的文件依次复制到
/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
- 测试是否可用,如下图即为配置成功
cd~
geth version
不同版本显示可能不同,但是大致差不多,可自行分辨是否成功。
二、私有链配置与单节点启动
2.1创建以太坊私有链的数据文件夹与节点账号
- 在root目录下创建一个
studychain/node
文件夹
studychain
为链的名字,不重要,可自行修改,此命令创建了一个studychain
文件夹与node
文件夹;如果不想在root目录下请自行调整目录
mkdir -p studychain/node
- 创建node节点的账号
cd studychain
geth --datadir node/ account new
// 执行命令后需设置密码,输入两次即可
流程如下图
- 保存节点账号信息到studychain目录下,用于后面启动节点使用
echo "刚才创建的账户地址" >> accounts.txt
echo "刚才设置的密码" >> node1/password.txt
2.2使用puppeth配置创世json
文件
// 执行命令
puppeth
-
第一步会提示让你设置链名称,博主这里以studychain为例
-
选择要执行的操作,分别为
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即可
- 创建新的创世文件
What would you like to do? (default = create)
1. Create new genesis from scratch //创建新的创世文件
2. Import already existing genesis //导入已有的创世文件
//这里选择1-创建新的创世文件
- 选择共识机制,我们以poa为例
Which consensus engine to use? (default = clique)
1. Ethash - proof-of-work //POW
2. Clique - proof-of-authority //POA
// 这里选择2-POA共识机制
- 设置出块时间,默认为15,博主推荐2到5
How many seconds should blocks take? (default = 15)
>
以博主为例这里输入5
- 为节点设置初始账户,并为初始账户初始化一些钱,好绕嘴
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
// 操作一样
- 接下来两步回车回车就行了
// 预资助的钱,回车默认即可
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
2.3初始化节点与启动
- 初始化节点
配置完创世文件并导出后你的
studychain
文件夹会有一个studychain.json
文件。
geth --datadir node init studychain.json
出现上图的
Successfully wrote genesis state
即为初始化成功
- 启动当前节点
//这里博主使用守护进程启动,并将日志打印到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为节点二授权并开启节点二挖矿
至此,一个拥有两个节点的私有链就创建完成啦,过程如果严谨些可以作为联盟链使用。