

Solana 程序是部署在 Solana 网络上的可执行代码。虽然许多程序使用 Rust 编写,但也支持其他语言和工具链。由于 Solana Rust 编程是最常见的开发路径,因此本文将以 Rust 为重点进行介绍。内容将从 Solana 的基本概念开始,依次涵盖环境搭建、第一个程序的编写、构建、测试以及部署。
目前市场对该网络的热情高涨,资金流向已紧密追踪 SOL 代币的表现。每一次代币交换、每一个代币项目以及每一款游戏背后,都运行着如前文所述的各类程序。
Solana 是一个于 2020 年 3 月上线的公共区块链。它结合了权益证明(Proof of Stake)与历史证明(Proof of History),后者是一种可验证的时间戳机制,用于对交易进行排序。其原生代币 SOL 用于支付网络费用。
对于开发者而言,该区块链的主要功能是运行 Solana 智能合约,Solana 将其称为“程序”。
程序本身不存储任何数据。状态数据存储在独立的账户中,当交易到达时,程序读取或修改这些账户的数据。交易包含指令,每条指令指定要调用的程序及其所需的账户。程序 ID 即已部署程序的地址。
Solana 的交易具有原子性。如果某条指令执行失败,状态更改将被回滚,尽管交易费可能仍会被收取。验证者负责执行所有这些操作,而将 SOL 委托给验证者是支持者参与网络维护的一种方式。
Solana 官方文档指出,程序主要使用 Rust 编写,同时也支持 C 或 C++。Rust 运行速度快,且其编译器能在早期捕获许多内存错误。这一点至关重要,因为一个漏洞可能导致资金损失。然而,对于来自 Web 开发领域的开发者来说,这意味着更陡峭的学习曲线。
以下四个概念涵盖了大多数初学者的需求:
所有权(Ownership):每个值只能有一个所有者,从而防止许多类型的错误。结构体(Structs):用于描述自定义数据结构。枚举和 Result 类型:用于处理逻辑分支和错误情况。Cargo:Rust 的包管理器,用于构建和测试项目。Solana Rust 编程始于两个核心区块链开发工具:Rust 语言环境和 Solana 命令行工具。官方文档将这两者列为先决条件。当这两个工具均能正确显示版本号时,即表示设置完成。
实践过程中还需要一个钱包。基本的使用流程易于上手,建议单独设立一个测试钱包,以避免在练习过程中误动真实资金。
第一个 Solana Rust 项目应作为一个标准的 Cargo 库开始。官方示例将 edition 字段设置为 2021,否则构建可能会失败。项目中需添加 Solana 程序依赖项,这是运行 Solana 程序所需的最小依赖集。
此外,还需添加 crate type 设置,列出 cdylib 和 lib,否则构建输出文件夹将无法创建。
程序本身非常精简:一个入口点,向程序日志打印 “Hello, world!”。这是 Solana 开发者在 Rust 中的常规第一步。
构建过程会在 target/deploy 文件夹中生成两个文件。一个是编译后的程序文件(后缀为 .so),即实际部署的文件;另一个是密钥对文件。
cargo build-sbfsolana address -k ./target/deploy/hello_world-keypair.json在原生 Rust 路线中,密钥对的公钥将成为程序 ID,客户端必须调用相同的 ID。其他项目配置可能通过其特定的配置文件来处理程序 ID。
环境 功能 适用场景 LiteSVM 在无验证器的轻量测试环境中运行程序 快速 Solana 程序测试 Local Validator 在计算机上运行私有 Solana 网络 部署和集成检查 Devnet 共享的公共测试网络 检查真实网络行为 官方示例的测试使用了 LiteSVM。它加载编译后的文件,为付款人注入测试代币,发送一笔交易,并期望成功。随后程序日志会显示 “Hello, world!”。通过仅测试一条路径来确认程序运行良好是不够的,优秀的测试还应包括错误的签名者和无效输入等边界情况。
本地部署需要使用测试验证器。命令行工具指向本地网络,验证器在其独立的终端中运行,而部署命令则从第二个终端上传编译后的文件。
solana config set -u localhostsolana program deploy ./target/deploy/hello_world.soCLI 随后会打印出程序 ID 和签名。在 Solana Explorer 中搜索该 ID(集群设置为 localhost)即可确认部署成功。
Solana Rust 编程项目应仅在本地或 Devnet 代币上进行,这些代币没有市场价值,这与主网 SOL 不同。此处仅应使用专用的测试钱包。
可以通过重新部署到相同的程序 ID 来更新程序,之后再次运行构建、测试和部署步骤。Solana 的程序部署文档指出,升级权限控制着更新操作。移除该权限将使程序变为不可变(Immutable),即无法再升级,也无法进行后续的错误修复。
关闭程序是一个独立的操作。它会返还存储的 SOL,此操作不可逆,且关闭后的程序 ID 永远无法重用。
几种严重风险涉及缺乏授权或账户检查薄弱。每个 Solana Rust 项目都需要遵循以下基本安全检查,因为部署的代码可能持有真实价值:
账户类型和所有者:防止虚假账户替换真实账户。正确的签名者:阻止未授权的调用。预期的地址:确认使用的是正确的账户。输入和可写账户:限制调用者可更改的内容。负面测试:证明恶意请求会失败。升级权限密钥:控制谁可以更改程序。审计有助于提高安全性,但无法保证绝对安全。
Rust 支撑着大多数 Solana 程序,一旦基础概念清晰,开发路径便十分明确。Solana Rust 编程从账户和工具入手,逐步实现首个程序的构建、测试和部署。
下一步是修改消息、重新构建并重新部署,以观察更新效果。进入主网后将涉及真实的 SOL,而诸如如何逐步质押 SOL 等基本操作也始于安全的钱包设置。
声明:文章不代表币圈网立场和观点,不构成本站任何投资建议。内容仅供参考!
免责声明:本站所有内容仅供用户学习和研究,不构成任何投资建议.不对任何信息而导致的任何损失负责.谨慎使用相关数据和内容,并自行承担所带来的一切风险.