v0.1.0-pre.064-065
This commit is contained in:
119
olddocs/archivekbot2/docs/DEVNET_EXECUTION.md
Normal file
119
olddocs/archivekbot2/docs/DEVNET_EXECUTION.md
Normal file
@@ -0,0 +1,119 @@
|
||||
<!-- file: docs/DEVNET_EXECUTION.md -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# 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.
|
||||
|
||||
```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 d’exé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 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 :
|
||||
|
||||
```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 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 `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.
|
||||
|
||||
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 ;
|
||||
- `getTransaction` peut 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 :
|
||||
|
||||
```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 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.
|
||||
|
||||
Reference in New Issue
Block a user