Skip to content

Feature/gem payments - #936

Draft
gemdev111 wants to merge 24 commits into
mainfrom
feature/gem_payments
Draft

Feature/gem payments#936
gemdev111 wants to merge 24 commits into
mainfrom
feature/gem_payments

Conversation

@gemdev111

@gemdev111 gemdev111 commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator

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

Payment
pick a coin
Details
identity form
Payment
details collected
Confirm
sign
Activity
settling
iOS payment iOS details iOS payment collected iOS confirm iOS activity

Android

Payment
pick a coin
Details
identity form
Payment
details collected
Confirm
sign
Activity
settled
Android payment Android details Android payment collected Android confirm Android activity

@gemdev111 gemdev111 self-assigned this Aug 20, 2026
# 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
gemdev111 marked this pull request as ready for review August 20, 2026 20:43
# 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
gemdev111 marked this pull request as draft August 24, 2026 14:45
gemdev111 and others added 2 commits August 24, 2026 18:13
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>
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.

Integrate WalletConnect Pay via WalletKit

2 participants