Files
khadhroony-solana-project/docs/validation/007-V0_2_4_HTTP_FINAL_COMPLIANCE.md
2026-08-18 22:43:09 +02:00

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 :

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 :

  • getBlock moderne + bare encoding legacy deprecated ;
  • encodings binary/base58/base64/json/jsonParsed réellement supportés par la baseline ;
  • transactionDetails = full/signatures/none/accounts ;
  • maxSupportedTransactionVersion et version numérique générique, y compris canary 1 ;
  • distinction résultat null / erreurs RPC ;
  • transactions, signatures, rewards, numRewardPartitions avec préservation des états wire pertinents ;
  • commission nullable + commissionBps indépendant ;
  • getBlocks avec ses quatre overloads exacts et RpcContextConfig complet ;
  • getBlocksWithLimit(0) valide et plafond 500000 ;
  • getRecentPerformanceSamples <= 720 et ancien wire sans numNonVoteTransactions ;
  • getBlockProduction identity/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 ;
  • getSupply conserve excludeNonCirculatingAccountsList omis/false/true ;
  • getInflationReward conserve ordre, doublons, null positionnels et cardinalité ;
  • aucun plafond d'adresses inventé pour getInflationReward ;
  • epoch, commitment, minContextSlot transmis ;
  • getInflationReward rejette processed avant I/O car la voie runtime exige au moins confirmed ;
  • commission nullable et commissionBps pré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.