86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
## Analyse détaillée
|
||
|
||
### Périmètre
|
||
|
||
Service Rust `sdk_relay` interfaçant Bitcoin (RPC), Blindbit et WebSocket, avec configuration injectée.
|
||
|
||
### Stack
|
||
|
||
- **Langage**: Rust 2021
|
||
- **Dépendances**: `tokio`, `tokio-tungstenite`, `zeromq`, `bitcoincore-rpc`, `serde[_json]`, `env_logger`, `futures-util`, `sdk_common` (git, branche `dev`, features `parallel`, `blindbit-backend`).
|
||
|
||
### Build et image
|
||
|
||
- Docker multi‑étapes: build dans `rust:latest` avec SSH pour deps privées, exécution `debian:bookworm-slim`.
|
||
- Binaire: `/usr/local/bin/sdk_relay`.
|
||
- Conf: build‑arg `CONF` écrit dans `/home/bitcoin/.conf`.
|
||
- Volumes: `/home/bitcoin/.4nk`, `/home/bitcoin/.bitcoin`.
|
||
|
||
### Réseau et healthcheck
|
||
|
||
- **WebSocket**: serveur lié sur `Config.ws_url` (ex. `0.0.0.0:8090`) via `tokio_tungstenite`.
|
||
- **Health**: serveur TCP léger interne sur port `8091` retournant `{"status":"ok"}`.
|
||
- **Ports exposés**: `8090` (WS), `8091` (HTTP /health) dans le `Dockerfile`.
|
||
|
||
Références code:
|
||
|
||
```396:625:src/main.rs
|
||
async fn handle_health_endpoint(mut stream: TcpStream) {
|
||
let response = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: 15\r\n\r\n{\"status\":\"ok\"}";
|
||
let _ = stream.write_all(response.as_bytes()).await;
|
||
let _ = stream.shutdown().await;
|
||
}
|
||
|
||
async fn start_health_server(port: u16) { /* ... */ }
|
||
|
||
// Start health server on port 8091
|
||
tokio::spawn(start_health_server(8091));
|
||
```
|
||
|
||
Configuration:
|
||
|
||
```1:7:.conf.model
|
||
core_url=""
|
||
ws_url=""
|
||
wallet_name="default"
|
||
network="signet"
|
||
electrum_url="tcp://localhost:60601"
|
||
blindbit_url="tcp://localhost:8000"
|
||
zmq_url=""
|
||
```
|
||
|
||
### Logs
|
||
|
||
- `RUST_LOG` géré par env; dans `lecoffre_node`, sortie tee vers `/home/bitcoin/.4nk/logs/sdk_relay.log`.
|
||
|
||
### Risques et points d’attention
|
||
|
||
- Dépendance `sdk_common` via git/branche `dev`: geler par tag/commit pour reproductibilité.
|
||
- Image d’exécution embarque `strace`; vérifier nécessité en prod.
|
||
- Permissions volume Windows: note de chown partiel dans compose parent.
|
||
|
||
### Actions proposées
|
||
|
||
- Pinner `sdk_common` sur un commit ou tag; documenter politique de mise à jour.
|
||
- Séparer images `-dev` et `-prod` si `strace` non requis.
|
||
- Documenter format du fichier de conf (`sdk_relay.conf`) et valeurs par défaut.
|
||
|
||
### CI / Image
|
||
|
||
- Pipeline `build-and-push-ext` construit et pousse l’image avec un tag calculé depuis le message de commit (préfixe `ci: docker_tag=` sinon `dev-test`).
|
||
- L’image expose `8090 8091` et lance `sdk_relay --config /home/bitcoin/.conf`.
|
||
|
||
Références:
|
||
|
||
```1:46:Dockerfile
|
||
EXPOSE 8090 8091
|
||
ENTRYPOINT ["sdk_relay", "--config", "/home/bitcoin/.conf"]
|
||
```
|
||
|
||
```1:73:.gitea/workflows/build-ext.yml
|
||
name: build-and-push-ext
|
||
```
|
||
|
||
|
||
|