Posted By : Ashish
The Anchor framework is a Rust-based framework for building Solana programs using Solana blockchain development. It simplifies the process of developing Solana smart contracts by providing a higher-level abstraction over Solana's low-level programming model. Anchor abstracts away much of the complexity involved in writing Solana programs, making it easier for developers to focus on application logic rather than low-level details.
Go here to install Rust.
To set up Solana, visit the Solana website to download and install the software. Once installed, open your terminal and run the command `solana-keygen new` to generate a key pair. This will create a keypair at the default location.
Go here to install Yarn.
Anchor version manager is a tool for using multiple versions of the anchor-cli. It will require the same dependencies as building from source. It is recommended you uninstall the NPM package if you have it installed.
Install avm using Cargo. Note this will replace your anchor binary if you had one installed.
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
On Linux systems, you may need to install additional dependencies if the cargo install fails. E.g. on Ubuntu:
Install the latest version of the CLI using AVM, and then set it to be the version to use.
avm install latest
avm use latest
Verify the installation.
anchor --version
1.) Initialize a new project, simply run:
anchor init <new-workspace-name>
2.) Let's begin by opening lib.rs in the programs folder, we can proceed with developing our program.
3.) Below is the program code
use anchor_lang::prelude::*;
use anchor_spl::token::{self, Token, TokenAccount, Transfer as SplTransfer};
use solana_program::system_instruction;
declare_id!("MyUniqueProgramId");
#[program]
pub mod my_program {
use super::*;
// Function for transferring lamports
pub fn transfer_lamports(ctx: Context<LamportTransfer>, amount: u64) -> Result<()> {
let sender_account = &ctx.accounts.sender;
let recipient_account = &ctx.accounts.recipient;
// Create the transfer instruction
let transfer_instruction =
system_instruction::transfer(sender_account.key, recipient_account.key, amount);
// Invoke the transfer instruction
anchor_lang::solana_program::program::invoke_signed(
&transfer_instruction,
&[
sender_account.to_account_info(),
recipient_account.clone(),
ctx.accounts.system_program.to_account_info(),
],
&[],
)?;
Ok(())
}
// Function for transferring SPL tokens
pub fn transfer_spl_tokens(ctx: Context<SplTokenTransfer>, amount: u64) -> Result<()> {
let destination_account = &ctx.accounts.destination_token_account;
let source_account = &ctx.accounts.source_token_account;
let token_program = &ctx.accounts.spl_token_program;
let authority = &ctx.accounts.authority;
// Transfer tokens from source to destination
let cpi_accounts = SplTransfer {
from: source_account.to_account_info().clone(),
to: destination_account.to_account_info().clone(),
authority: authority.to_account_info().clone(),
};
let cpi_program = token_program.to_account_info();
// Invoke SPL token transfer
token::transfer(CpiContext::new(cpi_program, cpi_accounts), amount)?;
Ok(())
}
}
// Accounts for transferring lamports
#[derive(Accounts)]
pub struct LamportTransfer<'info> {
#[account(mut)]
pub sender: Signer<'info>,
#[account(mut)]
pub recipient: AccountInfo<'info>,
pub system_program: Program<'info, System>,
}
// Accounts for transferring SPL tokens
#[derive(Accounts)]
pub struct SplTokenTransfer<'info> {
pub authority: Signer<'info>,
#[account(mut)]
pub source_token_account: Account<'info, TokenAccount>,
#[account(mut)]
pub destination_token_account: Account<'info, TokenAccount>,
pub spl_token_program: Program<'info, Token>,
}
4.)Let's break down the code and explain the program:
To get started with Solana blockchain development or a project development on Solana, connect with our blockchain developers,
December 18, 2024 at 12:30 am
Your comment is awaiting moderation.