27 KiB
Validation finale 0.2.4 — HTTP Blocks + Economics + compliance finale
Objet
Cette matrice porte la preuve de clôture stable de 0.2.4 — HTTP Blocks + Economics + compliance HTTP finale.
Elle complète les validations historiques :
003-V0_2_1_ONCHAIN_HTTP.md— foundation HTTP et registre initial ;004-V0_2_2_HTTP_ACCOUNTS_TOKENS_CLUSTER.md— 22 wrappers Accounts/Tokens/Cluster ;005-V0_2_3_KSP_TRANSPORT_007_RETRO_AUDIT.md— réauditKSP-TRANSPORT-007des 37 wrappers acquis avant0.2.4;006-V0_2_3_HTTP_TRANSACTIONS.md— 11 wrappers Transactions et clôture stable0.2.3.
0.2.4-pre.009 n'ajoute pas de nouvelle méthode RPC métier. Il agrège les preuves de complétude, étend le smoke live aux familles nouvellement livrées, synchronise la documentation et prépare 0.2.5.
0.2.4-rel.001 est strictement publicationnelle : aucun contrat RPC ou comportement réseau n’est ajouté après la candidate.
Base opérateur validée
La base 0.2.4-pre.008-fix.001 a été validée le 18 août 2026 avec :
cargo fmt --all OK
cargo check --workspace OK
cargo clippy --workspace --all-targets OK
Transport
240 unit passed
26 public API passed
21 release completeness passed
1 smoke live ignored par défaut
0 failure
Le fix ne modifie pas le contrat getInflationReward; il ajoute uniquement le return explicite exigé par la policy Clippy workspace.
Réaudit officiel final — inventaire HTTP
Dernier contrôle effectué le 18 août 2026 contre l'index HTTP Solana courant :
https://solana.com/docs/rpc/http
L'index contient toujours exactement 52 méthodes HTTP courantes.
La navigation Deprecated officielle, visible depuis les pages sous :
https://solana.com/docs/rpc/deprecated/
contient toujours exactement 14 méthodes historiques.
Le rapprochement a été réalisé sur les noms exacts, pas uniquement sur les compteurs :
official current names == KSP current registry names == 52/52
official deprecated names == KSP historical registry names == 14/14
missing == 0
extra == 0
Aucun nouvel endpoint HTTP issu de SIMD-0180 ou d'une autre évolution d'interface n'apparaît dans l'index officiel actuel.
Baseline Agave et audit SIMD final
La baseline runtime conservée pour le contrat de cette release reste Agave v4.2.1, déjà auditée depuis pre.001.
Le calendrier public Agave v4.2 observé le 18 août 2026 montre que le rollout v4.2 est encore en cours : Devnet a été livré en juillet/août et les étapes Mainnet-beta d'adoption générale/activation sont positionnées en août. Cette situation ne justifie pas de remplacer rétroactivement la baseline wire de la release sans différence stable démontrée.
Audit final minimal imposé par le plan :
| SIMD | Statut observé le 2026-08-18 | Conséquence HTTP KSP |
|---|---|---|
0180 Vote Account Address Keyed Leader Schedule |
Review | aucune nouvelle méthode HTTP officielle ; ne pas changer getLeaderSchedule par anticipation |
0298 Bank Hash in Block Footer |
Idea | aucun bankHash ajouté au wire stable getBlock |
0301 parent bank hash |
PR fermé, non mergé | aucun parentBankHash spéculatif |
0307 Add Block Footer |
Review | aucun footer ajouté à SolanaGetBlockConfig/SolanaConfirmedBlock tant que la baseline stable ne l'expose pas |
0385 Transaction V1 |
Review | conserver SolanaTransactionVersion::Number(u8) générique et la canary version 1 |
0490 Stake v5 |
Review | getStakeMinimumDelegation reflète uniquement la valeur runtime ; aucun minimum local codé en dur |
0550 Double Disinflation Rate |
Review | getInflationGovernor/getInflationRate reflètent les valeurs runtime ; aucune formule locale |
0553 Base Inclusion and Resource-based Fee |
Draft | changement économique/consensus à surveiller ; aucun nouveau wrapper ou champ HTTP stable ajouté |
Extensions wire déjà acquises et réauditées explicitement : SIMD-0118 et SIMD-0291.
| SIMD | Statut observé le 2026-08-18 | Contrat déjà matérialisé dans KSP |
|---|---|---|
0118 Partitioned Epoch Rewards Distribution |
Activated | getBlock.numRewardPartitions reste lossless : omission, null et valeur sont distincts ; KSP ne synthétise jamais 0 |
0291 Commission Rate in Basis Points |
Review | commission et commissionBps restent indépendants dans les rewards de bloc et d'inflation ; les sous-arbres transaction restent lossless |
Le statut documentaire Review de SIMD-0291 ne justifie pas de supprimer un champ déjà livré par Agave v4.2.1. Inversement, KSP ne déduit jamais commissionBps depuis commission, ni l'inverse.
Sources SIMD :
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0118-partitioned-epoch-reward-distribution.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0180-vote-account-leader-schedule.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0291-commission-rate-in-basis-points.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0298-bank-hash-in-block-footer.md
https://github.com/solana-foundation/solana-improvement-documents/pull/301
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0307-add-block-footer.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0385-transaction-v1.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0490-upgrade-stake-to-v5.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0550-double-disinflation.md
https://github.com/solana-foundation/solana-improvement-documents/blob/main/proposals/0553-resource-fee-burn.md
Compliance des 52 méthodes courantes
La canary public_v0_2_4_pre_009_all_52_current_typed_wrappers_and_legacy_forms_are_available_from_crate_root référence directement chaque méthode Rust publique ci-dessous. Une méthode ne compte donc pas comme typed-complete uniquement parce qu'un descriptor ou l'exécuteur raw existe.
| Méthode RPC | Catégorie | Release typed | Classe | Wrapper public |
|---|---|---|---|---|
getAccountInfo |
Accounts | 0.2.2 |
Read / RetrySafe | get_account_info |
getBalance |
Accounts | 0.2.1 |
Read / RetrySafe | get_balance |
getLargestAccounts |
Accounts | 0.2.2 |
Read / RetrySafe | get_largest_accounts |
getMinimumBalanceForRentExemption |
Accounts | 0.2.2 |
Read / RetrySafe | get_minimum_balance_for_rent_exemption |
getMultipleAccounts |
Accounts | 0.2.2 |
Read / RetrySafe | get_multiple_accounts |
getProgramAccounts |
Accounts | 0.2.2 |
Read / RetrySafe | get_program_accounts |
getTokenAccountBalance |
Tokens | 0.2.2 |
Read / RetrySafe | get_token_account_balance |
getTokenAccountsByDelegate |
Tokens | 0.2.2 |
Read / RetrySafe | get_token_accounts_by_delegate |
getTokenAccountsByOwner |
Tokens | 0.2.2 |
Read / RetrySafe | get_token_accounts_by_owner |
getTokenLargestAccounts |
Tokens | 0.2.2 |
Read / RetrySafe | get_token_largest_accounts |
getTokenSupply |
Tokens | 0.2.2 |
Read / RetrySafe | get_token_supply |
getFeeForMessage |
Transactions | 0.2.3 |
Read / RetrySafe | get_fee_for_message |
getLatestBlockhash |
Transactions | 0.2.3 |
Read / RetrySafe | get_latest_blockhash |
getRecentPrioritizationFees |
Transactions | 0.2.3 |
Read / RetrySafe | get_recent_prioritization_fees |
getSignaturesForAddress |
Transactions | 0.2.3 |
Read / RetrySafe | get_signatures_for_address |
getSignatureStatuses |
Transactions | 0.2.3 |
Read / RetrySafe | get_signature_statuses |
getTransaction |
Transactions | 0.2.3 |
Read / RetrySafe | get_transaction + legacy |
getTransactionCount |
Transactions | 0.2.3 |
Read / RetrySafe | get_transaction_count |
isBlockhashValid |
Transactions | 0.2.3 |
Read / RetrySafe | is_blockhash_valid |
requestAirdrop |
Transactions | 0.2.3 |
WriteSubmission / NeverAfterDispatch | request_airdrop |
sendTransaction |
Transactions | 0.2.3 |
WriteSubmission / NeverAfterDispatch | send_transaction |
simulateTransaction |
Transactions | 0.2.3 |
Simulation / RetrySafe | simulate_transaction |
getBlock |
Blocks | 0.2.4 |
Read / RetrySafe | get_block + legacy |
getBlockCommitment |
Blocks | 0.2.4 |
Read / RetrySafe | get_block_commitment |
getBlockHeight |
Blocks | 0.2.4 |
Read / RetrySafe | get_block_height |
getBlockProduction |
Blocks | 0.2.4 |
Read / RetrySafe | get_block_production |
getBlocks |
Blocks | 0.2.4 |
Read / RetrySafe | get_blocks |
getBlocksWithLimit |
Blocks | 0.2.4 |
Read / RetrySafe | get_blocks_with_limit |
getBlockTime |
Blocks | 0.2.4 |
Read / RetrySafe | get_block_time |
getFirstAvailableBlock |
Blocks | 0.2.4 |
Read / RetrySafe | get_first_available_block |
getRecentPerformanceSamples |
Blocks | 0.2.4 |
Read / RetrySafe | get_recent_performance_samples |
minimumLedgerSlot |
Blocks | 0.2.4 |
Read / RetrySafe | minimum_ledger_slot |
getClusterNodes |
Cluster | 0.2.2 |
Read / RetrySafe | get_cluster_nodes |
getEpochInfo |
Cluster | 0.2.2 |
Read / RetrySafe | get_epoch_info |
getEpochSchedule |
Cluster | 0.2.2 |
Read / RetrySafe | get_epoch_schedule |
getGenesisHash |
Cluster | 0.2.1 |
Read / RetrySafe | get_genesis_hash |
getHealth |
Cluster | 0.2.1 |
Read / RetrySafe | get_health |
getHighestSnapshotSlot |
Cluster | 0.2.2 |
Read / RetrySafe | get_highest_snapshot_slot |
getIdentity |
Cluster | 0.2.2 |
Read / RetrySafe | get_identity |
getLeaderSchedule |
Cluster | 0.2.2 |
Read / RetrySafe | get_leader_schedule |
getMaxRetransmitSlot |
Cluster | 0.2.2 |
Read / RetrySafe | get_max_retransmit_slot |
getMaxShredInsertSlot |
Cluster | 0.2.2 |
Read / RetrySafe | get_max_shred_insert_slot |
getSlot |
Cluster | 0.2.2 |
Read / RetrySafe | get_slot |
getSlotLeader |
Cluster | 0.2.2 |
Read / RetrySafe | get_slot_leader |
getSlotLeaders |
Cluster | 0.2.2 |
Read / RetrySafe | get_slot_leaders |
getVersion |
Cluster | 0.2.1 |
Read / RetrySafe | get_version |
getVoteAccounts |
Cluster | 0.2.2 |
Read / RetrySafe | get_vote_accounts |
getInflationGovernor |
Economics | 0.2.4 |
Read / RetrySafe | get_inflation_governor |
getInflationRate |
Economics | 0.2.4 |
Read / RetrySafe | get_inflation_rate |
getInflationReward |
Economics | 0.2.4 |
Read / RetrySafe | get_inflation_reward |
getStakeMinimumDelegation |
Economics | 0.2.4 |
Read / RetrySafe | get_stake_minimum_delegation |
getSupply |
Economics | 0.2.4 |
Read / RetrySafe | get_supply |
Les deux formes legacy encore supportées sont couvertes séparément et marquées deprecated :
getTransaction -> HttpTransportPool::get_transaction_legacy
getBlock -> HttpTransportPool::get_block_legacy
Partition exacte :
0.2.1 foundation 4
0.2.2 Accounts/Tokens/Cluster 22
0.2.3 Transactions 11
0.2.4 Blocks/Economics 15
--------------------------------
total 52
Classification globale attendue :
Read / RetrySafe
Simulation / RetrySafe
WriteSubmission / NeverAfterDispatch
Les seules write submissions actuelles restent requestAirdrop et sendTransaction; aucune classe NeverAfterDispatch n'est affaiblie par 0.2.4.
Compliance des 14 historiques
Les 14 entrées restent découvrables pour audit/compliance mais sont Deprecated / Removed / NotApplicable et ne sont pas envoyées au réseau :
| Méthode historique | Documentation | Runtime KSP | Remplacement/aide |
|---|---|---|---|
confirmTransaction |
Deprecated | Removed | getSignatureStatuses |
getConfirmedBlock |
Deprecated | Removed | getBlock |
getConfirmedBlocks |
Deprecated | Removed | getBlocks |
getConfirmedBlocksWithLimit |
Deprecated | Removed | getBlocksWithLimit |
getConfirmedSignaturesForAddress2 |
Deprecated | Removed | getSignaturesForAddress |
getConfirmedTransaction |
Deprecated | Removed | getTransaction |
getFeeCalculatorForBlockhash |
Deprecated | Removed | isBlockhashValid / getFeeForMessage |
getFeeRateGovernor |
Deprecated | Removed | getFeeForMessage |
getFees |
Deprecated | Removed | getFeeForMessage |
getRecentBlockhash |
Deprecated | Removed | getLatestBlockhash |
getSignatureConfirmation |
Deprecated | Removed | getSignatureStatuses |
getSignatureStatus |
Deprecated | Removed | getSignatureStatuses |
getSnapshotSlot |
Deprecated | Removed | getHighestSnapshotSlot |
getStakeActivation |
Deprecated | Removed | aucun remplacement direct |
La canary release_v0_2_4_pre_009_final_http_inventory_and_coverage_partition_are_exact fige simultanément :
52 noms current exacts
14 noms historiques exacts
4 / 22 / 11 / 15 par HttpRpcCoverageRelease
Supported pour les 52 current
Deprecated + Removed + NotApplicable pour les 14 historiques
RetrySafe pour Read/Simulation current
NeverAfterDispatch pour WriteSubmission current
KSP-TRANSPORT-007 — preuve globale 52/52
Le réaudit 0.2.3 a déjà conclu 37/37 conformes avant l'ouverture de 0.2.4.
Les 15 nouveaux wrappers appliquent la même règle sans réduction de contrat.
Blocks — 10/10
Points de sensibilité couverts :
getBlockmoderne + bare encoding legacy deprecated ;- encodings
binary/base58/base64/json/jsonParsedréellement supportés par la baseline ; transactionDetails = full/signatures/none/accounts;maxSupportedTransactionVersionet version numérique générique, y compris canary1;- distinction résultat
null/ erreurs RPC ; transactions,signatures,rewards,numRewardPartitionsavec préservation des états wire pertinents ;commissionnullable +commissionBpsindépendant ;getBlocksavec ses quatre overloads exacts etRpcContextConfigcomplet ;getBlocksWithLimit(0)valide et plafond 500000 ;getRecentPerformanceSamples <= 720et ancien wire sansnumNonVoteTransactions;getBlockProductionidentity/range/context sans restriction de commitment inventée ;- wrappers sans config exactement en
params: [].
Economics — 5/5
Points de sensibilité couverts :
- aucune formule d'inflation locale ;
- aucun minimum de délégation codé en dur ;
getSupplyconserveexcludeNonCirculatingAccountsListomis/false/true ;getInflationRewardconserve ordre, doublons,nullpositionnels et cardinalité ;- aucun plafond d'adresses inventé pour
getInflationReward; epoch,commitment,minContextSlottransmis ;getInflationRewardrejetteprocessedavant I/O car la voie runtime exige au moinsconfirmed;commissionnullable etcommissionBpsprésent/omis/null indépendants ;- erreurs RPC de contexte/rewards period conservées comme erreurs applicatives distantes.
Verdict final :
KSP-TRANSPORT-007 current wrappers == 52/52
remédiation fonctionnelle finale == aucune
Smoke Devnet Transport pur
Le smoke Transport reste opt-in, programmatique et read-only :
settings programmatiques
-> getAccountInfo
-> getTokenAccountsByOwner
-> getEpochInfo
-> getVoteAccounts
-> getLatestBlockhash
-> isBlockhashValid
-> getTransactionCount
-> getBlockHeight
-> getInflationRate
-> getStakeMinimumDelegation
Les trois derniers appels ajoutent une traversée live représentative des familles Blocks/Economics sans dépendre d'un slot historique particulier, d'un compte reward spécifique ou d'une valeur économique codée en dur.
Commande :
cargo test -p ksp-onchain-transport-lib --test transport_devnet_smoke -- --ignored --nocapture
Le smoke historique de composition reste séparé et transitoire :
cargo test -p ksp-config-lib --test transport_devnet_smoke -- --ignored --nocapture
Il ne devient pas un modèle de placement des futurs smokes cross-crates.
Frontières et graphes Cargo
Frontière attendue :
ksp-config-lib -> ksp-onchain-transport-lib
ksp-onchain-transport-lib -> ksp-core-lib
ksp-onchain-transport-lib -> ksp-logging-lib
ksp-onchain-transport-lib -X-> ksp-config-lib
ksp-onchain-transport-lib -X-> Store
ksp-onchain-transport-lib -X-> Program
ksp-onchain-transport-lib -X-> tracing direct
0.2.4 n'ajoute aucune dépendance externe au Cargo.toml de Transport.
Graphes à inspecter sur la candidate :
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib -d
cargo tree -p ksp-onchain-transport-lib -e features
cargo tree -p ksp-onchain-transport-lib -e normal
cargo tree -p ksp-config-lib
cargo tree -p ksp-config-lib -d
cargo tree -p ksp-config-lib -e features
cargo tree -p ksp-config-lib -e normal
Interprétation importante : tracing peut apparaître transitivement sous ksp-logging-lib, ce qui est conforme à l'architecture. L'interdit porte sur une dépendance directe de ksp-onchain-transport-lib vers tracing. Les graphes doivent donc être lus par chaîne de dépendances et non validés par la simple présence/absence du nom tracing dans l'arbre complet.
Les canaries workspace de dépendances restent des règles globales et ne sont pas déplacées dans Transport.
Gate opérateur finale 0.2.4-pre.009
Les résultats opérateur fournis le 18 août 2026 confirment les tests de clôture suivants :
cargo test -p ksp-config-lib
95 unit passed
5 ownership passed
13 public API passed
1 smoke Devnet ignored par défaut
cargo test -p ksp-core-lib
14 unit passed
3 public API passed
2 workspace_dependencies passed
1 workspace_logging passed
cargo test -p ksp-app-config-desk
63 unit passed
2 desktop_contract passed
2 desktop_security passed
1 public API passed
cargo test --workspace passed
Transport observé dans le workspace
240 unit passed
27 public API passed
22 release completeness passed
1 smoke Devnet ignored par défaut
Le workspace valide également les suites Logging, dont les canaries d'ownership de la façade tracing. Les tests workspace_dependencies de Core confirment notamment que le manifest Transport préserve le firewall de dépendances.
Les deux smokes réseau ont ensuite été exécutés explicitement :
Transport pur :
programmatic_devnet_transport_reaches_accounts_tokens_cluster_transactions_blocks_and_economics_reads
-> 1 passed
Config -> Transport :
committed_devnet_transport_profile_reaches_all_foundation_canaries
-> 1 passed
Le premier smoke est durable et appartient à Transport. Le second reste l'exception transitoire cross-crates déjà documentée.
Graphes Cargo
La candidate définit les huit graphes et recherches de frontière à inspecter dans la section précédente. Le journal opérateur fourni pour rel.001 ne contient pas leurs sorties textuelles ; cette matrice ne les déclare donc pas comme exécutés.
En revanche, les canaries automatisées correspondantes passent dans le workspace :
workspace_dependency_table_does_not_activate_consumer_features passed
transport_manifest_preserves_ksp_dependency_firewall passed
behavioral_crates_own_explicit_tracing_targets passed
workspace_crates_do_not_bypass_ksp_logging_facade passed
Les contrôles cargo tree restent à rejouer avant création du tag stable afin de disposer d'une dernière preuve manuelle de graphe sur la version 0.2.4 publiée.
Documentation et prochaine release
La publication synchronise :
CHANGELOG.md
ROADMAP.md
README/USAGE Transport
inventaire composant
séquence fonctionnelle
plan 011
index docs/plans/validation/prompts
Le prompt suivant est :
prompts/010-V0_2_5_START_PROMPT.md
0.2.5 — Wallet foundation
Sa version 2, livrée par le fix documentaire 0.2.4-pre.009-fix.001, ajoute notamment :
interopérabilité externe du .kspwallet
threat model de bruteforce offline
VIEW / OWNER indépendants
Pubkey / alias / notes non lisibles wallet verrouillé
key slots / key wrapping à auditer
rotation des passwords sans changement de keypair
read-only cryptographique VIEW à étudier
Publication rel.001
La livraison publicationnelle applique :
workspace.package.version -> 0.2.4
ROADMAP : 0.2.4 -> [X]
CHANGELOG : synthèse stable 0.2.4
plan 011 / validation 007 : statut stable + preuves opérateur
deltas/0.2.4/rel.001.md
commit attendu : v0.2.4-rel.001
tag stable après gate finale : v0.2.4
Aucun wrapper, DTO, comportement runtime, dependency ou feature Cargo n'est ajouté pendant rel.001.
Gate finale post-application avant commit/tag :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test --workspace
cargo tree -p ksp-onchain-transport-lib
cargo tree -p ksp-onchain-transport-lib -d
cargo tree -p ksp-onchain-transport-lib -e features
cargo tree -p ksp-onchain-transport-lib -e normal
cargo tree -p ksp-config-lib
cargo tree -p ksp-config-lib -d
cargo tree -p ksp-config-lib -e features
cargo tree -p ksp-config-lib -e normal
Les smokes Devnet ont déjà été passés sur pre.009; comme rel.001 ne modifie aucun code/runtime, leur répétition n'est pas nécessaire à la démonstration fonctionnelle, mais reste autorisée avant tag si l'opérateur souhaite une ultime vérification réseau.