Integration and onboarding path for market maker teams.

Getting started

Getting Enrolled

Enrollment is configured by the BAM node operator before the node starts. Provide the following details:

FieldWhat to provide
Signing pubkeyThe pubkey of the keypair your transactions will be signed with (up to 32)
Program IDThe Solana program your market update instruction targets
Market accountThe writable market account pubkey your transactions update (up to 64)
Seqno offsetByte offset within your instruction data where the u64 sequence number begins
Seqno lengthMust be 8 (u64 = 8 bytes)
Account filterOptional additional account used to disambiguate markets

If you would like to get enrolled, please fill out this form.


Transaction Format

Canonical structure

Transaction {
    signers: [ <enrolled_signing_keypair> ],
    instructions: [
        SetComputeUnitLimit { units: <your_cu_limit> },
        SetComputeUnitPrice { micro_lamports: <>= operator_minimum> },
        MarketUpdateInstruction {
            program: <enrolled_program_id>,
            data: [
                <...prefix bytes...>,
                <seqno as u64 little-endian at configured offset>,
                <...suffix bytes...>
            ],
            accounts: [
                { pubkey: <enrolled_signer>,  signer: true,  writable: false },
                { pubkey: <market_account>,   signer: false, writable: true  },
                ...
            ]
        }
    ]
}

Sending protocol

Send raw wire-format Solana transactions as UDP datagrams to the PTPU socket.

ParameterValue
ProtocolUDP (raw datagrams, no framing)
EncodingStandard Solana wire format
Port5012 (default — confirm with operator)

There is no connection handshake. Send and forget. Retransmitting the same packet within the 370ms deduplication window is safe — duplicates are filtered at no cost. For a newer update, send a new transaction with a higher seqno rather than retransmitting.

Blockhash

Refresh your blockhash every 30–60 seconds via getLatestBlockhash (the Solana JSON-RPC method for fetching a fresh blockhash). Transactions that fail the age check are dropped silently during buffering.


Seqno Strategy

The seqno determines which update survives coalescing within a batch. Rules:

  • Always increase seqno for newer data. The buffer keeps only the highest seqno per market. A lower seqno than one already buffered will be dropped.
  • Per-market counters. Coalescing is independent per market.
  • No gap requirement. Any monotonically increasing scheme works (increment by 1, by microseconds, etc.).
  • Globally monotonic. The highest seen seqno persists across auction cycles; use a source that is monotonic over the full process lifetime.

Recommended: Unix timestamp in microseconds (u64).