Skip to content

feat: add usdt wallet and paykit payments - #1432

Draft
ben-kaufman wants to merge 12 commits into
masterfrom
feat/usdt-pr-ready-20261006
Draft

ben-kaufman wants to merge 12 commits into
masterfrom
feat/usdt-pr-ready-20261006

Conversation

@ben-kaufman

@ben-kaufman ben-kaufman commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

This PR adds USDT0 on Arbitrum One to Bitkit, with fees paid in USDT.

Uses Core 0.8.0-rc2 and Paykit rc71. Other platform: synonymdev/bitkit-ios#884.

Description

  • Adds USDT balances, direct send/receive and transaction details, with USDT entries in Home and wallet activity. Balance, activity and celebration summaries round to cents; nonzero amounts below a cent remain visible. Payment entry, review, fees and transaction details retain exact amounts.
  • Implements the supplied Figma Home, wallet and receive designs, including Tether assets, network selection, amount entry, fees and receive celebration. Uses the shared USDT teal (#009393) across wallet, Paykit and address-sharing flows.
  • Reuses the existing receive sheet, keypad, payment review, authentication and swipe controls. USDT receive uses dollar entry with a BTC equivalent. The selected network is explicit on the QR, address details and shared payment text. USDT sends follow the Bitcoin send layouts; compact screens retain scrollable details and accessible payment controls.
  • Supports Paykit contact payments, requests and subscription installments with conversion quotes, payment deadlines and verified proofs. Bitkit-created subscriptions use one asset family to avoid requiring fresh conversion quotes for later installments.
  • Applies fixed rates for the selected asset and payment method, including same-asset pricing. Review shows the exact payable amount valued at Bitkit's own exchange rate; request details label the original requested amount. Quoted initial subscription payments require amount review. Changing the method for a quoted payment returns through amount review.
  • Adds reusable Orchestra deposit addresses and outbound bridging through USDT0 or Orchestra, selecting the best eligible quote before approval. Deposit and bridge details include status, refund information and support/copy actions.
  • Backs up pending payments and Paykit attribution through encrypted VSS backups.
  • Adds optional USDT address sharing to Earn approval alongside Bitcoin and Paykit permissions. Authorization shows the requester, exact permissions, trust guidance and compact identity card. Users can continue without USDT when they decline or the address is unavailable.
  • Shares the payment-request summary and invoice-note components between BTC and USDT review, with the contact avatar, requester and purpose shown before payment.

Out of Scope

  • Translation completion; new strings use English fallback.
  • Gateway deployment and acceptance testing of every bridge route.
  • Cross-network Paykit payments, automatic recurring payments and USDT purchases in Earn.

Design

Bitkit - Refactor v63.

Paykit, subscription, refund and support states without supplied USDT frames reuse existing native components and the shared USDT theme. Real network availability, payment precision and system insets remain authoritative.

Preview

Native Android amount entry and transaction details. No payment was submitted for these captures.

USDT send amount USDT transaction review details

QA Notes

Journeys

  • new usdt-bridge-support.xml — contact support and copy bridge/deposit references.
  • new usdt-wallet-navigation.xml — Home balance and mixed activity, wallet navigation, and fresh receive sessions.
  • new usdt-receive-amount-and-units.xml — dollar amount entry, BTC equivalent, exact USDT precision, explicit network and network-aware sharing.
  • new paykit-quoted-usdt.xml — request currency, accepted methods and payment review.
  • new share-receiving-details.xml — optional USDT consent, unavailable-address handling and sharing only approved details.
  • updated create-and-propose.xml — subscription methods follow the selected denomination.

Manual Tests

  • Pay a contact, request and subscription installment → verify receipt, attribution and restart recovery — funded Arbitrum accounts and controlled billing clock not in Capabilities.
  • Deposit and bridge through each enabled route → verify destination, amount and transaction details — funded cross-network accounts and provider controls not in Capabilities.
  • Interrupt a backup, retry and restore on the other platform → verify pending payments recover without duplication — controlled VSS outages and cross-platform restore not in Capabilities.

Configuration: docs/usdt.md. Matching creator claim and invoice verification: pubky/paykit-server#47.

Automated Checks

  • added UsdtDisplayTest.kt — BTC equivalents, stale-rate handling, locale-aware cent rounding and small-balance display.
  • added UsdtSupportDetailsTest.kt — bridge and deposit support references.
  • added PaykitAmountTest.kt — conversion and rounding.
  • added PaykitRequestPricingTest.kt — asset/rail pricing, independent market valuation, recurring quotes and payment deadlines.
  • added PaykitUsdtPaymentRepoTest.kt — request binding, proofs and retries.
  • added UsdtRepoTest.kt — wallet recovery and authorization before submission.
  • added UsdtDepositViewModelTest.kt — deposit limits and provider results.
  • updated BackupRepoTest.kt — backup and restore.
  • updated PaykitSdkServiceTest.kt — payment-required and background backups.
  • updated PaykitPaymentRequestRepoSubscriptionTest.kt — subscription methods and installments.
  • updated PubkyAuthRequestTest.kt — composed claims and optional USDT omission.
  • updated PubkyAuthApprovalViewModelTest.kt — unavailable USDT can be omitted or retried.

@ben-kaufman
ben-kaufman force-pushed the feat/usdt-pr-ready-20261006 branch from 190743f to 378b76e Compare October 7, 2026 04:27
Base automatically changed from codex/paykit-shared-runtime-local-20260930 to master October 7, 2026 17:17
@ben-kaufman
ben-kaufman force-pushed the feat/usdt-pr-ready-20261006 branch 2 times, most recently from a2b564e to abf7997 Compare October 8, 2026 14:53
@ben-kaufman
ben-kaufman force-pushed the feat/usdt-pr-ready-20261006 branch from 23f5d3b to c0cfeba Compare October 8, 2026 21:57

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant