Files
2026-08-18 10:47:19 +02:00

10 KiB
Raw Permalink Blame History

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_3 restent 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 = 15 sans avancement prématuré ;
  • la classification centrale reste correcte : 8 Read / RetrySafe, 2 WriteSubmission / NeverAfterDispatch (requestAirdrop, sendTransaction), 1 Simulation / RetrySafe (simulateTransaction) ;
  • sendTransaction.maxRetries reste 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 ;
  • getFeeForMessage transporte un message encodé en base64 et retourne un RpcResponse dont la valeur fee est nullable ;
  • getLatestBlockhash conserve blockhash + lastValidBlockHeight sous contexte ;
  • getRecentPrioritizationFees conserve un tableau optionnel d'adresses, borné à 128 par la documentation/runtime courant, et un résultat ordonné de couples slot/prioritizationFee ;
  • getSignaturesForAddress conserve before/until/limit, minContextSlot, l'ordre newest-to-oldest et une limite runtime 1..=1000 ;
  • la source Agave courante expose aussi transactionIndex comme champ optionnel de la structure de signature ; le wire KSP ne doit pas le perdre ;
  • getSignatureStatuses conserve une cardinalité maximale de 256, searchTransactionHistory, l'ordre positionnel des résultats et les null documentés ; la source Agave courante n'interdit pas un tableau d'entrée vide ;
  • getTransaction conserve l'objet de config moderne (commitment, encoding, maxSupportedTransactionVersion) et la forme legacy du second paramètre encoding uniquement 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 ;
  • requestAirdrop reste une soumission malgré son rôle de faucet : une signature retournée ou une issue réseau ambiguë n'autorise aucun resend aveugle ;
  • sendTransaction ne construit ni ne signe la transaction : Transport transmet une transaction déjà construite/signée et préserve les options RPC ;
  • simulateTransaction reste retry-safe, accepte base58/base64 côté runtime courant, et sigVerify=true est incompatible avec replaceRecentBlockhash=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 1520 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 historical et partitionne les releases 4 / 22 / 11 / 15 ;
  • confirmation locale que les 11 descriptors V0_2_3 se répartissent 8 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 Structures et 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.1 pour configs, cardinalités, unions wire, champs optionnels, simulation et validations runtime ;
  • confirmation du maintien de la compatibilité legacy getTransaction sans la présenter comme forme recommandée ;
  • contrôle de l'absence de nouvelle dépendance d'encodage/RPC dans Cargo.toml et dans le manifest Transport ;
  • contrôle que pre.001 ne modifie aucune source/test Rust ni CHANGELOG.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.