Install or open the app
Use shop.ifrunit.tech in the browser, or add it to the home screen on iPhone, iPad or supported Android devices when the browser offers PWA install. Android 9 and older should remain in browser mode.
IFR Benefits Network guide
This is the operating guide for the current shop app: customer-presented checkout passes, compatible seller QR proofs, wallet-owned seller profiles, rule-based discounts and seller-signed redemption.
Customer path
Use shop.ifrunit.tech in the browser, or add it to the home screen on iPhone, iPad or supported Android devices when the browser offers PWA install. Android 9 and older should remain in browser mode.
The app reads ETH, IFR and IFRLock status. Verification never transfers tokens; it only asks for a one-time signature.
If a seller rule requires more locked IFR than the wallet has, use the in-app Lock IFR panel, then return with the same wallet.
Create a short-lived customer QR. After the seller scans it and chooses a rule, review seller, product, discount and required IFR on your device, then sign the exact checkout, which redeems it once. You can still scan a compatible seller QR instead.
My benefits lists the checkout receipts saved in this browser and can re-verify your signature locally. The server keeps no customer wallet or history, so clearing browser data or switching devices loses this list.
Seller path
Connect the seller wallet, create a profile, and keep the Business ID. The default network policy allows each owner wallet up to five active and 25 total profiles, including deactivated profiles.
Deactivation hides the public catalog and scanner and pauses products, rules and checkout staff. Reactivation restores only the profile and permanent URL; review products and rules, then authorize each staff wallet again only when needed.
Define category, product or service, discount, minimum locked IFR and QR lifetime. Active rules appear in the scanner.
Open /b/:businessId on the counter device. Scan or paste the customer pass, select the intended active rule and sign its one-time binding. Compatible seller-issued QR sessions remain available.
Registering a seller profile never enables rewards; they stay off until the owner wallet signs a separate reward application, and an owner-signed disable stops them at any time. Sellers that want a separate standard EVM payout account (StealthX-style setups) prove control of that account with its own fresh signature before governance compares it on-chain; smart-contract wallet proof is not supported yet. Sellers that opt out entirely simply never apply.
Load owner-only session history in pages of 50 to see QR status, masked verified wallet, locked amount and rejection reason, or create a browser-local masked full CSV export.
The customer signs the QR challenge, the backend checks IFRLock on-chain, and the seller wallet signs the one-time redeem action.
Wallet support
Production checks browser-injected Ethereum wallets first, then opens WalletConnect when no injected provider is available. Customer, seller and checkout screens keep WalletConnect and Coinbase Wallet visible as explicit choices for MetaMask, Trust, Rainbow, OKX and hundreds of compatible wallets.
New users should create or import their wallet inside a trusted wallet app first. The Benefits Network is non-custodial: it never asks for a seed phrase, never stores private keys, and only requests wallet signatures or explicit IFR approve/lock transactions.
Create an Ethereum wallet in MetaMask, Coinbase Wallet, Trust, OKX or another EVM-capable wallet, then connect it here.
Back up the recovery phrase offline inside the wallet setup, never paste it into a website, verify shop.ifrunit.tech and Ethereum Mainnet, and disconnect after using a shared device.
Use the shop app's Lock IFR panel to approve only the entered amount and lock it in IFRLock.
Pass creation, exact-offer confirmation, compatible seller-QR proof or read-only My benefits authorization; none moves tokens.
Short-lived server-issued messages for profile, rules, session history, redeem and reward opt-in or opt-out actions.
Developer hooks
Seller profile
Request a resource-bound one-time business:create challenge, sign it, then POST /api/seller/businesses with x-ifr-nonce.
Profile lifecycle
List active and inactive owned profiles with business:list. Deactivate with business:delete to atomically pause the profile, products, rules and operators. Restore only the profile with a fresh business:reactivate challenge scoped to its Business ID.
Rules
Read with timestamp-signed GET. Every POST/PATCH/DELETE uses a fresh nonce bound to the business or exact rule.
Session history
GET /api/seller/businesses/:id/sessions?limit=50&cursor=...&snapshot=... with Action: sessions:list. Preserve the first response snapshot across pages.
QR session
Request a one-time Action: sessions:create message bound to owner/operator, business and rule; sign it, then POST /api/sessions with x-ifr-nonce.
Customer pass
POST /api/passes with an empty body creates an opaque pass; seller signs passes:bind scoped to pass and rule; the customer fetches the proof text with its wallet (POST /api/passes/:id/challenge) and confirms with walletAddress + signature (POST /api/passes/:id/confirm), which redeems once.
Customer proof
POST /api/sessions/:id/challenge with { walletAddress } returns the proof text; POST /api/attest with sessionId, walletAddress and signature redeems once after a fresh on-chain check.
Customer history
Device-local only. The server keeps no customer history; /api/customer/history endpoints return 410.
Redeem
No separate seller call. The customer proof redeems atomically; POST /api/sessions/:id/redeem returns 410.
Seller rewards
Rewards are off by default. rewards:apply, rewards:disable and rewards:reward-wallet each use a fresh business-bound nonce; confirming a separate payout wallet also requires that wallet to sign its own one-time proof for the same business and scope.