2.5 KiB
2.5 KiB
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 n’effectue aucun I/O.
API publique
| Export | Usage |
|---|---|
ExecutionSafetyChecker |
Point d’entré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 d’un refus. |
ExecutionSafetyChecker::evaluate_plan(plan)
Évalue l’ancien ExecutionPlan. Ce contrat historique ne contient pas assez d’informations 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 d’instructions et de signataires ;
- simulation obligatoire ;
- recent blockhash borné ou durable nonce complet ;
- cohérence entre signataires d’instruction, 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 l’envoi. 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
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.