
PintPass
Engineered for high-throughput retail commerce
Eliminating centralized database vulnerabilities, locked-in vendor silos, and fractional rounding discrepancies.
How PointPass
executes on-chain,
step by step
From initial merchant registry to cryptographic receipt stamp, every phase executes via verifiable Solana Anchor instructions.
Deterministic PDA seeds guarantee zero merchant private key exposure across all lifecycle operations.
initialize_loyalty_program
Merchant configuration and zero-decimal SPL mint genesis
get_or_create_ata
Customer pass derived deterministically; zero custodial liability
award_points (CPI)
Program signer mints integer tokens to customer ATA atomically
redeem (Receipt PDA)
Tokens burned permanently; Clock timestamp audit receipt stamped
PointPass on Solana vs Legacy Web2 Loyalty
Compare architectural differences between siloed centralized databases and sovereign on-chain SPL tokens.
| Architectural Dimension | Legacy Web2 Loyalty (Shopify / Square) | PointPass Solana Protocol |
|---|---|---|
| Point Custody | Siloed in private database table; merchant can delete or modify at will | Self-custodied in customer wallet as SPL tokens; mathematically sovereign |
| Redemption Proof | Database decrement flag; easily disputed or replayed during chargebacks | Immutable on-chain RedemptionReceipt PDA with Solana Clock timestamp |
| Ecosystem Composability | Zero composability; locked into proprietary vendor APIs and closed portals | Standard SPL token; composable with DEXes, NFT gateways, and dApps |
| Account Isolation | Multi-tenant shared SQL table; schema migration risks & single point of failure | Dedicated PDA accounts per merchant authority; zero shared state vulnerability |
| Auditability | Internal audit logs accessible only to engineers and platform admins | Publicly auditable by any explorer, RPC node, or third-party indexer |
Anchor Rust & Client SDK
// Burn points and stamp an immutable on-chain receipt PDA
pub fn handle_redeem(ctx: Context<Redeem>) -> Result<()> {
let loyalty_program = &mut ctx.accounts.loyalty_program;
let reward_cost = loyalty_program.reward_cost;
token::burn(
CpiContext::new(
ctx.accounts.token_program.to_account_info(),
Burn {
mint: ctx.accounts.points_mint.to_account_info(),
from: ctx.accounts.customer_token_account.to_account_info(),
authority: ctx.accounts.customer.to_account_info(),
},
),
reward_cost,
)?;
let receipt = &mut ctx.accounts.receipt;
receipt.customer = ctx.accounts.customer.key();
receipt.loyalty_program = loyalty_program.key();
receipt.receipt_number = loyalty_program.redemption_count;
receipt.points_burned = reward_cost;
receipt.timestamp = Clock::get()?.unix_timestamp;
receipt.bump = ctx.bumps.receipt;
loyalty_program.total_redeemed = loyalty_program.total_redeemed.checked_add(reward_cost).ok_or(PointPassError::MathOverflow)?;
loyalty_program.redemption_count = loyalty_program.redemption_count.checked_add(1).ok_or(PointPassError::MathOverflow)?;
Ok(())
}Ready to deploy sovereign loyalty on Solana?
Experience zero-decimal SPL loyalty tokens on Solana Devnet. Test the customer flow or launch your own store terminal.