CONF-1944: Run the one-attempt Solana Pay path and recovery loop - #10273
Draft
pedronfigueiredo wants to merge 5 commits into
Conversation
This was referenced Sep 16, 2026
pedronfigueiredo
force-pushed
the
pnf/conf-1944-run-the-one-attempt-solana-source-path-and-recovery-loop-in-core
branch
from
September 17, 2026 15:01
4f24922 to
099cef5
Compare
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.
Summary
Implements the Core-owned Solana source path for MetaMask Pay on top of CONF-1943's transaction-owned CAIP source metadata:
TransactionMeta.metamaskPayas the single durable owner; TransactionPayController state remains transient/quote/v2SOL/SPL instruction and lookup-table responses with structural validationattemptingbefore exactly one client-ownedsignAndSendTransactioncallexternallyHandledfrom the publish hook so TransactionController suppresses EVM RPC fallback and EVM receipt polling for the hashless parentnotifyRelayOfSolanaTransactionsolely for Relay indexing notification of an existing signatureisExternalPublishThere is no source resubmission operation. The four separate operations are:
Relay endpoint rationale and authority
Existing EVM Relay traffic remains on
/quote. Relay deprecates that endpoint, but this PR does not change the established EVM contract. Solana uses the supported/quote/v2endpoint exercised by the verified integration fixtures.Relay's public OpenAPI documents the generic
/quote/v2request, including destinationtxs, but does not fully document the observed Solana instruction/LUT response. Core treats that response as an integration-specific observed contract and validates its structure before crossing the client preparation boundary. This does not claim that legacy/quoteis technically incapable of Solana.Commit stack
3cfae69505— add the one-attempt Solana Pay flow33b2264e27— harden the client and external-publication boundary161d8614fa— embed atomic Solana product callsc6b0cc879f— preserve the immutable Solana source amount099cef50c3— adapt to transaction-owned, phase-aware execution state from the updated parentValidation
@metamask/transaction-pay-controllertest suite: 100% statements/lines/functions and 99.5% branches@metamask/transaction-controllertest suiteyarn buildyarn lint:eslintyarn lint:miscyarn changelog:validateNon-failing Watchman recrawl/worker-shutdown warnings were observed during Jest runs.
Solana Pay ticket and PR index
CONF-1943 — Persist the Solana Pay intent model in TransactionPayController
mainCONF-1944 — Run the one-attempt Solana source path and recovery loop in Core
CONF-1945 — Ship the Solana Pay source picker and confirmation flow in Extension
mainCONF-1946 — Ship the Solana Pay source picker and confirmation flow in Mobile
mainCONF-1947 — Wire rollout flags, analytics, and support diagnostics for Solana Pay