以太坊主网节点搭建

1. 安装 go 语言

安装 go 主要是为了去编译 go-ethereum 源码
平日里一般我都是用 gvm 去安装和管理不同版本的 go,但 gvm 在阿里云上默认是连不上所需要的 golang 下载服务器的。于是直接用下面一条命令搞定。

yum install golang
# go version
go version go1.11.5 linux/amd64

2. 安装 git

使用yum软件包管理器是安装Git的最简单,最简单的方法之一,但是可用版本可能比可用的最新版本要旧。如果要安装最新版本的Git,请考虑从源代码进行编译;

yum install git
# git version
git version 2.16.4

3. 获取 go-ethereum 源码

可以通过下面的命令获取 go-ethereum 并切换到指定的 release branch

git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum/
git checkout release/1.9

接下来对源码进行编译

make geth

提示:-bash: make: command not found

系统没有安装make、vim等常用命令,直接yum安装下即可。

yum -y install gcc automake autoconf libtool make

编译过程提示timout;解决方案:https://blog.csdn.net/bingshiwuyu/article/details/107333259

go: github.com/Azure/[email protected]: Get https://proxy.golang.org/github.com/%21azure/azure-pipeline-go/@v/v0.2.2.mod: dial tcp 172.217.160.81:443: i/o timeout

编译之后会在 go-ethereum/build/bin 下生成各种二进制文件,其中包括接下来会用到的 geth

[root@localhost bin]# pwd
/root/go-ethereum/build/bin
[root@localhost bin]# ls
abidump  abigen  bootnode  checkpoint-admin  clef  devp2p  ethkey  evm  examples  faucet  geth  p2psim  puppeth  rlpdump

4. 添加 geth 到系统路径

找到  /etc/profile 文件

[root@localhost ~]# cd /
[root@localhost /]# cd etc/
[root@localhost etc]# pwd
/etc
[root@localhost etc]# ls
profile .......

打开 /etc/profile

[root@localhost etc]# vi profile

a进入编辑

将 export PATH=$PATH:/root/go-ethereum/build/bin 添加到文件最后(/root/go-ethereum/build/bin就是geth的存放目录)

esc退出编辑       :wq   保存当前修改

[root@localhost bin]# pwd
/root/go-ethereum/build/bin

运行source /etc/profile 将设置加载到当前 shell 环境

[root@localhost etc]# source /etc/profile

打印出 geth 的版本,go 语言版本,以及 GOROOT 这些环境变量,说明 geth 已经安装成功了.

[root@localhost etc]# geth version
Geth
Version: 1.9.23-stable
Git Commit: 8c2f271528f9cccf541c6ea1c022e98407f26872
Git Commit Date: 20201015
Architecture: amd64
Protocol Versions: [65 64 63]
Go Version: go1.13.15
Operating System: linux
GOPATH=
GOROOT=go

5. 启动 geth 节点

参数名称 参数说明
–syncmode 同步模式,有三种”fast” ,”full”,”light”.
–networkid 网络ID(整型, 1=Main, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) 这里我们使用默认值 1 表示同步主网的数据
–datadir 钱包以及区块数据等存储目录,这个建议单独使用数据盘,不要指定系统盘的文件夹
–identity 节点标识符
–rpc 开启 RPC 服务
–rpcapi 开放那些 API 给 JSONRPC 调用,默认 personal 工具是不开放的
–rpccorsdomain RPC 调用跨域限制,*号标识不限制
–rpcport JSONRPC 服务监控的端口
–port 同步服务端口
–rpcaddr 可以调用 RPC 服务的IP地址,默认只允许本地连接,不开放给其他用户,设置成 0.0.0.0可以接受任何地址发来的请求


 

 

 

 

 

 

 

 

 

 

如果要了解 geth 命令的详细用法的话,这里推荐一篇比较好的博客https://learnblockchain.cn/2017/11/29/geth_cmd_options/

最后启动 geth 的命令看起来是这样的:

nohup geth --syncmode "fast" --networkid 1 --datadir blockdata --cache 1024 --identity "hzblock" --rpc --rpcapi "db,eth,net,web3,personal,admin,txpool" --rpcport 8545 --port 30303 --rpcaddr 0.0.0.0 --ws --wsaddr 0.0.0.0 --wsport 8546 --wsorigins "*"  --rpccorsdomain "*" & > nohup.out

可以通过下面的命令 attach 到运行的节点,这里的 blockdata 为上面启动 geth 时指定的 datadir 目录

[root@localhost etc]# geth attach blockdata/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/hzblock/v1.9.23-stable-8c2f2715/linux-amd64/go1.13.15
at block: 0 (Wed Dec 31 1969 19:00:00 GMT-0500 (EST))
 datadir: /etc/data
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

然后调用 eth.syncing, 如下面所示,可以看到当前的同步状态

> eth.syncing
{
  currentBlock: 43883,
  highestBlock: 11092622,
  knownStates: 59672,
  pulledStates: 53910,
  startingBlock: 0
}

可以通过 net.peerCount 来看自己的这个节点连了多少个其它节点进行数据同步。如果返回结果为0,就要自查一下了。

> net.peerCount
5

当看到 geth 日志里是下面的信息

[root@localhost etc]# tail nohup.out
INFO [10-20|07:10:38.575] Imported new block headers               count=768  elapsed=142.070ms   number=62271    hash="0da0e1…b27b89" age=5y3mo1w
INFO [10-20|07:10:39.046] Imported new block receipts              count=230  elapsed=46.163ms    number=48690    hash="5790b5…f17576" age=5y3mo1w  size=170.56KiB
INFO [10-20|07:10:42.306] Imported new state entries               count=0    elapsed="7.163µs"   processed=79728 pending=5514  trieretry=284 coderetry=0 duplicate=191 unexpected=905
INFO [10-20|07:10:47.141] Imported new state entries               count=1123 elapsed=4.765ms     processed=80851 pending=6425  trieretry=0   coderetry=0 duplicate=191 unexpected=905
INFO [10-20|07:10:47.521] Imported new block headers               count=1728 elapsed=229.567ms   number=63999    hash="139f3c…a4d7bc" age=5y3mo1w
INFO [10-20|07:10:48.298] Imported new block headers               count=192  elapsed=16.864ms    number=64191    hash="4fa4af…46d64c" age=5y3mo1w
INFO [10-20|07:10:48.460] Downloader queue stats                   receiptTasks=2851 blockTasks=8323 itemSize=732.65B throttle=8192
INFO [10-20|07:10:48.524] Imported new block receipts              count=828  elapsed=59.024ms    number=49518    hash="3d3022…a67261" age=5y3mo1w  size=577.40KiB
INFO [10-20|07:10:49.080] Imported new block headers               count=192  elapsed=19.487ms    number=64383    hash="a48500…8ecab7" age=5y3mo1w
INFO [10-20|07:10:49.147] Imported new block receipts              count=250  elapsed=30.991ms    number=49768    hash="1a4d98…faed8b" age=5y3mo1w  size=170.26KiB

恭喜你,区块数据已经开始了。

移除区块链数据并从新同步数据

geth removedb --datadir blockdata

 

你可能感兴趣的:(以太坊)