LiteSVM
使用LiteSVM在Rust、TS/JS或Python中为Solana程序编写测试。
概述
litesvm
是一个快速且轻量级的测试Solana程序的库。它通过创建一个优化用于程序开发者的内存中的Solana虚拟机来工作。这使得它的运行和编译速度远快于诸如solana-program-test
和solana-test-validator
等替代方案。litesvm
提供Rust、TS/JS和Python版本(作为solders
库的一部分)。
安装
最小示例
部署程序
大多数情况下,我们希望做的不仅仅是玩弄代币转账——我们希望测试自己的程序。
提示:如果您想从mainnet或devnet拉取一个Solana程序,请使用Solana CLI中的solana program dump
命令。
要将编译的程序添加到我们的测试中,可以使用.add_program_from_file
。
下面是一个使用来自Solana程序库的简单程序的示例,它只进行一些日志记录:
时间旅行
许多程序依赖于Clock
sysvar:例如,某个代币在特定时间之后才可用。使用litesvm
,您可以动态覆盖Clock
sysvar,方法是使用svm.set_sysvar::<Clock>()
(或在TS中使用.setClock
,在Python中使用.set_clock
)。下面是一个示例,使用一个在clock.unix_timestamp
大于100时会崩溃的程序(该时间为1970年1月1日):
另请参见:warp_to_slot
,它允许您跳到未来的区块。
写入任意账户
LiteSVM允许您编写任意账户数据,无论账户状态是否有可能。
这里是一个示例,我们为一个账户提供了一堆USDC,尽管我们没有USDC铸币的密钥对。这在测试中非常方便,因为这意味着我们不必在测试中使用假的USDC:
从实时环境复制账户
如果您想从mainnet或devnet复制账户,可以使用Solana CLI中的solana account
命令将账户数据保存到文件中。
其他功能
与litesvm
相关的其他操作包括:
- 使用
.with_compute_budget
更改最大计算单位和其他计算预算行为。 - 使用
.with_sigverify(false)
禁用交易签名验证。 - 使用
.get_transaction
查找以前的交易。
何时使用 solana-test-validator
?
虽然litesvm
速度更快、更方便,但它也与真正的RPC节点相比,降低了相似性。因此,当您需要调用LiteSVM
不支持的RPC方法,或当您想要测试某些依赖于实际验证者行为的内容,而不仅仅是测试您的程序和客户端代码时,solana-test-validator
仍然是有用的。
不过,通常建议在可能的情况下使用litesvm
,因为这将使您的生活更轻松。