Solana Program Architecture
Deep dive into the Solana program implementation, account management, and program-derived addresses (PDAs) for StyxPay.
Table of Contents
Program Structure
Program Entry Point
use anchor_lang::prelude::*;
declare_id!("STYXpaydm3KVEKCUNb4QJdYsV7KJbBywKq8Qn5X2VUK");
#[program]
pub mod styxpay_settlement {
use super::*;
pub fn initialize(
ctx: Context<Initialize>,
params: InitializeParams,
) -> Result<()> {
initialize::handler(ctx, params)
}
pub fn create_user_account(
ctx: Context<CreateUserAccount>,
) -> Result<()> {
create_user_account::handler(ctx)
}
pub fn deposit(
ctx: Context<Deposit>,
amount: u64,
) -> Result<()> {
deposit::handler(ctx, amount)
}
pub fn settle_transaction(
ctx: Context<SettleTransaction>,
proof: CompressedProof,
public_inputs: PublicInputs,
) -> Result<()> {
settle_transaction::handler(ctx, proof, public_inputs)
}
pub fn withdraw(
ctx: Context<Withdraw>,
amount: u64,
proof: WithdrawalProof,
) -> Result<()> {
withdraw::handler(ctx, amount, proof)
}
pub fn update_policy(
ctx: Context<UpdatePolicy>,
new_policy: AuthorizationPolicy,
) -> Result<()> {
update_policy::handler(ctx, new_policy)
}
}Module Organization
Account Model
Account Layout
Solana accounts have a strict layout:
Settlement State Account
User Account
Nullifier Set Account
Program Derived Addresses
PDA Derivation
PDA Signing
Instruction Processing
Initialize Instruction
Create User Account Instruction
Cross-Program Invocations
Invoking SPL Token
Invoking System Program
Compute Budget Management
Compute Unit Calculation
Request Compute Units
Security Model
Access Control
Emergency Pause
Related Documentation
Last Updated: January 2026 Version: 1.0.0
Last updated