5.4 KiB
jupiter-perps-transaction-confirmation Specification
Purpose
Defines independent Solana confirmation and outcome reporting for completed Jupiter Perps increase and decrease submissions.
Requirements
Requirement: Confirmed Perps operation completion
After the existing Perps increase or decrease flow produces a valid non-blank transaction signature, the service SHALL independently await that signature at CONFIRMED. It SHALL return the existing signature result only for SUCCEEDED; provider response validation and financial validation SHALL remain distinct prerequisites and SHALL not themselves constitute on-chain confirmation.
Scenario: Increase reaches confirmed success
- WHEN an increase submission returns a valid signature and its independent
CONFIRMEDoutcome isSUCCEEDED - THEN the service returns that signature
Scenario: Decrease reaches confirmed success
- WHEN a decrease submission returns a valid signature and its independent
CONFIRMEDoutcome isSUCCEEDED - THEN the service returns that signature
Requirement: Structured exceptional outcomes
The shared Jupiter API SHALL expose a checked outcome exception containing the known non-blank transaction signature, requested commitment, and complete transaction outcome. Construction SHALL reject null or blank signatures, null commitments, null outcomes, and SUCCEEDED outcomes. FAILED SHALL identify a definitive on-chain failure including its slot and compact Solana error, while TIMED_OUT SHALL identify an unknown outcome and explicitly warn against automatic equivalent resubmission.
Scenario: Confirmed on-chain failure
- WHEN an increase or decrease signature reaches
CONFIRMEDwith aFAILEDoutcome - THEN the service throws the checked outcome exception preserving the signature,
CONFIRMED, slot, and complete compact Solana failure details
Scenario: Confirmation timeout
- WHEN an increase or decrease signature produces a
TIMED_OUToutcome - THEN the service throws the checked outcome exception preserving the signature,
CONFIRMED, and unknown outcome without automatically resubmitting
Scenario: Successful outcome is supplied to exception
- WHEN a caller attempts to construct the outcome exception with
SUCCEEDEDor inconsistent null or blank data - THEN construction fails immediately
Requirement: Perps confirmation timeout policy
The reference service SHALL accept a constructor-injected, non-null, strictly positive confirmation timeout and SHALL preserve its existing constructor with a two-minute default. The configured duration SHALL be forwarded unchanged and SHALL begin governing only when awaiting the already submitted signature starts. Increase and decrease SHALL apply the same confirmation and outcome policy.
Scenario: Existing constructor is used
- WHEN the reference service is constructed without a confirmation timeout
- THEN each submitted increase or decrease uses a two-minute confirmation timeout
Scenario: Custom timeout is used
- WHEN the reference service is constructed with a positive duration
- THEN each submitted increase or decrease forwards exactly that duration to
CONFIRMEDawaiting
Scenario: Invalid timeout is supplied
- WHEN the reference service is constructed with a null, zero, or negative duration
- THEN construction fails before any Perps operation can be submitted
Requirement: Post-submission communication and interruption policy
If independent confirmation throws an I/O error after a signature is known, the service SHALL throw an IOException whose message identifies the increase or decrease operation, includes the signature, and states that the on-chain outcome is unknown, retaining the original error as cause. InterruptedException SHALL propagate directly without another RPC or Jupiter request. Confirmation SHALL never submit, rebuild, re-sign, retry, or resubmit a transaction.
Scenario: Confirmation communication fails
- WHEN independent confirmation throws an I/O error for a known Perps signature
- THEN the service reports the operation, signature, and unknown outcome, preserves the original error, and performs no retry or resubmission
Scenario: Confirmation is interrupted
- WHEN independent confirmation throws
InterruptedException - THEN interruption propagates directly and no subsequent request occurs
Requirement: Outcome-aware Perps alarm reporting
Perps increase and decrease alarm actions SHALL rely on the Perps service for confirmation and SHALL distinguish structured FAILED, structured TIMED_OUT, and other errors. A failed report SHALL include operation, signature, confirmation slot, and compact Solana failure details. A timed-out report SHALL include operation, signature, unknown-outcome status, and that no equivalent transaction was automatically resubmitted. Alarm actions SHALL NOT invoke transaction awaiting themselves.
Scenario: Alarm operation fails on-chain
- WHEN a Perps alarm action receives a structured
FAILEDoutcome exception - THEN it reports the operation, signature, confirmation slot, and compact on-chain failure details distinctly from generic errors
Scenario: Alarm operation remains unknown
- WHEN a Perps alarm action receives a structured
TIMED_OUToutcome exception - THEN it reports the operation, signature, unknown outcome, and absence of automatic equivalent resubmission distinctly from generic errors