Repository navigation
feat(flipcash): adopt ocp 0.8.0 and flipcash2 0.20.0 contracts - #1799
Merged
Merged
Conversation
Built against local client checkouts; no version pins changed. opencode: SendPublicMultiPaymentMetadata model, proto mapping both ways, IntentMultiTransfer builder and TransactionController.directMultiTransfer. flipcash: Community service/repository/controller (GetCommunity), boost_usd on reactors, emoji reactions and reaction updates, ReactionUpdate.Action.BOOSTED, RemoveReactionError.CannotRemoveBoosted, chat holdings_summary, activity BoostedReaction, and a ReactionBoost intent metadata builder. A BOOSTED stream update no longer clears the viewer's own reaction.
This was referenced Oct 16, 2026
IntentMultiTransfer.create now requires every share to be in the intent mint and in one currency matching the verified rate's currency. It also accepts optional appMetadata, carried on TransactionMetadata.SendPublicMultiPayment and written to the intent's app_metadata, as SendPublicPayment does. TransactionController.directMultiTransfer passes it through. Adds IntentMultiTransferTest covering action shape, metadata and rejections.
…rotocol to 0.20.0
bmc08gt
marked this pull request as ready for review
October 16, 2026 21:59
Drive IntentMultiTransfer.create with multi_payment_intent.json: action count, ids, source, destination, authority, mint and amount per action; the transfer compact message and SHA-256 each action signs once the server nonce and blockhash are applied; and the SendPublicMultiPayment metadata (source, mint, destination, destination_owner, quarks, native amount, currency). The rejections array must each make create throw. The ed25519 key pair is mocked, so signatures are not asserted.
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.
Pins ocp-client-protocol 0.8.0 (code-payments/ocp-client-protocol#11) and flipcash2-client-protocol 0.20.0 (code-payments/flipcash2-client-protocol#28), both published. The pin bump is one commit for both packages, since
libs.versions.tomlhas no lockfile. 7bbc406 brings the multi-payment intent checks in line with iOS and carries app metadata through.Adopts the contract changes:
SendPublicMultiPayment:IntentMultiTransferandTransactionController.directMultiTransfer. They emit oneNoPrivacyTransferper payment, in order, with a sharedVerifiedState. The newMetadatacase maps both ways.CommunityApi,CommunityService,CommunityRepository,CommunityController.getCommunity(mint), the Hilt binding, andGetCommunityError.ReactionUpdate.Action.BOOSTEDandRemoveReactionError.CannotRemoveBoosted.EventStreamDelegatetreated anything butADDEDas a removal, so a BOOSTED update would have cleared the viewer's own reaction. It now keys offREMOVED.boostUsdonReactor/EmojiReaction/ReactionUpdate(plusactorBoostUsd),ChatMetadata.holdingsSummary,BoostedReactionon the sent/received crypto notifications, andbuildReactionBoostMetadata.The multi-payment builder doesn't yet match iOS's in its inputs or validation. Android takes destination owners and derives the vaults, and always sends
destination_owner. iOS takes destinations and sends the owner only when set. Each checks one rule the other doesn't. What goes on the wire agrees. Nothing calls either builder yet.Left for the feature work: the boost payment flow, sorting by
boostUsd, UI forCannotRemoveBoosted(it falls through to the generic network failure), persistingboostedReaction, and a Community consumer.