34 个版本
0.1.35 | 2024 年 8 月 5 日 |
---|---|
0.1.34 | 2024 年 8 月 1 日 |
0.1.31 | 2024 年 7 月 26 日 |
0.1.19 | 2024 年 6 月 29 日 |
#468 in 魔法豆
659 次每月下载
19KB
290 行
znap
Znap 框架的核心库,用于创建 Solana 操作
znap
是一个核心库,包含 znap-macros
、znap-syn 和其他用于 Solana 操作编程的必要组件。
znap
负责协调解析、转换和生成 Rust 代码所需的不同模块和工具。通过集成 znap-macros
和 znap-syn
,znap
允许开发者充分利用 Rust 的功能来创建 Solana 操作。
如何导入 znap
cargo添加 znap
- 在你的 lib.rs 文件中导入:
use znap::prelude::*
包
包 | 描述 | 版本 | 文档 |
---|---|---|---|
znap |
Znap 框架的核心库,用于创建 Solana 操作 |
使用方法
use solana_sdk::{message::Message, pubkey, pubkey::Pubkey, transaction::Transaction};
use spl_associated_token_account::get_associated_token_address;
use spl_token::{instruction::transfer, ID as TOKEN_PROGRAM_ID};
use std::str::FromStr;
use znap::prelude::*;
#[collection]
pub mod my_actions {
use super::*;
pub fn fixed_transfer(ctx: Context<FixedTransferAction>) -> Result<Transaction> {
let account_pubkey = match Pubkey::from_str(&ctx.payload.account) {
Ok(account_pubkey) => account_pubkey,
_ => return Err(Error::from(ActionError::InvalidAccountPublicKey)),
};
let mint_pubkey = pubkey!("FtaDaiPPAy52vKtzdrpMLS3bXvG9LVUYJt6TeG6XxMUi");
let receiver_pubkey = pubkey!("6GBLiSwAPhDMttmdjo3wvEsssEnCiW3yZwVyVZnhFm3G");
let source_pubkey = get_associated_token_address(&account_pubkey, &mint_pubkey);
let destination_pubkey = get_associated_token_address(&receiver_pubkey, &mint_pubkey);
let transfer_instruction = match transfer(
&spl_token::ID,
&source_pubkey,
&destination_pubkey,
&account_pubkey,
&[&account_pubkey],
1,
) {
Ok(transfer_instruction) => transfer_instruction,
_ => return Err(Error::from(ActionError::InvalidInstruction)),
};
let transaction_message = Message::new(&[transfer_instruction], None);
Ok(Transaction::new_unsigned(transaction_message))
}
}
#[derive(Action)]
#[action(
icon = "https://google.com",
title = "Fixed transfer",
description = "Send a fixed transfer to the treasury",
label = "Send"
)]
pub struct FixedTransferAction;
#[derive(ErrorCode)]
enum ActionError {
#[error(msg = "Invalid account public key")]
InvalidAccountPublicKey,
#[error(msg = "Invalid instruction")]
InvalidInstruction,
}
依赖项
~75MB
~1.5M SLoC