10 KiB
Delta 0.2.3-pre.001 — réaudit HTTP Transactions, sécurité et sizing
Base requise
Release stable attendue :
v0.2.2
L'archive KSP fournie porte workspace.package.version = "0.2.2". Elle ne contient pas .git; le tag v0.2.2 n'est donc pas revérifiable
localement depuis le zip.
Objectif
Exécuter la première tranche obligatoire de 0.2.3 sans implémentation fonctionnelle lourde : relire les contrats KSP, réauditer la surface
HTTP Solana officielle actuelle, confirmer la matrice des 11 méthodes Transactions, vérifier les règles de sécurité Read/WriteSubmission/Simulation,
cadrer les DTOs et formes wire, réévaluer les dépendances d'encodage et trancher le gate de sizing.
Version Cargo
Conformément à VER-ID-009, la prerelease non-fix synchronise le signal technique :
0.2.2 -> 0.2.3-pre.1
Aucune source Rust, dépendance Cargo ou configuration runtime n'est modifiée dans cette tranche.
Résultats principaux
- index HTTP Solana courant réaudité : 52 méthodes courantes ;
- navigation Deprecated officielle : 14 méthodes historiques, inchangées ;
- les 11 méthodes affectées à
HttpRpcCoverageRelease::V0_2_3restent exactement :getFeeForMessage,getLatestBlockhash,getRecentPrioritizationFees,getSignaturesForAddress,getSignatureStatuses,getTransaction,getTransactionCount,isBlockhashValid,requestAirdrop,sendTransaction,simulateTransaction; - la partition KSP reste donc
0.2.1 = 4,0.2.2 = 22,0.2.3 = 11,0.2.4 = 15sans avancement prématuré ; - la classification centrale reste correcte : 8 Read / RetrySafe, 2 WriteSubmission / NeverAfterDispatch (
requestAirdrop,sendTransaction), 1 Simulation / RetrySafe (simulateTransaction) ; sendTransaction.maxRetriesreste une option RPC de retry côté nœud et ne doit jamais être confondue avec la retry policy HTTP KSP ;- un résultat ambigu après dispatch d'une WriteSubmission (
timeout, rupture après envoi, HTTP temporaire après dispatch ou équivalent) interdit toute resoumission automatique par KSP ; getFeeForMessagetransporte un message encodé en base64 et retourne unRpcResponsedont la valeur fee est nullable ;getLatestBlockhashconserveblockhash+lastValidBlockHeightsous contexte ;getRecentPrioritizationFeesconserve un tableau optionnel d'adresses, borné à 128 par la documentation/runtime courant, et un résultat ordonné de couplesslot/prioritizationFee;getSignaturesForAddressconservebefore/until/limit,minContextSlot, l'ordre newest-to-oldest et une limite runtime 1..=1000 ;- la source Agave courante expose aussi
transactionIndexcomme champ optionnel de la structure de signature ; le wire KSP ne doit pas le perdre ; getSignatureStatusesconserve une cardinalité maximale de 256,searchTransactionHistory, l'ordre positionnel des résultats et lesnulldocumentés ; la source Agave courante n'interdit pas un tableau d'entrée vide ;getTransactionconserve l'objet de config moderne (commitment,encoding,maxSupportedTransactionVersion) et la forme legacy du second paramètreencodinguniquement pour compatibilité, explicitement non recommandée ; son résultat reste nullable et doit préserver les formes transaction/meta/version sans imposer un modèle Program métier ;requestAirdropreste une soumission malgré son rôle de faucet : une signature retournée ou une issue réseau ambiguë n'autorise aucun resend aveugle ;sendTransactionne construit ni ne signe la transaction : Transport transmet une transaction déjà construite/signée et préserve les options RPC ;simulateTransactionreste retry-safe, acceptebase58/base64côté runtime courant, etsigVerify=trueest incompatible avecreplaceRecentBlockhash=true;- le résultat courant de simulation comporte de nombreux champs optionnels (
logs,accounts, unités consommées, return data, inner instructions, replacement blockhash, fee, balances, token balances, loaded addresses) qui doivent être préservés sans décodage Program.
Gate de sizing
Question obligatoire :
Les 11 wrappers Transactions, leurs DTOs/wires, les règles write/simulation, les tests et la documentation peuvent-ils être clôturés proprement dans cette session ?
Réponse :
OUI.
Aucun split de release n'est nécessaire. Le volume est inférieur à 0.2.2, mais trois fils restent volontairement isolés : getTransaction, les
WriteSubmission/no-resend et simulateTransaction. Si une tranche réelle dépasse le budget KSP d'environ 15–20 minutes, une prerelease
supplémentaire sera créée dans 0.2.3 sans déplacer silencieusement une méthode vers 0.2.4.
Décision dépendances et encodages
Aucune nouvelle dépendance n'est ajoutée à pre.001 :
base64 NON
bs58 NON
wincode NON
solana-client NON
crate RPC/SDK Solana haut niveau NON
Transport peut préserver les messages/transactions sérialisés sous forme de chaînes accompagnées d'un enum d'encodage typé. Les validations locales retenues sont celles qui n'exigent pas de désérialiser la transaction : cardinalités, limites fixes, variantes d'encodage/config autorisées et incompatibilités de paramètres.
Ajouter uniquement base64/bs58 ne suffirait pas à reproduire correctement les validations runtime actuelles, qui comprennent aussi limites de taille,
désérialisation de message/transaction, versioning et sanitization. Tant qu'aucun besoin KSP concret n'exige ce décodage local, ces contrôles restent la
responsabilité du runtime RPC. Toute future dépendance d'encodage devra être justifiée par un invariant KSP précis et testable.
Prévision de travail
pre.001 audit officiel + matrice + sécurité + DTOs/wire + dépendances + sizing
pre.002 primitives/configs/results Transactions partagés + fixtures communes
pre.003 reads contextuels : fee/message, latest blockhash, transaction count, blockhash validity
pre.004 prioritization fees + signatures for address + signature statuses
pre.005 getTransaction moderne + compatibilité legacy + transaction/meta/version wire
pre.006 requestAirdrop + sendTransaction + preuves end-to-end no-resend
pre.007 simulateTransaction + résultat riche + invariants de config
pre.008 réaudit final + canaries + smoke opt-in pertinent + README/USAGE + validation + prompt 0.2.4
Une prerelease supplémentaire reste autorisée si le budget réel d'une tranche l'exige.
Fichiers ajoutés
docs/plans/010-V0_2_3_HTTP_TRANSACTIONS_PLAN.md
deltas/0.2.3/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
docs/000-README.md synchronise aussi son arbre de validation avec le fichier docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md déjà
présent dans la release stable mais omis de cet index.
Fichiers supprimés
Aucun.
Fichiers volontairement inchangés
CHANGELOG.md
docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md
docs/plans/009-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER_PLAN.md
docs/validation/003-V0_2_1_ONCHAIN_HTTP.md
docs/validation/004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.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/**
Les anciens deltas restent historiques et ne sont pas réécrits.
Validations exécutées
- relecture des sources KSP obligatoires du prompt
0.2.3; - inspection de l'archive stable KSP fournie et de la surface Transport
0.2.2; - confirmation locale que le registry expose toujours
52 current / 14 historicalet partitionne les releases4 / 22 / 11 / 15; - confirmation locale que les 11 descriptors
V0_2_3se répartissent8 Read/RetrySafe + 2 WriteSubmission/NeverAfterDispatch + 1 Simulation/RetrySafe; - inspection de
execute_standard_rpc, du mapping de dispatch et de la retry policy centrale pour confirmer l'arrêt après dispatch ambigu d'une WriteSubmission ; - consultation de l'index HTTP Solana officiel courant, de
Solana RPC JSON Structureset des 11 pages Transactions ; - consultation de la navigation Deprecated officielle courante ;
- consultation des sources primaires Agave liées par la documentation HTTP et cross-audit du tag
v4.2.1pour configs, cardinalités, unions wire, champs optionnels, simulation et validations runtime ; - confirmation du maintien de la compatibilité legacy
getTransactionsans la présenter comme forme recommandée ; - contrôle de l'absence de nouvelle dépendance d'encodage/RPC dans
Cargo.tomlet dans le manifest Transport ; - contrôle que
pre.001ne modifie aucune source/test Rust niCHANGELOG.md.
Validations non exécutées
Le sandbox courant ne fournit pas le binaire cargo (command -v cargo ne retourne aucun chemin). Les validations Cargo suivantes n'ont donc pas
été exécutées ici et doivent être rejouées sur le checkout de développement 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 cette tranche car aucune dépendance ni feature n'a changé. Les quatre vues cargo tree du prompt restent
obligatoires à la clôture de 0.2.3 et lors de toute prerelease qui modifierait une dépendance/feature.
L'archive KSP fournie ne contient pas .git; le commit attendu après application et validations suit VER-GIT-001 :
v0.2.3-pre.001
Questions ouvertes
Aucune question bloquante pour pre.002.
Les noms Rust définitifs des DTOs restent ajustables pendant l'implémentation, mais les invariants wire, cardinalités, compatibilités et frontières de
sécurité fixés par le plan 010 ne doivent pas être relâchés pour simplifier artificiellement les wrappers.
Suite
0.2.3-pre.002 : introduire les primitives/configs/results Transactions partagés et les fixtures déterministes communes avant les premiers wrappers
Transactions.