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

news2024/11/17 3:24:27

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

部署 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]


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChAMP加载肺癌数据和分析甲基化数据流程

ChAMP加载肺癌数据和分析甲基化数据流程 1. 加载数据分析 #!/bin/evn R rm(list = ls()) library(rstudioapi) current_script_path <- getActiveDocumentContext()$path# 将路径转换为当前目录 current_directory <- dirname(current_script_path)# 设置当前工作目录 …

代码随想录算法训练营day14|二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代法

二叉树的递归遍历 首先需要明确的一点是&#xff0c;前序中序和后序在二叉树的递归遍历中的区别仅在于递归函数中操作的顺序&#xff0c;前序是在遍历一个节点的左右子树前进行操作&#xff0c;中序是在遍历一个节点的左子树后进行操作再遍历右子树&#xff0c;而后序是在遍历…

【DevOps】Elasticsearch在Ubuntu 20.04上的安装与配置:详细指南

目录 一、ES 简介 1、核心概念 2、工作原理 3、 优势 二、ES 在 Ubuntu 20.04 上的安装 1、安装 Java 2、下载 ES 安装包 3、创建 ES 用户 4 、解压安装包 5、 配置 ES 6、 启动 ES 7、验证安装 三、ES 常用命令 1、创建索引 2、 插入文档 3、查询文档 四、ES…

Weblogic SSRF漏洞 [CVE-2014-4210]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/svKal docker未能成功启动redis请参考 http://t.csdnimg.cn/5osP3 漏洞原理 Weblogic的uddi组件提供了从其他服务器应用获取数据的功能并且没有对目标地址做过滤和限制&#xff0c;造成了SSRF漏洞&#xff0c;利用该漏洞可以向内…

git工作流程

以财务开发为例子&#xff1a; 1. 新建分支 1.1. upstream新建分支&#xff1a;finance-feature 1.2. origin新建对应分支&#xff1a;finance-feature 1.3 新建本地分支 git branch finance-feature 注&#xff1a; 同步远程分支&#xff1a;git fetch upstream feature…

【Flutter】KeyAnimatedList组件

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月28日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

微软联手清华,AI注释让文本到图像生成更符合人类偏好

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 摘要 本研究展示了利用人类偏好数据集来精细调整文本到图像生成模型的潜力&#xff0c;增强了生成图像与文本提示之间的一致性。尽管取得了进展&#xff0c;现有的人类偏好数据集要么构建成…

[Algorithm][动态规划][简单多状态DP问题][买卖股票的最佳时机 III][买卖股票的最佳时机 Ⅳ]详细讲解

目录 1.买卖股票的最佳时机 III1.题目链接2.算法原理详解3.代码实现 2.买卖股票的最佳时机 IV1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机 III 1.题目链接 买卖股票的最佳时机 III 2.算法原理详解 注意&#xff1a;本题为了便于初始化&#xff0c;有较多细节服…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

如果创办Google

本文是一篇演讲稿&#xff0c;来自于《黑客与画家》一书的作者保罗*格雷厄姆&#xff0c;被称为硅谷创业之父。这是他为14至15岁的孩子们做的一次演讲&#xff0c;内容是关于如果他们将来想创立一家创业公司&#xff0c;现在应该做些什么。很多学校认为应该向学生们传授一些有关…

【DrissionPage爬虫库 1】两种模式分别爬取Gitee开源项目

文章目录 DrissionPage爬虫库简介1. 浏览器操控模式&#xff08;类似于游戏中的后台模拟鼠标键盘&#xff09;2. 数据包收发模式&#xff08;类似于游戏中的协议封包&#xff09; 实战中学习需求&#xff1a;爬取Gitee开源项目的标题与描述解决方案1&#xff1a;用数据包方式获…

【常用的队列总结】

文章目录 队列的介绍Queue队列的基本概念与操作队列的基本概念 常见的队列介绍非阻塞队列LinkedList:ArrayDeque:PriorityQueue: 阻塞队列ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue DelayQueueSynchronousQueue 队列的介绍 Queue队列的基本概念与操作 在 …

Linux用docker安装ElasticsearchSpringBoot整合ES

一. 部署Elasticsearch 1. docker查询docker容器中的es docker search elasticsearch 2. 安装&#xff08;PS&#xff1a;查看自己的springBoot的版本号 对应的es版本安装&#xff09; docker pull elasticsearch:7.6.23. 查看已安装的docker镜像 docker images4. 创建挂…

【会议征稿,SPIE独立出版】第五届计算机视觉和数据挖掘国际学术会议(ICCVDM 2024)

第五届计算机视觉与数据挖掘国际学术会议&#xff08;ICCVDM 2024&#xff09;将于2024年7月19-21日在中国长春举行。此前&#xff0c;ICCVDM系列会议于2020年在中国西安、2021年在中国长沙&#xff08;线上&#xff09;、2022年在中国呼伦贝尔&#xff08;线上线下&#xff09…

【Java】JavaSE概述

1、简介 Java SE&#xff08;Java Platform, Standard Edition&#xff09;是Java技术的核心平台&#xff0c;它提供了Java编程语言、Java虚拟机&#xff08;JVM&#xff09;以及Java核心类库和API。Java SE主要用于开发和部署桌面应用程序、服务器应用程序、命令行工具和嵌入…

DBeaver怎么将编辑栏内容放大

1、窗口–》编辑器–》放大 2、ctrl 3、页面结果展示

前端大师-高级Web开发测验

目录 前言 1.按正确的执行顺序排列脚本 2.哪些说法是正确的&#xff1f;&#xff08;D&#xff09; 3.填写正确的术语 4.程序的输出 5.将资源提示与其定义匹配 6.以下程序的输出是&#xff1f; 7.将PerformanceNavigationTimings按正确的顺序排列 8.将缓存指令与其定义…

【动手学PaddleX】谁都能学会的基于迁移学习的老人摔倒目标检测

本项目使用PaddleX搭建目标检测模块&#xff0c;在一个精选的数据集上进行初步训练&#xff0c;并在另一个老年人跌倒检测的数据集上进行参数微调&#xff0c;实现了迁移学习的目标检测项目。 1.项目介绍 迁移学习是非常有用的方法&#xff0c;在实际生活中由于场景多样&…

【ai】pycharm设置软件仓库编译运行基于langchain的chatpdf

联想笔记本 y9000p创建python工程: 使用langchain支持openai的向量化embedding安装软件包 发现没有openai ,添加软件仓库打开工具窗口 点击设置

osg的了解

osg开发配置与第一个osg程序-CSDN博客 #include <osg/Geode> #include <osg/ShapeDrawable> #include <osgViewer/Viewer> #include <iostream>int main(int argc, char** argv) {std::cout << "Hello, osg!" << std::endl;osg:…