3 秒后将继续下一节内容
下一节
重播
学习下一节
登录 后可观看高清视频

Solana 入门:简单链上数据存储器

486次播放
2026-01-14 下载附件

Mohanson主要分享了 “Account Model (账户模型)” 的实战应用以及如何编写具备生产能力的 Rust 程序。

  • 1. 开发环境与工具链
    • 本地验证者 (solana-test-validator):本地测试是开发的基石。它可以完全模拟主网行为,支持重置状态。
    • RPC (Remote Procedure Call)
      • 端口 8899:默认的 HTTP RPC 端口,用于发送交易和查询数据。
      • 常用指令getAccountInfo 是最核心的读取函数,用于获取账户的 Lamports 余额、Owner 和 Data。
  • 2. 核心架构:逻辑与数据的彻底解耦

    这是 Solana 区别于以太坊(EVM)的最本质特征:

    • Stateless Program (无状态程序):Solana 的程序(Smart Contract)只包含执行指令的代码,不存储任何业务数据。
    • Data Accounts (数据账户):所有状态信息都必须存储在独立的数据账户中。
    • 并行处理能力 (Parallel Execution)
      • 交易声明:交易必须预先列出所有要操作的账户。
      • 运行时调度:只要两笔交易操作的是不同的账户,验证者就可以在多个 CPU 核心上同时执行它们。
  • 3. PDA (Program Derived Address) —— 程序派生地址

    PDA 作为重点,用于实现“程序自主管理账户”:

    • 计算公式

      Address=hash(Program ID+Seeds+Bump)

    • 特性

      • 无私钥:PDA 不在 Ed25519 椭圆曲线上。
      • 程序签名:程序可以通过 invoke_signed 函数,利用 Seeds 和 Bump 为该 PDA 签署交易。
    • 应用场景:Vault(金库)账户、用户配置文件(Profile)、去中心化订单簿的撮合账户。

  • 4. 链上存储与租金管理 (Rent Management)
    • Lamports 与租金:链上空间昂贵。账户内必须持有一定数量的 SOL 来支付存储费。
    • Rent Exempt (租金豁免):若账户余额足以支付 2 年的租金,节点将不再扣费。目前的标准做法是所有账户都必须保持“租金豁免”。
    • 动态调整 (realloc)
      • 当存储内容增加时,如何动态扩展账户空间。
      • 安全检查:必须判断发起者是否有权修改,并确保账户内有足够的 SOL 补足新增空间的租金。
  • 5. Rust 程序编写要点

    • Entrypoint (入口点):所有 Solana 程序的唯一入口。Rust

      pub fn process_instruction( program_id: &Pubkey, accounts: &[AccountInfo], instruction_data: &[u8], ) -> ProgramResult

    • Borsh 序列化:用于将 Rust 中的 struct(结构体)转化为可在链上存储的二进制流(Binary stream)。

    • 部署限制:由于 UDP 包大小限制(通常为 1280 字节),部署大型程序会涉及成百上千次连续的交易指令。

文档:https://solana.com/zh/docs/intro/installation 附件中有来自社区小伙伴 Dean 的笔记分享

Solana