9.7 KiB
Delta 0.2.2-pre.006 — cinq wrappers HTTP Cluster restants typés
Base requise
Livraison précédente validée localement par l'opérateur :
0.2.2-pre.005
workspace.package.version = "0.2.2-pre.5"
La validation opérateur du 2026-08-18 a confirmé :
cargo fmt --all OK
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
cargo test -p ksp-onchain-transport-lib OK
Résultats Transport de cette base :
116 unit tests
12 public API tests
5 release completeness tests
0 warning signalé par check/clippy
Le plan canonique reste docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md version 3.
Contrôle documentaire avant nouvelle tranche
Le découpage durable reste cohérent :
ROADMAP.mdconserve0.2.2en cours[/];- le plan
009attribue exactement àpre.006les cinq méthodes Cluster restantes ; - les 5 Accounts de
pre.003, les 5 Tokens depre.004et les 7 Cluster simples depre.005restent inchangés ; pre.007reste la tranche de complétude/smoke/docs/préparation stable prévue ;- aucun index documentaire durable ne nécessite de modification à cette étape.
Objectif
Implémenter les cinq wrappers publics typés Cluster restants :
getLeaderSchedule
getSlot
getSlotLeader
getSlotLeaders
getVoteAccounts
Après cette tranche, les 22 méthodes HTTP Accounts + Tokens + Cluster attribuées à 0.2.2 possèdent toutes leur wrapper typé KSP.
Tous les wrappers passent par la foundation HTTP commune :
wrapper typé
-> descriptor audité
-> execute_standard_rpc
-> pool/admission/retry/deadline
-> reqwest HTTP
-> JSON-RPC validation
-> décodage DTO KSP
Aucun wrapper Cluster ne contacte reqwest directement.
Version Cargo
Conformément au cycle prerelease KSP :
0.2.2-pre.5 -> 0.2.2-pre.6
Aucune dépendance ni feature Cargo n'est ajoutée ou retirée.
Réaudit ciblé du contrat courant
Le contrat préparé dans le plan 009 a été recroisé avec la source primaire Agave v4.2.1, notamment :
rpc-client-types/src/config.rs
rpc/src/rpc.rs
Les invariants utiles à cette tranche restent :
getLeaderScheduleaccepte l'overload slot/config déjà modélisé parSolanaLeaderScheduleRequest;RpcLeaderScheduleConfigcontientidentityetcommitment;- le résultat de
getLeaderSchedulereste nullable ; getSlotetgetSlotLeaderutilisent la config communecommitment/minContextSlot;getSlotLeadersprendstartSlot + limit, avec la limite1..=5000retenue par le plan ;RpcGetVoteAccountsConfigcontientvotePubkey,commitment,keepUnstakedDelinquents,delinquentSlotDistance;getVoteAccountsrenvoie les groupescurrentetdelinquent;inflationRewardsCommissionBpsreste optionnel pour compatibilité avec les noeuds antérieurs ;- l'historique
epochCreditsreste exposé comme historique RPC borné, sans être interprété comme historique complet du vote account.
Surface typée Cluster finale
getLeaderSchedule
role + SolanaLeaderScheduleRequest -> Option<SolanaLeaderSchedule>
SolanaLeaderScheduleRequest conserve les deux formes cohérentes :
CurrentEpoch(config?)
Slot { slot, config? }
Un config vide est omis. Un résultat JSON null devient None. Une map non nulle valide chaque identité et la convertit en ksp_core_lib::Pubkey.
getSlot
role + Option<SolanaContextConfig> -> u64
La config commune est sérialisée uniquement lorsqu'elle contient commitment et/ou minContextSlot. Une erreur distante MinContextSlotNotReached reste une erreur RPC applicative.
getSlotLeader
role + Option<SolanaContextConfig> -> Pubkey
La valeur texte du leader est validée avant exposition comme Pubkey, sans recopier une valeur wire invalide dans le diagnostic.
getSlotLeaders
role + startSlot u64 + limit u64 -> Vec<Pubkey>
KSP rejette localement avant I/O :
limit == 0
limit > 5000
L'ordre du tableau retourné est conservé, car chaque position correspond aux slots successifs demandés.
getVoteAccounts
role + Option<SolanaVoteAccountsConfig> -> SolanaVoteAccountStatus
Un config vide est omis. Les deux groupes current et delinquent sont conservés, ainsi que :
votePubkey
nodePubkey
activatedStake
commission
inflationRewardsCommissionBps Option<u16>
epochVoteAccount
epochCredits Vec<SolanaEpochCredits>
lastVote
rootSlot
Aucune conversion métier staking/rewards n'est introduite dans Transport.
Activation finale des helpers préparés en pre.002
Les helpers spécifiques aux cinq méthodes de cette tranche deviennent production-live maintenant qu'ils ont des consommateurs runtime :
SolanaLeaderScheduleConfig::{is_empty,to_json_value};SolanaLeaderScheduleRequest::to_json_params;SolanaLeaderSchedule::decode_wire;SolanaVoteAccountsConfig::{is_empty,to_json_value};SolanaVoteAccountInfo::decode_wire;SolanaVoteAccountStatus::decode_wire;WireVoteAccountInfoetWireVoteAccountStatus.
Aucun #[allow(dead_code)] n'est ajouté.
Le helper privé d'exécution Cluster est renommé de execute_cluster_simple_rpc vers execute_cluster_rpc, car il dessert désormais les douze wrappers Cluster.
Fixtures HTTP déterministes ajoutées
crates/ksp-onchain-transport-lib/fixtures/http/get_leader_schedule.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_leader_schedule.null.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leader.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leader.invalid_pubkey.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leaders.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leaders.invalid_pubkey.json
crates/ksp-onchain-transport-lib/fixtures/http/get_vote_accounts.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_vote_accounts.invalid_pubkey.json
Les tests utilisent uniquement un serveur HTTP loopback local.
Couverture de tests ajoutée
Les tests couvrent notamment :
- sérialisation slot + config de
getLeaderSchedule; - résultat nullable de
getLeaderSchedule; - sérialisation
commitment/minContextSlotdegetSlotetgetSlotLeader; - omission d'un
SolanaContextConfigvide ; - validation de la
PubkeydegetSlotLeader; - conservation de l'ordre de
getSlotLeaders; - rejet local des limites
0et5001avant I/O ; - rejet d'une identité invalide dans la liste
getSlotLeaders; - sérialisation complète de
SolanaVoteAccountsConfig; - omission d'un config vote accounts vide ;
- conservation de
inflationRewardsCommissionBpsprésent et absent ; - conservation des triples
epochCredits; - rejet d'une
votePubkeyinvalide.
Le test public compile explicitement les cinq nouvelles méthodes depuis HttpTransportPool.
Un canari release fige désormais les douze méthodes Cluster exactes de 0.2.2 et vérifie Read + RetrySafe sur tout le sous-ensemble.
Après application, la cible Transport attendue devient :
127 unit tests
13 public API tests
6 release completeness tests
Rustdoc de crate
La documentation de tête de ksp-onchain-transport-lib est ajustée pour ne plus présenter Cluster comme une famille encore staged : après pre.006, les 22 wrappers 0.2.2 sont implémentés. Les familles 0.2.3 et 0.2.4 restent staged.
Fichiers ajoutés
crates/ksp-onchain-transport-lib/fixtures/http/get_leader_schedule.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_leader_schedule.null.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leader.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leader.invalid_pubkey.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leaders.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_slot_leaders.invalid_pubkey.json
crates/ksp-onchain-transport-lib/fixtures/http/get_vote_accounts.success.json
crates/ksp-onchain-transport-lib/fixtures/http/get_vote_accounts.invalid_pubkey.json
deltas/0.2.2/pre.006.md
Fichiers modifiés
Cargo.toml
crates/ksp-onchain-transport-lib/src/lib.rs
crates/ksp-onchain-transport-lib/src/rpc_cluster.rs
crates/ksp-onchain-transport-lib/unit_tests/rpc_cluster.rs
crates/ksp-onchain-transport-lib/tests/public_api.rs
crates/ksp-onchain-transport-lib/tests/release_completeness.rs
Fichiers supprimés
Aucun.
Documentation durable
Aucune modification de ROADMAP/plan/index n'est requise dans cette tranche : le plan existant décrit déjà ce découpage et pre.007 reste la tranche de clôture prerelease/documentation.
CHANGELOG.md reste réservé à la clôture stable.
Validation à exécuter sur le checkout opérateur
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
La livraison n'affirme pas que ces commandes ont été exécutées dans l'environnement de génération.
Critères de validation de pre.006
pre.006 est validable lorsque :
- les quatre commandes ci-dessus passent sans warning nouveau ;
- les 127 unit tests passent ;
- les 13 tests public API passent ;
- les 6 tests release completeness passent ;
- aucun helper Cluster production-live n'est
dead_code; - les douze wrappers Cluster
0.2.2sont accessibles depuisHttpTransportPool; - le total
0.2.2reste exactement 5 Accounts + 5 Tokens + 12 Cluster = 22 wrappers ; - aucune méthode
0.2.3/0.2.4n'est activée prématurément.