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/bashsolana-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/bashsolana-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/bashsolana-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/bashsolana-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/bashsolana-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.comcurl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getClusterNodes"}' http://api.devnet.solana.comcurl -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.mzph.cn/news/842493.shtml

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

相关文章

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化!

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文提出了一种使用领域特定编码器来快速将文本到图像模型适配到新领域的方案。这种被称为基于编码器的领域微调 (E4T) 的方法&#xff0c;专…

【Linux】使用pip3安装pexpect,解决报错:the ssl module in Python is not available

pip3是python3的包管理工具&#xff0c;安装、卸载、更新等管理python包。 pexpect是其中一个python库&#xff0c;用于自动化与终端交互。 centos7使用pip3安装pexpect&#xff0c;报错&#xff1a; pip3 install pexpect 原因&#xff1a;使用python3解释器导入ssl库检查ss…

分布式事务解决方案(最终一致性【TCC解决方案】)

最终一致性分布式事务概述 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保持一致&#xff0c;查询任意节点的数据都能得到最新的数据结果&#xff0c;这就导致在分布式场景&#xff0c;尤其是高并发场景下&#xff0c;系统的性能受到了影响。而最终一致性分布式…

第十七届全国大学生信息安全竞赛创新实践能力赛初赛部分复现

Misc 神秘文件 1.根据提示信息&#xff0c;均需要从ppt中提取信息 2.在ppt的属性中发现一串密文和key&#xff0c;解密之后得到第一部分&#xff0c;根据提示Bifid chipher&#xff0c;为双歧密码解密&#xff0c;使用Bifid Cipher Decode解码 3.在第五张幻灯片&#xff0c;…

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Midjourney应用场景、特点、生成图片带来影响

Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人&#xff0c;旨在提供多领域的智能对话服务。本文主要介绍Midjourney的应用场景、功能特点、图片生成后可以做什么&#xff1f; 一、Midjourney应用场景 Midjourney的应用场景相当广泛&#xff0c;以下是一些主要的适用…

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环&#xff1f; 最常见的方法就是利用快慢指针&#xff0c;快指针追加慢指针&#xff0c;当二者相等的时候即可判断链表带环 其实现的代码如下&#xff1a; bool hasCycle(struct ListNode*head) { s…

nuxt2:自定义指令 / v-xxx / directives / 理解 / 使用方法 / DEMO

一、理解自定义指令 在 vue 中提供了一些对于页面和数据更为方便的输出&#xff0c;这些操作就叫做指令&#xff0c;以 v-xxx 表示&#xff0c;比如 html 页面中的属性 <div v-xxx ></div>。自定义指令很大程度提高了开发效率&#xff0c;提高了工程化水平&#x…

通过键值对访问字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;如果想将字典的内容输出也比较简单&#xff0c;可以直接使用print()函数。例如&#xff0c;要想打印dictionary字典&#xff…

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …

【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL

论文&#xff1a;IncSQL: Training Incremental Text-to-SQL Parsers with Non-Deterministic Oracles ⭐⭐⭐ ICLR 2019&#xff0c;arXiv:1809.05054, Microsoft Research 一、论文速读 本文提出了 IncSQL&#xff0c;一个使用 Non-Deterministic Oracles 思路的增量式 Text…

[[nodiscard]]--c++17

作用 用于标记某个函数或者类的成员函数的返回值需要处理。 被标记的函数和类的函数被调用&#xff0c;但是返回值没有接收的时候&#xff0c;编译器会warning. 标记函数 #include <iostream>[[nodiscard]] int square(int x) {return x * x; }int main() {// 注意&am…

C++青少年简明教程:switch语句

C青少年简明教程&#xff1a;switch语句 在C中&#xff0c;switch语句用于基于一个表达式的值来执行不同的代码块。这个表达式通常是一个整数类型&#xff08;如int&#xff0c;char&#xff0c;或枚举类型&#xff09;&#xff0c;并且case标签必须是整数常量表达式。 语法格…

香橙派Kunpeng Pro测评:他给的实在太多了

文章目录 一、开箱环节1、包装配置2、开发板包装3、开发板3.1、开发版正面3.2、开发板背面 二、硬件配置1、硬件配置清单 2、配置图解 三、开机~启动&#xff01;1、运行系统1.1、外设配置1.2、系统启动1.3、官方教程 2、openEuler系统概览 四、系统测试1、性能测试1.1、安装sy…

漫步者x1穷鬼耳机双耳断连

困扰了我两天&#xff0c;终于有时间解决这个问题了&#xff0c;查看了一堆都是别的型号。怎么没人用这个啥按键都没有的耳机QAQ&#xff0c;幸好给我找到了说明书&#xff0c;啊哈哈&#xff01; 说明书地址

堆结构知识点复习——玩转堆结构

前言:堆算是一种相对简单的数据结构&#xff0c; 本篇文章将详细的讲解堆中的知识点&#xff0c; 包括那些我们第一次学习堆的时候容易忽略的内容&#xff0c; 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…

电脑找不到opencl.dll原因分析及5种详细的解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll”。这通常意味着计算机中缺少或损坏了与OpenCL&#xff08;开放计算语言&#xff09;相关的动态链接库文件。OpenCL允许应用程序利用图形处理器&#xff08;GPU&#xff…

【问题记录】QT“类型强制转换“:无法从“ATL::CString“转换为“LPCWSTR“

一&#xff0c;问题现象 环境&#xff1a;VS2019QT 报错提示&#xff1a;“类型强制转换”&#xff1a;无法从"ATL::CString"转换为"LPCWSTR" 二&#xff0c;解决方法 打开项目属性&#xff0c;设置字符集&#xff0c;如下所示&#xff1a;

BFS解决最短路问题(详解)

目录 BFS简介 && 框架&#xff1a; 一.二叉树的最小深度 二&#xff1a;迷宫中里入口最近的出口&#xff1a; 三.最小基因变化: 四&#xff1a;单词接龙&#xff1a; ​五&#xff1a;为高尔夫比赛砍树&#xff1a; BFS简介 && 框架&#xff1a; 说到BFS…

动态规划-卡特兰数

不同的二叉搜索树&#xff08;96&#xff09; 题目描述: 状态表示: 建立一维数组dp&#xff0c;使用dp[i]来表示i个节点时有的二叉搜索树种类。 状态转移方程: 因为dp[i]表示有i个节点&#xff0c;我们设置一个循环&#xff0c;循环下标为j&#xff0c;此时j代表第几个节点为…