Tap into trust

Tap. Pay. Done.

A Stellar wallet you pay with by tapping an NFC card. Each card gets its own x402 agent that signs the tap — no unlock, no app, no confirmation.

Beta 1.0.0 · Stellar Testnet · Android APK · Release notes · Google Play coming soon · Become a beta tester

Settlement
~5s ledgers
Network
Stellar
Contracts
3 on Soroban

Beta testers wanted

Help us launch on Google Play.

Noir is building a new way to experience blockchain payments through tap-to-pay, powered by Stellar and x402. We’re preparing for our Google Play Store launch and need Android users willing to test the app, share feedback and help make Noir better.

Every tester brings us one step closer to launch.

Paying should be invisible. Noir debits the moment your tag touches the terminal — built for transit turnstiles, campus canteens, event gates and retail checkout, where every second in the queue counts.

  • No app to open
  • No screen to unlock
  • No confirmation to tap

How it works

From tap to settlement in three steps.

  1. 01

    Link a card

    Hold an NFC card, sticker or wearable to your phone and sign once. Soroban’s device_registry records its hashed ID against your wallet.

  2. 02

    Set its agent and fund it

    Each card gets an agent key with a policy you sign: one asset, a per-payment cap and an optional expiry. Fund its escrow; your main balance stays untouched.

  3. 03

    Tap

    payment_escrow.authorize checks the policy on-chain and moves funds to the merchant, who claims in batch. Stellar confirms in seconds.

Features

Built for zero-friction commerce.

Open contracts, self-custody and sub-cent fees — without asking anyone to change how they pay.

  • Zero-interaction payments

    Tap an NFC card, sticker or wearable (NTAG213) to pay. No unlock required.

  • x402 tap-to-pay

    The tap carries an x402 payment request; the card’s agent signs it and the escrow contract settles it.

  • Constrained agents

    One agent per card, limited on-chain to one asset, a per-payment cap and an optional expiry.

  • Three Soroban contracts

    device_registry, agent_registry and payment_escrow — open, MIT-licensed, on Testnet.

  • Self-custody

    Owners sign their own registrations and policies via require_auth. Keys never leave the phone.

  • Built to integrate

    TypeScript SDK, REST API with API keys, and signed webhooks for every on-chain event.

Security

Simple to use. Robust by design.

Lose a tag and unlink it — the agent loses its authority and the card’s escrow returns to your wallet.

  • Hashed device identity

    Tag UIDs are SHA-256 hashed on the phone. Only the hash is ever written on-chain.

  • Blast-radius limits

    A card can only spend its own escrow, within its cap, asset and expiry — never your main funds.

  • Replay protection

    Every authorization carries a strictly increasing nonce; the contract rejects duplicates.

  • Encrypted on the phone

    Wallet keys are sealed behind your wallet password; phone unlock is opt-in. Backups are disabled.

  • Scoped API keys

    The Noir API stores only key hashes, scopes each key, rate-limits it, and never holds signing keys.

Architecture

Hardware tap to on-chain settlement.

  1. 01

    Tag

    NTAG213 card, sticker or wearable

  2. 02

    Phone

    Reads the tag and SHA-256 hashes its UID

  3. 03

    Soroban contracts

    device_registry
    Binds the SHA-256 hash of an NFC tag to the wallet that owns it.
    agent_registry
    Stores each device’s agent policy: which key may spend, which asset, how much per payment, until when.
    payment_escrow
    Holds each device’s pre-funded balance; authorizes taps within policy and lets merchants claim in batch.
  4. 04

    Stellar

    Consensus and settlement in seconds

  5. 05

    Merchant

    Batch claim of everything pending

Function-level reference and live Testnet IDs: Contracts documentation.

Developers

Accept Noir taps in your app.

Everything the wallet does is open on-chain. Use the SDK from JavaScript, or call the REST API from any language with an API key.

checkout.ts
import { NoirAgentClient } from '@noirx402/agent-sdk'

const noir = new NoirAgentClient() // Stellar Testnet

const check = await noir.checkPayment({ deviceHash, agent, asset, amount: 10_000_000n })
if (check.ok) await noir.authorizePayment({ agent: agentSigner, deviceHash, merchant, asset, amount: 10_000_000n })

Five-minute quickstart · Source on GitHub

Compared

What a card tap can’t do.

Every venue that hates checkout queues — transit, canteens, event gates, retail — is a Noir venue.

FeatureEMV tapPhone walletNoir
No phone unlock neededYes—Yes
Self-custody of funds——Yes
Sub-cent transaction fees——Yes
Stickers and wearables——Yes
Per-device on-chain limits——Yes
Open smart contracts + API——Yes

Demo

Watch it tap and go.

One minute with Noir: link a card, give it an agent, and tap to pay on Stellar.

Watch it on X

FAQ

Questions, answered.

What is Noir?

Noir is an open-source Stellar wallet for Android that lets you pay by tapping an NFC card, sticker or wearable. Each linked card is bound to a payment agent with on-chain limits, so a tap can pay without unlocking your phone.

What happens if I lose a card?

Revoke it from the app. The agent stops being able to spend immediately, and the card’s remaining escrow is returned to your main wallet. A card can never spend more than its per-payment cap, in its one asset, before its expiry.

Can other apps accept Noir payments?

Yes. The TypeScript SDK (@noirx402/agent-sdk) and the self-hostable REST API with API keys let any app read card policies, check a payment, run tap-to-pay, and receive signed webhooks.

Is Noir on mainnet?

Not yet. Noir runs on Stellar Testnet as a reference implementation funded by the Stellar Community Fund. Contracts, app and SDK are MIT-licensed.

Stack

  • Stellar
  • Soroban · Rust
  • React Native
  • Expo
  • TypeScript
  • NativeWind
  • Zustand
  • @stellar/stellar-sdk
  • react-native-nfc-manager
  • Vitest
  • Next.js

A world where paying is invisible.

Your wallet is your identity. Payments happen without friction. Settlement is instant.

Beta 1.0.0 · Stellar Testnet · Android APK · Release notes

View the pitch deck