create-soon-app
# Clone the repository git clone https://github.com/rkmonarch/soon-app.git # Navigate to the project directory cd soon-app
ls
soon-app/ ├── anchor-program/ # Solana program written in Anchor ├── src/ # Frontend Next.js application ├── .eslintrc.json ├── .gitignore ├── next-env.d.ts ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs ├── tailwind.config.ts └── tsconfig.json
anchor-program/programs/favorites/src/lib.rs
#[account] #[derive(InitSpace)] pub struct Favorites { pub number: u64, #[max_len(50)] pub color: String, #[max_len(5, 50)] pub hobbies: Vec<String> }
declare_id!("E6t9eu8HpaFx6PymgHuPPrGwMegFYrCdLa4EeejjE4ji");
#[program] pub mod favorites { use super::*; pub fn set_favorites( ctx: Context<SetFavorites>, number: u64, color: String, hobbies: Vec<String> ) -> Result<()> { let user_public_key = ctx.accounts.user.key(); msg!( "User {user_public_key}'s favorite number is {number}, favorite color is: {color}", ); msg!( "User's hobbies are: {:?}", hobbies ); ctx.accounts.favorites.set_inner(Favorites { number, color, hobbies }); Ok(()) } }
#[derive(Accounts)] pub struct SetFavorites<'info> { #[account(mut)] pub user: Signer<'info>, #[account( init_if_needed, payer = user, space = ANCHOR_DISCRIMINATOR_SIZE + Favorites::INIT_SPACE, seeds=[b"favorites", user.key().as_ref()], bump )] pub favorites: Account<'info, Favorites>, pub system_program: Program<'info, System>, }
# Install project dependencies pnpm install
# Set SOON testnet URL solana config set --url https://rpc.testnet.soo.network/rpc # Verify configuration solana config get
# Generate new keypair (if needed) solana-keygen new # Get testnet SOON tokens from faucet https://faucet.soo.network/
# Navigate to anchor directory cd anchor-program # Build the program anchor build
# Get program ID from the keypair solana address -k target/deploy/favorites-keypair.json
lib.rs
Anchor.toml
# Deploy to SOON testnet anchor deploy # Verify deployment solana account <PROGRAM_ID>
pnpm dev
anchor clean && anchor build