6.2 KiB
Validation d’exécution Devnet
Ce document décrit le premier parcours réseau réel de la couche d’exécution native et sa fenêtre Tauri Devnet. Le test backend reste opt-in et aucune activation Mainnet n’est autorisée.
Périmètre
Le parcours exécute une instruction System transfer depuis le wallet temporaire persistant du profil local_devnet vers un destinataire éphémère créé uniquement pour le test.
wallet persistant
-> vérification du genesis hash Devnet
-> contrôle du destinataire et du minimum rent-exempt
-> lecture du solde
-> airdrop plafonné si nécessaire
-> plan System transfer
-> blockhash et estimation des frais
-> simulation exacte
-> signature locale
-> envoi avec preflight
-> confirmation bornée
-> getTransaction
-> insertion canonique
-> extraction core
-> decode replay System
Les clés privées restent dans kb_wallet. Elles ne sont ni sérialisées dans les résumés, ni envoyées à une WebView, ni écrites dans PostgreSQL ou les logs.
Préconditions
- le profil
local_devnetdoit rester configuré sur le genesis hash Devnet officiel ; temporary_wallet_enabled,temporary_wallet_persistetdevnet_send_enableddoivent être actifs ;- la simulation et la confirmation opérateur doivent rester obligatoires ;
- PostgreSQL doit être disponible pour la validation canonique/core/decode ;
- le rôle
http_queriesdoit acceptergetTransactionet les lectures d’exécution ; - le rôle
http_transactionsdoit accepter simulation, envoi et lecture des statuts.
Le wallet persistant par défaut est créé sous :
wallets/temporary/local_devnet/local-devnet-operator.json
Ce fichier n’est pas chiffré. Il est exclusivement destiné à Localnet/Devnet et ne doit jamais recevoir de fonds réels.
Exécution du test réel
Depuis la racine du workspace :
KB_DEVNET_EXECUTION_TEST=1 \
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
KB_DEVNET_WALLET_DIR='./wallets/temporary/local_devnet' \
KB_DEVNET_AIRDROP_LAMPORTS=0 \
KB_DEVNET_TRANSFER_LAMPORTS=1000000 \
cargo test -p kb_pipeline optional_devnet_system_transfer_from_env -- --nocapture
Variables :
KB_DEVNET_EXECUTION_TEST=1autorise explicitement le test réseau ;KB_POSTGRES_TEST_URLsélectionne la base de validation ;KB_DEVNET_WALLET_DIRpeut isoler le wallet utilisé par le test ;KB_DEVNET_AIRDROP_LAMPORTSfixe le montant maximal demandé au faucet lorsque le solde est insuffisant ;KB_DEVNET_TRANSFER_LAMPORTSfixe le transfert System réel.
Les valeurs restent soumises aux plafonds de ExecutionConfig. Une valeur d’airdrop supérieure à devnet_airdrop_max_lamports ou un transfert supérieur à devnet_max_spend_lamports est refusé avant tout appel mutable.
Résultat attendu
Pour un destinataire inexistant, le pipeline appelle getAccountInfo, puis getMinimumBalanceForRentExemption avec une longueur de données nulle. Le transfert est refusé avant simulation lorsqu’il est inférieur au minimum retourné. Lorsqu’une simulation échoue malgré ces contrôles, l’erreur remontée conserve l’erreur runtime structurée et les vingt premières lignes de logs.
Le test doit confirmer :
- cluster classifié
Devnet; - simulation exacte réussie ;
- signature locale vérifiée ;
- signature RPC identique à la signature calculée ;
- statut
confirmedoufinalized; - transaction canonique présente ou déjà existante ;
- extraction core terminée ou déjà courante ;
- decode replay System terminé sans input unmatched ou failed.
L’airdrop peut être absent lorsque le wallet possède déjà un solde suffisant. Le destinataire reste éphémère et sa clé privée n’est pas persistée. Après signature, tout échec ultérieur conserve la signature dans le résumé avec un diagnostic de l’étape concernée.
Fenêtre Tauri
demo_execution_solana_core est accessible depuis la fenêtre principale. Elle expose uniquement les profils Devnet utilisant un wallet temporaire persistant. Elle permet de générer une adresse destinataire jetable, de simuler exactement le message ou de signer/envoyer après confirmation opérateur. Le plan, les comptes, les signataires, la simulation, la confirmation et les résultats canonical/core/decode sont affichés en lecture seule. La clé privée du wallet source reste exclusivement dans le backend Rust.
Un airdrop demandé par la fenêtre reste soumis au plafond du profil et peut échouer lorsque le faucet public est limité. Un wallet déjà financé peut être utilisé avec une valeur d’airdrop nulle.
Limites
- le faucet Devnet peut appliquer des limites temporaires ;
getTransactionpeut devenir disponible après la confirmation de statut, d’où les retries bornés ;- le parcours utilise actuellement une transaction legacy avec recent blockhash ;
- durable nonce, ALT et transactions v0 seront validés dans des tranches dédiées ;
- aucune opération Mainnet n’est autorisée par ce test.
Validation de clôture 0.4.2
Le 13 juillet 2026, la commande complète a été exécutée avec :
KB_DEVNET_EXECUTION_TEST=1 \
KB_POSTGRES_TEST_URL='postgres://solana:solana@localhost:5432/solana_test' \
KB_DEVNET_WALLET_DIR='./wallets/temporary/local_devnet' \
KB_DEVNET_AIRDROP_LAMPORTS=0 \
KB_DEVNET_TRANSFER_LAMPORTS=1000000 \
cargo test -p kb_pipeline -- --nocapture
Les 56 tests de kb_pipeline ont réussi, y compris optional_devnet_system_transfer_from_env. Le wallet était déjà financé, aucun airdrop n’a été demandé et le parcours a confirmé la chaîne complète jusqu’au replay post-exécution. Les 45 tests de kb_store_pg ont également réussi avec PostgreSQL réel.
Cette validation ne généralise pas l’autorisation à toutes les opérations administratives stateful. Elle prouve le parcours d’orchestration commun ; ALT, Config, Feature, Slashing, ZK, Stake, Vote et loaders restent soumis à leurs contrôles spécifiques avant toute future activation mutable.