注:由于版本冲突问题,请严格按如下介绍版本进行安装
安装所需资料:通过网盘分享的文件:区块链_CSDN
链接: https://pan.baidu.com/s/1dn5xcLtwwFy90xhOWKiWyA?pwd=zgzs 提取码: zgzs
--来自百度网盘超级会员v6的分享
一、安装运行Geth所需要的工具
下载并安装Git、vim、gcc-c++、ntp组件、nodejs以及添加epel第三方安装源。这些工具的说明如下:
git:安装相关的组件,下载安装各类开源代码与工具的利器;
vim:文本编辑工具,取代vi;
gcc-c++:c/c++编译工具,用于golang下部分c库的编译以及truffle组件的编译
ntp:网络时钟同步组件;Ethereum的rpc网络需要时间同步;
nodejs:ethereum前端开发JavaScript包管理软件
epel:网络第三方的linux安装包源
yum update -y && yum install vim git gcc-c++ ntp epel-release nodejs -y
安装编译C/C++项目所需要的库:
sudo yum install gcc gcc-gcc++ glibc-devel libstdc++-devel
二、安装cmake3.15.2
# 下载
wget https://cmake.org/files/v3.15/cmake-3.15.2.tar.gz# 解压
tar zxvf cmake-3.15.2.tar.gz# 移动文件夹
mv cmake-3.15.2 /usr/local/# 跳转
cd /usr/local/cmake-3.15.2# 运行配置脚本
./bootstrap# 编译cmake
gmake# 安装cmake
gmake install# 配置环境变量
echo "export PATH=/usr/local/cmake-3.15.2/bin:$PATH" >> /etc/profile# 使环境变量生效
source /etc/profile# 验证安装
cmake --version
下载由于源问题或者网络问题失效直接从文章开头网盘资料中获取Cmake3.15.2。
三、安装Golang1.21.0
Geth使用Golang编译的,所以需要安装Golang。
安装Golang,执行如下命令:
# 下载go1.21.0
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz# 解压
tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz# 环境变量配置方法①
echo "export GOROOT=/usr/local/go" >> /etc/profile
echo "export PATH=/usr/local/go/bin:$PATH" >> /etc/profile
## 使配置生效
source /etc/profile# 环境变量全局配置方法②
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
## 使全局配置生效
source ~/.bashrc# 验证
go version
四、安装geth1.9.10
由于安装过程中存在多种关于版本冲突问题,这里不推荐通过源码编译go-ethereum项目进行geth的安装。如下使用二进制文件安装(推荐)
下载链接地址:Downloads | go-ethereum
或者从文章开头网盘资料中下载geth1.9.10压缩包。
tar -zxvf geth-linux-amd64-1.9.10-58cf5686.tar
创建软连接,移动文件内容到 /usr/local/bin/ 目录下(这里环境变量默认已经确定,如未指定,请自行修改 /etc/profile 文件)
# 进入geth目录
cd geth-linux-amd64-1.9.10-58cf5686# 使用root权限创建软链接
sudo ln -s $(pwd)/geth /usr/local/bin/geth# 验证命令是否可用
geth version
五、关闭防护墙
# 查询防火墙状态
systemctl status firewalld
显示正在running,关闭防护墙
# 关闭防火墙
systemctl stop firewalld# 再次查询防火墙状态
systemctl status firewalld
六、Geth初始化
编辑创世块 genesis.json
# 创建文件夹
mkdir privatechain# 编辑创世块文件 genesis.json
vim genesis.json# 文件内容:下方本地测试的chainId填写1337
{"config": {"chainId": 1337,"homesteadBlock": 0,"eip150Block": 0,"eip155Block": 0,"eip158Block": 0,"ByzantiumBlock": 0,"constantinopleBlock": 0, "petersburgBlock": 0},"alloc": {"0xbdda794a097b41309700fdc5bdba880a7763c738": {"balance": "100"}},"coinbase": "0x0000000000000000000000000000000000000000","difficulty": "0x2","extraData": "","gasLimit": "0xffffffff","nonce": "0x0000000000000042","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp": "0x00"
}# init初始化,--datadir指定数据存储目录
geth init genesis.json --datadir ./data
启动私链
geth --datadir ./data \--networkid 1337 \--port 30303 \--rpc \--rpcaddr "0.0.0.0" \--rpcport 8545 \--rpcapi 'db,net,eth,web3,personal' \--rpccorsdomain '*' \--ws \--wsaddr "0.0.0.0" \--wsport 8546 \--allow-insecure-unlock \console 2>>1.log
为启动私链单独设置脚本文件
# 编辑脚本文件
vim startPrivateChain.sh# 添加如下16行全部内容
#!/bin/bash# 启动 Geth 私有链节点
geth --datadir ./data \--networkid 1337 \--port 30303 \--rpc \--rpcaddr "0.0.0.0" \--rpcport 8545 \--rpcapi 'db,net,eth,web3,personal' \--rpccorsdomain '*' \--ws \--wsaddr "0.0.0.0" \--wsport 8546 \--allow-insecure-unlock \console 2>>1.log# 给文件赋权
chmod 777 startPrivateChain.sh#启动
./startPrivateChain.sh
初始化完成后进入data文件夹目录,可以查询到生成了geth与keystore文件,其中keystore为之后挖矿矿工的密码,即私钥,如下5c993678d3358462619906c9d5fbc93e98f1490a为某账户的账户id,需要通过解密该文件得到用户的私钥。
这里展示获取私钥的 t.py 文件代码块,我在挖矿前给用户5c993678d3358462619906c9d5fbc93e98f1490a设置了密码为123,执行如下代码,生成用户私钥。
from eth_account import Account
import json# 替换为你的 keystore 文件路径
with open("UTC--2025-06-17T03-05-18.222102348Z--5c993678d3358462619906c9d5fbc93e98f1490a") as keyfile:encrypted_key = keyfile.read()password = "123" # 你设置的密码private_key = Account.decrypt(encrypted_key, password)print("Private key (hex):", private_key.hex())
七、使用钱包metaMask链接账户
geth基本指令操作
#新增用户,后面的为密码
personal.newAccount("123")#可以查看到所有的用户
eth.accounts#单独查看某个用户
eth.accounts[0]#查看钱
eth.getBalance(eth.accounts[0])#挖矿可以使coinbase对应的账户增加资产,可以将pending状态的交易打包完成
#开始挖矿,转账交易和truffle部署合约的时候都需要挖矿才能实现
miner.start()#停止挖矿
miner.stop()##转账之前需要进行解锁账户,from需要解锁
personal.unlockAccount(eth.accounts[0], "123")## 执行完转账操作后需要进行挖矿,将交易打包进区块中
## value后面的是转账金额,1表示数量,wei表示单位,表示转了1个wei
eth.sendTransaction({from:eth.accounts[0], to: "xxxx", value: web3.toWei(1)})
通过创建的账户,通过步骤六中python代码获取到私钥。
在MetaMask中新建网络连接
添加自定义网络,ip自行修改,链id为1337,如果之前链id不为1337,需要删除初始化后生成目录文件,重新修改创世块genesis.json文件中chainId。
创建成功后,通过私钥引入账户
导入即可
八、补充:挖矿+交易
# 开始挖矿
# start的参数表示挖矿使用的线程数,若不写表示使用最大线程数。返回true或null表示执行成功
miner.start()# 停止挖矿
miner.stop()
首次启动挖矿会先生成挖矿所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始挖矿。
注:进行合约交易过程中,要使私链处于挖矿状态下
其他交易处理请参考之前关于区块链的相关博客(该博文使用私链替换测试链Ganache)
区块链使用连接工具demo测试MetaMask、Remix和Ganache-CSDN博客
如下为本博文参考相关内容链接(以下内容较老,未介绍现如今的版本冲突问题,仅供参考)
区块链geth的创建,通过truffle把合约部署到geth上,多个节点的同步----ubuntu_geth怎么轻节点同步 国内能用的enode-CSDN博客
CentOS7下安装Geth,搭建以太坊私有链_centos7安装geth,搭建以太坊私有链-CSDN博客
在Ubuntu下使用Geth搭建自己的以太坊私有链_ubantu geth miner.start-CSDN博客