Rise In Logo

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.

name = "counter"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

borsh = "1.2.1"
borsh-derive = "1.2.1"
solana-program = "1.17.7"

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 {

impl CounterInstructions {
    pub fn unpack(input: &[u8]) -> Result<Self, ProgramError> {
        let (&variant, rest) = input

        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},

use crate::instructions::CounterInstructions;

pub mod instructions;

#[derive(Debug, BorshDeserialize, BorshSerialize)]
pub struct CounterAccount {
    pub counter: u32,
Rise In Logo

Rise together in web3