Purpose: Enables standalone or embedded ATM terminals to allow:
- Token withdrawals (OTA/WOTA)
- Token purchases using QR codes or NFC
- BTC → OTA swaps (via internal DEX or set rate)
- Ledger logging and CID receipts
Key Endpoints:
yamlPOST /atm/withdraw
→ { address, token, amount, auth }
POST /atm/deposit
→ { token, amount, payment_tx, address }
GET /atm/rates
→ returns real-time OTA/WOTA/BTC exchange rates
GET /atm/balance/:address
→ check available balance before approving dispense
GET /atm/receipt/:txid
→ return IPFS CID for printed/saved receipt
Fiat ATM Module API (with 3rd-party cash dispenser integration)
Purpose: Wraps logic to work with bill dispensers (e.g. Puloon, Hyosung, Glory) in low-trust environments. Can be Raspberry Pi–based, or kiosk-based.
Functions:
- Validate cash input via acceptor API
- Confirm fiat → token conversion
- Trigger hardware dispense with PIN or QR auth
- Log fiat↔token events to IPFS
Endpoints:
yamlPOST /fiat/deposit
→ { amount, currency, target_wallet }
POST /fiat/dispense
→ { auth_code, fiat_amount }
POST /fiat/verify
→ verifies PIN, biometric or QR auth to release funds
GET /fiat/logs
→ show ATM logs by session or IPFS CID
Notes:
- MAC address + device fingerprinting can protect rogue ATMs.
- Offline queuing supported if
--offline-mode
is enabled (e.g., power outage or disconnected node).
Offline-Capable OTA ATM Spec (v1.1)
Flag: --offline-mode
Supported features in offline mode:
- Queue deposits/withdrawals locally (with retry-on-reconnect)
- Broadcast critical ops over HF SDR (if connected)
- Store CIDs locally and relay later
- Solar and low-power standby support for SDR-only relay
Extended Fields + Routes
/atm/deposit
json{
"deviceId": "atm-0042",
"amount": 50,
"token": "OTA",
"source": "ota1x...",
"offline": true,
"relay": {
"mode": "HF",
"frequency": "14.070MHz",
"txTimeUTC": "2025-06-01T21:10:00Z"
}
}
/atm/sync/push
- POST – Triggers outbound queue processing (manual or timed)
json{
"trigger": "manual",
"relayMethod": "internet" | "HF"
}
Hardware Stack
Module | Function |
---|---|
SDR (Thetis-compatible) | HF relay of CID log or deposit |
Antenna | For field broadcast or reception |
Solar panel | Power ATM logic board + SDR |
Wallet module | OTA + WOTA support |
NFC reader | MAC/NFC access filtering |
Since Edge is baked into the SDR stack(Software defined radio) (via embedded wallet + asset browser plugin), the OTA ATM should support any crypto that Edge does, including:
- ERC-20 tokens (like WOTA)
- Ethereum and L2s (Base, Arbitrum, Optimism, etc.)
- NFT transfers
- Cross-chain tokens via bridges (if Edge is extended with plugins)
ATM Support Details:
OTA Native — via direct RPC + IPFS queue
WOTA/ERC20 — via bridge
Stablecoins (e.g., USDC, DAI) — fully compatible
Fiat support — optional via local USD cash reader + price API (or offline price lock)
With this architecture, the SDR-enabled ATM is effectively a Web3+RF cash terminal, able to:
- Operate in air-gapped or offline modes
- Use Edge-compatible coins for payments or withdrawals
- Relay receipts or confirmations over HF, LoRa, or queued IPFS
Use Case: Message + Crypto Transfer via ATM
1. User A: Check-in / Compose
- Inserts/enters wallet (QR/NFC/Private Key)
- Composes:
- Message (optional, voice or text)
- Transfer (OTA/WOTA or EVM asset)
- Selects recipient:
- Address
- Callsign (alias lookup)
- Phone number (Edge-linked)
2. Transmission Layer (3 Modes)
Mode | Conditions | Delivery Method |
---|---|---|
Online | Internet available | Standard IPFS + Edge broadcast |
Offline | No internet | Queued to SDR/HF transmission |
Relay Assisted | Internet + SDR fallback | Dual-broadcast (IPFS + SDR relay node) |
3. User B: Receive
- ATM polls:
- Wallet address or alias inbox
- If ATM is offline:
- SDR records incoming message (voice or data burst)
- If online:
- Syncs from IPFS (CID-based mailbox)
- Message and crypto are presented upon check-in
API Sample (Pseudo OpenAPI)
yamlPOST /atm/send
description: Send OTA/WOTA with optional message
payload:
sender: wallet_address
recipient: alias | address
message: text | voice (base64)
amount: number
token: string
mode: online | offline | auto
yamlGET /atm/inbox/{wallet_address}
description: Fetch messages & payments for a wallet
returns:
- messages: [ { from, timestamp, content } ]
- payments: [ { token, amount, tx_hash, cid } ]
Future Add-ons
- IPFS mailbox for message queue
- OTA relay link via SDR fallback
- Optional message encryption w/ wallet pubkey
ATM – OTA Payment Terminal (Merchant Mode)
Core Functions
- Receive Payments in:
- Native OTA
- Wrapped OTA (WOTA)
- Any Edge-compatible crypto (ETH, USDC, etc.)
- Auto-generate QR invoice with:
- Amount, Token, and Destination Address
- Optional: Order ID, Notes, Expiration
- Offline Queuing (via
--offline-mode
) with IPFS sync when back online - Audio Confirmation (using DirectX/OpenGL relay or SDR tone receipt)
Optional Enhancements
- Merchant Wallet Binding (one-click restore via encrypted backup or QR seed)
- Tip Options / Rounding Up feature
- Printed Receipts (USB or thermal printer) with CID + hash confirmation
- Merchant Directory Sync to appear in OTA map or wallet dApps
Dev API Routes (Merchant Mode)
httpPOST /merchant/register
POST /merchant/invoice
GET /merchant/invoice/:id
POST /merchant/confirm/:id
GET /merchant/receipts
Extended features.
- NFC support for tap-to-pay
- Android POS device compatibility
- Cross-checking with SDR or camera (for fraud prevention)
Merchant Mode toggle locked in. Here’s how it’s being built into the OTA Crypto ATM/Validator stack:
Merchant Mode Toggle – Overview
Feature | --atm-mode | --merchant-mode |
---|---|---|
Crypto Withdrawals | ✅ (PIN protected) | ❌ |
Crypto Deposits | ✅ | ✅ (from customers) |
Payment QR Display | ❌ | ✅ |
Offline Queue Sync | ✅ | ✅ |
SDR/DirectX Comms | Optional | Optional |
IPFS Receipt Logging | ✅ | ✅ |
Edge Support | ✅ | ✅ |
Receipt Printing | ❌ | ✅ |
Terminal CLI Options
bash# ATM Mode (default)
ota-atm --atm-mode --wallet=/wallets/atm.json --offline-mode
# Merchant Mode
ota-atm --merchant-mode --wallet=/wallets/store.json --printer=/dev/usb/lp0 --offline-mode
Merchant UI Interface
- “Request Payment” → Generates QR
- “Payment Received” → Auto-confirm or manual override
- “Sync Now” → Manually pushes to IPFS if offline
This will be bundled into the next patch ZIP. Let me know if you’d like:
- Sound alerts (coin drop/cha-ching)
- Merchant Map integration (public store listing on dApp)
- Inventory or SKU scanner extension later
Everything stays local-first, queue-friendly, and hardened for field use.