Appearance
Overview & Architecture
Aset is an institutional-grade RWA tokenization platform. Investors deposit stablecoins into pools backed by real-world assets (invoice financing, earned wage access, hotel STOs) and earn yield through LP tokens.
🏦 Non-Custodial Architecture
All investor funds flow through Pool Smart Contracts. Aset operates as a facilitator with an operator role on contracts — it never holds investor funds directly. This means no VASP license is required under MiCA (€150K capital threshold avoided). Industry standard: Ondo, Centrifuge, Maple all use this model.
Tech Stack
| Layer | Stack | Details |
|---|---|---|
| 🖥️ Frontend | Vite + React + TypeScript | React Router · Tailwind 4 · RainbowKit · shadcn/ui |
| ⚡ Backend | AWS CDK + Lambda (Node.js) | API Gateway v2 · CloudFront · Supabase JS |
| 📜 Smart Contracts | Foundry + Solidity | OpenZeppelin · 6 contracts · Base Chain |
| 🗄️ Database | Supabase (PostgreSQL + RLS) | Hosted · Row-level security · supabase-js |
| 🔗 Chain | Base Sepolia + Base Mainnet | + KAIA (prod) · SIWE auth · wagmi + viem |
| 👤 Auth (Investor) | SIWE (Sign-In with Ethereum) | JWT via jose · RainbowKit · 30-min timeout |
| 🔑 Auth (Admin) | Google OAuth | admin_users.email from Google · wallet_address optional (on-chain ops only) |
Chain Deployment
| Environment | Chain | Note |
|---|---|---|
| 🧪 Dev | Base Sepolia | Testnet for all development and staging |
| 🌐 Prod | Base Mainnet + KAIA | Dual-chain production deployment |
Smart Contract Registry
| Contract | Standard | Purpose |
|---|---|---|
| PlatformPool | AccessControl + ReentrancyGuard | Core contract — deposits, reserve management, LP mint, yield distribution, redemption, NAV updates. Handles AS_POOL direct investment. FUND_POOL uses PlatformEscrow for hold/release, then Pool for yield. |
| PlatformLPToken | ERC-20 + AccessControl | LP token — whitelist-only transfers, auto-yield settlement |
PlatformEscrow ⚠️ FUND_POOL ONLY | AccessControl + ReentrancyGuard | FUND_POOL escrow — holds USDC until FM issues LP tokens. releaseToFund() splits: 10% to PlatformPool (reserve), 90% to fund wallet. Refund safety if LP not issued within timeout. No yield logic. |
| PlatformPoolFactory | Factory + Registry | Unified factory + registry. createPool(type, config) deploys Pool + LPToken (AS_POOL) or + Escrow + ReceiptNFT (FUND_POOL). Single poolCounter. Auto-grants roles. |
| PlatformReceiptNFT | ERC-721 | Proof of deposit, status tracking (PENDING → LP_VERIFIED / REFUNDED) |
| PlatformKYCSoulbound | Non-transferable ERC-721 | On-chain KYC status via SumSub — non-transferable identity credential |