v0.1.0-pre.023

This commit is contained in:
2026-07-24 23:54:38 +02:00
parent 929c89cf9f
commit c30ba8a2d9
28 changed files with 203 additions and 160 deletions

View File

@@ -1,8 +1,28 @@
<!-- file: CHANGELOG.md -->
<!-- version: 5 -->
<!-- version: 6 -->
# CHANGELOG
## 0.1.0-pre.023
- Renommage structurel de `kb-rpc` en `kb-onchain-transport`.
- Renommage de lidentifiant 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 lassemblage 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 lexé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`.

View File

@@ -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"] }

View File

@@ -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.

View File

@@ -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 nest 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 lexécuteur SPL Token classique, ses builders officiels, ses intents et ses tests.
- [x] Adapter le portage à lAPI 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 lidentifiant 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 lancienne `kb_rpc`.

View File

@@ -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 lactivation 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 lordre exact des metas, borner toute liste de comptes variable avant lappel au builder et refuser les doublons lorsque leur répétition na pas de sémantique publiée.
- Les features des interfaces doivent rester minimales et explicites. Une feature `serde`, `wincode`, `borsh`, `std`, `alloc` ou équivalente nest activée que si la crate consommatrice lutilise réellement.
- Les crates applicatives ne doivent pas dépendre dinterfaces 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 dinterfaces 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

View File

@@ -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

View File

@@ -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"
]
},
{

View File

@@ -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 lhydratation canonique par `kb_rpc`.
- `kb_pipeline` combine la découverte de signatures par `kb_onchain_transport` ou `kb_external_sources` avec lhydratation 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 lindexation locale et décrit explicitement une frontière de fournisseurs externes plutôt quune 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 lindexation locale et décrit explicitement une frontière de fournisseurs externes plutôt quune 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

View File

@@ -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

View File

@@ -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.

View File

@@ -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 lextraction `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 lextraction `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.

View File

@@ -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 dacquisition.
- 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`

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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 dun 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 dun 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

View File

@@ -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
```

View File

@@ -37,7 +37,7 @@ Les rôles servent à sélectionner un endpoint selon lopé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`.

View File

@@ -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 ; linstruction actuelle reste un tag dun octet vérifié depuis le builder/processor |
| `solana-feature-set-interface ^4.0` | classification/diagnostics natifs | ajouter seulement lorsquun 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 quaucun schéma `wincode` nest publié |
| interfaces SPL | crates `kb_decoder_spl_*` et `kb_executor_spl_*` correspondantes | ne pas les rattacher au décodeur natif ni à lapplication |
| types RPC/account/transaction status | `kb_rpc` | ne pas les ajouter à `kb_app_demo` ; lapplication 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 ; linstruction actuelle reste un tag dun octet vérifié depuis le builder/processor |
| `solana-feature-set-interface ^4.0` | classification/diagnostics natifs | ajouter seulement lorsquun 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 quaucun schéma `wincode` nest publié |
| interfaces SPL | crates `kb_decoder_spl_*` et `kb_executor_spl_*` correspondantes | ne pas les rattacher au décodeur natif ni à lapplication |
| types RPC/account/transaction status | `kb_onchain_transport` | ne pas les ajouter à `kb_app_demo` ; lapplication consomme les DTO du workspace |
## Exceptions locales actuelles

View File

@@ -9,7 +9,7 @@ Le jalon `0.4.2` est clôturé. Laudit 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. lorchestration de sécurité, de simulation, denvoi et de replay post-exécution.
Une méthode transportable via JSON brut nest pas considérée comme un adaptateur typé. Un builder stateless nautorise pas à lui seul une opération dépendant dun compte, dune autorité, du rent, dun slot ou dun epoch. Une opération dangereuse peut être complète dans la bibliothèque tout en restant absente de lUI 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 lAPI publique. La voie JSON brute reste une primitive interne ou dextension 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 |

View File

@@ -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
}

View File

@@ -131,7 +131,7 @@ Ils sont journalisés en `debug`, `info` ou `warn` selon leur impact.
## Responsabilité
- `kb-rpc` : sélection dendpoint, requêtes, réponses bornées, retry, rate limit et transport.
- `kb-onchain-transport` : sélection dendpoint, 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.

View File

@@ -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.

View File

@@ -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" }

View File

@@ -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));
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -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]