标题
VMware+Centos7 搭建以太坊区私链+连接私链
前言
使用私链搭建在VMware上,请保证VMware网络配置完成(可以上网、可以ping通物理机!!!!!!)
搭建以太坊私链使用的是Geth1.11.6版本(后序版本进行了修改,没找到详细教程)
使用MateMask链接私链
一、环境配置
1.基本工具下载
在后序过程中会使用到一下工具,所以事先下载
yum -y -install wget
yum -y -install git
如果出现cannot find a valid baseurl for repo:base/7/x86_64错误的话,是需要更换yum源。
可以参考文章yum换源
需要传送文件到虚拟机中的话可以参考这篇文章:如何在windows登录VMware Workstation Pro以及从windows向VMware Workstation Pro传输文件
2.搭建环境
安装GO
cd /usr/local
wget https://go.dev/dl/go1.20.3.linux-amd64.tar.gz
tar -zxvf go1.20.3.linux-amd64.tar.gz -C /usr/local/
创建软链接
ln -s /usr/local/go/bin/go /usr/bin/go
添加环境变量,使用vi命令在/etc/profile的最后添加以下内容
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/opt/go
export PATH=$PATH:$GOPATH/BIN
可以通过go version 来验证安装是否成功
安装GETH
下载geth源码
cd /usr/local/
git clone https://github.com/ethereum/go-ethereum.git
这里下载的是最新的代码,需要的可以使用git命令切换版本。
commit id 可以在geth的github中去对应的release查找
1.11.6的commit id 是ea9e62ca3db5c33aa7438ebf39c189afd53c6bf8
git checkout <commit_id>
编译源码
cd /usr/local/go-ethereum
make all
如果失败(卡在某一步不动了),尝试修改go的代理后再编译
go env -w GOPROXY=https://goproxy.cn
创建geth的软链接
ln -s /usr/local/go-ethereum/build/bin/geth /usr/bin/geth
可以使用geth version命令验证安装是否成功
二、搭建私链
1.创建私链
创建目录,后续的私链相关文件都会存在这个文件里面
mkdir myChain
cd myChain
创建genesis.json文件,这个文件用于定义创世区块,或者可以理解为这个私链的配置,我的文件内容如下
{
"config": {
"chainId": 1314,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0xFFFFFFFF",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
之后使用下面命令开始初始化私链
geth --datadir db init genesis.json
其中的db为私链数据的存储目录(没有的话会自动创建一个)
创建开发者账号
geth --datadir db -dev account new
输入这个命令之后会要求输入密码。
2.启动私链
在 /usr/local/myChain 目录下创建password.txt文件,内容为先前创建的开发者账号的密码
而后可以使用以下命令,以开发者模式启动私有链
geth --datadir db --rpc.enabledeprecatedpersonal --nodiscover console 2>>eth_output.log -dev --dev.period 1 --password password.txt
解释一下参数
参数 | 意义 |
---|---|
–datadir | 数据目录 |
–rpc.enabledeprecatedpersonal | personal命令已经弃用(但是我觉得好用)加这个参数可以继续使用这个命令 |
–nodiscover | 指定是一个私链,不会被公网上发现 |
console | 启动命令行模式 |
2>>eth_output.log | 会把日志打印到eth_output.log文件中,可以用putty再开个界面用 taill -f eth_output.log 实时查看日志 |
-dev | 以开发者模式启动 |
–dev.period 1 | 挖矿模式,0代表有交易上来才挖矿 1表示一直挖 |
–password | 密码 |
输入上述指令后会进入控制台,可以使用如下指令创建账户
web3.personal.newAccount("<password>")
可以使用以下命令查看当前的账户
web3.eth.accounts
同时还可以将他作为数组使用,如查看账户余额时可以使用
web3.eth.getBalance(eth.accounts[0])
3.开始挖
首先需要设置币基账户(接收收益的账户)
miner.setEtherbase(<账户地址>)
可以使用如下命令查看当前的币基账户
eth.coinbase
解锁账号,这样账号才能挖(但是我在使用的时候不解锁也可以挖)
personal.unlockAccount(eth.coinbase)
开始挖
miner.start(1)
参数1代表使用一个线程挖
开始后通过查看账户余额或者当前的区块高度来验证是否开始挖
eth.getBalance(eth.coinbase)
eth.blockNumber
二、外部连接私链
1.启动方式
如果需要连接到私链的话需要再启动时添加一些参数,指令如下
geth --datadir db --networkid 1314 --rpc.enabledeprecatedpersonal --nodiscover console 2>>eth_output.log -dev --dev.period 1 --password password.txt --http.addr 192.168.106.3 --http.port 8545 --http.corsdomain "*" --http --http.api="db,eth,net,web3,persinal"
解释一下参数(之前解释过的不加赘述)
参数 | 意义 |
---|---|
–networkid 1314 | 链的网络id需要与genesis.json中的一致 |
–http.addr 192.168.106.3 | $私链节点的地址(虚拟机的IP地址) |
–http.port 8545 | RPC端口 |
–http.corsdomain “*” | 接收远程RPC连接的地址的范围,*表示任意地址 |
–http | 启动RPC服务 |
–http.api=“db,eth,net,web3,persinal” | 通过RPC可以调用的API |
2.MateMask连接
在连接之前首先需要配置防火墙,我图方便直接关闭了,指令如下
sudo systemctl stop firewalld
在MateMask中通过 设置>>网络>>添加网络进入一下界面
其中网络名称与货币符号自定义,链ID为先前的network,RPC URL是虚拟机的IP+启动私链时指定的RPC端口。
3.MateMask账号导入
首先把/usr/local/myChain/db/keystore 保存在windows上。
可以使用以下命令把db压缩打包
tar -czvf db.tar.gz db
在windows的cmd中使用scp拉取这个文件,成功之后再解压。
scp <centos的用户名>@<centos的ip>:/usr/local/mychain/db.tar.gz <windows中的路径>
在MateMask中按照如下步骤操作,之后导入keystore中的要导入的账户的对应的文件,输入创建账户时设置的密码就可以了。
参考文章
以太坊搭建私有链(非常详细!!!)
运维系列:centos7 yum安装使用时提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法(亲测有效☆)
在 GitHub 上克隆历史版本的代码
geth常见报错:personal已经弃用
《solidity智能合约开发技术与实战》