Feature/gem payments - #936
Draft
gemdev111 wants to merge 24 commits into
Draft
Conversation
# Conflicts: # ios/Gem/Services/ViewModelFactory.swift
Drop the identity footer and info sheet - the person icon on the button is the only cue needed. Name the merchant row Recipient on both the payment and confirm scenes, carry the merchant icon, and drop the duplicate App row. Title a payment confirmation Payment instead of Send.
Collect identity in a dismissible sheet over the payment scene instead of replacing it, so back keeps the payment alive, and require an explicit Continue afterwards rather than jumping into confirm. Remember collected quotes so the form is not asked for twice. Return to the scene from confirm, including the system back gesture. Show the merchant through a Destination.Merchant property with its icon and no disclosure, ordered to match iOS. Slide between scene and confirm. Build the web view with the app theme so the form is not dark inside the sheet, and destroy it on dismiss.
The identity explainer is gone from both apps, so the two keys it used are no longer referenced. Removed from every locale and regenerated.
gemdev111
marked this pull request as ready for review
August 20, 2026 20:43
leocarrillo1-hash
approved these changes
Aug 21, 2026
# Conflicts: # android/gemcore/src/main/kotlin/com/gemwallet/android/model/ConfirmParams.kt # ios/Features/Transfer/Sources/Services/TransferExecutor.swift # ios/Features/Transfer/Tests/Services/TransferExecutorTests.swift
gemdev111
marked this pull request as draft
August 24, 2026 14:45
The gateway is the authority on expiry: a stale quote comes back as QuoteExpired and core requotes, a dead payment comes back as PaymentExpired and we show it. The local countdown only duplicated that using the device clock, so it could disagree with the gateway on a skewed device while adding a state field, a timer, an expired button branch and a list component to each platform. Removes expiresAt from the payment models, the countdown rows and their components, the expired button state, and the confirm-screen disable. Core keeps requoting, now driven only by the gateway response.
Introduce a dedicated ConfirmParams.TransferParams.Payment to represent WalletConnect Pay payments and keep calldata separate from memo. Update serialization, hashing, and DTO conversion for payment flows. Adjust UI and viewmodel to handle the new Payment type (ConfirmScreen, PropertyDestination, PaymentViewModel, PaymentSceneState, ConfirmProperty). Fix metadata generation in ConfirmTransactionImpl. Update tests to use new fixtures and verify calldata preservation. Add test fixtures (PaymentMock) and adapt PaymentServiceTest and ConfirmParamsTest accordingly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds WalletConnect Pay — scan a merchant's payment code, choose which coin to pay with, complete the identity details the merchant requires, and sign. The payment appears in Activity with the merchant's name while it settles. Available on iOS and Android, behind developer mode.
Link decoding and the payment client live in core rather than behind Reown's Pay APIs, so both apps share one implementation and neither waits on the iOS Reown fork upgrade. This is the coins-only integration: native transfers through the gateway's settlement contract, validated in core against the quote the user was shown, one payment scene per platform, and the existing confirm flow for fee estimation and signing. Token settlement (Permit2) slots into the same core filter later.
Closes #790
iOS
pick a coin
identity form
details collected
sign
settling
Android
pick a coin
identity form
details collected
sign
settled