36 releases
0.1.37 | Aug 31, 2024 |
---|---|
0.1.36 | Aug 29, 2024 |
0.1.31 | Jul 26, 2024 |
0.1.19 | Jun 29, 2024 |
#122 in #spec
3,141 downloads per month
19KB
290 lines
znap
Znap framework's core library to create Solana actions
znap
is the core library that encompasses znap-macros
, znap-syn and other essential components for Solana actions programming.
znap
is responsible for coordinating the different modules and tools needed to parse, transform and generate code in Rust. By integrating znap-macros
and znap-syn
, znap
allows developers to take full advantage of Rust's capabilities to create Solana actions.
How to import znap
cargo add znap
- In your lib.rs file import:
use znap::prelude::*
Package
Package | Description | Version | Docs |
---|---|---|---|
znap |
Znap framework's core library to create Solana actions |
How to use
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,
}
Dependencies
~60–80MB
~1.5M SLoC