9.1 KiB
Delta 0.2.4-pre.001 — audit Blocks/Economics, compliance cible et sizing
Base requise
Release stable attendue :
v0.2.3
L'archive KSP fournie porte workspace.package.version = "0.2.3". Elle ne contient pas .git; le tag v0.2.3 n'est donc pas revérifiable localement depuis le zip.
Objectif
Ouvrir 0.2.4 sans implémentation fonctionnelle lourde : relire les contrats KSP, réauditer la documentation Solana actuelle et la génération Agave stable, confirmer les 10 méthodes Blocks + 5 Economics, cadrer les overloads/legacy/DTOs/wires et contraintes KSP-TRANSPORT-007, puis trancher le gate de sizing avant les modifications Rust.
Version Cargo
Conformément à VER-ID-009, la prerelease non-fix synchronise le signal technique :
0.2.3 -> 0.2.4-pre.1
Aucune source Rust, dépendance Cargo ou configuration runtime n'est modifiée dans cette tranche.
Résultats principaux
- l'index HTTP Solana courant conserve 52 méthodes courantes ;
- les catégories Blocks et Economics restent exactement 10 + 5 méthodes, sans changement de partition ;
- la navigation Deprecated conserve les 14 méthodes historiques déjà enregistrées par KSP ;
- les 15 descriptors
HttpRpcCoverageRelease::V0_2_4présents dansv0.2.3correspondent exactement à l'inventaire officiel actuel et restentRead / RetrySafe; getBlockresteStableWithDeprecatedLegacyparce que son second paramètre accepte toujours un bare encoding legacy en plus de l'objet de config moderne ;- la documentation Solana actuelle lie encore ses sources RPC à Agave
v3.1.8; elle doit donc être cross-auditée contre la génération stable réellement courante ; - au 2026-08-18, la baseline runtime retenue est Agave
v4.2.1dans la branche stable4.2.x;v4.3.0-beta.0reste une prerelease ; getBlockaccepte la config moderne complètecommitment/encoding/transactionDetails/maxSupportedTransactionVersion/rewards, conserve la forme bare encoding et retourneobject|null;- les transactions de bloc partagent les primitives
SolanaEncodedTransaction,SolanaTransactionVersionetSolanaWireField<T>avec0.2.3, mais ne doivent pas réutiliserSolanaConfirmedTransactiontel quel car ce DTO contient des champs top-level propres àgetTransaction; getBlocksconserve les overloads[start],[start,end],[start,config],[start,end,config]; une différenceend-start > 500_000est invalide, tandis queend < startproduit un tableau vide ;getBlocksWithLimitconservelimit <= 500_000;limit = 0est valide ;getRecentPerformanceSamplesconserve720comme défaut et maximum ;getBlockProductionconserveidentity,range.firstSlot,range.lastSlot?,commitment, une réponse contextualisée et l'invariant déterministelastSlot >= firstSlot;getInflationRewardconserve l'ordre/cardinalité et lesnullpositionnels ; Agavev4.2.1expose en plus decommissionle champ optionnelcommissionBps: u16, absent de la page publique actuelle, qui doit être préservé par KSP ;- aucune limite sémantique fixe d'adresses
getInflationRewardn'a été établie par les sources courantes : KSP n'en invente pas une à partir de la limite générale de taille de requête ; getSupplyconserveexcludeNonCirculatingAccountsListet le résultat contextualisé{total,circulating,nonCirculating,nonCirculatingAccounts};- aucune nouvelle dépendance n'est nécessaire pour cette release.
Gate de sizing
Question obligatoire :
Les 15 wrappers Blocks/Economics, leurs DTOs/wires, les overloads/legacy,
les tests, la compliance 52+14 et la documentation peuvent-ils être
clôturés proprement dans cette release/session ?
Réponse :
OUI.
Aucun split de release n'est nécessaire. La complexité sera contrôlée en isolant getBlock, getBlockProduction, getInflationReward et la compliance finale dans des tranches dédiées. Une prerelease supplémentaire sera créée si une tranche dépasse le budget effectif d'environ 15–20 minutes ; aucune méthode ne sera reportée silencieusement hors de 0.2.4.
Décisions de conception
Réutilisation wire
Réutiliser directement :
SolanaCommitment
SolanaCommitmentConfig
SolanaContextConfig
SolanaRpcContext
SolanaRpcResponse<T>
SolanaTransactionEncoding
SolanaEncodedTransaction
SolanaTransactionVersion
SolanaWireField<T>
Créer des DTOs Blocks/Economics seulement lorsque le contrat wire est réellement distinct.
getBlock
Le résultat de bloc aura un type dédié. Les entrées transactions[] composent les primitives Transaction existantes mais ne réutilisent pas SolanaConfirmedTransaction tel quel. Les champs conditionnels issus de transactionDetails/rewards doivent conserver leurs omissions et null significatifs.
Contraintes déterministes avant I/O
Retenues :
getBlock commitment >= confirmed
getBlocks commitment >= confirmed
getBlocks end-start <= 500_000 lorsque end >= start
getBlocksWithLimit commitment >= confirmed
getBlocksWithLimit limit <= 500_000
getRecentPerformanceSamples limit <= 720
getBlockProduction lastSlot >= firstSlot lorsque les deux sont présents
Ne pas transformer en validations locales les erreurs dépendant de l'état du ledger/runtime.
Dépendances
nouvelle dépendance NON
solana-rpc-client/client NON
base64/bs58 NON
Prévision de travail
pre.001 audit officiel + Agave stable + matrice + wires + contraintes + sizing
pre.002 primitives/configs/results Blocks/Economics partagés + fixtures communes
pre.003 5 Blocks simples
pre.004 getBlocks + getBlocksWithLimit + getRecentPerformanceSamples
pre.005 getBlockProduction
pre.006 getBlock moderne + legacy + transactionDetails + wire riche
pre.007 4 Economics simples
pre.008 getInflationReward + commissionBps + null positionnels
pre.009 compliance finale 52/52 + 14/14 + docs + smokes + graphes + prompt 0.2.5
rel.001 publication stricte
Le plan détaillé est docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md.
Fichiers ajoutés
docs/plans/011-V0_2_4_HTTP_BLOCKS_ECONOMICS_PLAN.md
deltas/0.2.4/pre.001.md
Fichiers modifiés
Cargo.toml
ROADMAP.md
docs/000-README.md
docs/plans/000-README.md
docs/plans/002-FUNCTIONAL_RELEASE_SEQUENCE.md
Fichiers supprimés
Aucun.
Fichiers volontairement inchangés
CHANGELOG.md
crates/ksp-onchain-transport-lib/README.md
crates/ksp-onchain-transport-lib/USAGE.md
crates/ksp-onchain-transport-lib/src/**
crates/ksp-onchain-transport-lib/unit_tests/**
crates/ksp-onchain-transport-lib/tests/**
deltas/0.2.1/**
deltas/0.2.2/**
deltas/0.2.3/**
Le changelog reste synchronisé à la phase documentaire finale conformément à VER-SESSION-005. Les deltas historiques ne sont jamais réécrits.
Validations exécutées
- relecture des sources internes obligatoires du prompt
0.2.4; - inspection de l'archive stable KSP fournie et de la surface Transport
v0.2.3; - confirmation locale de
workspace.package.version = 0.2.3avant ouverture ; - confirmation locale du registry
52 current / 14 historicalet de la partition4 / 22 / 11 / 15; - confirmation locale que les 15 descriptors
V0_2_4sont exactement les 10 Blocks + 5 Economics attendues et sontRead / RetrySafe; - inspection des wires partagés
rpc_commonetrpc_transactionsainsi que des canaries de release ; - consultation de l'index HTTP Solana officiel courant, du JSON Structures Reference et des 15 pages Blocks/Economics ;
- consultation de la navigation Deprecated officielle courante ;
- confirmation que les liens source de la documentation publique pointent encore vers Agave
v3.1.8; - cross-audit primaire d'Agave
v4.2.1: release stable,rpc/src/rpc.rs,rpc-client-types/src/config.rsetresponse.rs; - confirmation des overloads
getBlocks, limites 500_000/720, contrainte de rangegetBlockProductionet extensioncommissionBpsdegetInflationReward; - contrôle qu'aucune nouvelle dépendance n'est requise par le plan.
Validations non exécutées
Le sandbox courant ne fournit pas le binaire cargo; les validations Cargo ne peuvent donc pas être exécutées ici et doivent être rejouées par l'opérateur avant commit :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
Aucun cargo tree n'est nécessaire dans pre.001 puisque les dépendances/features ne changent pas. Les graphes complets restent obligatoires à la clôture pre.009.
L'archive fournie ne contient pas .git; le commit attendu après application et validations suit VER-GIT-001 :
v0.2.4-pre.001
Questions ouvertes
Aucune question bloquante pour pre.002.
Suite
0.2.4-pre.002 : introduire les primitives/configs/results Blocks/Economics partagés et les fixtures déterministes communes, sans encore concentrer toute la logique de getBlock dans la même tranche.