主页 > 华为手机怎么下载imtoken > 区块链 | 【ETH】搭建主网以太坊全节点钱包详解【推荐文章】

区块链 | 【ETH】搭建主网以太坊全节点钱包详解【推荐文章】

华为手机怎么下载imtoken 2023-02-28 07:47:27

最近公司需要开发一个基于以太坊的DApp,使用ETH作为转账媒介,需要开发一个简易版的以太坊钱包组件。 考虑到API的并发性,为了保证DApp的稳定运行,不能使用Infura的免费接口,所以决定自己搭建钱包节点。 本文记录整个节点搭建过程,供有需要的同学参考。

机器配置 首先,一个好的建议是,无论你的机器配置有多好,请不要将钱包和应用程序部署在同一台云主机上。 否则做以太坊节点的要求,可能会出现一些意想不到的后果。

土豪配置

CPU:网络增强四核 内存:8GB 硬盘:500GB SSD 固态硬盘 网络:3M+

中产配置

CPU:通用四核 内存:8GB 硬盘:500GB 高速云盘(机械硬盘) 网络:1MB(独享)

配置不佳

CPU:通用2核 内存:4GB 硬盘:500GB 高速云盘网络:1M

我公司购买了阿里云的ECS云主机,配置采用“中档配置”,系统为Ubuntu 16.04 LTS。

安装相关工具和软件目前主流的搭建以太坊钱包节点的方式有两种,一种是使用官方的geth工具,另一种是使用parity工具进行搭建。 本次技术选型我们选择了geth。 你要问我为什么不用parity,因为我觉得官方的比较靠谱,我的API用的是web3。 最重要的原因是我对parity不熟悉,哈哈……

1.配置go语言运行环境

根据自己的操作系统类型,选择对应的版本,我安装的是liunx 64位系统版本

做以太坊合法吗_做以太坊节点的要求_sitehqz.com 以太坊节点

wget # 解压 tar xvpzf go1.11.2.linux-amd64.tar.gz# 安装 mv go /usr/local/sudo ln -s /usr/local/go/bin/go /usr/local/bin/

2.安装geth

这里我们通过编译以太坊官方源码来安装。 我安装的时候最新版本是v1.8.17。 大家可以根据自己的情况下载对应的版本。 下载地址为:

wget # 解压 tar xvpzf v1.8.17.tar.gzmv go-ethereum-1.8.17 /usr/local/go-ethereumcd /usr/local/go-ethereummake all

编译完成后会在build/bin目录下生成很多可执行文件,geth就是其中之一。

3.配置环境变量

编辑 /etc/environment 文件,为 geth 和 go 语言添加环境变量

GOROOT=/usr/local/goPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/游戏:/usr/local/go/bin:/usr/local/go-ethereum/build/bin”

重启服务器或执行source /etc/environment 命令使环境配置生效

然后在终端输入geth version命令,会返回如下输出:

root@iZj6cefzgbtxiky8zkwv3oZ:~# geth versionGethVersion: 1.8.17-stableArchitecture: amd64Protocol Versions: [63 62]Network Id: 1Go Version: go1.11.2Operating System: linuxGOPATH=GOROOT=/usr/local/go

[区块链 | 【ETH】搭建主网以太坊全节点钱包详解【推荐文章】】打印出geth版本、go语言版本、GOROOT环境变量,说明geth已经安装成功。

做以太坊节点的要求_做以太坊合法吗_sitehqz.com 以太坊节点

准备节点启动脚本这里我直接给出一个启动脚本。 如果想知道geth命令的详细使用方法,这里有一篇不错的博客介绍了以太坊客户端上geth命令的使用-详细参数

nohup geth --syncmode "fast" --networkid 1 --datadir /data --cache 2048 --identity "ddblock" --rpc --rpcapi "db,eth,net,web3" --rpccorsdomain "*" -- rpcport 8545 --port 30303 --rpcaddr 127.0.0.1 & > nohup.out

我现在简单解释一下这些参数:

参数名称

参数说明

–同步模式

同步方式,有“快”、“全”、“轻”三种。

–networkid

Network ID (integer, 1=Main, 2=Morden (deprecated), 3=Ropsten, 4=Rinkeby) 这里我们使用默认值1表示同步主网数据

–数据目录

钱包和区块数据的存放目录,建议单独使用数据盘,不要指定系统盘的文件夹

-身份

sitehqz.com 以太坊节点_做以太坊节点的要求_做以太坊合法吗

节点标识符

–rpc

启动 RPC 服务

–rpcapi

开放那些API到JSONRPC调用,默认个人工具是不开放的

–rpccorsdomain

RPC调用跨域限制,*号不限制

–rpc端口

JSONRPC服务监听的端口

-港口

同步服务端口

–rpcaddr

做以太坊合法吗_sitehqz.com 以太坊节点_做以太坊节点的要求

可以调用RPC服务的IP地址。 我这里只允许本地通话,不对其他用户开放。 如果你想让它像 Infura 一样成为公共 API,你可以将它设置为 0.0.0.0

nohup {cmd} & > nohup.out

指示在后台运行脚本并将输出导入 nohup.out 文件

这里我对同步模式做更详细的解释

[ fast ] 启动快速区块同步模式,同步到最新区块后转为普通区块同步模式。 这是推荐的选项。 这种方式可能会丢失一些历史数据,但不影响以后的使用

[全] 从头到尾,获取区块头,获取区块体,从创世块验证每一个元素,需要下载所有的区块数据信息。 最慢,但可以获取所有历史数据,这是默认选项。

【light】只获取当前状态。 验证元素需要向全节点发起相应的请求。

如果要关闭后台运行的节点,可以使用以下脚本

#!/bin/shpid=`ps -ef|grep geth|grep -v grep|awk '{print $2}'`echo $pidkill -INT $pid

节点启动后,我们可以使用geth attach命令进入节点javascript终端

root@iZj6cefzgbtxiky8zkwv3oZ:~# geth attach /data/geth.ipcWelcome to the Geth JavaScript console!instance: Geth/ddblock/v1.8.17-stable/linux-amd64/go1.11.2modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 矿工:1.0 网络:1.0 个人:1.0 rpc:1.0 txpool:1.0 web3:1.0>

这里的data是上面启动geth时指定的datadir目录。

做以太坊节点的要求_做以太坊合法吗_sitehqz.com 以太坊节点

进入终端后,我们可以输入命令查看同步状态、网络、区块信息等,比如我们要查看当前同步状态,可以使用eth.syncing命令:

> eth.syncing{currentBlock: 6143193, highestBlock: 6143296, knownStates: 91512910, pulledStates: 91498893, startingBlock: 0}

这里的坑是每次执行eth.syncing命令你会发现currentBlock和highestBlock的差只有几百,以为同步快结束了,只有几百块。 事实上做以太坊节点的要求,你只同步了一小部分。 这是正常现象,因为我们使用了-fast选项,所以一开始只同步区块头,慢慢会同步区块体。

另外,在同步过程中,如果我们通过eth.blockNumber查看当前区块号,会显示为0

> eth.blockNumber0

您可以使用 net.peerCount 查看您的节点连接到多少其他节点以进行数据同步。

> net.peerCount6

如果返回0,估计可能还没有开始同步,没有找到节点。 如果长时间为0,那么检查一下你的网络是否通畅。

如果通过eth.syncing返回false,或者eth.blockNumber返回一个大于0的整数,如下:

> eth.blockNumber6712841 > eth.syncingfalse

那么恭喜,同步已经完成,可以开始调用钱包API进行转账了。

对了,我用的是阿里云的香港主机,中等配置,不到两天就同步完成了。 总块数据140GB,速度还是可以接受的。

至此,一个全节点的以太坊钱包已经部署完毕。