Multi-wallet spending control on Stellar.
PockForge is a precision financial control system built on Stellar Soroban smart contracts. One wallet (owner) sets, enforces, and monitors spending limits for multiple wallets on-chain.
This is not a consumer app. It's an institutional control interface—deliberate, restrained, rules-driven.
Contract → Soroban smart contract (Rust)
Frontend → Institutional control interface (Next.js 16 + React)
Network → Stellar Testnet
Network: Stellar Testnet
Contract ID:
CBDT2KDQBCZDHNKPA7RADCNBCHJ2RIUYWA5O4RRE7GQXQFOD3YY5J4UC
Explorer:
View on Stellar Expert →
| Function | Access | Purpose |
|---|---|---|
initialize(owner, balance) |
Owner | One-time vault setup |
set_allowance(wallet, limit) |
Owner | Assign spending limits |
spend(wallet, amount) |
Wallet | Execute spend within allowance |
get_balance() |
Public | Read current vault balance |
get_owner() |
Public | Read vault owner address |
get_remaining(wallet) |
Public | Read wallet's remaining allowance |
Local Development:
cd frontend
npm install
npm run devRequirements:
- Freighter wallet extension
- Stellar Testnet account with XLM
Design Principles:
- Institutional banking aesthetic
- Restrained, not expressive
- Authoritative typography (Inter + IBM Plex Mono)
- Single accent color (warm amber)
- Data-row/table structure
- No decorative elements
This interface feels like internal compliance software, not a consumer app.
Build:
stellar contract buildDeploy:
cd scripts
.\deploy.ps1Test:
.\interact.ps1Dev Server:
npm run devProduction Build:
npm run buildEnvironment:
Configure frontend/.env.local with:
NEXT_PUBLIC_CONTRACT_ID=<your_contract_id>
NEXT_PUBLIC_NETWORK=testnet
NEXT_PUBLIC_HORIZON_URL=https://horizon-testnet.stellar.org
NEXT_PUBLIC_SOROBAN_RPC_URL=https://soroban-testnet.stellar.orgPockForge/
├── contract/
│ ├── src/
│ │ └── lib.rs # Smart contract implementation
│ ├── Cargo.toml
│ └── Cargo.lock
│
├── frontend/
│ ├── app/
│ │ ├── page.tsx # Main application
│ │ ├── layout.tsx # Root layout
│ │ └── globals.css # Institutional design system
│ ├── components/
│ │ ├── WalletConnect.tsx # Freighter integration
│ │ ├── VaultDashboard.tsx # State overview
│ │ ├── AllowanceManager.tsx# Owner controls
│ │ └── SpendInterface.tsx # Spend execution
│ ├── lib/
│ │ ├── stellar.ts # Contract integration
│ │ └── wallet.ts # Wallet utilities
│ └── package.json
│
├── scripts/
│ ├── deploy.ps1 # Automated deployment
│ ├── interact.ps1 # Contract testing CLI
│ ├── build.ps1 # Build utilities
│ └── verify.ps1 # Contract verification
│
└── README.md
Color Palette:
Background: #0A0E14 /* Near-black base */
Surface: #141414 /* Elevated panels */
Border: #2A2A2A /* Subtle separation */
Text: #E8E8E8 /* Off-white primary */
Accent: #C49A6C /* Warm amber (rationed) */
Success: #6B9B6E /* Muted green */
Error: #D64545 /* Muted red */Typography:
- Display/Body: Inter (utilitarian sans-serif)
- Data/Numbers: IBM Plex Mono (tabular figures)
- Scale: Restrained hierarchy, WCAG AA compliant
Motion:
- Transitions: 150ms max
- Purposeful only (state changes, confirmations)
- No decorative animations
- No idle motion
Local Testing Flow:
- Deploy contract to Testnet using
scripts\deploy.ps1 - Start frontend:
npm run dev - Install Freighter wallet extension
- Connect wallet to Testnet
- Test operations:
- View vault state
- Set allowances (owner only)
- Execute spends (within allowance)
- Monitor real-time updates
Contract Testing:
cd contract
cargo test --quietMIT
Built for Stellar Yellow Belt Challenge
Multi-wallet spending control with institutional precision.