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