Authorization-based onchain banking smart contracts built with Anchor for Solana.
StyxPay implements three core smart contracts:
The vault program manages secure asset storage with programmable spending limits.
Features:
- Initialize user vaults with daily/monthly spending limits
- Deposit and withdraw funds with authorization checks
- Automatic limit resets based on time periods
- Emergency freeze/unfreeze functionality
- Real-time spending tracking
Key Functions:
initialize_vault- Create a new vault with spending limitsdeposit- Add funds to vaultwithdraw- Withdraw with authorization checksupdate_limits- Modify spending limitsfreeze_vault/unfreeze_vault- Emergency controls
Implements programmable authorization policies for transaction validation.
Features:
- Whitelist/blacklist merchant controls
- Category-based spending restrictions
- Transaction amount limits
- Two-factor authentication requirements
- Real-time transaction validation
Policy Types:
Whitelist- Only allow specified merchants/categoriesBlacklist- Block specified merchants/categoriesAllowAll- Allow all transactions (with amount/2FA checks)
Key Functions:
create_policy- Create authorization policyupdate_policy- Modify existing policyvalidate_transaction- Validate transaction against policyactivate_policy/deactivate_policy- Toggle policy state
Manages virtual cards linked to vaults for spending.
Features:
- Create unlimited virtual cards per vault
- Per-card spending limits
- Card expiry management
- Freeze/unfreeze individual cards
- Transaction tracking
Key Functions:
create_card- Create new virtual cardprocess_transaction- Process card paymentupdate_spending_limit- Modify card limitfreeze_card/unfreeze_card- Card controlsdeactivate_card- Permanently disable cardextend_expiry- Extend card expiration
┌─────────────────────────────────────────────────────────┐
│ StyxPay Platform │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Vault │ │Authorization │ │ Virtual │ │
│ │ Program │◄─┤ Program │◄─┤ Card │ │
│ │ │ │ │ │ Program │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └──────────────────┴──────────────────┘ │
│ │ │
│ SPL Token │
│ │
└─────────────────────────────────────────────────────────┘
- Rust 1.70+
- Solana CLI 1.16+
- Anchor 0.29+
- Node.js 16+
cd contracts
anchor buildanchor testLocalnet:
anchor deployDevnet:
anchor deploy --provider.cluster devnetMainnet:
anchor deploy --provider.cluster mainnet- Authorization-Based Withdrawals: All withdrawals require policy validation
- Spending Limits: Daily and monthly limits enforced on-chain
- Emergency Controls: Instant freeze functionality
- Time-Based Resets: Automatic limit resets
- Granular Permissions: Per-card and per-vault controls
- Merchant Controls: Whitelist/blacklist support
- Transaction Validation: Real-time policy enforcement
- Vault:
VauLT1111111111111111111111111111111111111 - Authorization:
Auth11111111111111111111111111111111111111 - Card:
Card11111111111111111111111111111111111111
// Create vault with $5000 daily, $20000 monthly limits
vault::initialize_vault(
ctx,
5_000_000_000, // 5000 USDC (6 decimals)
20_000_000_000, // 20000 USDC
)?;// Whitelist policy for specific merchants
authorization::create_policy(
ctx,
PolicyType::Whitelist,
vec!["amazon.com".to_string(), "uber".to_string()],
vec!["shopping".to_string(), "transport".to_string()],
1_000_000_000, // Max 1000 USDC per transaction
true, // Require 2FA
)?;// Create card with $500 spending limit
card::create_card(
ctx,
"My Shopping Card".to_string(),
500_000_000, // 500 USDC
expiry_timestamp,
)?;MIT
See CONTRIBUTING.md for details.