Tab

RESOURCES

Changelog

Shipped changes, newest first. Patches that don't affect the public API or the on-chain behaviour aren't listed here. Subscribe via the community channels for push notifications on new entries.

2026-06-02 · X relay fee + OAuth 1.0a posting + parallel mention processing

  • X relay fee live.Tab now charges a small relay fee per X tip to offset X API costs and bridge gas. Three tiers, all denominated in USD but collected in the tip's asset (computed via live spot price):
    • $0.05 same-chain tip under $5
    • $0.10 same-chain tip at or above $5
    • $0.30 cross-chain tip (flat, offsets relay.link bridge gas Tab pays)
    Fee charged on top of the tip (recipient receives the full amount), settles to Tab treasury in the same poll cycle. OpenTab tips remain on-the-house in v1.
  • OAuth 1.0a User Context for posting. X v2 POST /2/tweetsrejects app-only Bearer auth. Bot now signs replies with OAuth 1.0a (HMAC-SHA1) using the bot account's Access Token + Secret. Reads (mentions polling, username lookup) still use the cheaper app-level Bearer.
  • Parallel mention processing. A burst of 10 tips in the same 30s window now processes concurrently (Promise.allSettled), not sequentially. A slow bridge on one tip no longer blocks the next nine.
  • Tighter reply text.Tip card URL removed from X replies (X doesn't unfurl arbitrary image links; the raw t.co clutter wasn't adding signal). OpenTab claim URL now includes the escrow id so the link actually resolves to a valid claim page.

2026-06-01 · X (Twitter) tipping bot

  • X bot live. Mention @Tabpaybot with tip @alice 5in any tweet to send a P2P tip from your gasless Tab wallet. Same dispatch engine as Telegram and Discord, same OpenTab fallback when the recipient isn't on Tab yet. V1 covers P2P only; split tips land in a later release.
  • Connect X. New dashboard card binds your X account to your Tab handle via OAuth 2.0 PKCE. POST /api/auth/x/start GET /api/auth/x/callback writes a row into the shared connections table with platform='x'.
  • Tiered rate limiting.5 tips/hour for connected senders, 1 tip/24h for unconnected curious users. Per-user error-reply cooldown so spammers can't drain X API calls on repeated failures. Daily API budget circuit breaker halts polling if Tab approaches the daily X spend cap.
  • OpenTab on X.Tips to unconnected recipients land in an OpenTab escrow keyed on the recipient's X user_id. They claim by linking X via the dashboard later. Refundable by the sender if unclaimed.

2026-05-30 · polish + native-order resilience

  • Native-asset order completion. /api/pay/smart accepts an optional orderId. When set, Tab marks the order completed server-side after Smart Pay lands and fires order.completed. Native (ETH/BNB/CELO/SOL) orders no longer depend on the cron indexer (which only catches USDC PaymentRelayed) or the client's single mark_paid call. Resilient to client network blips.
  • POS terminal asset picker.Dashboard's POS now exposes USDC / ETH / BNB / CELO / SOL chips above the numpad. Asset filters valid chains; chain snaps automatically on switch. /api/checkout validates the chain x asset combo.
  • Multi-source row in candidates picker. POST /api/pay/smart/candidates now surfaces a kind: "multi"row when the auto planner returns a multi-source pack AND it's cheaper than the cheapest single-source. SmartPayModal renders it with a purple accent + leg breakdown.
  • Bot bridge auto-source fallback. TG and Discord bridge wizards now retry without a pinned source when the picked source is empty / hits slippage. Matches the web bridge modal. Reply card carries an autoSourcedflag so bots can render "Sourced from X" instead of pretending the pick was used.
  • Solana enable budgetbumped 4 min → 6 min so slow relay.link fills don't dead-end the onboarding before SOL arrives.
  • SDK v0.5.2 on npm. Adds SmartPayParams.orderId so agent callers can hand order completion off to Tab.

2026-05-29 · v2 routing + Solana parity

  • Multi-source aggregation.When no single chain holds enough but the wallet's total does, kind: "multi" routes pack the payment across N chains in parallel. Per-leg outcomes with allOk flag for partial-success cases.
  • Per-route candidate picker. New POST /api/pay/smart/candidatesreturns top-N source options pre-priced, cheapest first. SmartPayModal has a "Show source options" toggle to render them.
  • 4-step progress UX everywhere. BridgeModal + SmartPayModal poll GET /api/pay/smart/status and render a BasedBot-style step counter (⚙ Preparing → ⏳ Waiting for confirmation → 🔄 Bridge processing → ✅ Bridge complete) with a segmented progress bar. TG and Discord bridge wizards mirror the same labels with a unicode progress bar.
  • Gasless subscription deactivate / reactivate. New POST /api/subscriptions/manage. 7702 delegation caveats extended to whitelist deactivatePlan(bytes32) + reactivatePlan(bytes32) selectors on the subscription router. No contract redeploy needed. Legacy delegations fall back to user-signed writeContract on 409 delegation_legacy.
  • Solana subs health probe. Dashboard plan form consults GET /api/diag/solana-subson mount and auto-disables Solana in the chain dropdown when the Subscriptions Program config PDA isn't initialised.
  • Wrap-more / unwrap-all SOL. Active-state Solana Smart Pay panel exposes a balance card with a Wrap input + Unwrap-all button. POST /api/solana/wrap (kind: wrap | unwrap) builds + partial-signs the tx; Tab's executor pays the SOL fee, the user signs to authorise the lamport move.
  • Workspace routing fix. Buyer-side signing key now respects useTabMode. Merchant-mode buyers debit their HKDF-derived business wallet instead of accidentally draining their personal wallet.
  • SDK v0.5.0 on npm. SmartPayAsset includes "SOL", recipientChain accepts "solana", new tab.solana.topUp({ amountSol }) helper, relay result exposes requestId for status polling.
  • Tip card chain logos. Bot-shared tip card PNG renders the real chain mark (Base blue, BNB yellow, SOL gradient, etc.) in a pill in the top-right.
  • TG bot parser fix. Strips Telegram's /command@botnamedisambiguator so the bot mention can't steal the recipient slot (was charging the bot itself in some configurations).

2026-05-28

  • Solana Smart Pay parity.One-signature delegation onboarding for USDC + native SOL on Solana via the Solana Foundation Subscriptions Delegation Program (Cantina-audited). Native SOL is held as wSOL inside the user's wallet; wallets auto-display as a single SOL balance.
  • Solana destination in Smart Pay.The Smart Pay modal's chain dropdown now includes Solana, and the asset dropdown includes SOL. Recipient resolution picks the recipient's Solana base58 address when targeting Solana.
  • POST /api/solana/top-up. When the user has no SOL on Solana for the Smart Pay enable tx, the panel auto-bridges native SOL from their EVM USDC balance through relay.link. Bypasses the buy-SOL-on-Coinbase-first dead end.
  • POS / pay page Smart Pay fallback.Buyers whose stable balance on the destination chain is short now auto-route through Smart Pay instead of failing with “deposit funds via Receive.”
  • Bridge auto-source. When the picked source chain has no balance, the bridge modal retries the quote without the source pin so any chain works. Surfaces the actual source it used.
  • Smart Pay slippage default 1% → 2%. Covers typical relay.link bridge fee + DEX slippage on small cross-chain amounts; old 1% rejected legitimate routes.
  • Business workspace routing fix. Buyers in merchant mode now sign with their HKDF-derived business key and debit their business wallet instead of personal. Payment links and Find-a-Tab respect the active workspace.
  • Business handle slug. /pay/handle/[h]?w=businessroutes the order through the 1% business router and lands the payout in the merchant's business wallet.
  • HandleSuggest autocomplete.Friends prefill on OpenTab, Smart Pay modal, and Find-a-Tab inputs — one tap to fill an @handle you pay regularly.
  • Subscription deactivate fixes. Workspace-aware signing key (business plans now use the business key), rate-limit bucket raised from 30/min to 60/min, Solana relay surfaces program-side simulation errors before returning the tx.
  • Notification bell. Fixed crash when feed contained a tip_inkind (added defensive fallback so future kinds can't crash the dropdown), plus a dashboard-wide error boundary.