solana粗略的学习总结

最近在研究solana 的东西,简单做一下总结,很久没有写文章了。写的不对的地方欢迎评论区或者私信。及时改正。

Solana 架构概述

1.0 核心模块

Solana 的架构包括以下核心模块:

  • Proof of History (PoH):通过时间排序机制优化交易排序和共识过程,减少网络同步带来的延迟。
  • Leader 和 Validator 节点:Leader 负责生成区块,Validator 节点验证区块并参与投票确认。
  • Turbine 数据传播协议:基于分片的树形传播协议,提升了区块数据传输的效率。
  • Sealevel 并行执行引擎:分析交易之间的依赖性,实现无锁并行处理。
  • Cloudbreak 数据存储系统:通过分片存储账本状态,提高了状态存取的随机读写性能。

2.0 Solana 核心技术详解

2.1 Proof of History (PoH)

PoH 是 Solana 的时间排序核心机制,通过递归哈希生成时间序列,为交易排序提供加密保证。

原理概述

  • 连续哈希链:通过一个快速的哈希函数(如 SHA-256)递归计算,生成不可篡改的时间序列。
  • 排序优化:验证者只需检查哈希链的完整性即可验证交易发生的顺序,而无需复杂的全网广播和同步。
  • 减少等待时间:PoH 的时间戳为每笔交易提供了唯一且确定的时间标记,优化了区块链的排序效率。

2.2 Solana 的数据传输优化

Solana 的高性能网络协议主要依赖以下技术:

2.2.1 UDP 传输

Solana 使用 UDP 代替传统的 TCP 协议作为底层数据传输协议。UDP 的无连接特性适合高性能系统,具备以下优势:

  • 低延迟:避免了 TCP 握手和连接建立过程带来的开销。
  • 高吞吐量:支持大规模的并发数据传输。
  • 自定义控制:Solana 实现了自己的流量控制和错误恢复机制,以补充 UDP 的简单特性。
2.2.2 Reed-Solomon 数据校验

Solana 在数据传输中采用 Reed-Solomon 校验码进行数据完整性校验。它的主要功能是通过冗余数据的引入实现错误检测和恢复:

  • 数据完整性保障:即使某些数据包丢失,也能通过校验码进行数据恢复。
  • 高效传播:结合 Turbine 分片协议,减少整体网络的重复传输负载。
    以下是 Turbine 数据传播的架构图,展示了分片和树形传播的过程:

生成数据分片 1 生成数据分片 2 生成校验码 发送分片 1 发送分片 1 发送分片 2 发送分片 2 校验分片完整性 校验分片完整性 转发分片 1 转发分片 1 转发分片 2 转发分片 2 Leader 节点 Shard 1 Shard 2 Reed-Solomon 校验数据 Validator 1 Validator 2 Validator 3 Validator 4 下一层 Validator 下一层 Validator 下一层 Validator 下一层 Validator

2.3 Turbine 数据传播协议

Turbine 是 Solana 高效的区块数据传播协议,结合了分片和树形传播的理念。

工作流程

  1. 分片:Leader 节点将区块切分成若干小数据块(Shards),每个分片携带部分原始数据和校验信息。
  2. 树形传播:每个节点只需将数据发送给部分 Validator,而不是全网广播。通过多层传播,所有节点最终都能收到完整的区块数据。
  3. 数据恢复:如果某些数据丢失,可以通过 Reed-Solomon 校验码进行恢复,无需重新请求整个区块。

2.4 Sealevel 并行执行引擎

Sealevel 是 Solana 智能合约的执行引擎,通过分析交易的账户依赖性,实现无锁并行处理。

执行优化

  • 依赖性分析:通过静态分析每笔交易的账户读写依赖,判断它们是否可以并行执行。
  • 批次执行:将互相独立的交易分组,并行执行多个交易组,大幅提升处理能力。
    以下是并行化的示意流程:
  1. 确定交易的依赖关系。
  2. 划分独立的批次。
  3. 并行处理批次,减少执行瓶颈。

3.0 Solana 的共识机制

Solana 的共识机制结合了 Proof of Stake (PoS) 和 Proof of History (PoH),实现了高效且低能耗的区块确认流程。

3.1 Slot 和区块生成

  • Slot 时间段:每个 Slot 是一个固定的时间间隔,由指定的 Leader 处理交易并生成区块。
  • 区块排序:Leader 使用 PoH 时间戳为交易排序,并生成区块提交给 Validator 节点验证。
    在 Solana 的架构中,Slot 和 Epoch 是关键的时间单位,它们直接决定了区块生成的时间安排和 Leader 的轮值。以下详细解析 Slot 的时间定义、Epoch 的周期,以及 Leader 如何确定。
3.1.1 Slot 的持续时间
  • Solana 的默认 Slot 持续时间是 400 毫秒。
  • 理论上,网络每秒可以生成 2.5 个区块(即每 400 毫秒生成一个区块)。
  • 高吞吐量来源:多个 Slot 可以在不同的节点上并行处理,因此 Solana 的吞吐量远远高于传统区块链。
3.1.2 Epoch 的时间定义
  • Epoch 是一组连续 Slot 的集合,用于组织 Leader 的轮换和质押奖励的结算。
  • 在每个 Epoch 开始时,系统会根据质押分布重新计算 Leader Schedule(即 Slot 到 Leader 的映射)。
  • Epoch 持续时间是可配置的,通常为 432,000 Slots(约 2 天)。
  • 一个完整的 Epoch 结束后,系统会根据最新的网络状态重新分配下一个 Epoch 的 Leader。

3.2. Leader 是如何确定

3.2.1 基于质押的 Leader 选举机制

Solana 使用 Proof of Stake (PoS) 确定每个 Slot 的 Leader,主要规则如下:

  1. 质押权重:
  • 每个 Validator 根据质押的 Token 数量获得一定的投票权重。
  • 权重越高,被选为 Leader 的概率越大。
  1. 随机性:
  • Leader 的分配需要一定的随机性,防止权重高的节点连续当选,造成中心化。
  • Solana 使用 Leader Schedule模块来选出leader。
  1. 确定性:
  • 通过计算,系统在 Epoch 开始时预先生成整个 Epoch 的 Leader Schedule。
  • 每个 Slot 都会有明确的 Leader,所有 Validator 都能预测当前的 Leader。
  1. Leader 的切换机制
    当 Slot 结束时,系统会切换到下一个 Slot 的 Leader:
  2. 无缝切换:
  • 下一个 Slot 的 Leader 会在当前 Slot 结束前做好准备,接收并验证来自前一个 Slot 的交易和区块。
3.2.2 容错机制:
  • 如果当前 Slot 的 Leader 无法按时生成区块(例如宕机或延迟过高),Validator 将跳过该 Slot,由下一个 Slot 的 Leader 继续处理交易。
  • 这种机制确保了网络的容错性,即使某些节点无法工作,也不会影响整个网络的运行。
    Slot 和 Leader 的图示
    以下是 Slot 和 Leader 之间的关系图示,展示了多个 Slot 的 Leader 轮换过程:

Epoch Leader 1 Leader 2 Leader 3 Leader 4 Leader 5 Slot 2 Slot 1 Slot 3 Slot 4 Slot 5 Validator A Validator B Validator C Validator A Validator D

  • 每个 Slot 分配一个独立的 Leader。
  • Validator A 被分配到多个 Slot,但不会连续当选。
    Solana 针对质押金额设计了灵活的动态调整机制,确保网络的稳定性和公平性:
  1. Epoch 切换时更新:
  • Solana 每个 Epoch 开始时都会重新生成 Leader Schedule。
  • 系统会根据最新的质押状态重新计算每个 Validator 的质押权重。
  1. Slot 分配调整:
  • 如果 Validator 的质押金额减少,在新的 Schedule 中分配到的 Slot 会减少。
  1. Leader Schedule 动态更新:根据最新质押权重重新分配 Slot,减少低质押节点的影响。
  • 投票权重调整:质押减少直接降低节点的共识权重。
  • 解锁机制:质押减少需要经历一个周期,防止突发变化影响网络安全。
相关推荐
南宫生3 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__3 小时前
Web APIs学习 (操作DOM BOM)
学习
数据的世界015 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐5 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO8 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A8 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒8 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash39 小时前
提升专业素养的实用指南
学习·职场和发展
1 9 J9 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
6.9411 小时前
Scala——身份证号码查询籍贯
学习·scala