ORRANGE / Product

Private Wallet

The consumer surface for STRK20: receive, shield, send, and unshield privately from one calm interface.

The wallet keeps the STRK20 complexity underneath. You see Receive / Send / Balance / Activity. The connected privacy wallet handles viewing keys, encrypted notes, discovery, proofs, and signing. The dapp never touches cryptographic secrets and never falls back to public ERC-20 transfers.

Supported stack

LayerSupported
Privacy walletReady (privacy-enabled Starknet wallet, Wallet API ≥ 0.10), or an ORRANGE-embedded Privy wallet (SDK lane)
NetworkStarknet Sepolia validated — private STRK20 receiving/balances are auto-synced from the connected wallet
AssetsSTRK, ETH, USDC (Sepolia pool tokens)

The core flows

Connect a wallet

  1. Install the Ready browser extension and open /wallet.
  2. Connect via the wallet’s approval prompt. The app auto-detects STRK20 Wallet API capability (wallet_supportedWalletApi) and the chain (wallet_requestChainId).
  3. If the wallet is on the wrong network, the app surfaces a switch prompt.

Enable private receiving

  1. Open Enable private receiving. The app probes the wallet’s registration state via wallet_strk20Balances (NOT_REGISTERED / ready).
  2. If unregistered, the app submits a real STRK20 deposit; the wallet transparently adds viewing-key registration + channel setup in the same transaction (autoRegister/autoSetup).
  3. Confirmation is only reported after on-chain acceptance is reconciled — never from the hash alone.

Shield assets (“Make private”)

  1. In Send, choose Make private (deposit), a token, and an amount.
  2. Review and confirm in your wallet. The wallet builds the note, generates the proof, and submits.
  3. The app reconciles the real transaction state (submitted → confirming → confirmed). The deposit leg is public; the resulting note is private.

Send privately

  1. Choose Send privately, enter the recipient’s Starknet address and amount.
  2. The recipient must already have enabled STRK20 private receiving — a private note can only be created for a registered recipient. Otherwise the wallet returns a recipient-readiness error, surfaced honestly.
  3. Confirm in your wallet; it spends your notes and creates the recipient’s encrypted note.

Receive privately

Share your private address (your Starknet address) once — copy or QR. Anyone can send you a private STRK20 payment. Your wallet performs discovery and your private balance updates; the dapp polls the wallet and reconciles external incoming payments.

Unshield

Spend a private note back to a public address. Choose Unshield, pick the recipient and amount, and confirm. The wallet withdraws the note to the public recipient.

Two integration lanes

The wallet works with two ways of reaching STRK20, depending on how you connect:

  • Wallet API lane — a privacy wallet (e.g. Ready) owns proving and submission via wallet_strk20InvokeTransaction.
  • SDK lane — an ORRANGE-embedded Privy wallet uses the vendored STRK20 SDK directly for note discovery, proving, and submission.

Both lanes end at the same STRK20 pool. See STRK20 Integration for the details.

Known limitations

  • Zero-balance registration: there is no register-only Wallet API RPC, so an unfunded account cannot be registered by the dapp alone — it must fund a small amount or complete setup in the wallet UI.
  • Consent-gated readiness: wallet_strk20Balances sits behind the wallet’s “share private balances” consent; a refused consent makes readiness unknown.
  • No per-payment inbound history: the Wallet API exposes balances, not inbound payment history, so activity is a local cache of your own actions.
  • Fee sponsorship not assumed: the network fee is paid by your wallet.
Live end-to-end transfers require a real privacy wallet, a funded Sepolia account, and the STRK20 operator proving/discovery stack. The app never shows mock balances or fake confirmations.