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 approve the exact checkout. You can still scan a compatible seller QR instead.
On the home screen, sign the explicit read-only history request to load benefits verified by the same wallet across devices. The ten-minute access stays only in browser memory.
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 (VLABS-style setups) 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/challenge, sign and create an opaque pass; seller signs passes:bind scoped to pass and rule; customer confirms through the private control-token endpoints.
Customer proof
GET /api/sessions/:id/challenge, then POST /api/attest with the customer signature.
Customer history
POST /api/customer/history/challenge, sign once, exchange at /authorize, then use the memory-only read token for signer-bound snapshot pages.
Redeem
Request a one-time sessions:redeem challenge bound to the session ID, sign it, then POST /api/sessions/:id/redeem with x-ifr-nonce.
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.