v0.1.0-pre.064-065

This commit is contained in:
2026-07-30 17:50:29 +02:00
parent e0028b323e
commit 0befb170c7
440 changed files with 36186 additions and 39 deletions

View File

@@ -0,0 +1,101 @@
<!-- file: kb_execution_api/README.md -->
<!-- version: 3 -->
# kb_execution_api
Cette crate définit les contrats communs de la couche dexécution. Elle ne dépend ni du wallet, ni du RPC, ni du stockage, ni des décodeurs et ne construit aucune instruction Solana.
## API publique
### Capacités et traits
| Export | Usage |
|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| `ExecutionCapability` | Réponse exacte `Supported { operation_code }` ou `Unsupported { reason_code, reason }` pour un couple programme/opération. |
| `ExecutionCapability::supported(...)` | Construit une capacité supportée avec un code stable. |
| `ExecutionCapability::unsupported(...)` | Construit un refus documenté avec code et message. |
| `ExecutionCapability::is_supported()` | Teste la capacité sans perdre le diagnostic du variant complet. |
| `TypedInstructionExecutor` | Contrat actuel : expose `capability(...)` et `build_prepared_plan(...)` sans I/O, signature ou envoi. |
| `InstructionExecutor` | Pont historique fondé sur `ExecutionRequest`/`ExecutionPlan`; il reste disponible pour les crates réservées. |
| `ExecutionSupport` | Résultat historique `No`, `Maybe` ou `Yes`; les exécuteurs opérationnels doivent éviter `Maybe`. |
### Politiques
| Export | Usage |
|---------------------------------|-----------------------------------------------------------------------------------------------------------|
| `ExecutionPolicy` | Agrège cluster, simulation, blockhash/nonce, plafonds, signataires autorisés, dry-run et post-validation. |
| `ExecutionCluster` | Cluster attendu : Localnet, Devnet, Testnet ou Mainnet. |
| `ExecutionClusterPolicy` | Autorisation du cluster et double confirmation Mainnet. |
| `ExecutionSimulationPolicy` | Indique si la simulation est obligatoire. |
| `ExecutionBlockhashKind` | Sélectionne un recent blockhash ou un durable nonce. |
| `ExecutionBlockhashPolicy` | Porte lâge maximal du blockhash ou le compte et lautorité nonce. |
| `ExecutionCostLimit` | Plafonds de dépense, frais totaux et prix par compute unit. |
| `PostExecutionValidationPolicy` | Étapes exigées après confirmation : canonical insert, core extraction, decode replay et matérialisation. |
Tous les types de politique implémentent des valeurs par défaut conservatrices : Devnet, simulation obligatoire, recent blockhash borné, dry-run actif et Mainnet désactivé.
### Plan préparé
| Export | Usage |
|-------------------------|-------------------------------------------------------------------------------------|
| `PreparedExecutionPlan` | Contrat immutable transmis de lexécuteur à la sécurité puis à lassembleur Solana. |
| `PlannedInstruction` | Program ID, code dopération, comptes ordonnés et payload exact. |
| `PlannedAccount` | Public key et flags signer/writable dun compte dinstruction. |
| `RequiredSigner` | Public key et rôle stable dun signataire requis. |
Un plan contient également lexécuteur/version, lidentifiant dintent, le fee payer, la politique, les lamports dépensés ou verrouillés et le prix Compute Budget demandé.
### Résultats dorchestration
| Export | Usage |
|-------------------------------|-------------------------------------------------------------------------------------------------------------------|
| `ExecutionSimulationResult` | Preuve provider-neutral dune simulation, avec contexte cluster/blockhash, frais, unités, logs et erreur runtime. |
| `ExecutionSendResult` | Signature acceptée par le RPC et slot de soumission éventuel. |
| `ExecutionConfirmationStatus` | État final ou intermédiaire de confirmation. |
| `ExecutionConfirmationResult` | Résultat borné des polls de confirmation. |
| `PostExecutionDiagnostic` | Résumé des étapes canonical/core/decode/materialization après exécution. |
### Compatibilité et helpers JSON
| Export | Usage |
|--------------------------------------|------------------------------------------------------------------------|
| `ExecutionRequest` | Requête historique `program_id + operation_code + payload_json`. |
| `ExecutionPlan` | Plan historique sérialisé, sans garantie dêtre directement envoyable. |
| `serialize_payload_json(...)` | Sérialise un `serde_json::Value` compact avec `kb_core::Error`. |
| `serialize_payload_json_pretty(...)` | Sérialise le même payload en forme lisible. |
## Exemple dimplémentation dun exécuteur
```rust
impl kb_execution_api::TypedInstructionExecutor for MyExecutor {
type Intent = MyIntent;
fn capability(
&self,
program_id: &kb_model::ProgramId,
operation_code: &str,
) -> kb_execution_api::ExecutionCapability {
// Return an exact Supported or Unsupported result.
}
fn build_prepared_plan(
&self,
intent: &Self::Intent,
) -> kb_core::Result<kb_execution_api::PreparedExecutionPlan> {
// Validate and encode only. Do not access RPC or sign here.
}
}
```
## Frontières
`kb_execution_api` ne décide pas quun plan est sûr, ne compile pas de message Solana et ne contacte aucun endpoint. Le flux attendu est :
```text
executor intent
-> PreparedExecutionPlan
-> kb_execution_safety
-> kb_execution_solana
-> kb_rpc
-> post-execution orchestration
```