Wallet and custody
How Nodo’s wallet, P2P escrow, and merchant crypto payments work today. Last updated: September 19, 2026
Last updated: September 19, 2026
This page describes custody as it is implemented today — wallet, peer-to-peer (P2P) USDC trades, and merchant crypto at checkout. It is part of the Terms of Use. Identity checks are in AML, KYC, and verification.
It is written from the current product and contracts, not from a roadmap. Where a piece is still being finalized, this page says so.
What is live vs still being finalized
| Piece | Status today |
|---|---|
| Personal wallet: receive and send USDC on Base | Live |
| Privy smart wallet created at sign-in (Google, Apple, or email) | Live |
| Optional WalletConnect / external EOA session | Live |
| P2P ads and orders (USDC ↔ DOP, EUR, USD, CHF) | Live |
| Per-trade on-chain USDC escrow on Base | Live |
| P2P trade chat and dispute desk | Live |
| Merchant POS: customer pays USDC into the owner’s wallet | Live |
| Business-wallet bank cash-out request | Live as a request. Nodo is the counterparty. Payout execution is manual / still being finalized — not an automated off-ramp. |
| Seed phrase or private-key export | Not offered |
| Transfers to another Nodo user by @alias | Not live |
| Automated fiat on-ramp or partner off-ramp | Not live |
1. The wallet is not a Nodo deposit account
Signing in to Nodo can create a smart wallet on Base through Privy. You can also connect an external wallet (WalletConnect) in a separate session.
- Nodo does not hold your private keys and does not operate a pooled “Nodo balance” of user crypto.
- Nodo does not initiate on-chain transfers for you. You (or your wallet provider) sign sends, escrow locks, releases, cancels, and disputes.
- Keys are tied to your login with Privy. That is not a seed phrase you export from Nodo, and it is not Nodo custody of the coins.
- The wallet is USDC on Base. Other tokens or networks sent to the address will not show up as a supported balance.
Nodo’s backend stores the linked address, indexes USDC (and USDT) activity on Base for the in-app history, and verifies payment transactions it is asked to confirm. That is bookkeeping against a public chain, not taking the funds.
The Personal and Business labels in the wallet are an in-app switch. Crypto POS proceeds still settle to the business owner’s linked address. There is no separate on-chain “merchant vault” operated by Nodo.
2. P2P: non-custodial, per-trade, on-chain escrow
P2P is live. It is a marketplace for buying and selling USDC on Base against local-currency bank or remittance rails (DOP, EUR, USD, CHF).
What Nodo does not hold
For a normal trade, Nodo does not take the USDC into a company wallet. The seller locks the full trade amount into a dedicated escrow contract created for that trade (an immutable EIP-1167 clone from Nodo’s factory on Base). When the trade completes, the contract pays the buyer (minus the protocol fee) or returns the USDC to the seller.
That is the regulatory posture this product is built on: Nodo matches the trade, hosts chat, and records state. The crypto leg is on-chain. Nodo is not holding the pot.
What the escrow actually is
The escrow is role-based and fully on-chain for the USDC. It is not a multisig wallet. Three on-chain roles exist on each clone:
| Role | Who | What they can do |
|---|---|---|
| Seller | The party who locks USDC | Create the escrow, release to the buyer, or cancel before the buyer marks paid |
| Buyer | The party who pays fiat off-chain | Mark paid, dispute, or force a dispute after the release window |
| Arbiter | A designated Nodo address | resolve only after a dispute is open — send the pot to the buyer or refund the seller |
Nodo’s servers do not sign those transactions and do not store the arbiter key in the API. Users sign with their wallet. If a dispute is opened, a Nodo arbiter reviews the case and submits an already-signed resolve transaction; until then the USDC stays in that trade’s contract.
Factory configuration (fee, windows, pause) is controlled by a Gnosis Safe. The Safe cannot sweep open escrows. Each open pot stays in its own immutable clone.
On-chain vs off-chain
| Leg | Where it happens |
|---|---|
| USDC lock, mark-paid attestation, release, cancel, dispute, resolve | On-chain, Base, USDC |
| Bank or remittance payment of the fiat | Off-chain, between the two parties. Nodo does not run those rails and does not verify the bank credit on-chain. |
Default windows at deploy: about one hour to mark paid after lock, 24 hours after mark-paid for the seller to release. After the release deadline the buyer can force a dispute; there is no silent auto-release. Successful release to the buyer takes a 0.5% protocol fee on-chain to Nodo’s fee recipient. A refund to the seller takes no fee.
Minimum trade size is 1 USDC. Ads can set their own min/max in fiat. Creating or taking a trade requires a signed-in account, an @alias, and a linked wallet. See AML, KYC, and verification for what is not required today.
3. Merchant crypto payments
Merchants can take USDC on Base at checkout. This is live in POS (web and app).
- Staff create a charge. Nodo opens a payment intent and shows a QR / pay link.
- The customer sends USDC directly on-chain to the business owner’s linked wallet.
- Nodo watches the public transaction, marks the intent and the sale as paid, and can print the ticket.
Nodo never holds those proceeds. There is no merchant float inside Nodo. If the owner has never activated a wallet, checkout cannot take crypto.
The cashier only needs POS permission to open the charge. The coins always go to the owner’s address, not to a staff wallet.
4. Merchant cash-out
This path is not the same as sending USDC from a personal wallet, and it is not the P2P module.
What is live. On the business wallet, the owner can request a DOP payout to a Dominican bank account (the form lists Popular, Banreservas, BHD, Scotiabank, Promerica). They enter holder name, account type, account number, and amount.
Who the counterparty is. The product treats Nodo as the party that credits DOP once a transfer confirms. There is no third-party off-ramp partner wired into the current implementation.
What is still being finalized. Submitting the form is a request. Automated payout, status webhooks, and a settlement SLA are not live. Operations complete (or decline) the cash-out by hand. Do not read the request screen as an instant bank rail.
How this differs from a personal wallet. Personal wallets send and receive USDC on-chain to any Base address. They do not get this bank cash-out form. Crypto the business took at checkout is already in the owner’s wallet; cash-out is an optional fiat conversion with Nodo, not a withdrawal from a Nodo-custodied balance.
Verification. Marketplace “verified merchant” is a separate application (see AML, KYC, and verification). The cash-out form is shown on the business wallet and is not automatically gated on that badge today. Nodo may still ask for more business information before completing a payout, and may refuse a request.
5. What you should assume about risk
- On-chain transfers and escrow locks are final once confirmed, subject only to the contract’s own rules (release, cancel, arbiter resolve).
- Fiat you send in a P2P trade is sent to another user, not to Nodo. Proof lives in chat and in your bank, not in the escrow.
- Addresses and amounts on Base are public.
- Nodo can pause new escrow creation and can refuse or suspend accounts under the Terms. That does not let Nodo seize USDC sitting in an open clone.
The binding contract is the Terms of Use. Data we store around these flows is in the Privacy Policy.