This commit is contained in:
2026-07-23 16:37:12 +02:00
parent 99c345f2f2
commit 0da75c1311
2159 changed files with 230833 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
<!-- file: kb_execution_safety/README.md -->
<!-- version: 3 -->
# kb_execution_safety
Cette crate applique des contrôles stateless communs aux plans préparés avant simulation, puis avant signature et envoi. Elle ne construit pas de transaction et neffectue aucun I/O.
## API publique
| Export | Usage |
|-----------------------------|------------------------------------------------------------|
| `ExecutionSafetyChecker` | Point dentrée stateless des évaluations de sécurité. |
| `ExecutionSafetyDecision` | Décision agrégée `Deny`, `RequireConfirmation` ou `Allow`. |
| `ExecutionSafetyEvaluation` | Décision accompagnée de toutes les violations stables. |
| `ExecutionSafetyViolation` | Code machine-readable et message humain dun refus. |
### `ExecutionSafetyChecker::evaluate_plan(plan)`
Évalue lancien `ExecutionPlan`. Ce contrat historique ne contient pas assez dinformations pour autoriser directement une exécution ; la décision reste donc conservatrice et exige une confirmation.
### `ExecutionSafetyChecker::evaluate_prepared_plan(plan)`
Décide si un `PreparedExecutionPlan` peut atteindre la simulation RPC. La fonction vérifie notamment :
- présence dinstructions et de signataires ;
- simulation obligatoire ;
- recent blockhash borné ou durable nonce complet ;
- cohérence entre signataires dinstruction, signataires déclarés et liste autorisée ;
- plafond de frais présent ;
- dépense et prix de compute unit sous leurs plafonds ;
- Mainnet explicitement autorisé et confirmé.
### `ExecutionSafetyChecker::evaluate_send(plan, simulation)`
Réévalue le plan puis décide si la simulation exacte permet la signature et lenvoi. La fonction refuse :
- dry-run encore actif ;
- simulation absente ou échouée ;
- blockhash remplacé pendant la simulation ;
- cluster, blockhash ou nonce observé différent du plan ;
- frais simulés supérieurs au plafond ;
- confirmation Mainnet manquante.
## Exemple
```rust
let checker = kb_execution_safety::ExecutionSafetyChecker;
let before_simulation = checker.evaluate_prepared_plan(&plan)?;
if before_simulation.decision != kb_execution_safety::ExecutionSafetyDecision::Allow {
// Surface the stable violations and stop.
}
let before_send = checker.evaluate_send(&plan, &simulation)?;
```
Une décision `Allow` ne remplace pas la validation cryptographique du message ou des signatures. Cette responsabilité appartient à `kb_execution_solana`.