Integration Prerequisites
As Solana grows and more AMMs are built, we have to be more cautious in the AMMs we integrate, we look into a variety of factors.- Code health: It will help with integration and ensure maintainability in the future.
- Security audit: This is important to ensure users’ funds are secure and the program is not malicious.
- Traction: We look at the traction of the AMM to ensure it has market demand and is well-used.
- Team and backers: This is a good indicator of the quality of the AMM if they are backed by or built by reputable or verifiable entities.
Step 1: Implement the AMM Interface
Implement theAmm trait from the jupiter-amm-interface crate for your AMM. The jup-ag/jupiter-amm-interface repository is the source of truth for the trait definition and implementation guidance, follow its READMEs.
Jupiter-side requirements:
- Enable us to fork your SDK, this ensures our users that we can guarantee maintenance, support for the SDK, and fix potential bugs related to integrated AMMs.
- Limit the
Ammimplementation to deserializing state and quoting. Keep the detailed math in your SDK, and do heavy deserialization and precomputation inupdaterather thanquote.
NOTE
get_accounts_to_update provides the necessary accounts to fetch. They are batched and cached on our end, then delivered through update to the AMM instance. There might be multiple calls to quote using the same cache, so we do not allow any network calls in the entire implementation.Step 2: Verify quote parity with the test kit
Before submitting, prove that your implementation quotes exactly what the on-chain program executes. Thejupiter-amm-test-kit crate in the same repository automates this: it snapshots a live pool, runs your Amm::quote, executes your program’s native swap instruction in LiteSVM, and asserts the on-chain token deltas equal the quote exactly.
Follow the test kit README for the test-suite pattern and fixtures. The SPL Token Swap reference suite is a complete working example to copy.
The kit covers the common case first: ExactIn swaps that run as a single top-level instruction with one signer. If one of its documented limitations blocks you, open an issue on the repository rather than working around it silently.
Step 3: Submit your integration
Once your parity tests pass, submit your AMM for review through the AMM integrators support form. Include:- A link to your SDK repository, with the parity test suite and committed fixtures, and access for us to fork it.
- Your security audit.
- Traction metrics and information about your team and backers.
More
Detect Jupiter Frontend Flow
Detect Jupiter Frontend Flow
Trades that originate from the Jupiter frontend (jup.ag) are retail flow. They are non-toxic order flow and if your propAMM can identify this flow, you can quote it tighter spreads with confidence.To make that flow verifiable, the Jupiter frontend adds a dedicated signer to every swap transaction and signs the transaction with it:
To detect Jupiter frontend flow, check the transaction’s account keys for this address as a signer and confirm its signature is present and valid. Jupiter holds the private key, so a valid signature from this address can only have been produced by the Jupiter frontend.
Verify the signature, not just the presence of the address. Any sender can add
sighWH8KaiT7QhtV4w29ReVF8kG6D5yG3EQP1KYyGVF to a transaction’s account keys, but only the Jupiter frontend can produce a valid signature for it. A transaction that lists the address without a valid signature from it is not Jupiter frontend flow.