v0.1.0-pre.061

This commit is contained in:
2026-07-28 18:41:30 +02:00
parent c7bad46f50
commit f40fb78817
527 changed files with 4598 additions and 4114 deletions

119
olddocs/DEVNET_EXECUTION.md Normal file
View File

@@ -0,0 +1,119 @@
<!-- file: docs/DEVNET_EXECUTION.md -->
<!-- version: 3 -->
# Validation dexécution Devnet
Ce document décrit le premier parcours réseau réel de la couche dexécution native et sa fenêtre Tauri Devnet. Le test backend reste opt-in et aucune activation Mainnet nest 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.
```text
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_devnet` doit rester configuré sur le genesis hash Devnet officiel ;
- `temporary_wallet_enabled`, `temporary_wallet_persist` et `devnet_send_enabled` doivent ê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_queries` doit accepter `getTransaction` et les lectures dexécution ;
- le rôle `http_transactions` doit accepter simulation, envoi et lecture des statuts.
Le wallet persistant par défaut est créé sous :
```text
wallets/temporary/local_devnet/local-devnet-operator.json
```
Ce fichier nest 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 :
```bash
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=1` autorise explicitement le test réseau ;
- `KB_POSTGRES_TEST_URL` sélectionne la base de validation ;
- `KB_DEVNET_WALLET_DIR` peut isoler le wallet utilisé par le test ;
- `KB_DEVNET_AIRDROP_LAMPORTS` fixe le montant maximal demandé au faucet lorsque le solde est insuffisant ;
- `KB_DEVNET_TRANSFER_LAMPORTS` fixe le transfert System réel.
Les valeurs restent soumises aux plafonds de `ExecutionConfig`. Une valeur dairdrop 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 lorsquil est inférieur au minimum retourné. Lorsquune simulation échoue malgré ces contrôles, lerreur remontée conserve lerreur 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 `confirmed` ou `finalized` ;
- 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.
Lairdrop peut être absent lorsque le wallet possède déjà un solde suffisant. Le destinataire reste éphémère et sa clé privée nest 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 dairdrop nulle.
## Limites
- le faucet Devnet peut appliquer des limites temporaires ;
- `getTransaction` peut devenir disponible après la confirmation de statut, doù 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 nest 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 :
```bash
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 na été demandé et le parcours a confirmé la chaîne complète jusquau 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 lautorisation à toutes les opérations administratives stateful. Elle prouve le parcours dorchestration commun ; ALT, Config, Feature, Slashing, ZK, Stake, Vote et loaders restent soumis à leurs contrôles spécifiques avant toute future activation mutable.