25 KiB
Validation candidate 0.2.4 — HTTP Blocks + Economics + compliance finale
Objet
Cette matrice porte la preuve de clôture candidate 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 reste strictement publicationnelle après validation opérateur complète de cette 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 candidate :
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 candidate 0.2.4-pre.009
Validation déterministe immédiate attendue :
cargo fmt --all
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-onchain-transport-lib
Compteurs Transport attendus après les deux nouvelles canaries finales :
240 unit
27 public API
22 release completeness
1 smoke live ignored par défaut
Gate de clôture avant rel.001 :
cargo test -p ksp-config-lib
cargo test -p ksp-core-lib
cargo test -p ksp-app-config-desk
cargo test --workspace
Puis inspection des huit graphes Cargo ci-dessus et exécution explicite des deux smokes Devnet.
Les résultats opérateur de pre.009 seront enregistrés ici pendant rel.001; ils ne sont pas anticipés dans la candidate.
Documentation et prochaine release
La candidate synchronise :
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
Il conserve notamment les frontières déjà décidées :
ksp-wallet-lib
.kspwallet
protection des secrets
signature
import/export extensible
changement de mot de passe
atomicité/no-clobber
Wallet -X-> Config
Wallet -X-> Transport
Wallet -X-> execution policy
WalletPolicy hors Wallet
Publication rel.001
Après validation opérateur complète :
workspace.package.version -> 0.2.4
ROADMAP : 0.2.4 -> [X]
CHANGELOG : synthèse stable 0.2.4
plan 011 / validation 007 : preuves finales opérateur + statut stable
README/USAGE/inventaires : candidate -> stable
deltas/0.2.4/rel.001.md
commit : v0.2.4-rel.001
tag stable : v0.2.4
Aucun wrapper, DTO, comportement runtime, dependency ou feature Cargo ne doit être ajouté pendant rel.001.