Files
khadhroony-solana-project/deltas/0.2.9/pre.004.md
2026-08-24 11:55:17 +02:00

6.9 KiB

Delta 0.2.9-pre.004 — fondation SubscribeRequest Yellowstone standard

1. Base et signal de version

Base obligatoire :

0.2.9-pre.3.fix.1

Le gate opérateur fourni ferme pre.003-fix.001 :

cargo fmt --all                               PASS
python3 scripts/audit_rust_workspace_rules.py PASS / clean
cargo check --workspace                       PASS
cargo clippy --workspace --all-targets        PASS
cargo test --workspace                        PASS
Transport unit                                354/354
Transport public_api                          43/43
Transport release_completeness                36/36
Transport doctests                            4/4
cargo tree -p ...                             fourni/relu
cargo tree -p ... -e features                 fourni/relu
cargo tree -p ... --duplicates                fourni/relu
cargo tree --duplicates                       fourni/relu

Le graphe pertinent reste unifié sur tonic 0.14.6, tonic-prost 0.14.6, prost/prost-types 0.14.4, yellowstone-grpc-proto 12.6.0 et solana-pubkey 4.3.0.

Cette tranche non-fix synchronise :

workspace.package.version = 0.2.9-pre.4
commit attendu            = v0.2.9-pre.004
aucun tag prerelease

2. Scope exact

pre.004 matérialise uniquement la fondation N2 du SubscribeRequest standard publié :

accounts
slots
transactions
transactions_status
blocks
blocks_meta
entry
commitment
accounts_data_slice
ping
from_slot

Le proto yellowstone-grpc-proto 12.6.0 a été recontrôlé avant implémentation et conserve exactement ces champs top-level.

Sont explicitement hors tranche :

champs détaillés Accounts / Slots                 -> pre.005
champs détaillés Transactions / transaction_status -> pre.006
champs détaillés Blocks / block_meta / entry updates -> pre.007
stream bidi / mutation / Ping-Pong runtime         -> pre.008
reconnect / replay / gaps / duplicates             -> pre.009
Config V3 / PublicNode                              -> pre.010/011
SubscribeDeshred                                    -> OUT 0.2.9 standard

3. Contrat KSP ajouté

Nouveaux types publics :

YellowstoneSubscribeFilterName
YellowstoneAccountsDataSlice
YellowstoneSubscribePing
YellowstoneSubscribeAccountFilter
YellowstoneSubscribeSlotFilter
YellowstoneSubscribeTransactionFilter
YellowstoneSubscribeBlockFilter
YellowstoneSubscribeBlocksMetaFilter
YellowstoneSubscribeEntryFilter
YellowstoneSubscribeRequest

Les quatre filtres de famille riches sont volontairement des shells typés en pre.004. Ils permettent de matérialiser les sept maps et les entrées nommées vides sans anticiper les champs propres aux tranches suivantes.

Le wire yellowstone_grpc_proto::geyser::SubscribeRequest reste privé : aucun type Tonic/Prost/Yellowstone n'est réexporté au crate root.

4. Sémantique maps / noms

KSP conserve sept maps logiques indépendantes.

map vide                    = aucun filtre actif dans la famille
entrée nommée + message vide = activation explicite d'un groupe vide supporté par le proto

Le Protobuf ne distingue pas une map top-level omise d'une map vide ; KSP ne prétend donc pas préserver une différence wire inexistante.

Les noms sont :

non vides
trim exact
sans caractère de contrôle
<= 128 octets UTF-8
uniques globalement entre les sept maps

L'unicité globale évite l'ambiguïté lorsque Yellowstone renvoie seulement les noms correspondants dans SubscribeUpdate.filters[].

Le nombre total de groupes nommés est plafonné à 1024 sur l'ensemble des sept maps.

5. Champs communs et bounds

commitment réutilise SolanaCommitment et mappe exactement :

Processed -> PROCESSED
Confirmed -> CONFIRMED
Finalized -> FINALIZED

accounts_data_slice :

ordre d'insertion conservé
nombre <= 128
length <= 64 MiB
offset + length doit rester représentable en u64
length = 0 reste représentable

ping conserve l'identifiant i32 exact.

from_slot conserve l'optional u64 sans lui attribuer encore une promesse de replay/lossless ; sa sémantique lifecycle reste en pre.009.

6. Diagnostics et sécurité

Debug de YellowstoneSubscribeFilterName est redacted.

Debug de YellowstoneSubscribeRequest expose uniquement :

compteurs par famille
commitment
nombre de data slices
ping
from_slot

Il n'expose aucun nom de filtre ni futur payload account/transaction/block.

Les erreurs déterministes utilisent ERROR_CODE_INVALID_RPC_PARAMETERS et n'incluent pas les valeurs de noms/payloads rejetés.

7. Dépendances

Aucune dépendance ni feature Cargo n'est modifiée dans pre.004.

Les graphes fournis pour pre.003-fix.001 restent l'autorité courante ; aucun nouveau cargo tree n'est requis spécifiquement par ce delta sauf anomalie de compilation.

8. Tests/canaries ajoutés

Unit tests :

nom vide/whitespace/control/oversized rejeté
Debug nom redacted
unicité globale cross-family
request vide -> sept maps vides + common absent
sept entrées nommées vides -> wire exact
commitment/ping/from_slot exacts
ordre data slices conservé
zero-length slice conservée
slice length/overflow/count bornés
filter-group count borné
request Debug sans filter name

Public API : construction des sept maps et champs communs depuis le crate root.

Release completeness :

onze champs top-level présents dans l'adapter
bounds communs matérialisés
aucun SubscribeDeshred
aucun PublicNode/OrbitFlare/Helius runtime
aucun raw Tonic/Yellowstone reexport
to_wire protobuf non public

9. Fichiers ajoutés

crates/ksp-onchain-transport-lib/src/grpc_subscribe.rs
crates/ksp-onchain-transport-lib/unit_tests/grpc_subscribe.rs
deltas/0.2.9/pre.004.md

10. Fichiers modifiés

Cargo.toml
crates/ksp-onchain-transport-lib/src/lib.rs
crates/ksp-onchain-transport-lib/tests/public_api.rs
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
docs/plans/016-V0_2_9_YELLOWSTONE_GRPC_PLAN.md
docs/validation/012-V0_2_9_YELLOWSTONE_GRPC.md

11. Validation de préparation

python3 scripts/audit_rust_workspace_rules.py
General Rust rule audit: clean
Rust export completeness audit: 0 candidate(s)
KSP workspace Rust rule audit: clean

L'environnement de préparation ne fournit pas Cargo/Rust ; aucune compilation n'est déclarée réussie localement.

12. Gate opérateur attendu

cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
cargo test -p ksp-core-lib --test workspace_dependencies
cargo test --workspace

Attendu si aucun fix n'est nécessaire :

Transport unit                 359
Transport public_api            44
Transport release_completeness  37
Transport doctests               4

Les live smokes restent ignored/opt-in.