diff --git a/benchmarks/solana-tx-landing-latency.yml b/benchmarks/solana-tx-landing-latency.yml index 9b376987..f1ad5d1e 100644 --- a/benchmarks/solana-tx-landing-latency.yml +++ b/benchmarks/solana-tx-landing-latency.yml @@ -84,7 +84,7 @@ abstract: | dual-mode arrives in v1.0.1 methodology PR. methodology: - - "Source endpoints (base64 sendTransaction, us-east Railway node): Jito `ny.mainnet.block-engine.jito.wtf/api/v1/transactions`. Helius Sender `ewr-sender.helius-rpc.com/fast?swqos_only=true` (requires skipPreflight + maxRetries=0). Nozomi `ewr.nozomi.temporal.xyz/?c=`. Astralane `ny.gateway.astralane.io/iris?api-key=` (non-canonical 3-elem params, mevProtect=true). 0slot `ny.0slot.trade?api-key=`." + - "Source endpoints (base64 sendTransaction, us-east Railway node): Jito `ny.mainnet.block-engine.jito.wtf/api/v1/transactions`. Helius Sender `ewr-sender.helius-rpc.com/fast?swqos_only=true` (requires skipPreflight + maxRetries=0). Nozomi `http://edge.nozomi.temporal.xyz/?c=` (geo-routed DNS, HTTP per Temporal Labs recommendation for server-to-server). Astralane `ny.gateway.astralane.io/iris?api-key=` (non-canonical 3-elem params, mevProtect=true). 0slot `ny.0slot.trade?api-key=`." - "Probe payload. 5 instructions in this exact order: SetComputeUnitLimit(50,000) + SetComputeUnitPrice(50,000 micro-lamports/CU) + SystemProgram.Transfer(payer→payer, 1 lamport) + SystemProgram.Transfer(payer→service tip wallet, floor lamports) + Memo(`ocb---`). cycle_id is an 8-byte random hex shared across the five parallel probes of one cycle, so the on-chain memos correlate." - "Tip floors (pre-registered, methodology PR + 14-day window to change). Jito 10,000 lamports. Helius Sender 10,000. Astralane 500,000 net of refunds. Nozomi 1,000,000. 0slot 1,000,000." - "Submission flow. One getLatestBlockhash(processed) shared across all five probes. One getSlot(processed) as submit_slot. For each service we subscribe to the signature via signatureSubscribe on the public WS BEFORE submission (otherwise a fast confirm could fire before we listen). Probes then fire in parallel goroutines, sign, POST. We block on the signatureNotification at commitment=confirmed; context.slot is land_slot; slot_delta = land_slot - submit_slot." diff --git a/docs/methodology/solana-tx-landing-active.md b/docs/methodology/solana-tx-landing-active.md index 196e6531..e07a9dce 100644 --- a/docs/methodology/solana-tx-landing-active.md +++ b/docs/methodology/solana-tx-landing-active.md @@ -151,6 +151,16 @@ Sponsorship policy and the disclosure block live in [`solana-landing-tiered-arch - The non-suppression clause grants the sponsor a single remedy for unfavorable results : terminate the agreement and receive a pro-rata refund. Never edit, delay, or selectively publish. - Methodology changes (this document) ship as PRs and are independent of sponsor contracts. +### 11.1 Endpoint selection principle + +Each service is probed against its **publicly-documented best-practice configuration** for the region the harness runs in. Concretely : + +- If a service documents a geo-routed DNS or a region-specific endpoint that minimises RTT for the harness's region, we use that. +- If a service publishes a recommended transport (HTTP vs HTTPS, gRPC vs JSON-RPC) for server-to-server submission, we use that. +- If a service publishes a tip floor, priority-fee guidance, or required flag (e.g. `skipPreflight=true`), we honour it. + +The defensible test : a developer reading the service's public docs and setting up the service for production should converge on the same configuration we probe with. We do NOT accept private optimisations communicated via DM or sales call; those are escalated to a public methodology PR (the same 14-day window applies). Every service is invited to open an issue or PR if their current probe configuration is not their documented optimum - the v1.4 entry below was triggered by such an exchange with Temporal Labs. + ## 12. Change log | Version | Date | Change | @@ -159,3 +169,4 @@ Sponsorship policy and the disclosure block live in [`solana-landing-tiered-arch | v1.1 | 2026-05-21 | Pre-launch reconciliation with implementation : metric names from `ocb_solana_landing_*` to `solana_landing_probe_*` (matches sibling OCB benches), `rate_limited` added as 4th drop reason, latency_ms histogram bucket list adjusted to include 250 ms and 30 s, blockhash commitment rationale clarified, memo format clarified (`ocb---` where cycle_id is itself the 8-byte random hex shared across all per-service probes in the cycle), `solana_landing_probe_enabled` gauge added so dashboards distinguish "prober disabled" from "prober stuck". | | v1.2 | 2026-05-23 | `getSignatureStatuses` poll interval reduced from 1 s to 200 ms after the first 7 days of live data showed all services collapsing to identical 1.0 s p50. The 1 s poll was the measurement floor (Solana confirmed status arrives in ~400 ms-1 s), so 200 ms restores 5x the resolution. Bench page queries also switched from `histogram_quantile` on the latency_ms histogram to `quantile_over_time` on the latency_ms gauge, since the histogram bucket list only had ~3 buckets in the 1-5 s zone where probes actually land, collapsing p50 to bucket midpoints. | | v1.3 | 2026-05-23 | Primary observation path switched from HTTP polling to `signatureSubscribe` over the public mainnet WebSocket (`wss://api.mainnet-beta.solana.com`). The RPC pushes the notification at the instant the commitment level is reached, so resolution is RTT-bounded (~30-50 ms us-east → mainnet-beta) rather than poll-cadence-bounded. Subscription is registered BEFORE submission to prevent missing fast confirmations. HTTP polling at 200 ms remains an automatic fallback if the WebSocket connect fails. Validated locally against mainnet-beta with end-to-end slot and signature subscribe tests before deploy. | +| v1.4 | 2026-05-23 | Nozomi endpoint switched from `https://ewr.nozomi.temporal.xyz/` (Newark, region-pinned) to `http://edge.nozomi.temporal.xyz/` (geo-routed DNS, HTTP). Reason: Railway us-east is Ashburn, the previous endpoint forced a cross-region hop adding ~30 ms RTT. The geo-routed DNS resolves to the POP closest to the caller. HTTP instead of HTTPS skips the TLS handshake on the hot path (Solana tx is already signed so plain-text body is not a confidentiality risk - the signature is public the moment the tx is on chain). Change requested by Jakob @ Temporal Labs on 2026-05-23 and applied to all probes from the same region. The same review pass is open for Jito / Helius / Astralane / 0slot - any service whose **publicly-documented** best-practice configuration differs from what we currently probe is invited to file an issue or PR. We do NOT accept private deals to alter the probe surface for any single service; we DO apply optimisations that the service publishes as their standard production recommendation. |