美文网首页
eth节点搭建-------------交易所

eth节点搭建-------------交易所

作者: 08f1b6c52d2a | 来源:发表于2019-03-13 12:12 被阅读0次

    eth

    Geth 安装:

    1. 安装 go 语言

    安装 go 主要是为了去编译 go-ethereum 源码

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

    yum install golang

    安装的版本不是最新的但也还是可以用的。

    # go version

    go version go1.9.6 linux/amd64

    2. 安装 git

    安装 git 主要是为了拉取 go-ethereum 源码

    直接通过 yum 安装的版本比较老

    我是通过下面的命令安装的:

    yum install

    https://centos6.iuscommunity.org/ius-release.rpm

    yum install epel-release

    yum install git2u

    得到下面的 git 版本

    # git version

    git version 2.16.4

    安装go编译器

    sudo apt-getinstall -ybuild-essential golang

    3. 最后,构建geth

    cdgo-ethereum

    make geth

    gethhelp

    把getn加入到配置文件里etc/profile

    #geth

    exportPATH=$PATH:/root/soft/go-ethereum/build/bin

    source/tc/profile

    [root@BC-OL-Host-1/]# vim ~/.bashrc

    4. 链接节点命令:

    nohup geth --syncmode

    "full" --cache 2048 --datadir /root/data/ethData --ipcpath./geth.ipc --rpc --rpcaddr 0.0.0.0 --port 8445 --maxpeers 999 &

    参考地址:https://blog.csdn.net/ULi_cloud/article/details/80668590

    https://blog.csdn.net/qq_25870633/article/details/82931782

    性能调节选项:

    –cache value 调整内存分配 最小16MB,默认128MB

    –trie-cache-gens value 内存中存储节点数,默认为120

    --datadir “/your/database/path”

    指定以太坊数据和密钥目录,在开启私有链时需指定私有链目录,默认为公有链目录。

    --ipcpath "geth.ipc" 指定IPC接口

    --rpcaddr value 指定HTTP-RPC 服务监听地址,默认为“localhost”

    --rpcport value 指定HTTP-RPC 服务监听端口,默认为8545

    --maxpeers value 设置允许最大连接节点数目,默认为25

    --ws 开启 WS-RPC 服务

    --wsaddr value 指定WS-RPC 服务监听地址,默认为 “localhost”

    --wsport value 指定 WS-RPC 服务监听端口,默认值:8546

    --wsapi value 指定WS-RPC 开启API,默认为 “eth,net,web3”

    --wsorigins value 指定允许“websockets”请求的地址

    5. 监控同步状态

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

    # geth attachdata/geth.ipc

    Welcome to the

    Geth JavaScript console!

    instance:

    Geth/SamewayProdNode1/v1.8.13-stable-225171a4/linux-amd64/go1.9.6

    modules:

    admin:1.0 debug:1.0 eth: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: 6143193,

    highestBlock: 6143296,

    knownStates: 91512910,

    pulledStates: 91498893,

    startingBlock: 0

    }

    在同步的过程中我们通过 eth.blockNumber 去查看当前区块号的话会显示为0

    > eth.blockNumber

    0

    这个时候看 geth 的输出的话,可以看到下面的日志

    INFO [08-14|04:32:20] Imported new block headers

    INFO [08-14|04:32:24] Imported new block receipts

    INFO [08-14|04:32:33] Imported new state entries

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

    > net.peerCount

    8

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

    # tail nohup.out

    INFO

    [08-16|14:20:15.307] Imported new chain segment blocks=1 txs=117 mgas=7.979

    elapsed=761.592ms mgasps=10.477 number=6156276 hash=56b327…03c068 cache=905.73mB

    INFO

    [08-16|14:20:32.926] Imported new chain segment blocks=1 txs=42 mgas=2.325

    elapsed=143.505ms mgasps=16.204 number=6156277 hash=f577a7…1c6104 cache=905.59mB

    INFO [08-16|14:20:35.940]

    Imported new chain segment blocks=1 txs=121 mgas=7.992 elapsed=776.752ms

    mgasps=10.289 number=6156278 hash=c92744…2d1448 cache=905.67mB

    调用 eth.blockNumber 得到的数字不再是 0 了

    > eth.blockNumber

    6156294

    恭喜你,区块数据已经同步完成了,该节点可以接收交易请求了。

    6. 常见问题

    问题: 如果非正常关闭 geth 进程,比如机器强制重启的时候,如果这个时候以太坊正在执行数据库写操作,下次启动 geth 进程时就很容易碰到下面的错误信息:

    Fatal: Error

    starting protocol stack: missing block number for head header hash

    方案: 很不幸,目前还没有特别好的解决办法

    需要通过下面的命令移除区块链数据并从新同步数据

    # geth removedb--datadir data

    问题: 数据同步经常落后主网若干区块,落后也不是很多,往往也就几十个区块,等段时间可以完成同步,可过段时间又落于主网了

    方案: 确保节点监听端口 30303 已经在防火墙打开,此端口在防火墙放行后,可大大提高主网数据同步的稳定性

    有相关需求的,可以定制交易所服务

    相关文章

      网友评论

          本文标题:eth节点搭建-------------交易所

          本文链接:https://www.haomeiwen.com/subject/fyjtpqtx.html