在Solana生态系统中,智能合约被称为程序。
每个程序都是一个存储可执行逻辑的链上账户,这些逻辑被组织成特定的函数,称为指令。
关于Solana程序的更多内容,请参阅本文档的部署程序部分。
关键点
- 程序是包含可执行代码的链上账户。这些代码被组织成称为指令的独立函数。
- 程序是无状态的,但可以包含创建新账户的指令,用于存储和管理程序状态。
- 程序可以由升级权限账户更新。当升级权限被设置为
null
时,程序变得不可变。 - 可验证构建使用户能够验证链上程序与公开可用的源代码匹配。
编写Solana程序
Solana程序主要用Rust编程语言编写。
有两种常见的开发方法:
- Anchor:一个为Solana程序开发设计的框架。 它通过使用Rust宏显著减少样板代码,使编写程序更快更简单。 对于初学者,建议从Anchor框架开始。
- 原生Rust:这种方法涉及在不使用任何框架的情况下用Rust编写Solana程序。 它提供更多的灵活性,但也增加了复杂性。
更新Solana程序
链上程序可以由被指定为“升级权限”的账户直接修改,这通常是最初部署程序的账户。
如果升级权限被撤销并设置为None
,程序将变得不可变,无法再更新。
可验证程序
确保链上代码的完整性和可验证性是至关重要的。
可验证构建确保任何第三方可以独立验证部署在链上的可执行代码与其公开的源代码匹配。
此过程增强了透明度和信任度,使检测源代码与部署程序之间的差异成为可能。
- 搜索已验证程序:用户可以在SolanaFM Explorer上搜索程序地址并导航到“Verification”标签,快速检查已验证程序。
- 验证工具:Ellipsis Labs的Solana Verifiable Build CLI使用户能够独立验证链上程序与发布的源代码。
- Anchor对可验证构建的支持:Anchor提供了对可验证构建的内置支持。详细信息可以在Anchor文档中找到。
伯克利包过滤器 (BPF
)
Solana利用LLVM编译器基础设施将程序编译成可执行和可链接格式(ELF
)文件。
这些文件包含修改后的伯克利包过滤器 (eBPF
) 字节码,称为“Solana字节码格式” (sBPF
)。
使用LLVM使Solana能够支持任何可以编译为LLVM的BPF后端的编程语言,这显著增强了Solana作为开发平台的灵活性。
程序总结
在Solana生态系统中,"智能合约"称为程序。
程序是链上账户,存储可执行逻辑,分为具体的指令。
主要特点如下:
- 无状态设计:程序本身无状态,但可以创建新账户来管理状态。
- 升级和不可变性:程序可以通过升级权限账户更新。一旦设置升级权限为
null
,程序将变得不可变。 - 可验证构建:可验证构建确保链上程序与其公开的源代码匹配,提高透明度和信任度。
编写和更新程序
- 编写:Solana程序主要用Rust编写,有两种方法:
- Anchor框架:简化开发,适合初学者。
- 原生Rust:提供更大灵活性,但更复杂。
- 更新:通过升级权限账户进行。如果升级权限被撤销,程序将无法更新。
可验证性
- 验证工具:使用工具如Solana Verifiable Build CLI进行验证。
- Anchor支持:Anchor内置支持可验证构建。
技术细节
- 伯克利包过滤器 (BPF):Solana使用LLVM编译程序,生成Solana字节码格式 (
sBPF
),增强了平台的灵活性。