基于区块链的毕业设计Setup an Eth2 Validator System on Ubuntu – 在Ubuntu上安装Eth2验证器系统

本文提供基于区块链的毕业设计国外最新区块链项目源码下载,包括solidity,eth,fabric等blockchain区块链,基于区块链的毕业设计Setup an Eth2 Validator System on Ubuntu – 在Ubuntu上安装Eth2验证器系统 是一篇很好的国外资料

Setup an Eth2 Validator System on Ubuntu

These instructions represent my current process for setting up an Eth2 staking system on Ubuntu 20.04 LTS on an Intel NUC 10i5FNK with 512GB SSD and 16GB RAM. These instructions are primarily for my own purposes, so that I can recreate my environment if I need to. They are not intended to represent best practices and may not be applicable to your hardware, software, or network configuration. There are many other good sources for instructions on setting up these services, and those may be more generally written and applicable.

Setup includes installation and configuration of the following services, including setting up systemd to automatically run services, where applicable:

  • Prysm Beacon Chain
  • Prysm Validator
  • geth
  • Prometheus
  • Grafana
  • node_exporter
  • blackbox_exporter
  • eth2stats

Steps to install and configure all software have been copied from or inspired by a number of sources, which are cited at the end of this file. Discord discussions may have provided additional details or ideas. In addition, though I have never been a professional Linux administrator, I have many years experience running Linux servers for a variety of public and private hobby projects, which may have informed some of my decisions, for better or worse.

This process assumes starting from first login on a clean Ubuntu 20.04 LTS installation, and were last tested on August 1, 2020.

Prerequisities

Software Update

After an initial install, it is a good idea to update everything to the latest versions.

sudo apt-get update sudo apt-get upgrade sudo reboot

Set Time Zone

Run the following command to see the list of time zones, then copy the appropriate time zone to your clipboard.

timedatectl list-timezones

Run the following command, replacing <SELECTED_TIMEZONE> with the time zone you have copied onto your clipboard.

sudo timedatectl set-timezone <SELECTED_TIMEZONE>

net-tools

Installing net-tools in order to determine network device via ifconfig.

sudo apt-get install net-tools

git

Installing git should not be necessary if you are running on Ubuntu Server. It should already be installed.

sudo apt-get install git

make

sudo apt-get install make

Prysm

Create User Accounts

sudo adduser --home /home/beacon --disabled-password --gecos 'Ethereum 2 Beacon Chain' beacon sudo adduser --home /home/validator --disabled-password --gecos 'Ethereum 2 Validator' validator sudo -u beacon mkdir /home/beacon/bin sudo -u validator mkdir /home/validator/bin

Install prysm.sh

cd /home/validator/bin sudo -u validator curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && sudo -u validator chmod +x prysm.sh cd /home/beacon/bin sudo -u beacon curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && sudo -u beacon chmod +x prysm.sh

Set Up systemd Service File

This sets up prysm.sh to automatically run on start. This file is slightly different than the version under the Building Prysm section.

Beacon Chain

sudo nano /etc/systemd/system/beacon-chain.service

Copy and paste the following text into the beacon-chain.service file.

[Unit] Description=Ethereum 2 Beacon Chain After=network.target StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=beacon ExecStart=/home/beacon/bin/prysm.sh beacon-chain --config-file /home/beacon/prysm-beacon.yaml  [Install] WantedBy=multi-user.target Alias=beacon 

Validator

sudo nano /etc/systemd/system/validator.service

Copy and paste the following text into the validator.service file.

[Unit] Description=Ethereum 2 Validator Wants=beacon-chain.service After=beacon-chain.service StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=validator ExecStart=/home/validator/bin/prysm.sh validator --config-file /home/validator/prysm-validator.yaml  [Install] WantedBy=multi-user.target 

Create Prysm Configuration Files

prysm-beacon.yaml

sudo -u beacon nano /home/beacon/prysm-beacon.yaml

Copy and paste the following text into the prysm-beacon.yaml configuration file.

datadir: "/home/beacon/prysm" p2p-host-ip: "XXX.XXX.XXX.XXX" http-web3provider: "http://YYY.YYY.YYY.YYY:8545" monitoring-host: "0.0.0.0" p2p-tcp-port: 13000 p2p-udp-port: 12000 

If you have a dynamic IP addres, remove the p2p-host-ip line. Otherwise, update XXX.XXX.XXX.XXX to your external IP address. Update YYY.YYY.YYY.YYY to the IP address of your Eth1 node, or remove the http-web3provider line entirely to use the default Eth1 node. The p2p-tcp-port and p2p-udp-port lines are optional if you use the default values of 13000 and 12000, respectively.

Change permissions of the file.

sudo -u beacon chmod 600 /home/beacon/prysm-beacon.yaml

prysm-validator.yaml

sudo -u validator nano /home/validator/prysm-validator.yaml

Copy and paste the following text into the prysm-beacon.yaml configuration file.

monitoring-host: "0.0.0.0" graffiti: "YOUR_GRAFFITI_HERE" beacon-rpc-provider: "localhost:4000" 

If you have a dynamic IP addres, remove the p2p-host-ip line. Otherwise, update XXX.XXX.XXX.XXX to your external IP address. Update YYY.YYY.YYY.YYY to the IP address of your Eth1 node, or remove the http-web3provider line entirely to use the default Eth1 node. The p2p-tcp-port and p2p-udp-port lines are optional if you use the default values of 13000 and 12000, respectively.

graffiti can be changed to whatever text you would prefer. To get a POAP badge, follow the instructions at https://beaconcha.in/poap and replace YOUR_GRAFFITI_HERE with the value on that site.

Change permissions of the file.

sudo -u validator chmod 600 /home/validator/prysm-validator.yaml

Make Validator Deposits and Install Keys

Follow the latest instructions at medalla.launchpad.ethereum.org.

Python3 and git should already be installed.

cd sudo apt-get python3-pip git clone https://github.com/ethereum/eth2.0-deposit-cli.git cd eth2.0-deposit-cli sudo ./deposit.sh install ./deposit.sh --num_validators NUMBER_OF_VALIDATORS --chain medalla

Change the NUMBER_OF_VALIDATORS to the number of validators you want to create. Follow the prompts and instructions.

BACKUP YOUR MNEMONIC AND PASSWORD!

The next step is to upload your deposit data file to the launchpad site. If you are using Ubuntu Server, you can either open up the deposit data file and copy it to a file on your desktop computer with the same name, or you can use scp or an equivalent tool to copy the deposit data to your desktop computer.

Follow the instructions by dragging and dropping the deposit file into the launchpad site. Then continue to follow the instructions until your deposit transaction is successful.

You should still be in the eth2.0-deposit-cli directory for the next commands.

sudo -u validator /home/validator/bin/prysm.sh validator accounts-v2 import --keys-dir=.

Follow the prompts. The default wallet directory should be /home/validator/.eth2validators/prysm-wallet-v2, and the default passwords directory should be /home/validator/.eth2validators/prysm-wallet-v2-passwords. Use the same password used when you were prompted for a password while running ./deposit.sh --num_validators NUMBER_OF_VALIDATORS --chain medalla.

Start Beacon Chain and Validator

Start and enable the validator service.

sudo systemctl daemon-reload sudo systemctl start beacon-chain validator sudo systemctl enable beacon-chain validator

geth

It is recommended that you run your own geth full node. For testnets, a default node is provided by Prysmatic Labs, but this may not be available for the mainnet launch.

Install geth

sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum

Create User Account

sudo adduser --home /home/geth --disabled-password --gecos 'Go Ethereum Client' geth

Set Up systemd Service File

This sets up geth to automatically run on start.

sudo nano /etc/systemd/system/geth.service

Copy and paste the following text into the geth.service file.

[Unit] Description=Ethereum 1 Go Client StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=geth WorkingDirectory=/home/geth ExecStart=/usr/bin/geth --goerli --http --http.addr 0.0.0.0  [Install] WantedBy=multi-user.target 

Start geth

Start and enable the validator service.

sudo systemctl daemon-reload sudo systemctl start geth sudo systemctl enable geth

Monitoring

The following will set up prometheus for collecting data, grafana for displaying dashboards, node_exporter for providing system data to prometheus, and blackbox_exporter for providing ping data to prometheus.

node_exporter and blackbox_exporter are optional, though some charts on the dashboard provided may need to be removed if those tools are not used. The prometheus configuration file may also need to be updated.

Prometheus

Create User Account

sudo adduser --system prometheus --group --no-create-home

Install Prometheus

Find the URL to the latest amd64 version of Prometheus at https://prometheus.io/download/. In the commands below, replace any references to the version 2.19.2 to the latest version available.

cd wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz tar xzvf prometheus-2.19.2.linux-amd64.tar.gz cd prometheus-2.19.2.linux-amd64 sudo cp promtool /usr/local/bin/ sudo cp prometheus /usr/local/bin/ sudo chown root.root /usr/local/bin/promtool /usr/local/bin/prometheus sudo chmod 755 /usr/local/bin/promtool /usr/local/bin/prometheus cd rm prometheus-2.19.2.linux-amd64.tar.gz

Configure Prometheus

sudo mkdir -p /etc/prometheus/console_libraries /etc/prometheus/consoles /etc/prometheus/files_sd /etc/prometheus/rules /etc/prometheus/rules.d

Copy and paste the following text into the prometheus.yml configuration file:

sudo nano /etc/prometheus/prometheus.yml
global:   scrape_interval: 15s  scrape_configs:   - job_name: 'prometheus'     scrape_interval: 5s     static_configs:     - targets: ['localhost:9090']   - job_name: 'beacon'     scrape_interval: 5s     static_configs:     - targets: ['localhost:8080']   - job_name: 'node_exporter'     scrape_interval: 5s     static_configs:     - targets: ['localhost:9100']   - job_name: 'validator'     scrape_interval: 5s     static_configs:     - targets: ['localhost:8081']   - job_name: 'ping_google'     metrics_path: /probe     params:       module: [icmp]     static_configs:       - targets:         - 8.8.8.8     relabel_configs:       - source_labels: [__address__]         target_label: __param_target       - source_labels: [__param_target]         target_label: instance       - target_label: __address__         replacement: 127.0.0.1:9115  # The blackbox exporter's real hostname:port.   - job_name: 'ping_cloudflare'     metrics_path: /probe     params:       module: [icmp]     static_configs:       - targets:         - 1.1.1.1     relabel_configs:       - source_labels: [__address__]         target_label: __param_target       - source_labels: [__param_target]         target_label: instance       - target_label: __address__         replacement: 127.0.0.1:9115  # The blackbox exporter's real hostname:port. 

Change the ownership of the prometheus directory.

sudo chown -R prometheus.prometheus /etc/prometheus

Data Directory

sudo mkdir /var/lib/prometheus sudo chown prometheus.prometheus /var/lib/prometheus sudo chmod 755 /var/lib/prometheus

Set Up systemd Service

sudo nano /etc/systemd/system/prometheus.service

Copy and paste the following text into the prometheus.service file.

[Unit] Description=Prometheus Wants=network-online.target After=network-online.target  [Service] User=prometheus Group=prometheus Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/prometheus      --config.file /etc/prometheus/prometheus.yml      --storage.tsdb.path /var/lib/prometheus/      --web.console.templates=/etc/prometheus/consoles      --web.console.libraries=/etc/prometheus/console_libraries  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start prometheus.service sudo systemctl enable prometheus.service

Grafana

cd sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" sudo apt-get update sudo apt-get install grafana-enterprise

Setup systemd

Optional: Edit the grafana-server.service file to add “grafana” as an alias to grafana server. I generally forget that the default name for this service is grafana-server.

sudo nano /lib/systemd/system/grafana-server.service 

At the end of this file, in the [Install] section, add the following line:

Alias=grafana.service 

Start the service.

sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server

Login to grafana at http://XXX.XXX.XXX.XXX:3000/, replacing XXX.XXX.XXX.XXX with the IP address of your server. If you do not know the IP address, run ifconfig.

Default username admin. Default password admin. Grafana will ask you to set a new password.

Setup Prometheus Data Source

  1. On the left-hand menu, hover over the gear menu and click on Data Sources.
  2. Then click on the Add Data Source button.
  3. Hover over the Prometheus card on screen, then click on the Select button.
  4. Enter http://localhost:9090/ into the URL field, then click Save & Test.

Install Grafana Dashboard

  1. Hover over the plus symbol icon in the left-hand menu, then click on Import.
  2. Copy and paste the dashboard at https://raw.githubusercontent.com/metanull-operator/eth2-grafana/master/eth2-grafana-dashboard-single-source.json into the “Import via panel json” text box on the screen.
  3. Then click the Load button.
  4. Then click the Import button.

Note: At this point in the process, any widgets showing details from the validator will show “N/A”, because the validator still has no keys configured. As soon as keys are configured for the validator, the validator details should begin to show up.

Final Grafana Dashboard Configuration

A few of the queries driving the Grafana dashboard may need different settings, depending on your hardware.

Network Traffic Configuration

To ensure that network traffic is correctly reflected on your Grafana dashboard, update the network interface in the Network Traffic widget. Run the following command to find your Linux network device.

ifconfig

Output of the command should look like the following:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255         inet6 fe80::1e69:7aff:fe63:14b0  prefixlen 64  scopeid 0x20<link>         ether 1c:69:7a:63:14:b0  txqueuelen 1000  (Ethernet)         RX packets 238936  bytes 78487335 (78.4 MB)         RX errors 0  dropped 1819  overruns 0  frame 0         TX packets 257824  bytes 112513038 (112.5 MB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0         device interrupt 16  memory 0x96300000-96320000  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536         inet 127.0.0.1  netmask 255.0.0.0         inet6 ::1  prefixlen 128  scopeid 0x10<host>         loop  txqueuelen 1000  (Local Loopback)         RX packets 39805  bytes 29126770 (29.1 MB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 39805  bytes 29126770 (29.1 MB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 

Of the two entries shows above, the first lists my IP address on the second line, network interface eno1. Find the entry that represents the network connection you want to monitor and copy the device name, which is the part before the colon on the first line of each entry. In my case the value is eno1.

  1. Go to the Grafana dashboard previously installed
  2. Find the Network Traffic widget, and open the drop down that can be found by the Network Traffic title.
  3. Click Edit.
  4. There will be four references to eno1 in the queries that appear. Replace all four with the name of the network interface you found in the ifconfig command.

node_exporter

Create User Account

sudo adduser --system node_exporter --group --no-create-home

Install node_exporter

cd wget https://github.com/prometheus/node_exporter/releases/download/v1.0.0/node_exporter-1.0.0.linux-amd64.tar.gz tar xzvf node_exporter-1.0.0.linux-amd64.tar.gz sudo cp node_exporter-1.0.0.linux-amd64/node_exporter /usr/local/bin/ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter rm node_exporter-1.0.0.linux-amd64.tar.gz

Set Up System Service

sudo nano /etc/systemd/system/node_exporter.service

Copy and paste the following text into the node_exporter.service file.

[Unit] Description=Node Exporter  [Service] Type=simple Restart=always RestartSec=5 User=node_exporter ExecStart=/usr/local/bin/node_exporter  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start node_exporter.service sudo systemctl enable node_exporter.service

blackbox_exporter

Create User Account

sudo adduser --system blackbox_exporter --group --no-create-home

Install blackbox_exporter

wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.16.0/blackbox_exporter-0.16.0.linux-amd64.tar.gz tar xvzf blackbox_exporter-0.16.0.linux-amd64.tar.gz sudo cp blackbox_exporter-0.16.0.linux-amd64/blackbox_exporter /usr/local/bin/ sudo chown blackbox_exporter.blackbox_exporter /usr/local/bin/blackbox_exporter sudo chmod 755 /usr/local/bin/blackbox_exporter

Allow blackbox_exporter to ping servers.

sudo setcap cap_net_raw+ep /usr/local/bin/blackbox_exporter
rm blackbox_exporter-0.16.0.linux-amd64.tar.gz

Configure blackbox_exporter

sudo mkdir /etc/blackbox_exporter sudo chown blackbox_exporter.blackbox_exporter /etc/blackbox_exporter
sudo nano /etc/blackbox_exporter/blackbox.yml

Copy and paste the following text into the blackbox.yml file.

modules:         icmp:                 prober: icmp                 timeout: 10s                 icmp:                         preferred_ip_protocol: ipv4 

sudo chown blackbox_exporter.blackbox_exporter /etc/blackbox_exporter/blackbox.yml

Set Up System Service

sudo nano /etc/systemd/system/blackbox_exporter.service

Copy and paste the following text into the blackbox_exporter.service file.

[Unit] Description=Blackbox Exporter  [Service] Type=simple Restart=always RestartSec=5 User=blackbox_exporter ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start blackbox_exporter.service sudo systemctl enable blackbox_exporter.service

Optional

eth2stats

eth2stats reports some basic beacon chain statistics to eth2stats.io. This service may not be supported in the long term.

Create User Account

sudo adduser --system eth2stats --group --no-create-home

Install go

sudo apt-get install golang-1.14-go  # Create a symlink from /usr/bin/go to the new go installation sudo ln -s /usr/lib/go-1.14/bin/go /usr/bin/go

Install eth2stats

cd git clone https://github.com/alethio/eth2stats-client cd ~/eth2stats-client make build sudo cp eth2stats-client /usr/local/bin sudo chown root.root /usr/local/bin/eth2stats-client sudo chmod 755 /usr/local/bin/eth2stats-client

Create Data Directory

sudo mkdir /var/lib/eth2stats sudo chown eth2stats.eth2stats /var/lib/eth2stats sudo chmod 755 /var/lib/eth2stats

Set Up System Service

sudo nano /etc/systemd/system/eth2stats.service

Copy and paste the following text into the validator.service file.

[Unit] Description=eth2stats After=beacon-chain.service StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 WorkingDirectory=/var/lib/eth2stats/ User=eth2stats ExecStart=/usr/local/bin/eth2stats-client run --v --eth2stats.node-name="NODE_NAME" --eth2stats.addr="grpc.medalla.eth2stats.io:443" --beacon.metrics-addr="http://localhost:8080/metrics" --eth2stats.tls=true --beacon.type="prysm" --beacon.addr="localhost:4000"  [Install] WantedBy=multi-user.target 

Replace NODE_NAME with the name you would like to appear on eth2stats.io.

These instructions were written during the Medalla testnet. The command-line flag --eth2stats.addr may need to be updated to a new address for later testnets or the mainnet.

sudo systemctl daemon-reload sudo systemctl enable eth2stats.service sudo systemctl start eth2stats.service

Router Configuration

You may need to configure your router to forward the following ports to your staking system. See your router documentation for details.

Prysm Beacon Chain: 12000/udp Prysm Beacon Chain: 13000/tcp geth: 30303/udp geth: 30303/tcp

Security

SSH

The following changes can be made to increase the security of SSH, but are not required.

sudo nano /etc/ssh/sshd_config

Add the following lines, but replacing with your login. You are not logging in to ssh with root, right? If you are, you probably don’t want to add the AllowUsers and PermitRootLogin lines below.

AllowUsers <LOGIN> PermitEmptyPasswords no PermitRootLogin no Protocol 2 

Optional: I prefer to change the default SSH port to a non-standard port. Do not forget what you change this to. Find the following line, uncomment it line by removing the “#”, and replace “22” with your preferred port.

#Port 22 
sudo reboot

Firewall

If your staking system is behind a router with a firewall, you may not want to add another level of firewall to your network security. This section may be skipped.

The following commands set up the minimal firewall rules necessary to run the Prysm beacon-chain and geth

# beacon chain sudo ufw allow 12000/udp sudo ufw allow 13000/tcp  # geth sudo ufw allow 30303/tcp sudo ufw allow 30303/udp  # grafana sudo ufw allow 3000/tcp

Run the following command to set up firewalls rules for SSH. If you changed your default SSH port above, change the 22 in this command to the port you are using.

# ssh sudo ufw allow 22/tcp

Set up default firewall rules and enable the firewall.

# Defaults sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw enable

The following commands open up the remaining ports that are used by the software in this set of instructions. These ports are typically used only by other software internal to the staking system, and do not need to be opened on the firewall unless you would like direct access to some of the administrative/metrics pages, or if systems external to your staking system will be services on your staking system.

# beacon chain #   - This only needs to be enabled if external validators will be accessing this beacon chain. sudo ufw allow 4000/tcp  # node_exporter #   - This only needs to be enabled if you want to access node_exporter stats directly. sudo ufw allow 9100/tcp  #geth #   - This only needs to be enabled if external beacon chains will be accessing this geth full node. sudo ufw allow 8545/tcp  # beacon-chain metrics #   - This only needs to be enabled if you want to access beacon-chain stats directly. sudo ufw allow 8080/tcp  # blackbox_exporter #   - This only needs to be enabled if you want to access blackbox_exporter stats directly. sudo ufw allow 9115/tcp  # prometheus #   - This only needs to be enabled if you want to access prometheus directly. sudo ufw allow 9090/tcp

Future Updates

There are at least one area where I may expand on my system configuration or instructions, but I have not pursued it yet.

  • SSH Key-Based Login
    • This seems to be a good security move, but it also seems to be the perfect way to get me locked out of my own system. I have never set this up before, but may look into it.

Sources/Inspiration

Prysm: https://docs.prylabs.network/docs/getting-started/

Go: https://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/golang-1.14-go_1.14.2-1ubuntu1_arm64.deb.html

Timezone: https://linuxize.com/post/how-to-set-or-change-timezone-on-ubuntu-20-04/

Account creation and systemd setup: https://github.com/attestantio/ubuntu-server

eth2stats: https://eth2stats.io/

blackbox_exporter: https://github.com/prometheus/blackbox_exporter

nod_exporter: https://github.com/prometheus/node_exporter

Prometheus: https://prometheus.io/docs/prometheus/latest/getting_started/

Grafana: https://grafana.com/docs/grafana/latest/installation/debian/

Dashboard: https://github.com/metanull-operator/eth2-grafana

systemd: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

geth: https://geth.ethereum.org/docs/install-and-build/installing-geth

sshd: https://blog.devolutions.net/2017/04/10-steps-to-secure-open-ssh

ufw: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04

ufw: https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands


Setup an Eth2 Validator System on Ubuntu

这些指令代表了我当前在Intel NUC 10i5FNK上为Ubuntu20.04 LTS设置Eth2锁定系统的过程,该系统使用512GB SSD和16GB RAM。这些说明主要是为了我自己的目的,以便在需要时重新创建环境。它们并不代表最佳实践,也可能不适用于您的硬件、软件或网络配置。关于设置这些服务,还有许多其他的好的信息来源,这些信息可能是更一般的书面形式和适用的。

安装程序包括以下服务的安装和配置,包括将systemd设置为自动运行服务(如果适用):

  • Prysm Beacon Chain
  • Prysm Validator
  • geth
  • Prometheus
  • Grafana
  • node_exporter
  • blackbox_exporter
  • eth2stats

安装和配置所有软件的步骤都是从许多源复制的,或是受许多源的启发而来的,这些源代码在本文件末尾有引用。不和谐的讨论可能提供了更多的细节或想法。另外,尽管我从来没有做过专业的Linux管理员,但我有多年的Linux服务器运行经验,可以为各种公共和私人爱好项目提供帮助,这可能会影响我的一些决定,不管是好是坏。

这个过程假设从第一次登录到一个干净的ubuntu20.04LTS安装开始,最后一次测试是在2020年8月1日。

Prerequisities

Software Update

初次安装后,最好将所有内容更新到最新版本。

sudo apt-get update sudo apt-get upgrade sudo reboot

Set Time Zone

运行以下命令查看时区列表,然后将相应的时区复制到剪贴板。

timedatectl list-timezones

运行以下命令,用复制到剪贴板上的时区替换&lt;所选时区&gt。

sudo timedatectl set-timezone <SELECTED_TIMEZONE>

net-tools

安装网络工具,以便通过ifconfig确定网络设备。

sudo apt-get install net-tools

git

如果您在Ubuntu服务器上运行,则不必安装git。应该已经安装了。

sudo apt-get install git

make

sudo apt-get install make

Prysm

Create User Accounts

sudo adduser --home /home/beacon --disabled-password --gecos 'Ethereum 2 Beacon Chain' beacon sudo adduser --home /home/validator --disabled-password --gecos 'Ethereum 2 Validator' validator sudo -u beacon mkdir /home/beacon/bin sudo -u validator mkdir /home/validator/bin

Install prysm.sh

cd /home/validator/bin sudo -u validator curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && sudo -u validator chmod +x prysm.sh cd /home/beacon/bin sudo -u beacon curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && sudo -u beacon chmod +x prysm.sh

Set Up systemd Service File

这将设置prysm.sh公司启动时自动运行。此文件与Building Prysm部分下的版本略有不同。

Beacon Chain

sudo nano /etc/systemd/system/beacon-chain.service

将以下文本复制并粘贴到信标中-连锁服务文件。

[Unit] Description=Ethereum 2 Beacon Chain After=network.target StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=beacon ExecStart=/home/beacon/bin/prysm.sh beacon-chain --config-file /home/beacon/prysm-beacon.yaml  [Install] WantedBy=multi-user.target Alias=beacon 

Validator

sudo nano /etc/systemd/system/validator.service

将以下文本复制并粘贴到验证程序.service文件。

[Unit] Description=Ethereum 2 Validator Wants=beacon-chain.service After=beacon-chain.service StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=validator ExecStart=/home/validator/bin/prysm.sh validator --config-file /home/validator/prysm-validator.yaml  [Install] WantedBy=multi-user.target 

Create Prysm Configuration Files

prysm-beacon.yaml

sudo -u beacon nano /home/beacon/prysm-beacon.yaml

将以下文本复制并粘贴到prysm中-亚姆尔灯塔配置文件。

datadir: "/home/beacon/prysm" p2p-host-ip: "XXX.XXX.XXX.XXX" http-web3provider: "http://YYY.YYY.YYY.YYY:8545" monitoring-host: "0.0.0.0" p2p-tcp-port: 13000 p2p-udp-port: 12000 

如果您有动态IP地址,请删除p2p主机IP线路。否则,请更新三十、 XXX.XXX公司.XXX到您的外部IP地址。更新YYY.YYY.YYY年.YYY到Eth1节点的IP地址,或完全删除http-web3provider行以使用默认Eth1节点。如果分别使用默认值13000和12000,则p2p-tcp端口和p2p-udp端口行是可选的。

更改文件的权限。

sudo -u beacon chmod 600 /home/beacon/prysm-beacon.yaml

prysm-validator.yaml

sudo -u validator nano /home/validator/prysm-validator.yaml

将以下文本复制并粘贴到prysm中-灯塔.yaml配置文件。

monitoring-host: "0.0.0.0" graffiti: "YOUR_GRAFFITI_HERE" beacon-rpc-provider: "localhost:4000" 

如果您有动态IP地址,请删除p2p主机IP线路。否则,请更新三十、 XXX.XXX公司.XXX到您的外部IP地址。更新YYY.YYY.YYY年.YYY到Eth1节点的IP地址,或完全删除http-web3provider行以使用默认Eth1节点。如果分别使用默认值13000和12000,则p2p-tcp端口和p2p-udp端口行是可选的。

涂鸦可以更改为您喜欢的任何文本。要获得POAP徽章,请按照https://beaconcha.in/poap把你的涂鸦替换成网站上的值。

更改文件的权限。

sudo -u validator chmod 600 /home/validator/prysm-validator.yaml

Make Validator Deposits and Install Keys

按照最新的说明操作medalla.launchpad.以太坊eth.org。

应该已经安装了Python3和git。

cd sudo apt-get python3-pip git clone https://github.com/ethereum/eth2.0-deposit-cli.git cd eth2.0-deposit-cli sudo ./deposit.sh install ./deposit.sh --num_validators NUMBER_OF_VALIDATORS --chain medalla

将验证程序的数量更改为要创建的验证程序的数量。按照提示和说明操作。

备份您的助记符和密码!

下一步是将存款数据文件上载到launchpad站点。如果您使用的是Ubuntu服务器,您可以打开存款数据文件并将其复制到桌面计算机上同名的文件中,也可以使用scp或等效工具将存款数据复制到桌面计算机上。

按照说明将存款文件拖放到启动板站点。然后继续按照说明操作,直到存款交易成功。

对于下一个命令,您应该仍然位于eth2.0-deposit-cli目录中。

sudo -u validator /home/validator/bin/prysm.sh validator accounts-v2 import --keys-dir=.

按照提示操作。默认钱包目录应为/home/validator/.eth2validators/prysm-wallet-v2,默认密码目录应为/home/validator/.eth2validators/prysm-wallet-v2-passwords。使用运行时提示输入密码时使用的密码/存款.sh–num_验证器NUMBER个验证程序–chain medalla。

Start Beacon Chain and Validator

启动并启用验证器服务。

sudo systemctl daemon-reload sudo systemctl start beacon-chain validator sudo systemctl enable beacon-chain validator

geth

建议您运行自己的geth full节点。对于testnets,Prysmatic Labs提供了一个默认节点,但这可能不适用于mainnet的启动。

Install geth

sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum

Create User Account

sudo adduser --home /home/geth --disabled-password --gecos 'Go Ethereum Client' geth

Set Up systemd Service File

这会将geth设置为在启动时自动运行。

sudo nano /etc/systemd/system/geth.service

将以下文本复制并粘贴到获取服务文件。

[Unit] Description=Ethereum 1 Go Client StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 User=geth WorkingDirectory=/home/geth ExecStart=/usr/bin/geth --goerli --http --http.addr 0.0.0.0  [Install] WantedBy=multi-user.target 

Start geth

启动并启用验证器服务。

sudo systemctl daemon-reload sudo systemctl start geth sudo systemctl enable geth

Monitoring

下面将设置用于收集数据的prometheus、用于显示仪表板的grafana、用于向prometheus提供系统数据的node_exporter以及用于向prometheus提供ping数据的blackbox_exporter。

节点导出器和blackbox导出器是可选的,但如果不使用这些工具,则可能需要删除提供的仪表板上的某些图表。普罗米修斯的配置文件也可能需要更新。

Prometheus

Create User Account

sudo adduser --system prometheus --group --no-create-home

Install Prometheus

找到Prometheus最新amd64版本的URLhttps://prometheus.io/download/。在下面的命令中,将对版本2.19.2的任何引用替换为可用的最新版本。

cd wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz tar xzvf prometheus-2.19.2.linux-amd64.tar.gz cd prometheus-2.19.2.linux-amd64 sudo cp promtool /usr/local/bin/ sudo cp prometheus /usr/local/bin/ sudo chown root.root /usr/local/bin/promtool /usr/local/bin/prometheus sudo chmod 755 /usr/local/bin/promtool /usr/local/bin/prometheus cd rm prometheus-2.19.2.linux-amd64.tar.gz

Configure Prometheus

sudo mkdir -p /etc/prometheus/console_libraries /etc/prometheus/consoles /etc/prometheus/files_sd /etc/prometheus/rules /etc/prometheus/rules.d

将以下文本复制并粘贴到普罗米修斯.yml配置文件:

sudo nano /etc/prometheus/prometheus.yml
global:   scrape_interval: 15s  scrape_configs:   - job_name: 'prometheus'     scrape_interval: 5s     static_configs:     - targets: ['localhost:9090']   - job_name: 'beacon'     scrape_interval: 5s     static_configs:     - targets: ['localhost:8080']   - job_name: 'node_exporter'     scrape_interval: 5s     static_configs:     - targets: ['localhost:9100']   - job_name: 'validator'     scrape_interval: 5s     static_configs:     - targets: ['localhost:8081']   - job_name: 'ping_google'     metrics_path: /probe     params:       module: [icmp]     static_configs:       - targets:         - 8.8.8.8     relabel_configs:       - source_labels: [__address__]         target_label: __param_target       - source_labels: [__param_target]         target_label: instance       - target_label: __address__         replacement: 127.0.0.1:9115  # The blackbox exporter's real hostname:port.   - job_name: 'ping_cloudflare'     metrics_path: /probe     params:       module: [icmp]     static_configs:       - targets:         - 1.1.1.1     relabel_configs:       - source_labels: [__address__]         target_label: __param_target       - source_labels: [__param_target]         target_label: instance       - target_label: __address__         replacement: 127.0.0.1:9115  # The blackbox exporter's real hostname:port. 

更改prometheus目录的所有权。

sudo chown -R prometheus.prometheus /etc/prometheus

Data Directory

sudo mkdir /var/lib/prometheus sudo chown prometheus.prometheus /var/lib/prometheus sudo chmod 755 /var/lib/prometheus

Set Up systemd Service

sudo nano /etc/systemd/system/prometheus.service

将以下文本复制并粘贴到普罗米修斯服务文件。

[Unit] Description=Prometheus Wants=network-online.target After=network-online.target  [Service] User=prometheus Group=prometheus Type=simple Restart=always RestartSec=5 ExecStart=/usr/local/bin/prometheus      --config.file /etc/prometheus/prometheus.yml      --storage.tsdb.path /var/lib/prometheus/      --web.console.templates=/etc/prometheus/consoles      --web.console.libraries=/etc/prometheus/console_libraries  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start prometheus.service sudo systemctl enable prometheus.service

Grafana

cd sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" sudo apt-get update sudo apt-get install grafana-enterprise

Setup systemd

可选:编辑grafana-服务器服务将GrafanGrafanA添加到“服务器”中。我通常忘记了这个服务的默认名称是grafana服务器。

sudo nano /lib/systemd/system/grafana-server.service 

在这个文件的末尾,在[Install]部分添加以下行:

Alias=grafana.service 

启动服务。

sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server

登录grafanahttp://XXX.XXX.XXX.XXX:3000/,更换三十、 XXX.XXX公司.XXX和服务器的IP地址。如果不知道IP地址,请运行ifconfig。

默认用户名admin。默认密码管理员。Grafana会要求你设置一个新密码。

Setup Prometheus Data Source

  1. On the left-hand menu, hover over the gear menu and click on Data Sources.
  2. Then click on the Add Data Source button.
  3. Hover over the Prometheus card on screen, then click on the Select button.
  4. Enter http://localhost:9090/ into the URL field, then click Save & Test.

Install Grafana Dashboard

  1. Hover over the plus symbol icon in the left-hand menu, then click on Import.
  2. Copy and paste the dashboard at https://raw.githubusercontent.com/metanull-operator/eth2-grafana/master/eth2-grafana-dashboard-single-source.json into the “Import via panel json” text box on the screen.
  3. Then click the Load button.
  4. Then click the Import button.

注意:在这个过程中,任何显示来自验证器的详细信息的小部件都将显示“N/A”,因为验证器仍然没有配置密钥。一旦为验证器配置了密钥,验证器详细信息就会开始显示。

Final Grafana Dashboard Configuration

驱动Grafana仪表板的一些查询可能需要不同的设置,具体取决于您的硬件。

Network Traffic Configuration

要确保网络流量正确反映在Grafana仪表板上,请更新网络流量小部件中的网络接口。运行以下命令来查找您的Linux网络设备。

ifconfig

命令的输出应该如下所示:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255         inet6 fe80::1e69:7aff:fe63:14b0  prefixlen 64  scopeid 0x20<link>         ether 1c:69:7a:63:14:b0  txqueuelen 1000  (Ethernet)         RX packets 238936  bytes 78487335 (78.4 MB)         RX errors 0  dropped 1819  overruns 0  frame 0         TX packets 257824  bytes 112513038 (112.5 MB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0         device interrupt 16  memory 0x96300000-96320000  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536         inet 127.0.0.1  netmask 255.0.0.0         inet6 ::1  prefixlen 128  scopeid 0x10<host>         loop  txqueuelen 1000  (Local Loopback)         RX packets 39805  bytes 29126770 (29.1 MB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 39805  bytes 29126770 (29.1 MB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 

在上面显示的两个条目中,第一个条目在第二行network interface eno1上列出了我的IP地址。找到表示要监视的网络连接的条目,并复制设备名,即每个条目第一行冒号之前的部分。在我的例子中,值是eno1。

  1. Go to the Grafana dashboard previously installed
  2. Find the Network Traffic widget, and open the drop down that can be found by the Network Traffic title.
  3. Click Edit.
  4. There will be four references to eno1 in the queries that appear. Replace all four with the name of the network interface you found in the ifconfig command.

node_exporter

Create User Account

sudo adduser --system node_exporter --group --no-create-home

Install node_exporter

cd wget https://github.com/prometheus/node_exporter/releases/download/v1.0.0/node_exporter-1.0.0.linux-amd64.tar.gz tar xzvf node_exporter-1.0.0.linux-amd64.tar.gz sudo cp node_exporter-1.0.0.linux-amd64/node_exporter /usr/local/bin/ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter rm node_exporter-1.0.0.linux-amd64.tar.gz

Set Up System Service

sudo nano /etc/systemd/system/node_exporter.service

将以下文本复制并粘贴到节点中_出口商服务文件。

[Unit] Description=Node Exporter  [Service] Type=simple Restart=always RestartSec=5 User=node_exporter ExecStart=/usr/local/bin/node_exporter  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start node_exporter.service sudo systemctl enable node_exporter.service

blackbox_exporter

Create User Account

sudo adduser --system blackbox_exporter --group --no-create-home

Install blackbox_exporter

wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.16.0/blackbox_exporter-0.16.0.linux-amd64.tar.gz tar xvzf blackbox_exporter-0.16.0.linux-amd64.tar.gz sudo cp blackbox_exporter-0.16.0.linux-amd64/blackbox_exporter /usr/local/bin/ sudo chown blackbox_exporter.blackbox_exporter /usr/local/bin/blackbox_exporter sudo chmod 755 /usr/local/bin/blackbox_exporter

允许blackbox导出器到ping服务器。

sudo setcap cap_net_raw+ep /usr/local/bin/blackbox_exporter
rm blackbox_exporter-0.16.0.linux-amd64.tar.gz

Configure blackbox_exporter

sudo mkdir /etc/blackbox_exporter sudo chown blackbox_exporter.blackbox_exporter /etc/blackbox_exporter
sudo nano /etc/blackbox_exporter/blackbox.yml

将以下文本复制并粘贴到黑匣子.yml文件。

modules:         icmp:                 prober: icmp                 timeout: 10s                 icmp:                         preferred_ip_protocol: ipv4 

sudo chown黑匣子_出口商.黑匣子出口商/etc/黑匣子出口商/黑匣子.yml

Set Up System Service

sudo nano/etc/systemd/system/blackbox_出口商服务

将以下文本复制并粘贴到黑盒中_出口商服务文件。

[Unit] Description=Blackbox Exporter  [Service] Type=simple Restart=always RestartSec=5 User=blackbox_exporter ExecStart=/usr/local/bin/blackbox_exporter --config.file /etc/blackbox_exporter/blackbox.yml  [Install] WantedBy=multi-user.target 
sudo systemctl daemon-reload sudo systemctl start blackbox_exporter.service sudo systemctl enable blackbox_exporter.service

Optional

eth2stats

eth2stats向eth2报告一些基本的信标链统计信息统计.io. 此服务可能长期不受支持。

Create User Account

sudo adduser --system eth2stats --group --no-create-home

Install go

sudo apt-get install golang-1.14-go  # Create a symlink from /usr/bin/go to the new go installation sudo ln -s /usr/lib/go-1.14/bin/go /usr/bin/go

Install eth2stats

cd git clone https://github.com/alethio/eth2stats-client cd ~/eth2stats-client make build sudo cp eth2stats-client /usr/local/bin sudo chown root.root /usr/local/bin/eth2stats-client sudo chmod 755 /usr/local/bin/eth2stats-client

Create Data Directory

sudo mkdir /var/lib/eth2stats sudo chown eth2stats.eth2stats /var/lib/eth2stats sudo chmod 755 /var/lib/eth2stats

Set Up System Service

sudo nano /etc/systemd/system/eth2stats.service

将以下文本复制并粘贴到验证程序.service文件。

[Unit] Description=eth2stats After=beacon-chain.service StartLimitIntervalSec=0  [Service] Type=simple Restart=always RestartSec=5 WorkingDirectory=/var/lib/eth2stats/ User=eth2stats ExecStart=/usr/local/bin/eth2stats-client run --v --eth2stats.node-name="NODE_NAME" --eth2stats.addr="grpc.medalla.eth2stats.io:443" --beacon.metrics-addr="http://localhost:8080/metrics" --eth2stats.tls=true --beacon.type="prysm" --beacon.addr="localhost:4000"  [Install] WantedBy=multi-user.target 

将NODE_NAME替换为希望在eth2上显示的名称统计.io.

这些说明是在Medalla testnet期间编写的。命令行标志–eth2统计地址可能需要更新到新的地址,以便以后的testnets或mainnet使用。

sudo systemctl daemon-reload sudo systemctl enable eth2stats.service sudo systemctl start eth2stats.service

Router Configuration

您可能需要配置路由器以将以下端口转发到您的锁定系统。有关详细信息,请参阅路由器文档。

Prysm Beacon-Chain:12000/udp-Prysm Beacon-Chain:13000/tcp-geth:30303/udp-geth:30303/tcp

Security

SSH

可以进行以下更改以提高SSH的安全性,但不是必需的。

sudo nano /etc/ssh/sshd_config

添加以下行,但替换为您的登录名。你没有用root用户登录ssh,对吗?如果是,您可能不想在下面添加AllowUsers和permitrotologin行。

AllowUsers <LOGIN> PermitEmptyPasswords no PermitRootLogin no Protocol 2 

可选:我更喜欢将默认SSH端口更改为非标准端口。别忘了你把这个改成了什么。找到下面一行,通过删除“#”来取消对它行的注释,并将“22”替换为首选端口。

#Port 22 
sudo reboot

Firewall

如果您的锁紧系统位于带有防火墙的路由器后面,您可能不想为您的网络安全添加其他级别的防火墙。可以跳过此部分。

以下命令设置运行Prysm信标链和geth所需的最小防火墙规则

# beacon chain sudo ufw allow 12000/udp sudo ufw allow 13000/tcp  # geth sudo ufw allow 30303/tcp sudo ufw allow 30303/udp  # grafana sudo ufw allow 3000/tcp

运行以下命令为SSH设置防火墙规则。如果您更改了上面的默认SSH端口,请将此命令中的22更改为您正在使用的端口。

# ssh sudo ufw allow 22/tcp

设置默认防火墙规则并启用防火墙。

# Defaults sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw enable

以下命令将打开软件在此指令集中使用的其余端口。这些端口通常仅由锁定系统内部的其他软件使用,并且不需要在防火墙上打开,除非您希望直接访问某些管理/度量页面,或者如果您的锁定系统外部的系统将是您的锁定系统上的服务,则不需要在防火墙上打开这些端口。

# beacon chain #   - This only needs to be enabled if external validators will be accessing this beacon chain. sudo ufw allow 4000/tcp  # node_exporter #   - This only needs to be enabled if you want to access node_exporter stats directly. sudo ufw allow 9100/tcp  #geth #   - This only needs to be enabled if external beacon chains will be accessing this geth full node. sudo ufw allow 8545/tcp  # beacon-chain metrics #   - This only needs to be enabled if you want to access beacon-chain stats directly. sudo ufw allow 8080/tcp  # blackbox_exporter #   - This only needs to be enabled if you want to access blackbox_exporter stats directly. sudo ufw allow 9115/tcp  # prometheus #   - This only needs to be enabled if you want to access prometheus directly. sudo ufw allow 9090/tcp

Future Updates

至少有一个方面我可以扩展我的系统配置或说明,但我还没有深入研究过

  • SSH Key-Based Login
    • This seems to be a good security move, but it also seems to be the perfect way to get me locked out of my own system. I have never set this up before, but may look into it.

Sources/Inspiration

Prysm: https://docs.prylabs.network/docs/getting-started/

Go: https://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/golang-1.14-go_1.14.2-1ubuntu1_arm64.deb.html

Timezone: https://linuxize.com/post/how-to-set-or-change-timezone-on-ubuntu-20-04/

Account creation and systemd setup: https://github.com/attestantio/ubuntu-server

eth2stats: https://eth2stats.io/

blackbox_exporter: https://github.com/prometheus/blackbox_exporter

nod_exporter: https://github.com/prometheus/node_exporter

Prometheus: https://prometheus.io/docs/prometheus/latest/getting_started/

Grafana: https://grafana.com/docs/grafana/latest/installation/debian/

Dashboard: https://github.com/metanull-operator/eth2-grafana

systemd: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

geth: https://geth.ethereum.org/docs/install-and-build/installing-geth

sshd: https://blog.devolutions.net/2017/04/10-steps-to-secure-open-ssh

ufw: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04

ufw: https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands

部分转自网络,侵权联系删除区块链源码网

www.interchains.cc

https://www.interchains.cc/16457.html

区块链毕设网(www.interchains.cc)全网最靠谱的原创区块链毕设代做网站 部分资料来自网络,侵权联系删除! 最全最大的区块链源码站 !
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 基于区块链的毕业设计Setup an Eth2 Validator System on Ubuntu – 在Ubuntu上安装Eth2验证器系统

提供最优质的资源集合

立即查看 了解详情