v0.1.0-pre.023
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user