一、环境准备
1. 虚拟机系统为 ubuntu 22.04
2. 将ubuntu 的软件镜像源更换为国内的镜像源(命令如下)
sudo vim /etc/apt/source.list (vim下载与使用自行百度)
将文件内容清空,然后复制下方代码粘贴,保存退出即可。
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
3. 安装docker
参考CSDN博客:https://blog.csdn.net/justlpf/article/details/132982953
4. 安装golang
下载二进制包:All releases - The Go Programming Language 选择go1.20.5版本
解压安装包 :tar -C /usr/local -xzf go1.20.5.linux-amd64.tar.gz
设置环境变量:
编辑profile文件:vim ~/.profile
在文件的最后加上:
export GOROOT=/usr/local/go
export GOPATH=$HOME /test
export PATH=$PATH:$GOROOT/bin:$GOPATH
运行命令:source ~/.profile
验证是否完成安装:go version
5. 安装jq
sudo apt-get install jq
6. 安装make
Sudo apt-get install make
二、获取ethereum及准备工作
1. 创建ethereum文件夹
2. 在ethereum文件夹中打开命令行,输入以下命令(一步一步输入)
git clone https://github.com/ethereum/go-ethereum.git
git checkout remotes/origin/release/1.13
make all
3. 设置环境变量
vim ~/.profile
在文件最后加入
export PATH=$HOME/ethereum/go-ethereum/build/bin:$PATH
保存退出
运行命令:source ~/.profile
再运行 geth version 会有以下输出:
4. 创建文件夹 ethereumNode,并在此文件夹下创建data,log文件夹以及genesis.json文件
在genesis.json文件中写入以下内容
{
"config": {
"chainId": 123454321,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "800000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000C1B2c0dFD381e6aC08f34816172d6343Decbb12b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"账户1": { "balance": "1000000000000000000" },
"账户2": { "balance": "1000000000000000000" }
}
}
三、启动节点
本节将介绍用于设置由两个节点组成的简单专用网络的命令。这两个节点都将使用相同的创世块和网络 ID 在本地计算机上运行。每个节点的数据目录将命名为 node1 和 node2。
1.在ethereumNode文件夹中创建 node1,和node2文件夹
2. 创建node1和node2的账户,再当前目录下(ethereumNode)打开命令行输入以下命令:
首先设置创建node1的账户信息
geth --datadir node1 account new
设置密码后,会有以下输出
然后设置node2的账户信息
geth --datadir node2 account new
输出如下:
分别在node1,node2文件夹下创建一个password.txt文件,并写入账户的密码(自己设置的密码)
3. 将genesis.josn文件中的账户1和账户2替换为node1和node2的账户的公钥,不需要带前导”0x”
即如下:
"alloc": {
" 8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84": {
"balance": "0xad78ebc5ac6200000"
},
" 79ADDe508A582Fbb5209Aab633E67E820a3fD8D5": {
"balance": "0xad78ebc5ac6200000"
}
}
4. 初始化节点
使用命令:
geth init --datadir node1 genesis.json
geth init --datadir node2 genesis.json
结果如下:
5. 配置引导节点
首先,新打开一个命令行终端
输入命令生成密钥:bootnode -genkey boot.key
输入命令,生成引导节点:bootnode -nodekey boot.key -addr :30305
让该终端一直运行,不能关闭该终端!!
6. 启动节点
在初始好的命令行终端中(有两个终端)
在node1的终端输入:(注意替换enode以及账户的公钥,标黄部分)
geth --datadir node1 --port 30306 --bootnodes enode://9c21632cbb7560c03108326991021b96996ebfeccb58748effc43b22d9dcd300ad282954ac20a70d9f58aaaea63d5152d7f1791b9f513ab643de062b7d4e4ea3@127.0.0.1:0?discport=30305 --networkid 123454321 --unlock 0x8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84 --password node1/password.txt --authrpc.port 8551 --mine --miner.etherbase 0x8F6749935b1ad47E9402BA8dC6B0DbC8FC08AE84
在node2的终端输入:(注意替换enode以及账户的公钥,标黄部分)
geth --datadir node2 --port 30307 --bootnodes enode://9c21632cbb7560c03108326991021b96996ebfeccb58748effc43b22d9dcd300ad282954ac20a70d9f58aaaea63d5152d7f1791b9f513ab643de062b7d4e4ea3@127.0.0.1:0?discport=30305 --networkid 123454321 --unlock 0x79ADDe508A582Fbb5209Aab633E67E820a3fD8D5 --password node2/password.txt --authrpc.port 8552
7. 查看运行结果:
在ethereumNode文件夹中新开命令行终端:
运行:geth attach node1/geth.ipc 进入到以太坊节点node1的控制台中
输入:net.peerCount 查询节点是否连接到node2
输出如下:
输入admin.peers 查询对等节点的信息
输出如下;
输入:eth.getBalance(eth.accounts[0]) 查询自己的资金
然后可以使用以下命令解锁此帐户并将一些以太币发送到节点 2:
eth.sendTransaction({
to: '账户地址',
from: eth.accounts[0],
value: 25000
});
查询指定地址的账户余额:
eth.getBalance('账户地址');