Solana 验证节点搭建教程 SOL节点

搭建验证节点 (成功下载快照)

部署 Solana 验证节点

由于项目需求,需要部署一台solana节点,我们从一开始搭建,遇到许多坑,做个记录。
一定要注意服务器配置,配置不够,rpc启动不起来。

一、简介

官网地址
GitHub: https://github.com/solana-labs
官网: https://solana.com
区块浏览器:https://explorer.solana.com/

二、验证节点要求

RPC节点,本教程使用的是阿里云的服务器 Ubuntu 20.04,32vCPU 128GiB内存,2GiB SSD,这是最低配了,低于这个配置可能RPC启动不起来。

三、安装 solana 工具

stable 可以指定为具体的版本,如v1.6.27也可以指定为stable/beta 或 edge

sh -c "$(curl -sSfL https://release.solana.com/stable/install)"

等安装完成,执行如下命令
export PATH="/root/.local/share/solana/install/active_release/bin:$PATH"

验证工具是否可用
solana --version

显示有版本信息则安装成功

连接到 Mainnet Beta 群集

solana config set --url https://api.mainnet-beta.solana.com

开发网
solana config set --url http://api.devnet.solana.com

测试网
solana config set --url https://api.testnet.solana.com

确认集群可以访问
solana transaction-count

四、生成身份信息

为您的验证节点创建身份密钥

solana-keygen new -o ~/validator-keypair.json

输入密码
查看身份公钥:
solana-keygen pubkey ~/validator-keypair.json

注意:”validator-keypair.json”文件也是您的 (ed25519) 私钥。需要将这个私钥备份好。

将solana配置设置为对以下所有命令使用验证节点密钥对
solana config set --keypair ~/validator-keypair.json

五、启动服务

启动服务有多种方式,可以在screen里面运行,也可以制作启动脚本运行

我们选择脚本运行

方法一(脚本启动) 不推荐-仅测试

root@solana:~# sudo vi solana-validator.sh
#!/bin/bash

solana-validator \
    --identity ~/validator-keypair.json \
    --vote-account ~/vote-account-keypair.json \
    --trusted-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2 \
    --trusted-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ \
    --trusted-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ \
    --trusted-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S \
    --no-untrusted-rpc \
    --ledger /data/validator-ledger \
    --rpc-port 8899 \
    --private-rpc \
    --no-port-check \
    --dynamic-port-range 8000-8010 \
    --entrypoint entrypoint.mainnet-beta.solana.com:8001 \
    --entrypoint entrypoint2.mainnet-beta.solana.com:8001 \
    --entrypoint entrypoint3.mainnet-beta.solana.com:8001 \
    --entrypoint entrypoint4.mainnet-beta.solana.com:8001 \
    --entrypoint entrypoint5.mainnet-beta.solana.com:8001 \
    --expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
    --wal-recovery-mode skip_any_corrupted_record \
    --limit-ledger-size\
    --log /data/solana-validator.log

方法二 (服务启动)

创建sol服务,并设置开机自启

  • sudo vi /etc/systemd/system/sol.service
  • sudo chmod 777 /etc/systemd/system/sol.service
[Unit]
Description=Solana Validator
After=network.target
Wants=solana-sys-tuner.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=xjzy
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/home/xjzy/.local/share/solana/install/active_release/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
ExecStart=/home/xjzy/.local/share/solana/install/active_release/bin/solana-validator

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now sol
systemctl start sol

开发网验证脚本

export SOLANA_METRICS_CONFIG="host=https://metrics.solana.com:8086,db=devnet,u=scratch_writer,p=topsecret"

开发网成功配置

root@solana:~# sudo vi solana-validator.sh
#!/bin/bash

solana-validator \
        --identity ~/validator-keypair.json \
        --vote-account ~/vote-account-keypair.json \
        --known-validator dv1ZAGvdsz5hHLwWXsVnM94hWf1pjbKVau1QVkaMJ92 \
        --known-validator dv2eQHeP4RFrJZ6UeiZWoc3XTtmtZCUKxxCApCDcRNV \
        --known-validator dv4ACNkpYPcE3aKmYDqZm9G5EB3J4MRoeE7WNDRBVJB \
        --known-validator dv3qDFk1DTF36Z62bNvrCXe9sKATA6xvVy6A798xxAS \
        --no-untrusted-rpc \
        --ledger /data/validator-ledger \
        --rpc-port 8899 \
        --private-rpc \
        --no-port-check \
        --no-snapshot-fetch \
        --dynamic-port-range 8000-8010 \
        --entrypoint entrypoint.devnet.solana.com:8001 \
        --entrypoint entrypoint2.devnet.solana.com:8001 \
        --entrypoint entrypoint3.devnet.solana.com:8001 \
        --entrypoint entrypoint4.devnet.solana.com:8001 \
        --entrypoint entrypoint5.devnet.solana.com:8001 \
        --expected-genesis-hash EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG \
        --wal-recovery-mode skip_any_corrupted_record \
        --limit-ledger-size \
        --log /data/solana-validator.log

测试网脚本

export SOLANA_METRICS_CONFIG="host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea"
sudo vi solana-validator.sh

#!/bin/bash

solana-validator \
        --identity ~/validator-keypair.json \
        --vote-account ~/vote-account-keypair.json \
        --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
        --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
        --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
        --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
        --no-untrusted-rpc \
        --ledger /data/validator-ledger \
        --rpc-port 8899 \
        --private-rpc \
        --no-port-check \
        --dynamic-port-range 8000-8010 \
        --entrypoint entrypoint.testnet.solana.com:8001 \
        --entrypoint entrypoint2.testnet.solana.com:8001 \
        --entrypoint entrypoint3.testnet.solana.com:8001 \
        --expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
        --wal-recovery-mode skip_any_corrupted_record \
        --limit-ledger-size \
        --log /data/solana-validator.log

测试网成功配置

#!/bin/bash

solana-validator \
    --identity ~/validator-keypair.json \
    --vote-account ~/vote-account-keypair.json \
    --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
    --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
    --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
    --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
    --no-untrusted-rpc \
    --ledger /data/validator-ledger \
    --rpc-port 8899 \
    --private-rpc \
    --no-port-check \
    --dynamic-port-range 8000-8010 \
    --entrypoint entrypoint.testnet.solana.com:8001 \
    --entrypoint entrypoint2.testnet.solana.com:8001 \
    --entrypoint entrypoint3.testnet.solana.com:8001 \
    --expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
    --wal-recovery-mode skip_any_corrupted_record \
    --limit-ledger-size \
    --log /data/solana-validator.log

测试网 - 配置2 待测试

#!/bin/bash

solana-validator \
        --identity ~/validator-keypair.json \
        --vote-account ~/vote-account-keypair.json \
        --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
        --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
        --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
        --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
        --only-known-rpc \
        --ledger /data/validator-ledger \
        --rpc-bind-address 45.61.164.13 \
        --rpc-port 8899 \
        --no-port-check \
        --dynamic-port-range 8000-8010 \
        --entrypoint entrypoint.testnet.solana.com:8001 \
        --entrypoint entrypoint2.testnet.solana.com:8001 \
        --entrypoint entrypoint3.testnet.solana.com:8001 \
        --expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
        --wal-recovery-mode skip_any_corrupted_record \
        --limit-ledger-size \
        --log /data/solana-validator.log

六、验证节点状态

查看端口


root@solana:~#  lsof -i:8899
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
solana-va 11967 root  116u  IPv4  54896      0t0  TCP *:8899 (LISTEN)


查看mainnet集群信息


curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.mainnet-beta.solana.com

curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.devnet.solana.com

curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.testnet.solana.com

输出信息中会包含我们自己的节点信息

后续就是等待快照同步了,可能需要较长一段时间来同步区块。

查看日志

solana logs



下面是启动日志
tail -f solana-validator.log

七、可能用到的启动命令

 --public-rpc-address <HOST:PORT>
    RPC address for the validator to advertise publicly in gossip. Useful for validators running behind a load balancer or proxy [default: use --rpc-bind-address / --rpc-port]

    验证者在gossip中公开广告的 RPC 地址。 对于在负载均衡器或代理后面运行的验证器很有用 [默认:使用 --rpc-bind-address / --rpc-port]

--rpc-bind-address <HOST>
    IP address to bind the RPC port [default: 127.0.0.1 if --private-rpc is present, otherwise use --bind-address]
    用于绑定 RPC 端口的 IP 地址 [默认值:127.0.0.1 如果存在 --private-rpc,否则使用 --bind-address]

--rpc-port <PORT>
    Enable JSON RPC on this port, and the next port for the RPC websocket
    在此端口上启用 JSON RPC,以及 RPC websocket 的下一个端口

--accounts-db-skip-shrink
    通过跳过收缩,可以更快地启动验证器。此选项用于测试期间。

--incremental-snapshots
    通过设置此标志启用增量快照。启用后,--snapshot-interval-slots将设置增量快照间隔。要设置完整快照间隔,请使用 --full-snapshot-interval-slots。

--minimal-rpc-api
    仅公开向其他节点提供快照所需的 RPC 方法

--only-known-rpc
    仅使用已知验证器的 RPC 服务

--private-rpc
    不要发布 RPC 端口供他人使用

--restricted-repair-only-mode
    不要发布导致验证器在有限范围内运行的 Gossip、TPU、TVU 或维修服务端口减少其对集群其余部分的暴露的容量。 --no-voting 标志是隐式的,当这个标志已启用

--rpc-scan-and-fix-roots
    在启动时验证块存储根并修复任何差距

--skip-poh-verify
    在验证器启动时跳过分类帐验证

--bind-address <HOST>
    绑定验证器端口的 IP 地址 [默认:0.0.0.0]

--dynamic-port-range <MIN_PORT-MAX_PORT>
    用于动态分配端口的范围 [默认值:8000-10000]

--entrypoint <HOST:PORT>
    在这个 gossip 入口点与集群会合

--expected-genesis-hash <HASH>
    要求创世有这个哈希

-gossip-host <HOST>
    Gossip DNS 名称或 IP 地址供验证器在 gossip 中做广告 [默认:ask --entrypoint,或 127.0.0.1 未提供 --entrypoint 时]

--gossip-port <PORT>
    验证器的 gossip 端口号

--rpc-port <PORT>
    在此端口上启用 JSON RPC,以及 RPC websocket 的下一个端口

--vote-account <ADDRESS>
    验证人投票账户公钥。如果未指定投票将被禁用。授权选民为帐户必须是 --identity 密钥对或带有 --authorized-voter 参数

--wait-for-supermajority <SLOT>
    处理完账本后,下一个槽是 SLOT,等到绝大多数股权在开始PoH之前的八卦

--wal-recovery-mode <MODE>
    恢复分类帐数据库预写日志的模式。 [可能的值:tolerance_corrupted_tail_records,绝对一致性、point_in_time、skip_any_corrupted_record]


如有更多需求的小伙伴可以关注博主!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/650531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony 实战开发——ArkUI中的线程和看门狗机制

一、前言 本文主要分析ArkUI中涉及的线程和看门狗机制。 二、ArkUI中的线程 应用Ability首次创建界面的流程大致如下&#xff1a; 说明&#xff1a; • AceContainer是一个容器类&#xff0c;由前端、任务执行器、资源管理器、渲染管线、视图等聚合而成&#xff0c;提供了生…

产品经理-流程图结构图(四)

1. 流程图 1.1 概念 为了达到特定的目标而进行的一系列有逻辑性的操作步骤&#xff0c;由两个及以上的步骤&#xff0c;完成一个完整的行为的过程&#xff0c;可称之为流程 1.2 产品经理为什么需要绘制流程图&#xff1f; 保证产品的使用逻辑合理顺畅向项目组其他成员清晰的…

3.5 四个子空间的维度

一、概述 这一节的主要定理是将秩与维度联系在一起。矩阵的秩就是主元的个数&#xff0c;子空间的维度是基向量的个数&#xff0c;我们计算出这两个数就可以得到秩与维度。 A A A 的秩揭露了四个基本子空间的维度。 四个子空间中&#xff0c;两个子空间来自 A A A&#xff0c…

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点&#xff1a;模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手&#xff0c;仅需要两两握手&#xff0c;也就是从42个握手开始&#xff0c;而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

jQuery事件导读+其它方法

jQuery 事件导读一、事件注册二、事件处理1.内容2.例子&#xff0c;微博绑定事件3.off解绑事件4.自动触发事件 三、事件对象 其他方法一、拷贝对象二、多库共存三、插件 事件导读 一、事件注册 单个事件叫注册&#xff0c;多个事件叫处理 二、事件处理 1.内容 2.例子&#…

每天五分钟深度学习框架pytorch:tensor张量的维度转换大全

本文重点 在深度学习中比较让人头疼的一点就是矩阵的维度,我们必须构建出符合神经网络维度的矩阵,只有将符合要求的矩阵放到神经网络中才可以运行神经网络,本节课程我们将学习以下tensor中维度的变化。 view和shape View和shape,这两个方法可以完成维度的变换操作,而且使…

Windows操作系统基本知识整理

目录 引言 一、Windows操作系统的发展历史 1.1 Windows 1.0到Windows 3.0 1.2 Windows 95到Windows Me 1.3 Windows NT到Windows 2000 1.4 Windows XP到Windows 7 1.5 Windows 8到Windows 10 二、Windows操作系统的核心组件 2.1 内核 2.2 文件系统 2.3 图形用户界面&…

Android 系统日志(Log) JNI实现流程源码分析

1、JNI概述 Java Native Interface (JNI) 是一种编程框架&#xff0c;使得Java代码能够与用其他编程语言&#xff08;如C和C&#xff09;编写的本地代码进行交互。JNI允许Java代码调用本地代码的函数&#xff0c;也允许本地代码调用Java代码的函数。下面是对JNI机制的详细概述…

kettle学习之表的输入输出

需求 把表A里的数据传送到表B中&#xff0c;在此之前&#xff0c;清空表B内的数据 表输入 执行SQL脚本 表输出

Qt 5前后调色板差异变化

Qt 5之前&#xff1a; QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Backgound, color...);Qt 5之后&#xff1a; 由原有的 Background 模式 更新为 Window 模式 QPalette palette;//调色板 设置背景颜色 palette.setColor(QPalette::Window, color..…

STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

一、模块资料 &#xff08;1&#xff09;模块简介 超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点。HC-SRO4是一款尺寸完全兼容老版本&#xff0c;增加UART和IIC功能的开放式超声波测距模块,默认条件下,软件…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

知识融合概述

文章目录 知识融合知识融合过程研究现状技术发展趋势 知识融合 知识融合的概念最早出现在1983年发表的文献中&#xff0c;并在20世纪九十年代得到研究者的广泛关注。而另一种知识融合的定义是指对来自多源的不同概念、上下文和不同表达等信息进行融合的过程认为知识融合的目标是…

新闻稿推广策略有哪些?建议收藏

新闻稿推广是一种有效的公关工具&#xff0c;它可以帮助企业或组织传递信息、提升品牌知名度、建立权威形象&#xff0c;并最终促进销售。新闻稿推广策略有哪些&#xff1f;接下来伯乐网络传媒就来给大家分享一下。 确定目标受众&#xff1a;在撰写新闻稿之前&#xff0c;明确你…

对比表征学习(二)Setence Embedding

参考翁莉莲的Blog&#xff0c;本章主要阐述句子嵌入&#xff08;sentence embedding&#xff09; 文本扩增 绝大部分视觉应用中的对比方法依赖于创造每个图像的增强版本&#xff0c;但是在句子扩增中会变得非常有挑战性。因为不同于图片&#xff0c;在扩增句子的同时非常容易改…

TPD-3W 系列——3W 1.5KVDC 隔离 宽范围输入,双隔离双输出 DC/DC 电源模块

TPD-3W系列产品是专门针对线路板上分布式电源系统中需要产生一组与输入电源隔离的双隔离双电源的应用场合而设计。该产品适用于&#xff1a;1&#xff09;输入电源的电压变化范围≤2&#xff1a;1 &#xff1b;2&#xff09;输入输出之间要求隔离≤1500VDC&#xff1b;3&#x…

从零开始搭建一个SpringBoot项目

目录 Spring BootSpring Boot 项目开发环境1、快速创建SpringBoot项目2、pom.xml 添加 Meavn 依赖3、配置application.yml4、验证数据库是否连接成功5、配置 Druid 数据源 Spring Boot 整合 MyBatis1、准备依赖2、application-dev.yml 配置3、启动类添加Mapper接口扫描器4、设置…

【C++】:vector容器的基本使用

目录 &#x1f352;1&#xff0c;vector的介绍&#x1f352;2&#xff0c;vector的使用&#x1f42f;2.1 vector的构造&#x1f981;2.2 vector iterator 的使用&#x1f33d;2.3 vector 空间增长问题&#x1f353;2.4 vector 增删查改&#x1f42f;2.5 vector 访问及遍历&…

2024新数据库入门教程

1.官网下载MySQL 下载Mysql链接: 点击下载mysql 下载完成后解压到某一个文件夹&#xff08;记住这个路径&#xff0c;一会要用到&#xff09; 2.配置初始化文件my.ini 在根目录下创建一个txt文件&#xff0c;名字叫my&#xff0c;文件后缀为ini 以下代码除安装目录和数…

[STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、实现步骤 1.STM32CUBEMX配置 2.Keil工程程序设计 三、结语 一、前言 本文通过STM32CUBEMX实现对ADC的数据采集和滤波操作&#xff0c;帮助各位开发者完成与模拟量输入的采集工作。 二、实现步骤 1.STM32CUBEMX配置 以STM32F103C8T6为例&#xff0c;打开S…