5.2 KiB
Tu travaille sur le projet Rust khadhroony-bobot
Contexte :
-
projet personnel de détection et de trading automatisé sur Solana,
-
base technique :
solana-client+ RPC HTTP + WebSocket Solana + gRpc, -
pas de ML au départ,
-
architecture workspace multi-crates avec trois binaires principaux :
khbb_listener_app,khbb_trader_appetkhbb_pattern_analyser_app, -
style de code strict : no
anyhow, nothiserror, no?, nounwrap/expect, explicit error handling, async first, tracing, nomod.rs, no pub mod, pub use only, no import with use (allowed only for Traits) and call for functions and struct with full path (ex : khbb_lib::Error) -
on se concentrera sur deux crates au départ : khbb_lib et khbb_listener_app
-
objectif final de
khbb_listener_app: detecter la création de Tokens (pair TKN/SOL ou TKN/WSOL ou TKN/USDT, etc..) sur la blockchain Solana, leur évolution de prix et les information les concernant (liquidité, marketcap, volume, prix etc.) via les différents dex tels que pubfun, punpswap, raydium, meteora,bags, fluxbeam, launchbeam, heaven, dexlab, moonit, zora... -
les bibliothèques/crate seront déclarés au niveau du workspace et seront réutilisés dans les sous-crates.
-
dépendances de base (pouvant évoluer par la suite) : async-trait = { version = "^0.1", features = [] } base64 = { version = "^0.22", features = [] } chrono = { version = "^0.4", features = ["serde"] } futures-util = { version = "^0.3", features = [] } reqwest = { version = "^0.13", default-features = false, features = ["charset", "cookies", "deflate", "form", "gzip", "http2", "json", "multipart", "query", "rustls", "socks", "stream", "zstd"] } rustls = { version = "^0.23", features = ["aws-lc-rs"] } serde = { version = "^1.0", features = ["derive"] } serde_json = { version = "^1.0", features = [] } solana-account-decoder-client-types = {version = "4.0.0-beta.7", features = ["zstd"]} solana-address-lookup-table-interface = { version = "^3.0", features = ["bincode", "serde"] } solana-client = { version = "^3.1", features = [] } solana-compute-budget-interface = { version = "^3.0", features = ["borsh", "serde"] } solana-rpc-client-api = { version = "4.0.0-beta.7", features = [] } solana-sdk = { version = "^4.0", features = ["full"] } solana-sdk-ids = { version = "^3.1", features = [] } solana-system-interface = { version = "^3.0", features = ["alloc", "bincode", "serde", "std"] } solana-transaction-status-client-types = { version = "4.0.0-beta.7", features = [] } spl-associated-token-account-interface = { version = "^2.0", features = ["borsh"] } spl-memo-interface = { version = "^2.0", features = [] } spl-token-interface = { version = "^2.0", features = [] } spl-token-2022-interface = { version = "^2.1", features = [] } sqlx = { version = "^0.8", features = ["chrono","uuid", "bigdecimal", "json", "sqlite"] } tokio = { version = "^1.52", features = ["full"] } tokio-stream = { version = "^0.1", features = ["full"] } tokio-tungstenite = { version = "^0.29", default-features = false, features = ["connect", "handshake", "rustls-tls-webpki-roots", "stream", "url"] } tracing = { version = "^0.1", features = [] } tracing-subscriber = { version = "^0.3", features = ["ansi", "env-filter", "chrono", "serde", "json"] } yellowstone-grpc-client = { version = "^13.0", features = [] } yellowstone-grpc-proto = { version = "^12.2", features = [] }
-
on ne va pas utiliser le client rpc ni pubsub de solana-client, mais soulement les types rpc et binaires de solana-rpc-client-api/solana-account-decoder-client-types, et établire notre propre connexion aux serveur rpc http/ws via reqwest/tokio-tungstenite ou au grpc de helios via yollowstone-grpc*
-
la première partie sur laquelle son se concentre est khbb_lib/khbb_listener_app qui ne fait qu’écouter les différents flux et stoker les données en base de donnée.
-
une fois cette partie effectuée on passera à la partie khbb_lib/khbb_patter_analyser_app qui servira a detecter les patterns redondant au niveau des mints/trades de token tel que durée de vie, scamm, tendances de noms etc..
-
la troisieme partie correpondra à khbb_lib/khbb_trading_app qui correspond à la partie trading automatique de token lors de leur création en fonction de potentiel/risque + patterns analysés.
-
la structure du skeleton du projet est la suivante :
├── Cargo.toml ├── clippy.toml ├── config.json ├── dbdata │ └── app.db ├── khbb_lib │ ├── Cargo.toml │ ├── README.md │ ├── src │ │ └── lib.rs │ └── TODO.md ├── khbb_ listener_app │ ├── Cargo.toml │ ├── README.md │ ├── src │ │ └── main.rs │ └── TODO.md ... ├── rustfmt.toml ├── TODO.md └── wallets └── dev-wallet.json
les binaires rust ne font qu’appeler les fonctions exposée dans khbb_lib caque fichier (pouvant accepter des commentaires) devra commencer par une entête indiquant son chemin dans le projet : ex rust : // file: khbb_lib/src/lib.rs ex markdown :