Solana 60 天课程

2025年02月27日更新 89 人订阅
原价: ¥ 66 限时优惠
专栏简介 开始 Solana - 安装与故障排除 Solana 和 Rust 中的算术与基本类型 Solana Anchor 程序 IDL Solana中的Require、Revert和自定义错误 Solana程序是可升级的,并且没有构造函数 Solidity开发者的Rust基础 Rust不寻常的语法 Rust 函数式过程宏 Rust 结构体与属性式和自定义派生宏 Rust 和 Solana 中的可见性与“继承” Solana时钟及其他“区块”变量 Solana 系统变量详解 Solana 日志、“事件”与交易历史 Tx.origin、msg.sender 和 onlyOwner 在 Solana 中:识别调用者 Solana 计算单元与交易费用介绍 在 Solana 和 Anchor 中初始化账户 Solana 计数器教程:在账户中读写数据 使用 Solana web3 js 和 Anchor 读取账户数据 在Solana中创建“映射”和“嵌套映射” Solana中的存储成本、最大存储容量和账户调整 在 Solana 中读取账户余额的 Anchor 方法:address(account).balance 功能修饰符(view、pure、payable)和回退函数在 Solana 中不存在的原因 在 Solana 上实现 SOL 转账及构建支付分配器 使用不同签名者修改账户 PDA(程序派生地址)与 Solana 中的密钥对账户 理解 Solana 中的账户所有权:从PDA中转移SOL Anchor 中的 Init if needed 与重初始化攻击 Solana 中的多重调用:批量交易与交易大小限制 Solana 中的所有者与权限 在Solana中删除和关闭账户与程序 在 Anchor 中:不同类型的账户 在链上读取另一个锚点程序账户数据 在 Anchor 中的跨程序调用(CPI) SPL Token 的运作方式 使用 Anchor 和 Web3.js 转移 SPL Token Solana 教程 - 如何实现 Token 出售 基础银行教程 Metaplex Token 元数据工作原理 使用Metaplex实施代币元数据 使用 LiteSVM 进行时间旅行测试 Solana Token-2022 标准规范 生息代币第一部分 计息代币第二部分 Solana 指令自省 Solana 中的 Ed25519 签名验证 Solana - Switchboard 预言机使用 原生Solana:程序入口与执行 原生 Solana :读取账户数据 原生 Solana :Borsh 序列化 原生 Solana:使用 invoke 和 invoke signed 进行跨程序调用 原生 Solana :创建存储账户 (一) 原生 Solana:创建存储账户 二 原生 Solana: 函数分发 原生 Solana:关键安全检查 Rust 程序到 SBF 编译 sBPF 虚拟机和指令集介绍 跟踪 sBPF 指令执行和计算成本 Solana 程序执行与输入序列化 指令处理器和运行时设置 sBPF 内存布局和寄存器约定 使用 sBPF 汇编读取 Solana 指令输入 Solana 系统调用:sBPF 汇编中的日志记录

sBPF 虚拟机和指令集介绍

本文介绍了Solana的sBPF虚拟机及其指令集。它阐述了sBPF作为基于eBPF的寄存器式虚拟机架构,详细描述了其11个寄存器的约定用途以及各类操作码(如算术、逻辑、数据移动、控制流和内存操作)。文章旨在帮助读者理解Solana程序中SBF指令的执行方式。

进入 模块 8

正如 计算单元教程 中所讨论的,Solana 程序调用消耗的计算单元等于执行的 SBF (Solana Bytecode Format) 指令数量加上任何系统调用的运行时成本。本文深入探讨了 SBF 指令集,并演示了如何使用执行跟踪和 agave-ledger-tool 来分析这些指令。

从 Rust 到 SBF 教程中我们了解到,Solana 程序会编译成 SBF (Solana Bytecode Format),并在 sBPF 虚拟机 上运行,sBPF 虚拟机是基于 eBPF 的 Solana 特有 VM。SBF 指令类似于传统的汇编语言,例如 x86 或 ARM,看起来像这样:

Copymov64 r0, 1  ; 将 1(64 位填充)移动到寄存器 0
mov64 r1, 2  ; 将 2(64 位填充)移动到寄存器 1
add64 r0, r1 ; 将寄存器 1 添加到寄存器 0,结果存储在寄存器 0 中

先决条件

本文假设已完成以下内容:

  • 计算单元教程 - Solana 计算单元的工作原理
  • Rust 到 SBF 编译教程 - 理解 Solana 程序编译流程
  • 还需要对汇编概念(寄存器、内存寻址、跳转)有基本了解。

在 Rust 到 SBF 编译教程中,我们解释了 Solana 程序如何经历三个主要阶段:Rust 到 LLVM IR 再到 SBF 字节码,最后到原生代码。本文涵盖了 Solana 的 VM 架构,并展示了如何在实践中分析 SBF 字节码。

Solana 虚拟机架构

Solana VM 是基于寄存器的,与基于堆栈的 Ethereum VM 不同。在基于寄存器的 VM 中,指令操作一组固定大小的存储槽,称为寄存器,并且每条指令都明确指定它从哪个寄存器读取数据和写入数据。在基于堆栈的 VM 中,指令隐式地操作堆栈数据结构的顶部,因此操作数必须被推入堆栈并从堆栈中弹出才能使用。

eBPF 定义了 11 个寄存器 (R0–R10),所有都是 64 位宽。Solana 的 sBPF VM 实现了这 11 个相同的寄存器,但内部维护了一个隐藏的第十二个寄存器 R11,用于程序计数器跟踪。由于 R11 在执行期间程序既不能读也不能写,因此只有原始的 11...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论