From c30ba8a2d968c93b9c9e1dccd014fb03ec4e098f Mon Sep 17 00:00:00 2001 From: SinuS Von SifriduS Date: Fri, 24 Jul 2026 23:54:38 +0200 Subject: [PATCH] v0.1.0-pre.023 --- CHANGELOG.md | 22 ++++- Cargo.toml | 4 +- README.md | 2 +- ROADMAP.md | 27 +++++- RULES.md | 2 +- config/README.md | 2 +- config/example.config.json | 88 +++++++++---------- docs/ARCHITECTURE.md | 10 +-- docs/BACKFILL_HTTP.md | 2 +- docs/CODE_REUSE.md | 10 +-- docs/DATABASE.md | 2 +- docs/DEVELOPMENT_ORDER.md | 2 +- docs/EXECUTION_MODEL.md | 6 +- docs/EXECUTOR_SURFACE_MATRIX.md | 2 +- docs/HISTORICAL_DATA_ACQUISITION_PLAN.md | 12 +-- docs/LIVE_SOURCE_STRATEGY.md | 4 +- docs/LOGGING.md | 2 +- docs/RPC_ENDPOINT_ROLES.md | 4 +- docs/SOLANA_INTERFACE_DEPENDENCIES.md | 14 +-- docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md | 8 +- docs/SOLANA_STANDARD_RPC_MATRIX.json | 94 ++++++++++----------- docs/TRACING_CONTRACT.md | 2 +- docs/TRANSACTION_ACQUISITION_MODEL.md | 4 +- kb-app-demo/Cargo.toml | 4 +- kb-logging/src/tracing_runtime.rs | 18 ++-- {kb-rpc => kb-onchain-transport}/Cargo.toml | 6 +- {kb-rpc => kb-onchain-transport}/src/lib.rs | 6 +- kb-pipeline/Cargo.toml | 4 +- 28 files changed, 203 insertions(+), 160 deletions(-) rename {kb-rpc => kb-onchain-transport}/Cargo.toml (69%) rename {kb-rpc => kb-onchain-transport}/src/lib.rs (66%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9048b37..6acc53f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,28 @@ - + # CHANGELOG +## 0.1.0-pre.023 + +- Renommage structurel de `kb-rpc` en `kb-onchain-transport`. +- Renommage de l’identifiant Rust en `kb_onchain_transport`. +- Mise à jour du workspace, des dépendances de `kb-pipeline` et `kb-app-demo`, du lockfile, des routes de logs et des documents actifs. +- Réservation de `kb-offchain-transport` pour une éventuelle future acquisition HTTP/IPFS/Arweave hors chaîne. +- Aucun portage fonctionnel RPC dans cette tranche. + +## 0.1.0-pre.022 + +- Migration de `kb_execution_solana` dans `kb-lib::executor::solana::transaction`. +- Conservation de l’assemblage legacy et durable nonce, de la preuve de simulation et de la signature contrôlée. +- Validation utilisateur de 625 tests `kb-lib`, Clippy et du workspace. + +## 0.1.0-pre.021 + +- Migration complète de l’exécuteur SPL Token classique. +- Adaptation aux modèles et à la safety consolidés de `kb-lib`. +- Validation utilisateur de 613 tests `kb-lib`, 41 tests `kb-config`, 17 tests `kb-logging`, Clippy et du workspace. + ## 0.1.0-pre.016 - Portage fonctionnel complet de `kb_execution_safety` dans `kb-lib`. diff --git a/Cargo.toml b/Cargo.toml index c9e99b0..286cf37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ members = [ "kb-logging", "kb-program-ids", "kb-pipeline", - "kb-rpc", + "kb-onchain-transport", "kb-store", "kb-wallet", "kb-app-demo", @@ -27,7 +27,7 @@ publish = false [workspace.dependencies] argon2 = { version = "^0.5", features = ["std", "zeroize"] } async-trait = { version = "^0.1", features = [] } -base64 = { version = "^0.23", features = [] } +base64 = { version = "^0.22", features = [] } bytemuck = { version = "^1.25", features = ["derive"] } borsh_0_10 = { package = "borsh", version = "^0.10" } borsh = { version = "^1.7", features = ["ascii", "bson", "bytes", "default", "derive", "de_strict_order", "borsh-derive", "indexmap", "std", "rc"] } diff --git a/README.md b/README.md index 211a45b..891825e 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Khadhroony Bot3 is the consolidated successor workspace to `khadhroony-bot2`. - `kb-logging`: logging and tracing runtime. - `kb-program-ids`: Solana program identifier registry. - `kb-pipeline`: ingestion, decoding, materialization and execution orchestration. -- `kb-rpc`: HTTP and WebSocket Solana transports. +- `kb-onchain-transport`: HTTP and WebSocket Solana transports. - `kb-store`: store-neutral contracts and PostgreSQL implementation modules. - `kb-wallet`: wallet and signer support. - `kb-app-demo`: the only binary retained during the initial migration. diff --git a/ROADMAP.md b/ROADMAP.md index 1a3f3d2..899ffbe 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -238,5 +238,28 @@ - [x] Corriger les targets et chemins de logs de Solana Core et SPL Memo dans les trois profils. - [x] Vérifier ATA, Token-2022 et ElGamal Registry, déjà alignés sur leurs targets bot3. - [x] Laisser SPL Token classique sous son identité réservée tant que son exécuteur n’est pas migré. -- [ ] Valider `kb-config`, `kb-logging`, Clippy et le workspace avec Cargo sur la machine de développement. -- [ ] Décider puis appliquer le renommage de `kb-rpc` avant sa migration fonctionnelle. +- [x] Valider `kb-config`, `kb-logging`, Clippy et le workspace avec Cargo sur la machine de développement. +- [x] Décider le nom `kb-onchain-transport`; appliquer le renommage structurel dans `0.1.0-pre.023`. +### 0.1.0-pre.021 — Exécuteur SPL Token classique + +- [x] Migrer l’exécuteur SPL Token classique, ses builders officiels, ses intents et ses tests. +- [x] Adapter le portage à l’API consolidée de `kb-lib` et supprimer les références aux anciennes crates `kb_model` et `kb_execution_safety`. +- [x] Déplacer `spl-token-interface` dans les dépendances normales de `kb-lib`. +- [x] Valider 613 tests `kb-lib`, les tests `kb-config` et `kb-logging`, Clippy et le workspace. + +### 0.1.0-pre.022 — Couche transactionnelle Solana + +- [x] Migrer `kb_execution_solana` dans `kb-lib::executor::solana::transaction`. +- [x] Conserver les transactions legacy, durable nonce, preuves de simulation, résolution des signataires et limites de paquet. +- [x] Adapter les tests à `solana_keypair::Keypair` sans couplage à `kb-wallet`. +- [x] Valider 625 tests `kb-lib`, Clippy et le workspace. + +### 0.1.0-pre.023 — Renommage du transport on-chain + +- [x] Renommer la crate scaffold `kb-rpc` en `kb-onchain-transport`. +- [x] Renommer l’identifiant Rust en `kb_onchain_transport`. +- [x] Mettre à jour le workspace, les dépendances, le lockfile, les targets et chemins de logs. +- [x] Mettre à jour les documents actifs et conserver les documents historiques bot2 inchangés. +- [ ] Valider le renommage avec Cargo sur la machine de développement. +- [ ] Migrer ensuite les contrats communs et le transport HTTP standard de l’ancienne `kb_rpc`. + diff --git a/RULES.md b/RULES.md index ecc3523..971c2fe 100644 --- a/RULES.md +++ b/RULES.md @@ -171,7 +171,7 @@ Aucun renommage massif de modules n'est autorisé sans étape de contrôle dédi - Aucun nouveau code ne doit dépendre directement de `bincode`. Une interface officielle uniquement disponible derrière une feature `bincode` ne justifie pas l’activation de cette feature ; le layout doit alors être prouvé depuis les sources officielles et implémenté localement avec des bornes et des tests. - Les exécuteurs doivent utiliser les builders officiels disponibles, préserver l’ordre exact des metas, borner toute liste de comptes variable avant l’appel au builder et refuser les doublons lorsque leur répétition n’a pas de sémantique publiée. - Les features des interfaces doivent rester minimales et explicites. Une feature `serde`, `wincode`, `borsh`, `std`, `alloc` ou équivalente n’est activée que si la crate consommatrice l’utilise réellement. -- Les crates applicatives ne doivent pas dépendre d’interfaces RPC ou transactionnelles uniquement pour relayer des types ; ces dépendances appartiennent à `kb_rpc`, aux modèles communs justifiés ou à la crate opérationnelle propriétaire. +- Les crates applicatives ne doivent pas dépendre d’interfaces RPC ou transactionnelles uniquement pour relayer des types ; ces dépendances appartiennent à `kb_onchain_transport`, aux modèles communs justifiés ou à la crate opérationnelle propriétaire. - Toute exception et toute implémentation locale doivent être documentées dans `docs/SOLANA_INTERFACE_DEPENDENCIES.md` avec la raison, la source officielle et la stratégie de test. - Tant que les types Solana consommés implémentent les traits de `wincode 0.5.x`, le catalogue workspace conserve `wincode = "^0.5"` et le `Cargo.lock` versionné conserve exactement diff --git a/config/README.md b/config/README.md index b94f635..f74a02a 100644 --- a/config/README.md +++ b/config/README.md @@ -13,7 +13,7 @@ Ce dossier contient les exemples et le schéma de configuration JSON. - Un profil actif doit être présent et unique. - Les profils non actifs peuvent rester dans le fichier pour les tests devnet, mainnet lecture seule, backfill ou future production. - Le contrat courant couvre HTTP JSON-RPC Solana et WebSocket JSON-RPC générique. -- Helius `transactionSubscribe` et Yellowstone gRPC seront ajoutés plus tard dans `kb_rpc`, avec évolution explicite du schéma quand les transports seront réellement utilisés. +- Helius `transactionSubscribe` et Yellowstone gRPC seront ajoutés plus tard dans `kb_onchain_transport`, avec évolution explicite du schéma quand les transports seront réellement utilisés. - Les IDLs restent des artefacts de développement et ne font pas partie de la configuration runtime. ## Fichiers diff --git a/config/example.config.json b/config/example.config.json index 5c5380f..e55dbdb 100644 --- a/config/example.config.json +++ b/config/example.config.json @@ -21,27 +21,21 @@ "format": "compact", "ansi": true, "targets": [ - "kb_app_demo", - "kb-lib.decoder.metadata.metaplex_token_metadata", + "kb-logging", "kb-lib.decoder.solana.core", + "kb-lib.decoder.spl.token", + "kb-lib.decoder.spl.token2022", "kb-lib.decoder.spl.associated_token_account", "kb-lib.decoder.spl.elgamal_registry", "kb-lib.decoder.spl.memo", - "kb-lib.decoder.spl.token", - "kb-lib.decoder.spl.token2022", - "kb-lib.executor.solana.transaction", - "kb_executor_metadata_metaplex_token_metadata", - "kb_executor_metadata_spl_name_service", + "kb-lib.decoder.metadata.metaplex_token_metadata", "kb-lib.executor.solana.core", - "kb_executor_spl_account_compression", + "kb-lib.executor.solana.transaction", + "kb-lib.executor.spl.token", + "kb-lib.executor.spl.token2022", "kb-lib.executor.spl.associated_token_account", "kb-lib.executor.spl.elgamal_registry", "kb-lib.executor.spl.memo", - "kb_executor_spl_noop", - "kb_executor_spl_single_pool", - "kb-lib.executor.spl.token", - "kb-lib.executor.spl.token2022", - "kb-logging", "kb-lib.materializer.admin", "kb-lib.materializer.compliance", "kb-lib.materializer.lifecycle", @@ -49,9 +43,15 @@ "kb-lib.materializer.staking", "kb-lib.materializer.token", "kb-lib.materializer.transaction", - "kb_pipeline", - "kb_rpc", "kb-store", + "kb-onchain-transport", + "kb_app_demo", + "kb_executor_metadata_metaplex_token_metadata", + "kb_executor_metadata_spl_name_service", + "kb_executor_spl_account_compression", + "kb_executor_spl_noop", + "kb_executor_spl_single_pool", + "kb_pipeline", "kb_wallet" ] }, @@ -966,42 +966,42 @@ ] }, { - "name": "file_kb_rpc_debug", + "name": "file_kb-onchain-transport_debug", "enabled": true, "sink": "file", "level": "debug", - "path": "logs/devnet/kb_rpc/debug.log", + "path": "logs/devnet/kb-onchain-transport/debug.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_info", + "name": "file_kb-onchain-transport_info", "enabled": true, "sink": "file", "level": "info", - "path": "logs/devnet/kb_rpc/info.log", + "path": "logs/devnet/kb-onchain-transport/info.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_error", + "name": "file_kb-onchain-transport_error", "enabled": true, "sink": "file", "level": "error", - "path": "logs/devnet/kb_rpc/error.jsonl", + "path": "logs/devnet/kb-onchain-transport/error.jsonl", "rotation": "daily", "format": "json", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { @@ -1691,7 +1691,7 @@ "kb-lib.materializer.token", "kb-lib.materializer.transaction", "kb_pipeline", - "kb_rpc", + "kb-onchain-transport", "kb-store", "kb_wallet" ] @@ -2607,42 +2607,42 @@ ] }, { - "name": "file_kb_rpc_debug", + "name": "file_kb-onchain-transport_debug", "enabled": true, "sink": "file", "level": "debug", - "path": "logs/mainnet_research/kb_rpc/debug.log", + "path": "logs/mainnet_research/kb-onchain-transport/debug.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_info", + "name": "file_kb-onchain-transport_info", "enabled": true, "sink": "file", "level": "info", - "path": "logs/mainnet_research/kb_rpc/info.log", + "path": "logs/mainnet_research/kb-onchain-transport/info.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_error", + "name": "file_kb-onchain-transport_error", "enabled": true, "sink": "file", "level": "error", - "path": "logs/mainnet_research/kb_rpc/error.jsonl", + "path": "logs/mainnet_research/kb-onchain-transport/error.jsonl", "rotation": "daily", "format": "json", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { @@ -3532,7 +3532,7 @@ "kb-lib.materializer.token", "kb-lib.materializer.transaction", "kb_pipeline", - "kb_rpc", + "kb-onchain-transport", "kb-store", "kb_wallet" ] @@ -4448,42 +4448,42 @@ ] }, { - "name": "file_kb_rpc_debug", + "name": "file_kb-onchain-transport_debug", "enabled": true, "sink": "file", "level": "debug", - "path": "logs/mainnet/kb_rpc/debug.log", + "path": "logs/mainnet/kb-onchain-transport/debug.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_info", + "name": "file_kb-onchain-transport_info", "enabled": true, "sink": "file", "level": "info", - "path": "logs/mainnet/kb_rpc/info.log", + "path": "logs/mainnet/kb-onchain-transport/info.log", "rotation": "daily", "format": "human", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { - "name": "file_kb_rpc_error", + "name": "file_kb-onchain-transport_error", "enabled": true, "sink": "file", "level": "error", - "path": "logs/mainnet/kb_rpc/error.jsonl", + "path": "logs/mainnet/kb-onchain-transport/error.jsonl", "rotation": "daily", "format": "json", "ansi": false, "targets": [ - "kb_rpc" + "kb-onchain-transport" ] }, { diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index dcb96ec..20024f5 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -9,7 +9,7 @@ L'architecture cible est organisée en couches strictes afin d'éviter de recré ```text sources RPC HTTP / WebSocket / gRPC - -> kb_rpc + -> kb_onchain_transport -> kb_model transaction canonique -> raw -> core @@ -24,14 +24,14 @@ sources historiques déjà indexées -> kb_external_sources -> candidats de signatures -> kb_pipeline - -> hydratation canonique via kb_rpc + -> hydratation canonique via kb_onchain_transport ``` ## Responsabilités -- `kb_rpc` gère les méthodes et flux RPC Solana : JSON-RPC HTTP, WebSocket, Helius/LaserStream et Yellowstone gRPC lorsque ces surfaces seront activées. +- `kb_onchain_transport` gère les méthodes et flux RPC Solana : JSON-RPC HTTP, WebSocket, Helius/LaserStream et Yellowstone gRPC lorsque ces surfaces seront activées. - `kb_external_sources` est une crate future réservée aux APIs REST, exports et imports historiques externes, par exemple Solscan Pro ou un CSV officiel. Elle ne produit jamais directement une transaction canonique et ne doit pas être confondue avec un futur index interne PostgreSQL. -- `kb_pipeline` combine la découverte de signatures par `kb_rpc` ou `kb_external_sources` avec l’hydratation canonique par `kb_rpc`. +- `kb_pipeline` combine la découverte de signatures par `kb_onchain_transport` ou `kb_external_sources` avec l’hydratation canonique par `kb_onchain_transport`. - `kb_model` définit la transaction Solana canonique indépendante du fournisseur. - `raw` conserve une transaction canonique unique et rejouable par signature. - `obs` conserve les observations techniques de source, programme, instruction et discriminator. @@ -55,7 +55,7 @@ transaction canonique identique Les détails de fournisseur restent dans `kb_sol_obs_transaction_observations`. Ils ne contaminent pas les décodeurs ni les tables core. -`kb_rpc` ne doit pas être renommée en `kb_com` ou `kb_transport` pour accueillir des sources historiques externes. Ces noms seraient trop génériques et mélangeraient RPC Solana, APIs REST indexées, imports CSV et orchestration métier. Le nom `kb_external_sources` évite la confusion avec l’indexation locale et décrit explicitement une frontière de fournisseurs externes plutôt qu’une simple action de récupération. Si des primitives HTTP réellement communes apparaissent plus tard, elles pourront être extraites dans une crate technique dédiée sans modifier la frontière fonctionnelle entre `kb_rpc` et `kb_external_sources`. +`kb_onchain_transport` ne doit pas être renommée en `kb_com` ou `kb_transport` pour accueillir des sources historiques externes. Ces noms seraient trop génériques et mélangeraient RPC Solana, APIs REST indexées, imports CSV et orchestration métier. Le nom `kb_external_sources` évite la confusion avec l’indexation locale et décrit explicitement une frontière de fournisseurs externes plutôt qu’une simple action de récupération. Si des primitives HTTP réellement communes apparaissent plus tard, elles pourront être extraites dans une crate technique dédiée sans modifier la frontière fonctionnelle entre `kb_onchain_transport` et `kb_external_sources`. ## Convention DB associée diff --git a/docs/BACKFILL_HTTP.md b/docs/BACKFILL_HTTP.md index db6ce6f..5575e1c 100644 --- a/docs/BACKFILL_HTTP.md +++ b/docs/BACKFILL_HTTP.md @@ -121,7 +121,7 @@ Le calcul de cette frontière est couvert par les tests unitaires. Une campagne Validations locales : ```text -cargo test -p kb_rpc : 54 tests passés +cargo test -p kb_onchain_transport : 54 tests passés cargo test -p kb_pipeline : 10 tests passés cargo test -p kb_store_core: 31 tests passés cargo test -p kb_store_pg : 32 tests passés diff --git a/docs/CODE_REUSE.md b/docs/CODE_REUSE.md index 2d04b62..4810c38 100644 --- a/docs/CODE_REUSE.md +++ b/docs/CODE_REUSE.md @@ -9,10 +9,10 @@ Ce document liste les composants de l'ancien workspace qui peuvent servir de ré | Composant | Cible dans le nouveau workspace | Décision provisoire | |--------------------------------------------|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------| -| Client RPC HTTP | `kb_rpc` | Réutiliser les idées : retry, backoff, limites, traces, idempotence. Réécrire l'API selon les nouveaux modèles. | -| Pool RPC HTTP | `kb_rpc` | Reprendre le principe de sélection d'endpoint et de contrôle de débit. Isoler les métriques et les erreurs dans `kb_core`. | -| Client WebSocket | `kb_rpc` | Reprendre la gestion ping/pong, subscribe/unsubscribe, shutdown explicite et reconnexion contrôlée. | -| Pool WebSocket | `kb_rpc` | Garder l'idée de pool, mais éviter toute dépendance vers les décodeurs ou le stockage concret. | +| Client RPC HTTP | `kb_onchain_transport` | Réutiliser les idées : retry, backoff, limites, traces, idempotence. Réécrire l'API selon les nouveaux modèles. | +| Pool RPC HTTP | `kb_onchain_transport` | Reprendre le principe de sélection d'endpoint et de contrôle de débit. Isoler les métriques et les erreurs dans `kb_core`. | +| Client WebSocket | `kb_onchain_transport` | Reprendre la gestion ping/pong, subscribe/unsubscribe, shutdown explicite et reconnexion contrôlée. | +| Pool WebSocket | `kb_onchain_transport` | Garder l'idée de pool, mais éviter toute dépendance vers les décodeurs ou le stockage concret. | | Ledger de replay | `kb_pipeline` et `kb_store_core` | Réécrire en versionné par module, version, scope et input hash. | | Validation SQL | `validation_sql/` | Porter seulement les contrôles encore utiles : doublons de signatures, events failed, non-swap vers trade, coverage résiduelle. | | Découvertes de discriminators | `docs/DECODER_SURFACE_AUDIT.md`, `idls/`, futurs catalogues | Conserver comme corpus de décision, pas comme support automatique. | @@ -21,7 +21,7 @@ Ce document liste les composants de l'ancien workspace qui peuvent servir de ré ## Interdictions - Ne pas importer directement l'ancien schéma SQLite dans les nouveaux décodeurs. -- Ne pas faire dépendre `kb_rpc` de `kb_store_pg`. +- Ne pas faire dépendre `kb_onchain_transport` de `kb_store_pg`. - Ne pas faire dépendre un décodeur de `kb_pipeline`. - Ne pas conserver une fonction monolithique de replay global. diff --git a/docs/DATABASE.md b/docs/DATABASE.md index df13aaa..ce61f5a 100644 --- a/docs/DATABASE.md +++ b/docs/DATABASE.md @@ -110,7 +110,7 @@ Ces tables sont candidates, pas toutes implémentées en `0.2.0`. La couche `raw` conserve une seule représentation canonique de chaque transaction Solana. Elle ne conserve pas une copie complète par transport ou fournisseur. -Les adaptateurs `kb_rpc` convertissent JSON-RPC, Helius WebSocket ou Yellowstone Protobuf vers le même contrat `kb_model`. Le payload canonique reste la source rejouable pour l’extraction `core`, les décodeurs et les matérialisateurs. +Les adaptateurs `kb_onchain_transport` convertissent JSON-RPC, Helius WebSocket ou Yellowstone Protobuf vers le même contrat `kb_model`. Le payload canonique reste la source rejouable pour l’extraction `core`, les décodeurs et les matérialisateurs. La couche `obs` conserve les acquisitions successives : fournisseur, endpoint, protocole, méthode, commitment, timestamps, taille et statut. `kb_sol_obs_transaction_observations` ne contient pas de `raw_json` complet. diff --git a/docs/DEVELOPMENT_ORDER.md b/docs/DEVELOPMENT_ORDER.md index c93464d..d26a9d9 100644 --- a/docs/DEVELOPMENT_ORDER.md +++ b/docs/DEVELOPMENT_ORDER.md @@ -69,7 +69,7 @@ program ids - Ne pas placer de structures Rust dans `queries/`. - Ne pas faire dépendre les décodeurs du store concret. - Ne pas faire dépendre les décodeurs du fournisseur d’acquisition. -- Intégrer Helius et Yellowstone dans `kb_rpc`, sans crate provider séparée. +- Intégrer Helius et Yellowstone dans `kb_onchain_transport`, sans crate provider séparée. - Ne pas modifier `CHANGELOG.md` avant validation locale du jalon. ## État de clôture `0.3.4-pre.011` diff --git a/docs/EXECUTION_MODEL.md b/docs/EXECUTION_MODEL.md index 9d0ca3f..5163fef 100644 --- a/docs/EXECUTION_MODEL.md +++ b/docs/EXECUTION_MODEL.md @@ -36,7 +36,7 @@ Une opération dangereuse ne doit pas être supprimée de l'exécuteur. Elle doi - `kb-lib::executor::solana::transaction` assemble les plans en messages/transactions Solana et orchestre la signature sans RPC. - `kb_executor_solana_core` construit les instructions des programmes natifs. - `kb_wallet` isole les secrets et fournit des signataires. -- `kb_rpc` fournit simulation, envoi et confirmation. +- `kb_onchain_transport` fournit simulation, envoi et confirmation. - `kb_pipeline` peut orchestrer la validation post-exécution par réingestion et replay. - `kb_app_demo` ne fait qu'orchestrer une sélection sûre de ces capacités. @@ -64,7 +64,7 @@ L'objectif de clôture de `kb_executor_solana_core` est de ne laisser aucune ins ## Adaptateurs RPC de simulation -`0.4.2-pre.004` ajoute dans `kb_rpc` les premières lectures nécessaires avant signature : +`0.4.2-pre.004` ajoute dans `kb_onchain_transport` les premières lectures nécessaires avant signature : ```text getGenesisHash @@ -77,7 +77,7 @@ Le genesis hash sert à classifier les clusters publics connus. Le réseau de pr La simulation accepte une transaction base64 non signée lorsque `sigVerify = false`; `replaceRecentBlockhash = true` permet au nœud de remplacer le blockhash avant simulation. Les erreurs runtime restent un résultat de simulation typé et ne sont pas confondues avec une erreur HTTP ou JSON-RPC. -`kb_rpc` ne fabrique pas le contexte de sécurité : cluster attendu, âge du blockhash, nonce account et nonce authority sont fournis explicitement lors de la conversion vers `ExApiExecutionSimulationResult`. Depuis `pre.013`, `getAccountInfo` possède aussi un mode données complètes borné : le mode metadata-only conserve `dataSlice.length = 0`, tandis que `confirmed_with_data(max_data_bytes)` exige un tuple base64 complet dont la longueur décodée égale `space`. +`kb_onchain_transport` ne fabrique pas le contexte de sécurité : cluster attendu, âge du blockhash, nonce account et nonce authority sont fournis explicitement lors de la conversion vers `ExApiExecutionSimulationResult`. Depuis `pre.013`, `getAccountInfo` possède aussi un mode données complètes borné : le mode metadata-only conserve `dataSlice.length = 0`, tandis que `confirmed_with_data(max_data_bytes)` exige un tuple base64 complet dont la longueur décodée égale `space`. ## Assemblage et signature Solana diff --git a/docs/EXECUTOR_SURFACE_MATRIX.md b/docs/EXECUTOR_SURFACE_MATRIX.md index 0a89c3b..3c70df8 100644 --- a/docs/EXECUTOR_SURFACE_MATRIX.md +++ b/docs/EXECUTOR_SURFACE_MATRIX.md @@ -26,7 +26,7 @@ Cette matrice suit la symétrie entre surfaces de décodage et surfaces de const | `kb_execution_api` | Contrats provider-neutral des capacités, politiques, plans et résultats. | | `kb_execution_safety` | Garde-fous stateless avant simulation, signature ou envoi. | | `kb-lib::executor::solana::transaction` | Compilation Solana, blockhash/nonce, preuve de simulation et signature. | -| `kb_rpc` | Acquisition, simulation, envoi et confirmation JSON-RPC ; aucune clé privée. | +| `kb_onchain_transport` | Acquisition, simulation, envoi et confirmation JSON-RPC ; aucune clé privée. | | `kb_wallet` | Résolution des signataires derrière un backend explicite. | ## Règle mécanique diff --git a/docs/HISTORICAL_DATA_ACQUISITION_PLAN.md b/docs/HISTORICAL_DATA_ACQUISITION_PLAN.md index 3a5378a..3d613f5 100644 --- a/docs/HISTORICAL_DATA_ACQUISITION_PLAN.md +++ b/docs/HISTORICAL_DATA_ACQUISITION_PLAN.md @@ -31,12 +31,12 @@ W2 — historique manuel -> aucune consommation implicite du budget réservé au trading ``` -W2 ne remplace ni `kb_rpc`, ni le pipeline canonique, ni les fournisseurs temps réel. Il sert à alimenter progressivement PostgreSQL avec des données historiques dont la latence n'est pas critique. +W2 ne remplace ni `kb_onchain_transport`, ni le pipeline canonique, ni les fournisseurs temps réel. Il sert à alimenter progressivement PostgreSQL avec des données historiques dont la latence n'est pas critique. ## 2. Principes non négociables -- `kb_rpc` reste la frontière des protocoles Solana : JSON-RPC HTTP/WS standard, extensions fournisseur officiellement prises en charge, Yellowstone/gRPC et transports similaires. -- Une source historique parlant JSON-RPC standard peut réutiliser `kb_rpc`, mais sa politique de campagne, son coût, sa provenance et ses fallbacks restent hors de `kb_rpc`. +- `kb_onchain_transport` reste la frontière des protocoles Solana : JSON-RPC HTTP/WS standard, extensions fournisseur officiellement prises en charge, Yellowstone/gRPC et transports similaires. +- Une source historique parlant JSON-RPC standard peut réutiliser `kb_onchain_transport`, mais sa politique de campagne, son coût, sa provenance et ses fallbacks restent hors de `kb_onchain_transport`. - Les APIs REST indexées, exports, datasets analytiques, archives CAR ou outils externes appartiennent à des crates de sources historiques séparées. - W2 fonctionne en `free_only` par défaut. Aucun fournisseur payant ne doit être interrogé sans autorisation explicite de la campagne. - Les endpoints et crédits de W1 ne doivent jamais être utilisés comme fallback silencieux de W2. @@ -95,7 +95,7 @@ kb_historical_api -> capacités, campagnes, candidats, provenance, coût et complétude kb_historical_source_rpc - -> profils RPC publics/best-effort utilisant les contrats de kb_rpc + -> profils RPC publics/best-effort utilisant les contrats de kb_onchain_transport kb_historical_source_old_faithful -> intégration avec un processus faithful-cli externe ou une archive locale @@ -325,7 +325,7 @@ Mesurer pour chaque source : ### Phase R2 — source RPC gratuite -- réutiliser `kb_rpc` pour les méthodes standards ; +- réutiliser `kb_onchain_transport` pour les méthodes standards ; - ajouter quotas, backoff, déduplication et frontières de complétude. ### Phase R3 — archive profonde @@ -350,6 +350,6 @@ Ce chantier ne revient dans le `ROADMAP.md` que lorsque : - les décodeurs/matérialisateurs/exécuteurs prioritaires ont suffisamment progressé ; - au moins deux sources gratuites ont été testées réellement ; - une stratégie de licence et de conditions d'utilisation est validée ; -- la frontière avec `kb_rpc`, `kb_pipeline` et PostgreSQL est décidée ; +- la frontière avec `kb_onchain_transport`, `kb_pipeline` et PostgreSQL est décidée ; - la politique `free_only` est testable et empêche réellement tout fallback payant ; - un prompt de session dédié peut être écrit sans hypothèse majeure non vérifiée. diff --git a/docs/LIVE_SOURCE_STRATEGY.md b/docs/LIVE_SOURCE_STRATEGY.md index b9d6bda..8a0e1f6 100644 --- a/docs/LIVE_SOURCE_STRATEGY.md +++ b/docs/LIVE_SOURCE_STRATEGY.md @@ -42,11 +42,11 @@ getSlot `transactionSubscribe` est une extension Helius, pas une méthode Solana standard. -Elle sera implémentée dans des modules internes de `kb_rpc`, sans créer de crate séparée, puis convertie vers le modèle canonique commun. +Elle sera implémentée dans des modules internes de `kb_onchain_transport`, sans créer de crate séparée, puis convertie vers le modèle canonique commun. ### Yellowstone gRPC -Yellowstone fournit l’équivalent fonctionnel d’un flux de transactions complètes filtrées. Les endpoints Triton, Chainstack, Shyft ou compatibles doivent être supportés par configuration dans `kb_rpc`. +Yellowstone fournit l’équivalent fonctionnel d’un flux de transactions complètes filtrées. Les endpoints Triton, Chainstack, Shyft ou compatibles doivent être supportés par configuration dans `kb_onchain_transport`. ### Solana WebSocket standard diff --git a/docs/LOGGING.md b/docs/LOGGING.md index f210d8f..e0569e8 100644 --- a/docs/LOGGING.md +++ b/docs/LOGGING.md @@ -57,7 +57,7 @@ kb-lib.materializer.compliance kb-lib.materializer.lifecycle kb-lib.materializer.staking kb_pipeline -kb_rpc +kb_onchain_transport kb_store_pg ``` diff --git a/docs/RPC_ENDPOINT_ROLES.md b/docs/RPC_ENDPOINT_ROLES.md index 813116f..5a0c86a 100644 --- a/docs/RPC_ENDPOINT_ROLES.md +++ b/docs/RPC_ENDPOINT_ROLES.md @@ -37,7 +37,7 @@ Les rôles servent à sélectionner un endpoint selon l’opération, le provide | `logs_all_probe` | comparaison temporaire `logsSubscribe("all")` | | `realtime_transaction_hydration` | hydratation HTTP et réparation | -Les transports Helius et Yellowstone restent implémentés dans `kb_rpc`. Les rôles ne créent pas de dépendance provider dans les décodeurs. +Les transports Helius et Yellowstone restent implémentés dans `kb_onchain_transport`. Les rôles ne créent pas de dépendance provider dans les décodeurs. ## Request kinds actifs pour le backfill @@ -73,5 +73,5 @@ Pour les streams gRPC, la configuration future ajoutera les limites de streams, ## Preuve runtime -Un rôle ou un plan configuré ne garantit pas la capacité distante. La réponse du provider reste la preuve runtime. Les refus de plan, filtres invalides et limitations doivent être normalisés comme erreurs de `kb_rpc`. +Un rôle ou un plan configuré ne garantit pas la capacité distante. La réponse du provider reste la preuve runtime. Les refus de plan, filtres invalides et limitations doivent être normalisés comme erreurs de `kb_onchain_transport`. diff --git a/docs/SOLANA_INTERFACE_DEPENDENCIES.md b/docs/SOLANA_INTERFACE_DEPENDENCIES.md index 1cda55c..16baa76 100644 --- a/docs/SOLANA_INTERFACE_DEPENDENCIES.md +++ b/docs/SOLANA_INTERFACE_DEPENDENCIES.md @@ -81,13 +81,13 @@ Le message à signer provient de `solana_transaction::Transaction::message_data( ## Interfaces officielles non encore consommées -| Interface | Propriétaire futur | Décision | -|------------------------------------------|------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| -| `solana-feature-gate-interface ^4.0` | `kb_decoder_solana_core` | peut fournir les types officiels ; l’instruction actuelle reste un tag d’un octet vérifié depuis le builder/processor | -| `solana-feature-set-interface ^4.0` | classification/diagnostics natifs | ajouter seulement lorsqu’un type est consommé | -| `solana-loader-v4-interface ^3.1` | source normative Loader v4 | helpers officiels conditionnés par `bincode`; conserver le miroir wire local borné tant qu’aucun schéma `wincode` n’est publié | -| interfaces SPL | crates `kb_decoder_spl_*` et `kb_executor_spl_*` correspondantes | ne pas les rattacher au décodeur natif ni à l’application | -| types RPC/account/transaction status | `kb_rpc` | ne pas les ajouter à `kb_app_demo` ; l’application consomme les DTO du workspace | +| Interface | Propriétaire futur | Décision | +|--------------------------------------|------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------| +| `solana-feature-gate-interface ^4.0` | `kb_decoder_solana_core` | peut fournir les types officiels ; l’instruction actuelle reste un tag d’un octet vérifié depuis le builder/processor | +| `solana-feature-set-interface ^4.0` | classification/diagnostics natifs | ajouter seulement lorsqu’un type est consommé | +| `solana-loader-v4-interface ^3.1` | source normative Loader v4 | helpers officiels conditionnés par `bincode`; conserver le miroir wire local borné tant qu’aucun schéma `wincode` n’est publié | +| interfaces SPL | crates `kb_decoder_spl_*` et `kb_executor_spl_*` correspondantes | ne pas les rattacher au décodeur natif ni à l’application | +| types RPC/account/transaction status | `kb_onchain_transport` | ne pas les ajouter à `kb_app_demo` ; l’application consomme les DTO du workspace | ## Exceptions locales actuelles diff --git a/docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md b/docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md index 197a743..5ec8260 100644 --- a/docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md +++ b/docs/SOLANA_NATIVE_RPC_CLOSURE_AUDIT.md @@ -9,7 +9,7 @@ Le jalon `0.4.2` est clôturé. L’audit distingue quatre contrats indépendant 1. les opérations futures constructibles par `kb_executor_solana_core` ; 2. les instructions passées décodables par `kb_decoder_solana_core` ; -3. les méthodes standard HTTP/WebSocket exposées par `kb_rpc` ; +3. les méthodes standard HTTP/WebSocket exposées par `kb_onchain_transport` ; 4. l’orchestration de sécurité, de simulation, d’envoi et de replay post-exécution. Une méthode transportable via JSON brut n’est pas considérée comme un adaptateur typé. Un builder stateless n’autorise pas à lui seul une opération dépendant d’un compte, d’une autorité, du rent, d’un slot ou d’un epoch. Une opération dangereuse peut être complète dans la bibliothèque tout en restant absente de l’UI et désactivée sur Mainnet. @@ -48,13 +48,13 @@ Stake Config reste un compte bien connu non exécutable. Il ne possède ni dispa ## HTTP JSON-RPC standard -`docs/SOLANA_STANDARD_RPC_MATRIX.json` et `STANDARD_HTTP_METHODS` enregistrent 52 méthodes. Chacune possède un contrat de requête/résultat propre à `kb_rpc`. Les options facultatives restent indépendantes : commitment, `minContextSlot`, encodage, `dataSlice`, filtres, contexte, tri, niveau de détail, rewards et version maximale de transaction. +`docs/SOLANA_STANDARD_RPC_MATRIX.json` et `STANDARD_HTTP_METHODS` enregistrent 52 méthodes. Chacune possède un contrat de requête/résultat propre à `kb_onchain_transport`. Les options facultatives restent indépendantes : commitment, `minContextSlot`, encodage, `dataSlice`, filtres, contexte, tri, niveau de détail, rewards et version maximale de transaction. Les DTO Agave ne font pas partie de l’API publique. La voie JSON brute reste une primitive interne ou d’extension fournisseur, pas un substitut à une méthode standard absente. ## WebSocket JSON-RPC standard -Les neuf paires standard possèdent paramètres, notifications et runtime persistant dans `kb_rpc`. `WsSession` fournit : +Les neuf paires standard possèdent paramètres, notifications et runtime persistant dans `kb_onchain_transport`. `WsSession` fournit : - une socket multiplexée ; - des identifiants locaux stables et distants remappables ; @@ -85,7 +85,7 @@ Validations fournies le 13 juillet 2026 : | `kb_execution_api` | 22 tests | | `kb_execution_safety` | 15 tests | | `kb-lib::executor::solana::transaction` | 12 tests | -| `kb_rpc` | 113 tests | +| `kb_onchain_transport` | 113 tests | | `kb_pipeline` | 56 tests | | `kb_config` | 41 tests | | `kb_app_demo` | 88 tests | diff --git a/docs/SOLANA_STANDARD_RPC_MATRIX.json b/docs/SOLANA_STANDARD_RPC_MATRIX.json index 440df20..82ab144 100644 --- a/docs/SOLANA_STANDARD_RPC_MATRIX.json +++ b/docs/SOLANA_STANDARD_RPC_MATRIX.json @@ -26,7 +26,7 @@ "method": "getLargestAccounts", "category": "accounts", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getMinimumBalanceForRentExemption", @@ -38,43 +38,43 @@ "method": "getMultipleAccounts", "category": "accounts", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getProgramAccounts", "category": "accounts", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getTokenAccountBalance", "category": "tokens", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getTokenAccountsByDelegate", "category": "tokens", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getTokenAccountsByOwner", "category": "tokens", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getTokenLargestAccounts", "category": "tokens", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getTokenSupply", "category": "tokens", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getFeeForMessage", @@ -92,7 +92,7 @@ "method": "getRecentPrioritizationFees", "category": "transactions", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getSignaturesForAddress", @@ -116,13 +116,13 @@ "method": "getTransactionCount", "category": "transactions", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "isBlockhashValid", "category": "transactions", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "requestAirdrop", @@ -146,13 +146,13 @@ "method": "getBlock", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getBlockCommitment", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getBlockHeight", @@ -164,49 +164,49 @@ "method": "getBlockProduction", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getBlocks", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getBlocksWithLimit", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getBlockTime", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getFirstAvailableBlock", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getRecentPerformanceSamples", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "minimumLedgerSlot", "category": "blocks", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getClusterNodes", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getEpochInfo", @@ -218,7 +218,7 @@ "method": "getEpochSchedule", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getGenesisHash", @@ -230,97 +230,97 @@ "method": "getHealth", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getHighestSnapshotSlot", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getIdentity", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getLeaderSchedule", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getMaxRetransmitSlot", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getMaxShredInsertSlot", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getSlot", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getSlotLeader", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getSlotLeaders", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getVersion", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getVoteAccounts", "category": "cluster", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getInflationGovernor", "category": "economics", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getInflationRate", "category": "economics", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getInflationReward", "category": "economics", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getStakeMinimumDelegation", "category": "economics", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" }, { "method": "getSupply", "category": "economics", "contract": "typed_adapter", - "implementation": "configurable kb_rpc request/result contract plus typed HttpClient/HttpEndpointPool transport" + "implementation": "configurable kb_onchain_transport request/result contract plus typed HttpClient/HttpEndpointPool transport" } ], "ws_subscriptions": [ @@ -331,7 +331,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -342,7 +342,7 @@ "stability": "unstable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": true }, @@ -353,7 +353,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -364,7 +364,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -375,7 +375,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -386,7 +386,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -397,7 +397,7 @@ "stability": "stable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": false }, @@ -408,7 +408,7 @@ "stability": "unstable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": true }, @@ -419,7 +419,7 @@ "stability": "unstable", "request_contract": "typed_adapter", "persistent_runtime": true, - "library_runtime": "kb_rpc::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", + "library_runtime": "kb_onchain_transport::WsSession multiplexing, explicit unsubscribe, bounded reconnect and resubscription", "notification_contract": "typed_adapter", "explicit_capability_required": true } diff --git a/docs/TRACING_CONTRACT.md b/docs/TRACING_CONTRACT.md index c5c6962..d7d5d62 100644 --- a/docs/TRACING_CONTRACT.md +++ b/docs/TRACING_CONTRACT.md @@ -131,7 +131,7 @@ Ils sont journalisés en `debug`, `info` ou `warn` selon leur impact. ## Responsabilité -- `kb-rpc` : sélection d’endpoint, requêtes, réponses bornées, retry, rate limit et transport. +- `kb-onchain-transport` : sélection d’endpoint, requêtes, réponses bornées, retry, rate limit et transport. - composants `kb-lib.executor` : assemblage du message, contrôle du contrat de signataires, liaison de simulation et signature transactionnelle. - `kb-store` : transactions SQL, commit/rollback, compteurs et erreurs de persistance. - `kb-pipeline` : sélection, dispatch, concurrence, annulation, backfill et agrégation. diff --git a/docs/TRANSACTION_ACQUISITION_MODEL.md b/docs/TRANSACTION_ACQUISITION_MODEL.md index e2776bd..1a5b5c5 100644 --- a/docs/TRANSACTION_ACQUISITION_MODEL.md +++ b/docs/TRANSACTION_ACQUISITION_MODEL.md @@ -15,7 +15,7 @@ logsSubscribe + getTransaction backfill ou réparation | v -adaptateur de source dans kb_rpc +adaptateur de source dans kb_onchain_transport | v transaction Solana canonique @@ -129,7 +129,7 @@ Ces exports doivent être : ## Frontières des crates -- `kb_rpc` contient les transports et adaptateurs HTTP, WebSocket Helius et Yellowstone gRPC. +- `kb_onchain_transport` contient les transports et adaptateurs HTTP, WebSocket Helius et Yellowstone gRPC. - `kb_model` contient le contrat canonique source-indépendant. - `kb_store_core` contient les DTOs et repositories de transactions et observations. - `kb_store_pg` contient la migration, les queries et les repositories PostgreSQL. diff --git a/kb-app-demo/Cargo.toml b/kb-app-demo/Cargo.toml index ea4c03c..8c0e2c4 100644 --- a/kb-app-demo/Cargo.toml +++ b/kb-app-demo/Cargo.toml @@ -1,5 +1,5 @@ # file: kb-app-demo/Cargo.toml -# version: 1 +# version: 2 [package] name = "kb-app-demo" @@ -15,7 +15,7 @@ kb-lib = { path = "../kb-lib" } kb-logging = { path = "../kb-logging" } kb-pipeline = { path = "../kb-pipeline" } kb-program-ids = { path = "../kb-program-ids" } -kb-rpc = { path = "../kb-rpc" } +kb-onchain-transport = { path = "../kb-onchain-transport" } kb-store = { path = "../kb-store" } kb-wallet = { path = "../kb-wallet" } diff --git a/kb-logging/src/tracing_runtime.rs b/kb-logging/src/tracing_runtime.rs index eaece0a..41bc30d 100644 --- a/kb-logging/src/tracing_runtime.rs +++ b/kb-logging/src/tracing_runtime.rs @@ -1,5 +1,5 @@ // file: kb-logging/src/tracing_runtime.rs -// version: 14 +// version: 15 //! Runtime initialization helpers for `tracing_subscriber`. @@ -714,7 +714,7 @@ mod tests { "debug", "human", true, - std::vec!["kb_rpc.*".to_string()] + std::vec!["kb-onchain-transport.*".to_string()] )], target_filters: std::vec![crate::LogTargetFilterConfig { target: "hyper".to_string(), @@ -854,23 +854,23 @@ mod tests { fn route_filter_converts_wildcard_prefix() { let config = sample_logging_config(); let expression = super::build_route_filter_expression(&config.targets[0], &config); - assert_eq!(expression, "kb_rpc=debug"); + assert_eq!(expression, "kb-onchain-transport=debug"); } #[test] fn route_filter_converts_rust_wildcard_prefix() { let mut config = sample_logging_config(); - config.targets[0].targets = std::vec!["kb_rpc::*".to_string()]; + config.targets[0].targets = std::vec!["kb-onchain-transport::*".to_string()]; let expression = super::build_route_filter_expression(&config.targets[0], &config); - assert_eq!(expression, "kb_rpc=debug"); + assert_eq!(expression, "kb-onchain-transport=debug"); } #[test] fn route_filter_keeps_exact_target() { let mut config = sample_logging_config(); - config.targets[0].targets = std::vec!["kb_rpc::client".to_string()]; + config.targets[0].targets = std::vec!["kb-onchain-transport::client".to_string()]; let expression = super::build_route_filter_expression(&config.targets[0], &config); - assert_eq!(expression, "kb_rpc::client=debug"); + assert_eq!(expression, "kb-onchain-transport::client=debug"); } #[test] @@ -910,8 +910,8 @@ mod tests { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => panic!("route writer filter failed: {error}"), }; - assert!(filter.allows_target_level("kb_rpc", &tracing::Level::DEBUG)); - assert!(!filter.allows_target_level("kb_rpc", &tracing::Level::TRACE)); + assert!(filter.allows_target_level("kb-onchain-transport", &tracing::Level::DEBUG)); + assert!(!filter.allows_target_level("kb-onchain-transport", &tracing::Level::TRACE)); assert!(filter.allows_target_level("hyper", &tracing::Level::WARN)); assert!(!filter.allows_target_level("hyper", &tracing::Level::INFO)); } diff --git a/kb-rpc/Cargo.toml b/kb-onchain-transport/Cargo.toml similarity index 69% rename from kb-rpc/Cargo.toml rename to kb-onchain-transport/Cargo.toml index fd2e266..2f5d380 100644 --- a/kb-rpc/Cargo.toml +++ b/kb-onchain-transport/Cargo.toml @@ -1,8 +1,8 @@ -# file: kb-rpc/Cargo.toml -# version: 1 +# file: kb-onchain-transport/Cargo.toml +# version: 2 [package] -name = "kb-rpc" +name = "kb-onchain-transport" version.workspace = true edition.workspace = true license.workspace = true diff --git a/kb-rpc/src/lib.rs b/kb-onchain-transport/src/lib.rs similarity index 66% rename from kb-rpc/src/lib.rs rename to kb-onchain-transport/src/lib.rs index aa92b23..999cadb 100644 --- a/kb-rpc/src/lib.rs +++ b/kb-onchain-transport/src/lib.rs @@ -1,11 +1,11 @@ -// file: kb-rpc/src/lib.rs -// version: 1 +// file: kb-onchain-transport/src/lib.rs +// version: 2 #![forbid(unsafe_code)] #![deny(unreachable_pub)] #![warn(missing_docs)] -//! RPC transport contracts. +//! Solana on-chain transport contracts. /// Returns the crate migration status. pub fn migration_status() -> &'static str { diff --git a/kb-pipeline/Cargo.toml b/kb-pipeline/Cargo.toml index 5959dfb..27a4995 100644 --- a/kb-pipeline/Cargo.toml +++ b/kb-pipeline/Cargo.toml @@ -1,5 +1,5 @@ # file: kb-pipeline/Cargo.toml -# version: 1 +# version: 2 [package] name = "kb-pipeline" @@ -12,7 +12,7 @@ publish.workspace = true kb-core = { path = "../kb-core" } kb-lib = { path = "../kb-lib" } kb-store = { path = "../kb-store" } -kb-rpc = { path = "../kb-rpc" } +kb-onchain-transport = { path = "../kb-onchain-transport" } kb-wallet = { path = "../kb-wallet" } [lints]