#transaction #instructions #blockchain #solana #tpu

jib

Jib 是一个用于 Solana 区块链的库,它允许您将指令高效地打包到事务中,并通过 TPU 客户端提交

8 个重大版本发布

0.9.0 2024年3月24日
0.7.0 2024年1月9日
0.5.0 2023年12月20日
0.4.1 2023年9月27日

#7 in #tpu

Download history 190/week @ 2024-03-11 302/week @ 2024-03-18 163/week @ 2024-03-25 125/week @ 2024-04-01 100/week @ 2024-04-08 81/week @ 2024-04-15 64/week @ 2024-04-22 24/week @ 2024-04-29 44/week @ 2024-05-06 39/week @ 2024-05-13 64/week @ 2024-05-20 88/week @ 2024-05-27 45/week @ 2024-06-03 55/week @ 2024-06-10 52/week @ 2024-06-17 43/week @ 2024-06-24

每月下载 204
用于 metaboss

Apache-2.0

39KB
661

Crate Downloads License

Jib

Jib 是一个简单的 Rust 库,它将 Solana 指令向量有效地打包成最大大小和账户长度的交易,然后通过网络发送。它可以与 RPC 节点一起使用,以异步方式使用 Tokio 绿色线程发送交易,或者与 TPU 客户端一起使用,将交易发送到当前领导者并确认它们。它还具有重试失败交易并将它们打包成新交易的能力。

示例用法

在这个示例中,我们加载我们想要更新其元数据的 mint 账户列表,然后我们为每个 mint 创建一个带有 update_metadata_accounts_v2 指令的指令向量。然后我们将这个指令向量传递给 Jib,它将它们打包成尽可能高效的交易并发送到网络。

fn main() -> Result<()> {
    // Load our keypair file.
    let keypair = solana_sdk::signature::read_keypair_file("keypair.json").unwrap();

    // Initialize Jib with our keypair and desired network.
    let mut jib = Jib::new(vec![keypair], "https://frosty-forest-fields.solana-mainnet.quiknode.pro")?;

    let mut instructions = vec![];

    // Load mint addresses from a file.
    let addresses: Vec<String> =
        serde_json::from_reader(std::fs::File::open("collection_mints.json")?)?;

    // Create an instruction for each mint.
    for address in addresses {
        let metadata = derive_metadata_pda(&Pubkey::from_str(&address).unwrap());

        let ix = update_metadata_accounts_v2(
            mpl_token_metadata::ID,
            metadata,
            // Jib takes the payer by value but we can access it via this fn.
            jib.payer().pubkey(),
            None,
            None,
            Some(true),
            None,
        );

        instructions.push(ix);
    }

    // Set the instructions to be executed.
    jib.set_instructions(instructions);

    // Run it.
    let results = jib.hoist()?;

    // Do something with the results.
    for result in results {
        if result.is_success() {
            println!("Success: {}", result.signature().unwrap());
        } else {
            println!("Failure: {}", result.error().unwrap());
        }
    }

    Ok(())
}

依赖关系

~57–76MB
~1.5M SLoC