v0.3.10-pre.005
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/011-RAW_TRANSACTION_ACQUISITION.md -->
|
||||
<!-- version: 7 -->
|
||||
<!-- version: 8 -->
|
||||
|
||||
# Acquisition et alimentation `RawTransaction`
|
||||
|
||||
@@ -238,29 +238,29 @@ Une source concrète peut fournir plusieurs capabilities. Une capability peut ê
|
||||
|
||||
## 5. Matrice des méthodes et de leur applicabilité
|
||||
|
||||
| Famille / méthode | Contenu obtenu | RAW complet | Usage Worker live | Usage Job Backfill | Remarque |
|
||||
|-----------------------------------------------------------------|---------------------------------------|------------------------------|------------------------------------------------------------|---------------------------------------------|------------------------------------------------------|
|
||||
| HTTP `getTransaction(signature)` | transaction depuis signature connue | oui si disponible | oui, hydration d'un signal live | oui, hydration historique | dépend de la rétention du RPC |
|
||||
| HTTP `getSignaturesForAddress` + `getTransaction` | discovery adressée puis transaction | oui après hydration | non comme campagne de scan | oui, stratégie historique principale | naturellement paramétré par adresse/programme |
|
||||
| HTTP `getBlocks` / `getBlocksWithLimit` | slots confirmés | non | oui pour suivre/recoller le frontier courant si nécessaire | oui pour énumérer une plage historique | discovery par slots |
|
||||
| HTTP `getBlock(slot)` full | bloc et transactions | oui | oui pour live polling ou repair de continuité | oui pour historique par bloc | nécessite provenance observed en pool multi-endpoint |
|
||||
| HTTP `getSlot` / `getFirstAvailableBlock` / `minimumLedgerSlot` | bornes de ledger | non | oui, continuité | oui, admission d'une campagne | aucune transaction directe |
|
||||
| WS `logsSubscribe` | signature + logs | non | oui, discovery live + hydration | non pour historique pur | `mentions` standard limité à un pubkey |
|
||||
| WS `signatureSubscribe` | statut d'une signature connue | non | oui, confirmation ciblée interne | possible pour une requête ciblée en attente | one-shot |
|
||||
| WS `blockSubscribe` full | bloc + transactions | oui | oui | non sans mécanisme de replay historique | méthode standard instable |
|
||||
| Helius `transactionSubscribe` full | transaction + meta | oui | oui | non comme source historique | extension provider |
|
||||
| Yellowstone `transactions` | transaction exécutée + meta | oui | oui | oui si replay borné demandé/disponible | filters server-side |
|
||||
| Yellowstone `blocks` avec transactions | bloc + transactions | oui | oui | oui si replay borné demandé/disponible | utile au live et au backfill |
|
||||
| Yellowstone `transactions_status` | signature/status/error | non | oui + hydration | oui si replay/filtre borné | discovery/statut uniquement |
|
||||
| Yellowstone slots / `blocks_meta` | continuité de slots | non | oui | auxiliaire | aucune transaction full |
|
||||
| Yellowstone `from_slot` / replay | reprise d'un stream depuis slot | dépend du stream | oui uniquement pour continuité du Worker | oui pour campagne historique bornée | profondeur provider-specific |
|
||||
| API provider historique adressée | historique signatures ou transactions | provider-dependent | non comme campagne historique | oui | exemple Helius `getTransactionsForAddress` |
|
||||
| RPC archive standard | méthodes HTTP sur ledger ancien | oui selon méthode | non pour recherche historique | oui | provider ou self-host |
|
||||
| Old Faithful / `yellowstone-faithful` | historique par RPC/index | oui pour données disponibles | non | oui | archive spécialisée |
|
||||
| transaction body pré-exécution | signature/corps sans meta finale | non | oui, EARLY + hydration | non principal | faible latence |
|
||||
| shreds / deshred | fragments ou transaction reconstruite | non sans meta d'exécution | oui, EARLY + hydration | non principal | adapter spécialisé |
|
||||
| Agave RPC auto-hébergé | méthodes standard | selon méthode | oui | oui | mêmes rôles que RPC standard |
|
||||
| Agave + Yellowstone auto-hébergé | streams Yellowstone | selon stream | oui | oui avec rétention/replay opérateur | capability opérateur |
|
||||
| Famille / méthode | Contenu obtenu | RAW complet | Usage Worker live | Usage Job Backfill | Remarque |
|
||||
|-----------------------------------------------------------------|---------------------------------------|------------------------------|------------------------------------------------------------|---------------------------------------------|------------------------------------------------------------|
|
||||
| HTTP `getTransaction(signature)` | transaction depuis signature connue | oui si disponible | oui, hydration d'un signal live | oui, hydration historique | dépend de la rétention du RPC |
|
||||
| HTTP `getSignaturesForAddress` + `getTransaction` | discovery adressée puis transaction | oui après hydration | non comme campagne de scan | oui, stratégie historique principale | naturellement paramétré par adresse/programme |
|
||||
| HTTP `getBlocks` / `getBlocksWithLimit` | slots confirmés | non | oui pour suivre/recoller le frontier courant si nécessaire | oui pour énumérer une plage historique | discovery par slots |
|
||||
| HTTP `getBlock(slot)` full | bloc et transactions | oui | oui pour live polling ou repair de continuité | oui pour historique par bloc | nécessite provenance observed en pool multi-endpoint |
|
||||
| HTTP `getSlot` / `getFirstAvailableBlock` / `minimumLedgerSlot` | bornes de ledger | non | oui, continuité | oui, admission d'une campagne | aucune transaction directe |
|
||||
| WS `logsSubscribe` | signature + logs | non | oui, discovery live + hydration | non pour historique pur | `mentions` standard limité à un pubkey |
|
||||
| WS `signatureSubscribe` | statut d'une signature connue | non | oui, confirmation ciblée interne | possible pour une requête ciblée en attente | one-shot |
|
||||
| WS `blockSubscribe` full/base64, legacy-v0 | bloc + transactions | oui, parité RAW v1 prouvée | oui, direct pour le sous-ensemble qualifié | non sans mécanisme de replay historique | méthode standard instable ; capability validator-dependent |
|
||||
| Helius `transactionSubscribe` full/base64 | transaction + meta + signature/index | non sans hydration | oui, signal riche puis hydration HTTP | non comme source historique | absence de blockTime/version dans l’enveloppe qualifiée |
|
||||
| Yellowstone `transactions` | transaction exécutée + meta | oui | oui | oui si replay borné demandé/disponible | filters server-side |
|
||||
| Yellowstone `blocks` avec transactions | bloc + transactions | oui | oui | oui si replay borné demandé/disponible | utile au live et au backfill |
|
||||
| Yellowstone `transactions_status` | signature/status/error | non | oui + hydration | oui si replay/filtre borné | discovery/statut uniquement |
|
||||
| Yellowstone slots / `blocks_meta` | continuité de slots | non | oui | auxiliaire | aucune transaction full |
|
||||
| Yellowstone `from_slot` / replay | reprise d'un stream depuis slot | dépend du stream | oui uniquement pour continuité du Worker | oui pour campagne historique bornée | profondeur provider-specific |
|
||||
| API provider historique adressée | historique signatures ou transactions | provider-dependent | non comme campagne historique | oui | exemple Helius `getTransactionsForAddress` |
|
||||
| RPC archive standard | méthodes HTTP sur ledger ancien | oui selon méthode | non pour recherche historique | oui | provider ou self-host |
|
||||
| Old Faithful / `yellowstone-faithful` | historique par RPC/index | oui pour données disponibles | non | oui | archive spécialisée |
|
||||
| transaction body pré-exécution | signature/corps sans meta finale | non | oui, EARLY + hydration | non principal | faible latence |
|
||||
| shreds / deshred | fragments ou transaction reconstruite | non sans meta d'exécution | oui, EARLY + hydration | non principal | adapter spécialisé |
|
||||
| Agave RPC auto-hébergé | méthodes standard | selon méthode | oui | oui | mêmes rôles que RPC standard |
|
||||
| Agave + Yellowstone auto-hébergé | streams Yellowstone | selon stream | oui | oui avec rétention/replay opérateur | capability opérateur |
|
||||
|
||||
Cette matrice est intentionnellement **usage-first**. HTTP n'est pas « Backfill » et gRPC n'est pas « Worker » : leur rôle dépend de l'opération effectuée.
|
||||
|
||||
@@ -273,9 +273,8 @@ Sources capables de produire directement un matériau transactionnel complet :
|
||||
```text
|
||||
Yellowstone transactions
|
||||
Yellowstone blocks avec transactions
|
||||
WS blockSubscribe full
|
||||
Helius transactionSubscribe full
|
||||
provider stream compatible full transaction
|
||||
WS blockSubscribe full/base64 legacy-v0 qualifié
|
||||
provider stream compatible full transaction après parité prouvée
|
||||
```
|
||||
|
||||
Chemin logique :
|
||||
@@ -562,6 +561,8 @@ Helius transactionSubscribe
|
||||
|
||||
Le runtime WS possède des queues bornées et une logique de reconnect/resubscribe. Un reconnect ne constitue toutefois pas un replay adressable.
|
||||
|
||||
La qualification `pre.005` ferme deux cas distincts : `blockSubscribe` standard en `full/base64` avec `maxSupportedTransactionVersion = 0` produit, sur fixture identique, les mêmes bytes/hash RAW v1 que `getBlock`; Helius `transactionSubscribe` full/base64 conserve l’identité, le slot, le transaction wire, la meta et l’index mais ne transporte pas `blockTime` ni `version` dans l’enveloppe qualifiée. Helius reste donc un signal live riche à hydrater par HTTP avant persistence RAW directe.
|
||||
|
||||
### 12.3 Yellowstone gRPC
|
||||
|
||||
Le moteur KSP expose déjà les familles nécessaires :
|
||||
@@ -700,8 +701,8 @@ Yellowstone transactions
|
||||
Yellowstone blocks
|
||||
Yellowstone status + hydration
|
||||
WS logsSubscribe + HTTP getTransaction
|
||||
WS blockSubscribe full
|
||||
Helius transactionSubscribe full
|
||||
WS blockSubscribe full/base64 legacy-v0 direct qualifié
|
||||
Helius transactionSubscribe full/base64 + HTTP hydration
|
||||
HTTP live block polling
|
||||
HTTP hydration
|
||||
replay Yellowstone pour continuité du run
|
||||
@@ -710,13 +711,13 @@ sources EARLY via adapter extensible
|
||||
|
||||
### 14.3 Gaps Transport Worker
|
||||
|
||||
| ID | Adaptation | Motif |
|
||||
|--------|-----------------------------------------------------------------------------------|------------------------------------------------------|
|
||||
| `TR-B` | fermé : `get_block_observed` symétrique de `get_transaction_observed` | provenance exacte en pool HTTP |
|
||||
| `TR-C` | projection source-neutral des transactions full WS/Yellowstone | éviter plusieurs canonicalizers filaires |
|
||||
| `TR-D` | métadonnées sûres d'acquisition live au moment de la conversion | observation uniforme |
|
||||
| `TR-E` | conserver/exploiter `from_slot`, replay info et snapshots de continuité existants | ne pas créer un second moteur Yellowstone |
|
||||
| `TR-F` | adapters EARLY uniquement quand leur protocole est réellement implémenté | réserver la capability sans tout coder immédiatement |
|
||||
| ID | Adaptation | Motif |
|
||||
|--------|---------------------------------------------------------------------------------------|------------------------------------------------------|
|
||||
| `TR-B` | fermé : `get_block_observed` symétrique de `get_transaction_observed` | provenance exacte en pool HTTP |
|
||||
| `TR-C` | projection source-neutral des transactions full WS/Yellowstone ; Helius via hydration | éviter plusieurs canonicalizers filaires |
|
||||
| `TR-D` | métadonnées sûres d'acquisition live au moment de la conversion | observation uniforme |
|
||||
| `TR-E` | conserver/exploiter `from_slot`, replay info et snapshots de continuité existants | ne pas créer un second moteur Yellowstone |
|
||||
| `TR-F` | adapters EARLY uniquement quand leur protocole est réellement implémenté | réserver la capability sans tout coder immédiatement |
|
||||
|
||||
### 14.4 Config Worker
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/031-V0_3_10_RAW_TRANSACTION_INGEST_PLAN.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Plan v0.3.10 — RAW Transaction commune + Worker d’ingestion multi-source
|
||||
|
||||
@@ -356,19 +356,19 @@ La priorité `pre.001` n’est pas d’affirmer que la parité existe déjà ; e
|
||||
|
||||
### 6.1 Matrice capabilities Worker V1
|
||||
|
||||
| Capability | Méthode / protocole | Surface KSP `0.3.9` | Gap exact | Full / hydration | Provenance disponible | Continuité / replay | Preuve accessible | Adaptation Transport | Adaptation Config | Fixture | Live smoke |
|
||||
|:-------------------------------|:-----------------------------|:-------------------------------------------------|:--------------------------------------------------------------------|:----------------------------------------|:---------------------------------------------------------------------|:--------------------------------------------------------------|:----------------------------------------------------------|:-----------------------------------------|:--------------------------------------------------|:------------------------|:-----------------------------|
|
||||
| HTTP transaction hydration | `getTransaction` JSON-RPC | `get_transaction_observed` | aucun gap de provenance ; projection vers common à extraire | full après réponse non-null | provider + endpoint gagnant | aucune continuité native | Mainnet/Devnet/Testnet publics | non, hors adapter common | non | oui | oui opt-in |
|
||||
| HTTP live blocks | `getSlot` + `getBlock` | wrappers typés présents | `TR-B`: pas de `get_block_observed` | full par bloc | actuellement insuffisante en pool | polling depuis run frontier ; repair borné | publics | oui `get_block_observed` | rôle HTTP worker si profil dédié nécessaire | oui | oui opt-in |
|
||||
| WS logs + hydration | `logsSubscribe` + HTTP | wrapper logs + sessions | composer discovery + hydration sans perdre le statut de source | hydration requise | WS session safe + HTTP observed ; Store garde endpoint full-material | resubscribe seulement, aucun replay WS | Solana public/Helius standard | adapter Worker + TR-D, pas nouveau actor | profils existants suffisants pour première preuve | oui | oui opt-in |
|
||||
| WS signature + hydration | `signatureSubscribe` + HTTP | wrapper one-shot présent | utile ciblé mais pas source globale principale | hydration requise | idem | one-shot ; aucun replay | publics | aucun P0 spécifique | non | oui | secondaire |
|
||||
| WS blockSubscribe | `blockSubscribe` standard | wrapper + `SolanaConfirmedBlock` | projection transactions de block vers common + parité | full si parité prouvée | session/provider logique ; pas de winner HTTP | reconnect/resubscribe, pas replay | validator public selon support ; Helius explicitement non | TR-C adapter/parité | aucune exigée si endpoint supporte | oui | opt-in, capability-dependent |
|
||||
| Helius full transaction WS | `transactionSubscribe` | typed provider envelope, nested transaction JSON | transformer le nested payload en matériau common sans provider leak | full si parité prouvée, sinon hydration | provider/session/filter sûrs | reconnexion, pas historique garanti WSS | clé/tier opérateur requis selon plan | TR-C + TR-D | profil Helius éventuellement nécessaire plus tard | oui | opt-in/tier-dependent |
|
||||
| Yellowstone transactions | `Subscribe.transactions` | DTO full KSP, stream/reconnect présents | projection body+meta structurés vers RAW v1 byte-identique | full si parité prouvée | provider + endpoint settings + filter + created_at disponibles | `from_slot`, replay info, reconnect snapshot | OrbitFlare Devnet / PublicNode selon accès | TR-C + TR-D + TR-E | profils V3 déjà présents | oui | oui opt-in |
|
||||
| Yellowstone blocks | `Subscribe.blocks` | DTO block full + transactions | même gate de projection ; préserver slot/index/block_time | full si parité prouvée | idem | `from_slot`; upstream a corrigé replay blocks en juillet 2026 | mêmes providers | TR-C + TR-D + TR-E | non P0 | oui | oui opt-in |
|
||||
| Yellowstone status + hydration | `transactions_status` + HTTP | DTO status + HTTP observed | composer signal + hydration | hydration requise | status filter/created_at + HTTP winner | replay selon provider + HTTP repair | mêmes providers | TR-D + TR-E | non P0 | oui | oui opt-in |
|
||||
| Yellowstone block meta / slots | `blocks_meta`, `slots` | DTO + stream présents | aucun RawTransaction direct ; alimenter continuity tracker | non, auxiliaire | filter/slot/status/created_at | continuity evidence ; replay provider-specific | mêmes providers | TR-E côté Worker | non | oui | oui opt-in |
|
||||
| EARLY source | provider/shred adapter | aucune surface générique unique | `TR-F`, uniquement protocole réellement implémenté | hydration sauf preuve meta complète | provider-specific | provider-specific | généralement payant | différé | différé | seulement si implémenté | seulement si accessible |
|
||||
| Capability | Méthode / protocole | Surface KSP `0.3.9` | Gap exact | Full / hydration | Provenance disponible | Continuité / replay | Preuve accessible | Adaptation Transport | Adaptation Config | Fixture | Live smoke |
|
||||
|:-------------------------------|:-----------------------------|:-------------------------------------------------|:----------------------------------------------------------------------|:--------------------------------------|:---------------------------------------------------------------------|:--------------------------------------------------------------|:----------------------------------------------------------|:-----------------------------------------|:--------------------------------------------------|:------------------------|:-----------------------------|
|
||||
| HTTP transaction hydration | `getTransaction` JSON-RPC | `get_transaction_observed` | aucun gap de provenance ; projection vers common à extraire | full après réponse non-null | provider + endpoint gagnant | aucune continuité native | Mainnet/Devnet/Testnet publics | non, hors adapter common | non | oui | oui opt-in |
|
||||
| HTTP live blocks | `getSlot` + `getBlock` | wrappers typés présents | `TR-B`: pas de `get_block_observed` | full par bloc | actuellement insuffisante en pool | polling depuis run frontier ; repair borné | publics | oui `get_block_observed` | rôle HTTP worker si profil dédié nécessaire | oui | oui opt-in |
|
||||
| WS logs + hydration | `logsSubscribe` + HTTP | wrapper logs + sessions | composer discovery + hydration sans perdre le statut de source | hydration requise | WS session safe + HTTP observed ; Store garde endpoint full-material | resubscribe seulement, aucun replay WS | Solana public/Helius standard | adapter Worker + TR-D, pas nouveau actor | profils existants suffisants pour première preuve | oui | oui opt-in |
|
||||
| WS signature + hydration | `signatureSubscribe` + HTTP | wrapper one-shot présent | utile ciblé mais pas source globale principale | hydration requise | idem | one-shot ; aucun replay | publics | aucun P0 spécifique | non | oui | secondaire |
|
||||
| WS blockSubscribe | `blockSubscribe` standard | wrapper + `SolanaConfirmedBlock` | parité fermée pour full/base64 legacy-v0 ; adapter productif Worker | full direct pour sous-ensemble prouvé | session/provider logique ; pas de winner HTTP | reconnect/resubscribe, pas replay | validator public selon support ; Helius explicitement non | TR-C adapter Worker | aucune exigée si endpoint supporte | oui | opt-in, capability-dependent |
|
||||
| Helius full transaction WS | `transactionSubscribe` | typed provider envelope, nested transaction JSON | signal riche prouvé incomplet pour RAW v1 : blockTime/version absents | hydration HTTP obligatoire | provider/session/filter sûrs + winner HTTP du matériau complet | reconnexion, pas historique garanti WSS | clé/tier opérateur requis selon plan | TR-D + hydration Worker | profil Helius éventuellement nécessaire plus tard | oui | opt-in/tier-dependent |
|
||||
| Yellowstone transactions | `Subscribe.transactions` | DTO full KSP, stream/reconnect présents | projection body+meta structurés vers RAW v1 byte-identique | full si parité prouvée | provider + endpoint settings + filter + created_at disponibles | `from_slot`, replay info, reconnect snapshot | OrbitFlare Devnet / PublicNode selon accès | TR-C + TR-D + TR-E | profils V3 déjà présents | oui | oui opt-in |
|
||||
| Yellowstone blocks | `Subscribe.blocks` | DTO block full + transactions | même gate de projection ; préserver slot/index/block_time | full si parité prouvée | idem | `from_slot`; upstream a corrigé replay blocks en juillet 2026 | mêmes providers | TR-C + TR-D + TR-E | non P0 | oui | oui opt-in |
|
||||
| Yellowstone status + hydration | `transactions_status` + HTTP | DTO status + HTTP observed | composer signal + hydration | hydration requise | status filter/created_at + HTTP winner | replay selon provider + HTTP repair | mêmes providers | TR-D + TR-E | non P0 | oui | oui opt-in |
|
||||
| Yellowstone block meta / slots | `blocks_meta`, `slots` | DTO + stream présents | aucun RawTransaction direct ; alimenter continuity tracker | non, auxiliaire | filter/slot/status/created_at | continuity evidence ; replay provider-specific | mêmes providers | TR-E côté Worker | non | oui | oui opt-in |
|
||||
| EARLY source | provider/shred adapter | aucune surface générique unique | `TR-F`, uniquement protocole réellement implémenté | hydration sauf preuve meta complète | provider-specific | provider-specific | généralement payant | différé | différé | seulement si implémenté | seulement si accessible |
|
||||
|
||||
### 6.2 `TR-B` — `get_block_observed`
|
||||
|
||||
@@ -479,17 +479,17 @@ Transaction V1 / champ config : proto >= 12.6 nécessaire, donc 12.7 courant est
|
||||
|
||||
### 7.3 Provider/access matrix revalidée
|
||||
|
||||
| Provider / source | État courant utile | Accès de preuve KSP | Décision `0.3.10` |
|
||||
|:---------------------|:----------------------------------------------------------------------------------------------------|:-----------------------------------------------------|:-----------------------------------------------------------------------|
|
||||
| Solana public RPC/WS | HTTP/WS standards accessibles ; blockSubscribe reste capability validator-dependent | sans secret, opt-in live | P0 HTTP/WS |
|
||||
| PublicNode | Mainnet/Testnet RPC/WS/Yellowstone affichés ; archive access proposé, profondeur replay non prouvée | profils KSP + smokes ignored existants | P0 Yellowstone live ; replay seulement après preuve |
|
||||
| OrbitFlare | Free/Developer : gRPC Devnet ; Yellowstone full fidelity ; Mainnet gRPC payant/add-on | profil Devnet + x-token operator | P0 Devnet live ; Mainnet non requis |
|
||||
| Helius standard WSS | tx extension disponible ; blockSubscribe explicitement non supporté ; 10 min inactivity | dépend de clé/tier opérateur | txSubscribe adapter fixture + smoke opt-in si accès |
|
||||
| Helius LaserStream | reconnect + replay jusqu’à 24 h documentés | Mainnet/tiers selon compte ; ne pas supposer gratuit | architecture compatible, live non bloquant pour release si tier absent |
|
||||
| QuickNode | Yellowstone Scale+ ; port 443/x-token ; port 10000 legacy sunset 1 octobre 2026 | pas de tier gRPC actuel | bloqué tier ; aucun profil 10000 à introduire |
|
||||
| Alchemy | Yellowstone Mainnet/Devnet PAYG/Enterprise | pas de tier actuel | bloqué ; replay non constant |
|
||||
| Jito ShredStream | shutdown annoncé pour le 5 septembre 2026, migration DoubleZero recommandée | aucun besoin | `SUNSET`, ne pas implémenter TR-F dessus |
|
||||
| EARLY autres | protocoles/prix variables | variable | adapter seulement après protocole+accès+RAW role prouvés |
|
||||
| Provider / source | État courant utile | Accès de preuve KSP | Décision `0.3.10` |
|
||||
|:---------------------|:----------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------|:-----------------------------------------------------------------------|
|
||||
| Solana public RPC/WS | HTTP/WS standards accessibles ; blockSubscribe reste capability validator-dependent | sans secret, opt-in live | P0 HTTP/WS |
|
||||
| PublicNode | Mainnet/Testnet RPC/WS/Yellowstone affichés ; archive access proposé, profondeur replay non prouvée | profils KSP + smokes ignored existants | P0 Yellowstone live ; replay seulement après preuve |
|
||||
| OrbitFlare | Free/Developer : gRPC Devnet ; Yellowstone full fidelity ; Mainnet gRPC payant/add-on | profil Devnet + x-token operator | P0 Devnet live ; Mainnet non requis |
|
||||
| Helius standard WSS | tx extension disponible ; blockSubscribe explicitement non supporté ; enveloppe full sans blockTime/version qualifiés | dépend de clé/tier opérateur | signal + hydration HTTP ; smoke opt-in si accès |
|
||||
| Helius LaserStream | reconnect + replay jusqu’à 24 h documentés | Mainnet/tiers selon compte ; ne pas supposer gratuit | architecture compatible, live non bloquant pour release si tier absent |
|
||||
| QuickNode | Yellowstone Scale+ ; port 443/x-token ; port 10000 legacy sunset 1 octobre 2026 | pas de tier gRPC actuel | bloqué tier ; aucun profil 10000 à introduire |
|
||||
| Alchemy | Yellowstone Mainnet/Devnet PAYG/Enterprise | pas de tier actuel | bloqué ; replay non constant |
|
||||
| Jito ShredStream | shutdown annoncé pour le 5 septembre 2026, migration DoubleZero recommandée | aucun besoin | `SUNSET`, ne pas implémenter TR-F dessus |
|
||||
| EARLY autres | protocoles/prix variables | variable | adapter seulement après protocole+accès+RAW role prouvés |
|
||||
|
||||
Alchemy reste volontairement `À REVALIDER` sur la profondeur replay : sa page dédiée Historical Replay annonce environ `432000` slots / `48 h`, tandis que son overview/SubscribeRequest mentionne encore `6000` slots. KSP ne doit encoder **aucune** constante Alchemy ; le runtime se fie à une capability/replay info observée ou à un paramètre configuré/prouvé.
|
||||
|
||||
@@ -1062,9 +1062,17 @@ Conformément à `TR-C2`, aucun adapter productif Transport DTO -> `RawTransacti
|
||||
|
||||
Le premier rejeu opérateur de `pre.004` a validé les audits, `cargo check`, les tests common, les 387 tests Transport et le canari cross-layer, mais Clippy strict a rejeté sept `expect()` placés dans deux helpers de fixture hors du corps `#[tokio::test]`. `pre.004-fix.001` corrige uniquement ces helpers en retournant explicitement des `Result`; aucun code de production, contrat RAW, surface Transport, golden ou dépendance n’est modifié.
|
||||
|
||||
Le rejeu opérateur du fix le 2026-09-06 est intégralement vert : audits statiques, `cargo check --workspace`, Clippy strict, tests common, 387 tests Transport avec suites publiques/release/doctests, et suite complète `ksp-job-backfill-lib`. Les arbres n’ont pas été rejoués car `pre.004-fix.001` n’a modifié aucune dépendance ni feature.
|
||||
|
||||
### `pre.005` — parité WS/Helius full
|
||||
|
||||
Fermer projection `blockSubscribe` + Helius `transactionSubscribe` vers matériau common, golden parity ou fallback hydration explicitement qualifié.
|
||||
**Statut : réalisé.**
|
||||
|
||||
Deux canaris cross-layer test-only ferment la qualification sans ajouter de code de production. `blockSubscribe` standard en `confirmed/full/base64`, `maxSupportedTransactionVersion = 0`, `showRewards = false` reproduit le même `SolanaConfirmedBlock` que `getBlock` puis les mêmes référence, slot, block time, bytes RAW v1 et content hash pour une transaction legacy. Ce sous-ensemble legacy/v0 est donc qualifié direct ; Transaction V1 reste explicitement au gate `pre.006`.
|
||||
|
||||
Helius `transactionSubscribe` full/base64 conserve la signature, le slot, le transaction wire, la meta et `transactionIndex`, mais la notification qualifiée ne fournit ni `blockTime` ni `version`. Le canari construit la meilleure projection possible puis prouve qu’elle diverge de l’hydration HTTP sur block time, bytes RAW v1 et content hash malgré une identité/slot identiques. Helius est donc verrouillé comme signal live riche + hydration HTTP, jamais comme producteur RAW-direct dans ce contrat.
|
||||
|
||||
`tokio-tungstenite` est ajouté uniquement en `dev-dependencies` du Backfill pour les serveurs WebSocket locaux déterministes ; un canari de dependency boundary interdit sa migration vers les dépendances de production. `TR-C2` reste Worker-owned.
|
||||
|
||||
### `pre.006` — parité Yellowstone transactions/blocks
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/027-V0_3_10_RAW_TRANSACTION_INGEST.md -->
|
||||
<!-- version: 6 -->
|
||||
<!-- version: 7 -->
|
||||
|
||||
# Validation v0.3.10 — RAW Transaction commune + Worker d’ingestion
|
||||
|
||||
@@ -228,8 +228,8 @@ Familles à prouver séparément :
|
||||
```text
|
||||
HTTP getTransaction
|
||||
HTTP getBlock transaction
|
||||
WS blockSubscribe transaction
|
||||
Helius transactionSubscribe full
|
||||
WS blockSubscribe transaction legacy/v0 full/base64
|
||||
Helius transactionSubscribe full/base64 -> negative parity / hydration
|
||||
Yellowstone transaction
|
||||
Yellowstone block transaction
|
||||
Transaction V1
|
||||
@@ -796,5 +796,59 @@ Version technique du fix :
|
||||
workspace.package.version = 0.3.10-pre.4.fix.1
|
||||
```
|
||||
|
||||
Le gate complet de `pre.004` doit être rejoué après application du fix avant ouverture de `pre.005`.
|
||||
Le rejeu du fix communiqué le 2026-09-06 est intégralement vert :
|
||||
|
||||
```text
|
||||
cargo fmt --all : exécuté
|
||||
General Rust rule audit: clean
|
||||
Rust export completeness audit: 0 candidate(s)
|
||||
KSP workspace Rust rule audit: clean
|
||||
Markdown table audit: clean (339 table(s), 758 file(s))
|
||||
cargo check --workspace : PASS
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings : PASS
|
||||
cargo test -p ksp-raw-transaction-lib : PASS, 12 unit + 9 intégration, 0 échec
|
||||
cargo test -p ksp-onchain-transport-lib : PASS, 387 unit + 51 public API + 43 release completeness + 4 doctests, 0 échec ; smokes live ignorés comme prévu
|
||||
cargo test -p ksp-job-backfill-lib : PASS, 51 unit + 21 intégration, 0 échec
|
||||
```
|
||||
|
||||
Les arbres Cargo n’ont pas été rejoués sur ce fix car aucune dépendance ni feature n’a changé. `pre.004-fix.001` est donc fermé et `pre.005` peut s’ouvrir.
|
||||
|
||||
### 13.7 Qualification WS/Helius de `pre.005`
|
||||
|
||||
Le canari `ksp-job-backfill-lib/tests/ws_raw_parity.rs` utilise uniquement des serveurs HTTP/WS locaux déterministes. Aucun smoke réseau ni secret provider n’est requis.
|
||||
|
||||
Cas positif standard :
|
||||
|
||||
```text
|
||||
HTTP getBlock observed
|
||||
WS blockSubscribe confirmed/full/base64/maxSupportedTransactionVersion=0
|
||||
-> même SolanaConfirmedBlock
|
||||
-> même RawTransactionReference
|
||||
-> même slot
|
||||
-> même block_time
|
||||
-> mêmes bytes RAW v1
|
||||
-> même content_hash
|
||||
```
|
||||
|
||||
Ce gate qualifie uniquement le sous-ensemble legacy/v0. Transaction V1 reste au gate `pre.006`.
|
||||
|
||||
Cas négatif Helius :
|
||||
|
||||
```text
|
||||
Helius transactionSubscribe full/base64
|
||||
-> même signature/identité que HTTP
|
||||
-> même slot
|
||||
-> transaction wire + meta + transactionIndex présents
|
||||
-> blockTime absent
|
||||
-> version absente
|
||||
|
||||
meilleure projection Helius
|
||||
!= hydration HTTP complète sur block_time
|
||||
!= bytes RAW v1
|
||||
!= content_hash
|
||||
```
|
||||
|
||||
Le résultat est normatif pour le Worker : Helius `transactionSubscribe` est un signal live riche qui doit être hydraté par HTTP avant persistence RAW. Aucun champ absent n’est inventé et aucun RAW v2 n’est introduit.
|
||||
|
||||
La dépendance `tokio-tungstenite` nécessaire aux fixtures WS est strictement `dev-dependencies`; `tests/dependency_boundary.rs` verrouille cette frontière. Aucun edge de production Transport -> common n’est ajouté.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user