0xmove is an open-source experimental DeFi-fiat hybrid protocol designed to enable users to earn sustainable APR on fiat (NGN, KES) and stablecoins (USDC, USDT) through bidirectional liquidity pools. It acts as a seamless onramp and offramp bridge, allowing users to deposit local fiat for yield-bearing stablecoin exposure or vice versa, all powered by Paystack for real-world fiat integrations. Built for emerging markets, 0xmove emphasizes transparency, low-risk yields, and community governance—starting with a sandboxed MVP for testing.
The protocol features:
- Fiat Pools: Deposit NGN/KES to earn 5-10% APR via merchant lending or bonds, with direct Paystack payouts.
- Stable Pools: Mirror 3-7% APR from protocols like Aave/Compound, with 1:1 pegged swaps.
- Bidirectional Flows: Onramp (fiat → stables + yield) or offramp (stables → fiat + yield) in one click.
- Sustainability: Conservative yields backed by reserves, 0.5% ramp fees for ops, and open-source audits.
This repo uses Turbo for monorepo management, Nuxt for the web app, Drizzle for the database, and Solidity for the staking contracts. It's experimental—use sandbox mode initially! Head to 0xmove.xyz for more (once live).
- Yield-Bearing Ramps: Earn APR on deposits before/after on/offramping.
- Paystack Integration: Sandboxed fiat in/out for NGN/KES (live mode toggleable).
- Open-Source Contracts: Staking protocol for pool liquidity, deployable on Polygon/Base.
- Modern Stack: TypeScript, ESLint, Tailwind UI components, and Drizzle ORM for scalable backend.
- Metrics Dashboard: Track TVL, ramp volume, and APR via public queries.
- Community-First: MIT-licensed, with bounties for contributions (e.g., new pools).
- Node.js ≥18
- pnpm ≥9 (install via pnpm.io)
- Foundry for contract testing (install via
curl -L https://foundry.paradigm.xyz | bash) - Paystack sandbox account (sign up at paystack.com)
-
Clone the repo:
git clone https://github.com/yourusername/0xmove.git cd 0xmove -
Install dependencies:
pnpm install
-
Set up environment variables:
- Copy
.env.exampleto.envin root,apps/api, andapps/web - Add your Paystack keys (sandbox mode), RPC URLs, and DB creds
# Example .env DATABASE_URL=postgresql://user:pass@localhost:5432/0xmove PAYSTACK_SECRET_KEY=sk_test_yourkey BETTER_AUTH_SECRET=your_secret_key BETTER_AUTH_URL=http://localhost:3010 - Copy
-
Run migrations:
pnpm turbo run db:migrate
Start all services:
pnpm turbo run dev- Web: http://localhost:3000 (Nuxt dev server with hot reload)
- API: http://localhost:3010 (API endpoints)
- Contracts: Auto-compiles Solidity in
contracts/
Build for production:
pnpm turbo run build
pnpm startLint and format:
pnpm turbo run lint
pnpm turbo run format- Install Foundry if not done
- Compile and test:
cd contracts/test-staking forge build forge test
0xmove/
├── apps/
│ ├── api/ # Backend API (HonoJs + Drizzle)
│ │ ├── src/
│ │ │ ├── db/ # Database schemas and queries
│ │ │ ├── lib/ # Auth and utilities
│ │ │ └── index.ts # Server entry
│ │ ├── migrations/ # Database migrations
│ │ ├── drizzle.config.ts
│ │ └── package.json
│ └── web/ # Frontend (Nuxt 3)
│ ├── app/
│ │ ├── components/ # Vue components
│ │ ├── composables/ # Vue composables
│ │ ├── layouts/ # Nuxt layouts
│ │ ├── pages/ # Nuxt pages
│ │ └── plugins/ # Nuxt plugins
│ ├── server/ # Server-side API routes
│ ├── public/ # Static assets
│ ├── nuxt.config.ts
│ └── package.json
├── contracts/
│ ├── marketplace-contract/ # NFT Marketplace contracts
│ │ ├── src/
│ │ │ └── NFTMarketPlace.sol
│ │ ├── test/
│ │ └── foundry.toml
│ └── test-staking/ # Staking protocol contracts
│ ├── src/
│ │ ├── Staking.sol # Core staking contract
│ │ └── RewardsDistributionRecipient.sol
│ ├── test/
│ └── foundry.toml
├── packages/
│ ├── database/ # Shared database config (Prisma)
│ │ ├── prisma/
│ │ │ └── schema.prisma
│ │ └── src/
│ ├── eslint-config-custom/ # Shared ESLint configs
│ ├── tsconfig/ # Shared TypeScript configs
│ └── ui/ # Shared UI components
│ └── src/
├── turbo.json # Turbo pipelines
├── pnpm-workspace.yaml # Monorepo workspaces
├── package.json # Root dependencies
└── README.md # This file!
We welcome contributions to make 0xmove more robust and accessible! Whether it's bug fixes, new features (e.g., KES pool enhancements), or docs—fork, branch, and PR.
- Branching: Use
feat/<feature>,fix/<issue>, ordocs/<update> - Commits: Follow Conventional Commits (e.g.,
feat(api): add ramp endpoint) - Testing: Ensure tests pass (
pnpm turbo run test) and lint (pnpm turbo run lint) - PRs:
- Reference issues (e.g., "Fixes #42")
- Include changelog entry in
CHANGELOG.md - For contracts: Add Slither scan results
Bounties: Check GitHub Issues for paid tasks (e.g., $100 for UI polish).
This project follows the Contributor Covenant.