当前位置: 首页 > news >正文

Solana: 逐行解读 solana-test-validator 输出, 本地节点日志完全指南

大家好,我在学习Solana开发!当我们满怀期待地启动本地测试验证节点,准备在Solana的世界里大展拳脚时,终端上滚动的日志让我们既兴奋又有点儿懵?

别担心,这完全正常!那些不断跳动的数字和看起来很“黑话”的术语,其实是我们的本地Solana网络正在辛勤工作的证明。今天我们一起逐行解读solana-test-validator的输出,彻底搞懂这些信息背后的含义。
在这里插入图片描述

引言:我们的第一个Solana“沙盒”

首先,我们成功运行了solana-test-validator! 我们启动的其实是一个功能齐全、在我们电脑上独立运行的单节点Solana集群。 这就像拥有了一个私人的区块链“沙盒”,我们可以在里面自由地部署程序、发送交易、测试逻辑,而不用担心会影响公共的测试网或主网,更没有网络延迟和请求限制的烦恼。

现在,让我们来解密终端上的那些输出信息。

solana-test-validator
Ledger location: test-ledger
Log: test-ledger/validator.log
⠈ Initializing...
Identity: 8pGSwNr8jWXgGGpsT2EPC4CSTsefuJaX3oHBPmqsn2yT
Genesis Hash: Hv7RVEoUjwmA4wvLjuVDj6XM5FWZBJLL9rpKHaCsr65i
Version: 2.2.21
Shred Version: 36540
Gossip Address: 127.0.0.1:1024
TPU Address: 127.0.0.1:1027
JSON RPC URL: http://127.0.0.1:8899
WebSocket PubSub URL: ws://127.0.0.1:8900
⠴ 00:00:24 | Processed Slot: 48 | Confirmed Slot: 48 | Finalized Slot: 17 | Full Snapshot Slot: - | Incremental Snapshot Slot: - | Transactions: 47 | ◎499.99976500

核心概念解读:我们的节点身份与连接信息

在我们看到不断滚动的状态行之前,程序会先输出一串固定信息,这相当于我们本地节点的“身份卡”和“联系方式”。

  • Ledger location & Log: 这两个路径非常直观,test-ledger是我们的本地账本数据存放的位置,所有区块链的状态和交易历史都在这里。validator.log则是验证器运行的详细日志文件,遇到问题时可以来这里寻找线索。
  • Identity: 这是我们本地验证节点的唯一身份标识(公钥)。在多节点的网络中,其他节点通过这个地址来识别我们的节点。
  • Genesis Hash: 创世哈希,可以理解为这条链的“出生证明”。网络中的所有节点都必须拥有相同的创世哈希,才能确保它们属于同一条区块链。
  • Version: 我们当前使用的Solana CLI版本号。
  • Shred Version: “Shred”是Solana中一个很核心的概念,它指的是一个区块(Block)被分割成的最小数据单元。 为了提高网络传输效率,一个完整的区块会被打散成许多个Shred,在验证者之间传递。而Shred Version就是这些数据碎片的格式版本号,确保网络中的所有节点都能正确解析彼此发送的数据。
  • Gossip Address: “Gossip”(八卦)协议是Solana节点之间互相发现和同步信息的关键。 节点们会像“传闲话”一样,不断地将自己知道的集群信息(比如谁是领导者、网络状态等)随机广播给其他节点。这个地址就是我们的节点用来进行“八卦”交流的端口。
  • TPU Address (Transaction Processing Unit): 这是我们的节点专门用来接收交易的“高速通道”。 当我们要发送一笔交易时,为了最快被处理,我们应该直接把它发送到当前领导者(Leader)的TPU地址。
  • JSON RPC URL & WebSocket PubSub URL: 这两个URL是我们与本地节点交互的主要入口。无论是查询账户余额、发送交易,还是订阅链上事件,我们的应用程序或客户端工具都会连接这两个地址。RPC用于请求-响应模式的交互,而WebSocket则用于实时订阅通知。

动态数据流:理解Solana的“心跳”

接下来是最核心的部分,那一行不断变化的数据,它实时展示了区块链的进展状态。
在这里插入图片描述

Slot的状态:从“已处理”到“已敲定”

在Solana中,时间被切分成一个个Slot(插槽),每个Slot大约持续400毫秒,会有一个指定的领导者(Leader)负责打包交易、生成区块。 我们看到的Processed SlotConfirmed SlotFinalized Slot代表了交易确认的不同阶段,这在区块链领域被称为“Commitment Levels”(承诺等级)。

  • Processed Slot (已处理): 这是最新的一个Slot,领导者刚刚处理完并生成了区块。 这个状态响应最快,但理论上存在这个区块未被网络大多数节点接受而“作废”的微小可能性。
  • Confirmed Slot (已确认): 这个Slot中的区块已经被超过三分之二(~66%)的验证者投票确认。 达到这个状态,意味着交易被网络“乐观地”接受了,回滚的可能性极低。对于大部分应用来说,这是一个可靠的确认状态。
  • Finalized Slot (已敲定/最终确定): 这是最高级别的确认。一个区块被标记为Finalized,意味着它不仅被超过三分之二的验证者确认,而且后续又堆叠了足够多的确认区块(通常是32个)。 到了这个地步,我们可以认为这笔交易是100%不可逆转的,就像被刻在了石头上一样。

实用建议:在开发应用时,我们可以根据业务的安全性要求选择不同的承诺等级。例如,显示一个“交易发送成功”的即时通知可以用Processed;更新用户账户余额等重要操作,最好等待Confirmed;而对于涉及大量资金的清算业务,则必须等到Finalized

Snapshot(快照):快速启动的秘密武器
  • Full Snapshot Slot & Incremental Snapshot Slot: 想象一下,如果一个新节点要加入网络,难道要从创世区块开始,一个一个地同步数以亿计的区块吗?当然不是!Snapshot(快照)就是为了解决这个问题。

    • Full Snapshot(全量快照): 这是一个在特定Slot高度下,整个账本(所有账户数据)的完整备份。
    • Incremental Snapshot(增量快照): 它只包含自上一个全量快照以来发生变化的账户数据。

    我们的测试验证器会定期生成快照。当节点重启时,它可以直接加载最新的快照来恢复状态,然后只同步快照之后的区块,大大加快了启动速度。在输出中,-表示尚未生成该类型的快照。

交易与余额
  • Transactions: 这个数字显示了从节点启动到现在,总共处理了多少笔交易。
  • ◎499.99976500: 这里的符号代表SOL。这个数字显示的是我们默认钱包地址中的SOL余额。solana-test-validator启动时,默认会给我们空投大量的测试用SOL(通常是500个),方便我们进行测试。随着我们发送交易支付手续费,这个余额会慢慢减少。

总结与实用技巧

现在,当我们再次看到solana-test-validator的输出时,我们应该不再感到陌生了。我们看到的是一个微型但完整的Solana网络在我们眼前运行的实时脉搏。

给新手的实用技巧:

  1. 获取测试币: 如果我们的测试币用完了,可以打开新的终端,使用solana airdrop 10命令来给自己空投更多的测试SOL。
  2. 查看日志: 使用solana logs命令,可以实时监控链上程序的日志输出,这在调试智能合约时非常有用。
  3. 重置网络: 如果我们想从一个全新的状态开始,可以停止验证器,删除test-ledger文件夹,然后重新启动solana-test-validator。或者,在启动时加上--reset参数。
  4. 连接钱包: 我们可以配置Phantom或其他支持本地网络的钱包,将其网络设置指向http://127.0.0.1:8899,来与我们的本地节点进行可视化交互。

希望这篇指南能帮助大家更好地理解Solana的本地测试环境。放手去探索、去实验吧!这片属于我们的“沙盒”是学习和创新的最佳场所。

http://www.dtcms.com/a/309593.html

相关文章:

  • oracle备库主机断电重启后IO异常报错
  • 【C#学习Day16笔记】XML文件、 事件Event 、Json数据
  • Sqlserver备份恢复指南-完整备份恢复
  • 从零到英雄:掌握神经网络的完整指南
  • Qt Quick 自定义组件开发
  • 江协科技STM32 11-4 SPI通信外设
  • Android SDK 版本差异与兼容方案:从适配到实践
  • gitlab 开发人员无法创建分支,管理员配置分支权限
  • flutter-boilerplate-project 学习笔记
  • 嵌入式学习笔记-MCU阶段--DAY09
  • STM32-ESP8266Wi-Fi模块使用USART实现通信/创建AP和STA模式配置教程(寄存器版)
  • 从0开始学习R语言--Day64--决策树回归
  • 流式编程的中间操作
  • 机器学习sklearn:随机森林的决策树
  • 低通滤波器的原理以及作用
  • C# 引用外部项目
  • 切比雪夫不等式
  • 网页从点击到显示:前端开发视角下的旅程
  • 在SQL SERVER 中如何用脚本实现每日自动调用存储过程
  • 大模型开发框架LangChain之构建知识库
  • 高速公路桥梁安全监测系统解决方案
  • 技术栈:基于Java语言的搭子_搭子社交_圈子_圈子社交_搭子小程序_搭子APP平台
  • 安全专家发现利用多层跳转技术窃取Microsoft 365登录凭证的新型钓鱼攻击
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
  • 最新docker国内镜像源地址大全
  • AttributeError: ChatGLMTokenizer has no attribute vocab_size
  • 强反光干扰下识别率↑89%!陌讯多模态融合算法在烟草SKU识别的实战解析
  • MySQL分析步
  • U-Net vs. 传统CNN:为什么医学图像分割需要跳过连接?