Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Nexlm is a peer-to-peer Stellar exchange built for Nigeria, sell XLM, get paid in Naira, no middleman, no delays.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Peer-to-peer XLM ↔ Naira exchange with on-chain Stellar escrow.
Nexlm lets Nigerians buy and sell XLM directly with each other using bank transfer, OPay, PalmPay, Kuda and Moniepoint. The seller's XLM is locked in a dedicated Stellar escrow account for every trade, so neither side has to trust the other — and Nexlm never touches the Naira.README 전문 보기 ↗Peer-to-peer XLM ↔ Naira exchange with on-chain Stellar escrow.
Nexlm lets Nigerians buy and sell XLM directly with each other using bank transfer, OPay, PalmPay, Kuda and Moniepoint. The seller's XLM is locked in a dedicated Stellar escrow account for every trade, so neither side has to trust the other — and Nexlm never touches the Naira.
| Repository | Purpose |
|---|---|
| Nexlm/nexlm | Trading app — API + web client (this repo) |
| Nexlm/nexlm-landing | Marketing website |
| Nexlm/nexlm-docs | User, developer and API documentation |
lock seller ─ createAccount(escrow, amount + 2 XLM) ─▶ escrow
escrow ─ setOptions(add platform signer, master weight 0)
release escrow ─ payment(amount) ─▶ buyer
escrow ─ setOptions(remove platform signer)
escrow ─ accountMerge ─▶ seller (returns unused reserve)
refund escrow ─ setOptions(remove platform signer)
escrow ─ accountMerge ─▶ seller
The escrow's own key is disabled in the same atomic transaction that funds it, so only the platform co-signer can move the XLM — and the only operations it ever signs send funds to the buyer or back to the seller. Every step is a public transaction linked from the trade room.
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite, Tailwind CSS, Zustand, React Router |
| Backend | Node.js, Express, Zod |
| Database | PostgreSQL, Prisma |
| Blockchain | @stellar/stellar-sdk, Horizon |
| Realtime | Socket.io |
| Auth | JWT, bcrypt |
| Uploads | Cloudinary (local disk fallback) |
| KYC | Smile ID |
Requirements: Node.js 20+, PostgreSQL 14+ (or Docker).
git clone https://github.com/Nexlm/nexlm.git
cd nexlm
npm install
# Database
docker compose up -d
# Server configuration
cp server/.env.example server/.env
node -e "console.log('ENCRYPTION_KEY=' + require('crypto').randomBytes(32).toString('hex'))"
node -e "import('@stellar/stellar-sdk').then(s => console.log('PLATFORM_SECRET_KEY=' + s.Keypair.random().secret()))"
# paste both values and a long JWT_SECRET into server/.env
npm run db:migrate
[email protected] ADMIN_PASSWORD='choose-a-strong-one1' npm run db:seed
# Run
npm run dev:server # http://localhost:4000
npm run dev:client # http://localhost:5173
On testnet, new wallets are funded automatically with 10,000 test XLM. Without SMTP configured, verification and reset emails are printed to the server log.
The repo deploys as two Vercel projects from main:
| Project | Root Directory | Preset | URL |
|---|---|---|---|
nexlm-server | server | Other | https://nexlm-server.vercel.app |
nexlm-client | client | Vite | https://nexlm-client.vercel.app |
nexlm-server, set DATABASE_URL, JWT_SECRET, ENCRYPTION_KEY, PLATFORM_SECRET_KEY, CRON_SECRET, CLIENT_URL=https://nexlm-client.vercel.app, PUBLIC_API_URL=https://nexlm-server.vercel.app (plus CLOUDINARY_URL for image uploads) and redeploy. Migrations run during the build.nexlm-client, set VITE_API_URL=https://nexlm-server.vercel.app and redeploy.https://nexlm-server.vercel.app/health. If a variable is missing, the API answers with SERVER_NOT_CONFIGURED and lists it.On Vercel the API runs serverless: Socket.io is replaced by client polling, and expiry/refund/reconciliation jobs run on incoming traffic plus a cron endpoint. For always-on realtime, deploy the API with render.yaml instead. Full guide: docs → Deployment.
| Command | Description |
|---|---|
npm run dev:server | API with auto-reload |
npm run dev:client | Web client |
npm test | Server and client test suites |
npm run lint | ESLint across both workspaces |
npm run test:coverage -w server | Server tests with a coverage report |
npm run build | Production build of the client |
npm run db:migrate | Apply Prisma migrations in development |
npm run db:seed | Create or promote an admin |
npm run smoke -w server | End-to-end test against a running API on testnet |
server/
prisma/ schema, migrations, admin seed
scripts/ testnet smoke test
src/
config/ env validation, constants
lib/ amounts (BigInt), crypto, errors, pagination
stellar/ Horizon client, wallets, payments, escrow
services/ auth, wallet, orders, trades, chat, KYC, admin
routes/ Express routers
middleware/ auth, validation, rate limits, uploads, errors
socket/ Socket.io auth and rooms
jobs/ order expiry, auto-refunds, reconciliation
tests/ unit tests (Vitest)
client/
src/
pages/ market, orders, trades, wallet, KYC, settings, admin
components/ UI kit, trade room, wallet, layout
store/ Zustand auth and toast stores
hooks/ lib/ API client, sockets, formatting
All routes are under /api. Machine-readable reference: docs/api/openapi.yaml
(kept in step with the router by a test). Narrative guides: nexlm-docs.
| Area | Endpoints |
|---|---|
| Auth | POST /auth/register · /login · /verify-email · /forgot-password · /reset-password · /change-password |
| Users | GET/PATCH /users/me · /users/me/payment-accounts · GET /users/:displayName |
| KYC | GET /kyc · POST /kyc |
| Wallet | GET /wallet · /wallet/deposit · /wallet/activity · /wallet/transactions · POST /wallet/withdraw |
| Orders | GET /orders · /orders/mine · /orders/:id · POST /orders · /orders/:id/cancel |
| Trades | GET/POST /trades · GET /trades/:id · POST /trades/:id/paid · /release · /cancel · GET/POST /trades/:id/messages |
| Admin | GET /admin/overview · /admin/users · PATCH /admin/users/:id/status · POST /admin/kyc/:id · GET /admin/trades |
Realtime events: order:created, order:removed, trade:created, trade:updated, message:new, trade:typing.
server/scripts/smoke-test.mjs) runs a full lifecycle on Stellar testnet: registration, escrow lock, chat upload, release, cancel, timeout auto-refund and withdrawal.More: architecture · testing · onboarding · runbook · API spec
See CONTRIBUTING.md, especially the rules for money-moving code.