Build on Solana
Counter I - Implementing State and Instructions
In this lesson, we will take a look at how we can define the instructions required by our smart contract.
Here is the changes we have made to cargo.toml in this video.
[package]
name = "counter"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
borsh = "1.2.1"
borsh-derive = "1.2.1"
solana-program = "1.17.7"
[dev-dependencies]
solana-program-test = "1.17.7"
solana-sdk = "1.17.7"
Here is the changes we have made to instruction.rs in this video:
use borsh::BorshDeserialize;
use borsh_derive::{BorshDeserialize, BorshSerialize};
use solana_program::program_error::ProgramError;
#[derive(Debug, BorshDeserialize, BorshSerialize)]
pub struct UpdateArgs {
pub value: u32,
}
pub enum CounterInstructions {
Increment,
Decrement,
Update(UpdateArgs),
Reset,
}
impl CounterInstructions {
pub fn unpack(input: &[u8]) -> Result<Self, ProgramError> {
let (&variant, rest) = input
.split_first()
.ok_or(ProgramError::InvalidInstructionData)?;
Ok(match variant {
0 => Self::Increment,
1 => Self::Decrement,
2 => Self::Update(UpdateArgs::try_from_slice(rest).unwrap()),
3 => Self::Reset,
_ => return Err(ProgramError::InvalidInstructionData),
})
}
}
Here is the changes we have made to lib.rs in this video:
use borsh::{BorshDeserialize, BorshSerialize}; use borsh_derive::{BorshDeserialize, BorshSerialize}; use solana_program::{ account_info::{next_account_info, AccountInfo}, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey, }; use crate::instructions::CounterInstructions; pub mod instructions; #[derive(Debug, BorshDeserialize, BorshSerialize)] pub struct CounterAccount { pub counter: u32, }
Comments
Anonymous
You need to enroll in the course to be able to comment!