v0.2.7-pre.011
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/014-V0_2_7_ONCHAIN_WEBSOCKET_PLAN.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 13 -->
|
||||
|
||||
# Plan `0.2.7` — WebSocket Solana standard
|
||||
|
||||
@@ -876,6 +876,8 @@ warning centralisé pour unstable à la création, pas à chaque notification
|
||||
|
||||
Le serveur local est un fixture de Transport ; aucune application Tauri n'est modifiée pour tester WebSocket.
|
||||
|
||||
Checkpoint `pre.011` : les trois familles unstable sont désormais matérialisées. `blockSubscribe` réutilise le DTO bloc HTTP lossless, rejette `processed`, conserve un `maxSupportedTransactionVersion` numérique non figé à zéro et couvre une notification sensiblement supérieure à 1232 octets sous les bornes KSP. `slotsUpdatesSubscribe` couvre les sept variantes connues et un fallback `Unknown` raw borné par la limite de message. `voteSubscribe` conserve `timestamp` omitted/null/value. Le warning unstable est émis au point commun de création des subscriptions typed et non dans chaque wrapper.
|
||||
|
||||
## 19. Smoke live opt-in
|
||||
|
||||
Après stabilisation : un test `#[ignore]` Transport pur sur Devnet, préférentiellement une subscription stable simple (`slotSubscribe`) :
|
||||
@@ -945,7 +947,7 @@ pre.007 DONE — reconnect borné + resubscribe déterministe + continuity gap
|
||||
pre.008 DONE — backpressure per-sub + overflow/limits + causes terminales sûres + leak/lifecycle adversarial tests
|
||||
pre.009 DONE — wrappers stable lot A : account + program + logs, DTOs/options/KSP-TRANSPORT-007
|
||||
pre.010 DONE — wrappers stable lot B : signature + slot + root, terminaison signature/KSP-TRANSPORT-007
|
||||
pre.011 unstable : block + slotsUpdates + vote, warnings + fallbacks wire/KSP-TRANSPORT-007
|
||||
pre.011 DONE — unstable : block + slotsUpdates + vote, warnings + fallbacks wire/KSP-TRANSPORT-007
|
||||
pre.012 compliance 18/18 + canaries public API + composition Config + régressions HTTP
|
||||
pre.013 smoke live opt-in + README/USAGE + cargo tree/duplicates + dependency audit final
|
||||
pre.014 validation workspace finale + docs/compliance + prompt 0.2.8
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/validation/010-V0_2_7_ONCHAIN_WEBSOCKET.md -->
|
||||
<!-- version: 12 -->
|
||||
<!-- version: 13 -->
|
||||
|
||||
# Validation `0.2.7` — WebSocket Solana standard
|
||||
|
||||
@@ -37,8 +37,8 @@ Pour une paire unstable, l'unsubscribe associé est classé `Unstable pair` dans
|
||||
|---:|---------------------------|-------------|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------|---------------------------------------------------------------|-----------------------------------------------------------------|-------------------|
|
||||
| 1 | `accountSubscribe` | subscribe | Stable/documented | pubkey ; config `commitment`, `encoding`, `dataSlice` ; result numeric id ; `minContextSlot` upstream actuellement ignoré, donc non promis | `accountNotification` | fixture encodings/config + subscribe/notify | `https://solana.com/docs/rpc/websocket/accountsubscribe` | Done `pre.009` |
|
||||
| 2 | `accountUnsubscribe` | unsubscribe | Stable/documented | remote id ; `true` or RPC error unknown id | account pair | handle local -> remote id fixture | `https://solana.com/docs/rpc/websocket/accountunsubscribe` | Done `pre.009` |
|
||||
| 3 | `blockSubscribe` | subscribe | **Unstable** | `all`/mentions filter ; confirmed/finalized ; encoding ; tx details ; max tx version ; showRewards | `blockNotification` | all options + null block/error + validator capability fixture | `https://solana.com/docs/rpc/websocket/blocksubscribe` | Planned `pre.011` |
|
||||
| 4 | `blockUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | block pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/blockunsubscribe` | Planned `pre.011` |
|
||||
| 3 | `blockSubscribe` | subscribe | **Unstable** | `all`/mentions filter ; confirmed/finalized ; encoding ; tx details ; max tx version ; showRewards | `blockNotification` | all options + null block/error + validator capability fixture | `https://solana.com/docs/rpc/websocket/blocksubscribe` | Done `pre.011` |
|
||||
| 4 | `blockUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | block pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/blockunsubscribe` | Done `pre.011` |
|
||||
| 5 | `logsSubscribe` | subscribe | Stable/documented | `all`, `allWithVotes`, exactly one `mentions`; commitment | `logsNotification` | 3 filters + invalid multi-mention + notification | `https://solana.com/docs/rpc/websocket/logssubscribe` | Done `pre.009` |
|
||||
| 6 | `logsUnsubscribe` | unsubscribe | Stable/documented | remote id ; boolean/error | logs pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/logsunsubscribe` | Done `pre.009` |
|
||||
| 7 | `programSubscribe` | subscribe | Stable/documented | program pubkey ; commitment ; filters ; encoding ; dataSlice ; `withContext` | `programNotification` | contexted/non-contexted fixtures + filters | `https://solana.com/docs/rpc/websocket/programsubscribe` | Done `pre.009` |
|
||||
@@ -49,10 +49,10 @@ Pour une paire unstable, l'unsubscribe associé est classé `Unstable pair` dans
|
||||
| 12 | `signatureUnsubscribe` | unsubscribe | Stable/documented | remote id before terminal fire ; boolean/error | signature pair | cancel before terminal + stale after terminal | `https://solana.com/docs/rpc/websocket/signatureunsubscribe` | Done `pre.010` |
|
||||
| 13 | `slotSubscribe` | subscribe | Stable/documented | no params ; numeric id | `slotNotification` `{slot,parent,root}` | exact fixture + live smoke candidate | `https://solana.com/docs/rpc/websocket/slotsubscribe` | Done `pre.010` |
|
||||
| 14 | `slotUnsubscribe` | unsubscribe | Stable/documented | remote id ; boolean/error | slot pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/slotunsubscribe` | Done `pre.010` |
|
||||
| 15 | `slotsUpdatesSubscribe` | subscribe | **Unstable** | no params ; numeric id | tagged `slotsUpdatesNotification` | each known variant + unknown fallback | `https://solana.com/docs/rpc/websocket/slotsupdatessubscribe` | Planned `pre.011` |
|
||||
| 16 | `slotsUpdatesUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | slotsUpdates pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/slotsupdatesunsubscribe` | Planned `pre.011` |
|
||||
| 17 | `voteSubscribe` | subscribe | **Unstable** | no params ; validator flag required | `voteNotification` | fields + timestamp omitted/null/value + warning | `https://solana.com/docs/rpc/websocket/votesubscribe` | Planned `pre.011` |
|
||||
| 18 | `voteUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | vote pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/voteunsubscribe` | Planned `pre.011` |
|
||||
| 15 | `slotsUpdatesSubscribe` | subscribe | **Unstable** | no params ; numeric id | tagged `slotsUpdatesNotification` | each known variant + unknown fallback | `https://solana.com/docs/rpc/websocket/slotsupdatessubscribe` | Done `pre.011` |
|
||||
| 16 | `slotsUpdatesUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | slotsUpdates pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/slotsupdatesunsubscribe` | Done `pre.011` |
|
||||
| 17 | `voteSubscribe` | subscribe | **Unstable** | no params ; validator flag required | `voteNotification` | fields + timestamp omitted/null/value + warning | `https://solana.com/docs/rpc/websocket/votesubscribe` | Done `pre.011` |
|
||||
| 18 | `voteUnsubscribe` | unsubscribe | **Unstable pair** | remote id ; boolean/error | vote pair | generic registry unsubscribe | `https://solana.com/docs/rpc/websocket/voteunsubscribe` | Done `pre.011` |
|
||||
|
||||
## 3. Notification matrix
|
||||
|
||||
@@ -557,6 +557,58 @@ API publique -> aucun remote subscription ID ni méthode raw arbitraire exposés
|
||||
|
||||
La terminaison signature est classée après livraison dans la queue typed : le consumer reçoit donc toujours la valeur terminale avant fermeture du canal. Le registry retire ensuite la subscription one-shot avant toute future sélection de resubscribe. `slot` et `root` restent des subscriptions continues et conservent les règles génériques de reconnect, backpressure et cancellation.
|
||||
|
||||
## 9.9 Checkpoint familles unstable `pre.011`
|
||||
|
||||
Surface publique ajoutée :
|
||||
|
||||
```text
|
||||
WsSession::block_subscribe
|
||||
SolanaBlockSubscribeFilter = All | MentionsAccountOrProgram(Pubkey)
|
||||
SolanaBlockSubscribeConfig = commitment + encoding + transactionDetails + maxSupportedTransactionVersion + showRewards
|
||||
SolanaBlockNotification = slot + block nullable + err nullable
|
||||
|
||||
WsSession::slots_updates_subscribe
|
||||
SolanaSlotUpdate = 7 variantes connues + Unknown raw borné
|
||||
SolanaSlotUpdateStats
|
||||
|
||||
WsSession::vote_subscribe
|
||||
SolanaVoteNotification = votePubkey + slots + hash + timestamp optionnel + signature
|
||||
```
|
||||
|
||||
Gates déterministes ajoutés :
|
||||
|
||||
```text
|
||||
partition unstable exacte = block + slotsUpdates + vote
|
||||
warning centralisé dans le moteur typed avant création d'une famille unstable
|
||||
block filter all + mentionsAccountOrProgram
|
||||
block config -> confirmed/finalized seulement ; processed rejeté avant I/O
|
||||
block config -> binary/base58/base64/json/jsonParsed + full/accounts/signatures/none
|
||||
block maxSupportedTransactionVersion -> valeur numérique générique, pas de hardcode 0
|
||||
block notification -> context + slot + block nullable + err nullable
|
||||
block payload > 1232 octets -> accepté tant qu'il reste sous les limites WS KSP
|
||||
block capability RPC error -> erreur applicative caller, session physique reste Active
|
||||
blockUnsubscribe -> remote ID interne via handle
|
||||
slotsUpdates -> 7 variantes actuelles exactes
|
||||
slotsUpdates future type -> Unknown avec raw conservé sous la borne message
|
||||
createdBank/frozen/dead -> champs spécifiques requis
|
||||
slotsUpdatesSubscribe/Unsubscribe -> params vides + remote ID interne
|
||||
vote timestamp omitted/null/value -> None/None/Some(i64)
|
||||
votePubkey -> Pubkey typed ; slots ordonnés ; hash/signature opaques
|
||||
voteSubscribe/Unsubscribe -> params vides + remote ID interne
|
||||
```
|
||||
|
||||
La protection `Unknown` de `slotsUpdates` est volontairement limitée aux **nouvelles variantes de type**. Une variante connue avec des champs obligatoires invalides reste `invalid_response` pour la subscription concernée : KSP ne masque pas une rupture du contrat déjà audité.
|
||||
|
||||
Le warning unstable ne contient ni filtre, ni pubkey, ni payload, ni remote subscription ID, ni URL. Les trois familles restent continues et réutilisent le lifecycle générique reconnect/resubscribe/backpressure/cancellation.
|
||||
|
||||
Comptages attendus après compilation :
|
||||
|
||||
```text
|
||||
Transport unit tests = 309
|
||||
Transport public API tests = 35
|
||||
release completeness = 22
|
||||
```
|
||||
|
||||
## 10. Validation du gate `pre.001`
|
||||
|
||||
Exécuté dans le sandbox :
|
||||
|
||||
Reference in New Issue
Block a user