Offline payment primitive · Live on Solana devnet

Pay on Solana
without internet.

The payer signs with no internet; the receiver settles on-chain later. Self-custody, replay-protected, no trusted middleman.

First market: freight drivers paying at borders. Wallets and POS apps can build it in with the SDK.

Watch the pitch ↗ · tech walkthrough ↗

Mora app screen: Paid offline, 0.0030 SOL, showing the signed voucher as a QR code
Example voucher84 bytes
MORA
4 B
domain tag
escrow
32 B
escrow PDA
nonce
8 B
seeds the receipt PDA
payee
32 B
who can be paid · 9zS1…ajkx
amount
8 B
lamports · 0.0030 SOL
Oct 10
A real phone paid in airplane mode, collected on devnet
0 RPC calls
At the moment of payment
No double-spend
On Solana, every voucher settles once · see the replay rejected ↓

Proof

Verify it on Solana Explorer.

Every step below is a real devnet transaction. Open them to see the instructions, accounts and, for the replay, the failure.

Program (devnet)9fcXHD3pHDKLX79JuVgCEKQiqYkvVqFtpoAEVjBq4aJ8Open on Explorer ↗
  1. create_escrow

    Payer locks SOL into the escrow PDA.

    3DvM…UbLA
  2. Ed25519 verify + settle

    Receiver submits the offline voucher; the native program checks the signature.

    5nFd…urdf
  3. Replay the same voucherRejected, as designed

    Rejected on-chain: the receipt PDA for this nonce already exists ("already in use").

    3zko…YtUA
  4. close_escrow

    After expiry, the remainder and rent return to the payer.

    5gMF…SHRu
  5. On a real Android phone · 2026-10-10
  6. Offline balance from the phone

    The Mora Android app, approved in Solflare, locks 0.1 SOL into the escrow.

    4cWR…oMYi
  7. Collect the phone's offline payment

    Signed on the phone with no connection; the receiver settled it later and 0.01 SOL reached their wallet.

    2xKX…LWoz

Real, on devnet

  • Anchor program deployed on Solana devnet
  • Android app on a real phone: balance loaded with Solflare, payment signed in airplane mode, collected on devnet
  • Ed25519 verification via the native program
  • Replay protection at the account layer
  • create_escrow, settle and close_escrow
  • Local voucher signing with no RPC call
  • Many vouchers per escrow, capped by the locked amount
  • Expiry enforced; payments to the escrow owner rejected
  • Anchor tests for create, settle, replay and close on localnet and devnet
  • CLI for create, offline voucher, settle and close

Simulated or not yet built

  • In the first phone test the signed payment reached the receiver by copy and paste; phone-to-phone QR is next
  • Device-to-device hop uses BroadcastChannel in the browser demo
  • Settlement is in SOL to keep the prototype simple; stablecoins are not wired yet. Real trip budgets need them: a company can't carry SOL price risk

Next

  1. Real Bluetooth transport. Voucher handoff between two physical phones.
  2. Seed Vault on Seeker. Keep the signing key in secure hardware while offline.
  3. Stablecoin settlement. Settle vouchers in stablecoins, not only SOL.
  4. Freight pilots, then wallets and POS. A pilot with our design partner Sigma Logistics first; then integrations with wallet and POS teams.

The problem

When the signal drops, the payment disappears.

Solana Pay and wallets need a connection at the moment of payment; without one, the fallback is cash.

And sometimes the whole network goes down: after the February 2023 earthquakes, 1,154 of Turkey's 4,131 ATMs were still down, according to the Banks Association of Turkey.

First market · Freight drivers at the border

2.1 million

road export trips left Turkey in 2024 (UND)

A driver carries the company's trip budget and has to pay a partner on the spot. At borders and on long routes the signal drops and the payment fails.

Next markets

Merchants on unreliable 4G

The signal drops and the sale falls back to cash. With Mora the customer pays on the spot; it settles when either side reconnects.

Remittance corridors

One side of the transfer is often offline. A signed voucher can travel over any channel and still be checked on-chain later.

Field payroll

Pay workers where there is no coverage. Funds stay in an escrow the employer controls until each voucher is settled.

How it works

Five steps. Three on-chain calls.

A payment is a signature, not a transaction: it doesn't expire like a blockhash and can travel by QR today, or Bluetooth, SMS or mesh. On-chain, the program sees an Ed25519 verify, then settle.

  1. 01On-chain

    Open escrow

    The payer locks SOL into a PDA once, with an expiry. Funds stay theirs until a signed voucher is settled.

  2. 02Offline

    Go offline

    No RPC, no gas. The phone keeps the escrow key and can still sign.

  3. 03Offline

    Sign a voucher

    An Ed25519 message names payee, amount and nonce.

  4. 04On-chain

    Settle

    The receiver, or any relayer, submits verify + settle when back online. The receipt PDA blocks replay.

    See it on devnet
  5. 05On-chain

    Close

    After expiry, leftover SOL and rent return to the payer.

What a receiver can rely on offline, and what they can't.

Offline payments always leave a window between accepting a voucher and settling it. Mora makes that window explicit and bounds it.

Checked offline

  • The escrow belongs to the signer: its address derives from the owner's key and seed.
  • The owner signed the payee, amount and nonce: none of them can be altered.
  • The amount fits inside the escrow the voucher draws from.

Only known at settle

  • Whether the funds are still there. A payer can promise the same escrow twice; whoever settles first is paid.
  • Expiry. Settle must land before the escrow expires; after that the payer can reclaim the rest.

How Mora bounds the risk

  • An offline limit per receiver, like a card terminal's floor limit. Larger payments wait for a connection.
  • When the receiver is online, the voucher is checked against the escrow on-chain before it is accepted.
  • Short escrows and settling as soon as a connection returns keep the window small.

How it compares

Ways to pay offline, by what the receiver can rely on.

ApproachPays with no signalReceiver can verify offlineDouble-spendWho you trustSpecial hardwareStatus
SMS and USSD walletsNo: needs a cell signal and a serverNoKept out by the server's ledgerThe server or custodianNoLive services and prototypes
Signed transactions relayed over a meshYesSignature only; no funds until it landsNot bounded until it settlesNo oneNoPrototypes
Offline card terminalsYes, up to a floor limitYes: the card's cryptogramCapped by the floor limit; the merchant carries lossesThe card networkCertified chip card and terminalLive
Offline central-bank moneyYesYesSecure chip and low caps; detected afterwardsThe central bankSecure chipPilots
MoraYes, on both sidesYes: signature, escrow and amountNone on-chain. Offline: capped per receiver, known in advanceNo one: the funds sit in an on-chain escrowNo: any Android phoneDevnet prototype

Use it today · The app

Offline payments, on the phone.

An Android app built on the Mora SDK. Wallet approval goes through Mobile Wallet Adapter, so on Seeker the key can stay in Seed Vault.

SeekerSolana Mobile
  • Android
  • Mobile Wallet Adapter
  • Built for Seeker
Download the Android app (APK)

Android only, about 146 MB. Devnet preview, not audited. Connect Solflare set to Devnet.

  1. Mora app: offline banner, offline balance 0.0240 SOL of 0.0500, Pay tab

    01

    No signal, still paying

    Load an offline balance once. When the connection drops, the app says so and keeps working.

  2. Mora app: Paid offline, 0.0030 SOL, signed code shown as a QR

    02

    Paid with a signed code

    Scan the receiver's payment request, confirm, and show the signed code. No RPC call.

  3. Mora app: Collected, 0.0030 SOL settled on Solana

    03

    Collected when back online

    The receiver checks the code offline, then the app settles it on Solana as soon as there is a connection.

Use it today · The SDK

A TypeScript SDK for wallets and POS apps.

The protocol code the Mora app runs: build, sign and verify vouchers offline, plus the three escrow instructions. Works with the deployed program as is.

Preview 0.1.0. Devnet only, not audited. Source is in the private Mora repo; wallet and POS teams can request access.

Who calls what

Payer
online, once
createEscrowIx
Payer
offline
buildVoucherMessage → sign → encodeVoucherQr
Receiver
offline
decodeVoucherQr → verifyVoucherOffline
Receiver
back online
settleIxs → send
Payer
after expiry
closeEscrowIx

Market and model

What the first market is worth.

Companies pay; drivers and their partners use it; wallets and point-of-sale apps build it in.

5,638
Turkish companies licensed for international road transport
246,758
vehicles they run
≈ $30M
a year at $10 per user per month, one user per vehicle (ceiling, Turkey only)

Source: Turkish Ministry of Transport (UHDGM), end of September 2024, as reported in UND'nin Sesi, October 2024, p. 36.

How we make money

Now
B2B subscription: $10 per user per month. Price discussed with our pilot partner; we are not charging yet.
Mainnet
A small fee on each collected payment.
Scale
Wallets and point-of-sale apps that build Mora in share that fee.

Design partner

Design partner · Istanbul road freight

Sigma Logistics ↗

Written permission for a pilot.

Team

Three people in Turkey: two full time, one part time.

An engineer who built the protocol, a go-to-market lead from logistics and fintech, and an economist.

  • Core engineer · full time

    Furkan Duran

    Built the protocol, the SDK and the Android app; leads product. Superteam Türkiye member.

  • Payments & go-to-market · full time

    Özgün İbiş

    Logistics, fintech and marketing background; leads go-to-market and the freight pilots.

  • Research · part time

    Assoc. Prof. Özgün Burak Kaymakçı

    Economist at the Faculty of Economics, Istanbul University; leads our market research.

Work with us

Run a pilot with your drivers, or build Mora into your wallet.

Freight companies run a pilot with their drivers and partners; wallets and POS apps get SDK access; partners talk to us about an integration.