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
每月下载 204 次
用于 metaboss
39KB
661 行
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