#programs #solana #vm #simulator #testing

litesvm

一个快速且轻量级的 Solana VM 模拟器,用于测试 Solana 程序

1 个不稳定版本

0.1.0 2024 年 4 月 2 日
0.0.1 2024 年 2 月 8 日

#111 in #simulator

Download history 1/week @ 2024-05-15 5/week @ 2024-05-22 4/week @ 2024-06-19 39/week @ 2024-06-26 232/week @ 2024-07-03 451/week @ 2024-07-10 245/week @ 2024-07-17 257/week @ 2024-07-24 288/week @ 2024-07-31

1,331 每月下载量

Apache-2.0

1MB
1.5K SLoC

包含 (ELF 库, 535KB) src/spl/programs/spl_token_2022-1.0.0.so, (ELF 库, 135KB) src/spl/programs/spl_token-3.5.0.so, (ELF 库, 105KB) spl_associated_token_account-1.1.1.so, (ELF 库, 75KB) src/spl/programs/spl_memo-3.0.0.so, (ELF 库, 18KB) src/spl/programs/spl_memo-1.0.0.so, (ELF 库, 21KB) tests/programs_bytes/hello_world.so


LiteSVM


📍 概述

litesvm 是一个快速且轻量级的 Solana VM 模拟器,用于测试程序。它从 solana-program-test 包中汲取了优点,同时提供了更优越的性能和开发者体验。

🚀 入门

🔧 安装

cargo add --dev litesvm

🤖 最小示例

use litesvm::LiteSVM;
use solana_program::{message::Message, pubkey::Pubkey, system_instruction::transfer};
use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};

#[test]
fn system_transfer() {
    let from_keypair = Keypair::new();
    let from = from_keypair.pubkey();
    let to = Pubkey::new_unique();

    let mut svm = LiteSVM::new();
    svm.airdrop(&from, 10_000).unwrap();

    let instruction = transfer(&from, &to, 64);
    let tx = Transaction::new(
        &[&from_keypair],
        Message::new(&[instruction], Some(&from)),
        svm.latest_blockhash(),
    );
    let tx_res = svm.send_transaction(tx);

    let from_account = svm.get_account(&from);
    let to_account = svm.get_account(&to);

    assert!(tx_res.is_ok());
    assert_eq!(from_account.unwrap().lamports, 4936);
    assert_eq!(to_account.unwrap().lamports, 64);
}

依赖项

~27–42MB
~726K SLoC