docs: Correction de la documentation sdk_common
- Correction de l'API.md : Suppression des APIs Bitcoin Core, ajout des vraies APIs sdk_common - Correction du USAGE.md : Suppression des références WASM/npm inexistantes - Mise à jour de l'INDEX.md : Suppression des liens vers fichiers inexistants
This commit is contained in:
parent
a17b723081
commit
3e3716411b
971
docs/API.md
971
docs/API.md
File diff suppressed because it is too large
Load Diff
@ -45,14 +45,12 @@ Documentation technique détaillée de l'architecture.
|
||||
|
||||
### 📡 [API Reference](API.md)
|
||||
Documentation complète des APIs disponibles.
|
||||
- **API Types** : Types et structures de données
|
||||
- **API Traits** : Traits et interfaces
|
||||
- **API Functions** : Fonctions utilitaires
|
||||
- **API Error Handling** : Gestion des erreurs
|
||||
- **Format des données et payloads**
|
||||
- **Types et structures de données**
|
||||
- **Fonctions utilitaires**
|
||||
- **Traits et interfaces**
|
||||
- **Gestion des erreurs**
|
||||
- **Exemples d'utilisation**
|
||||
- **Limites et quotas**
|
||||
- **Performance et sécurité**
|
||||
|
||||
### 🔒 [Sécurité](SECURITY.md)
|
||||
Guide de sécurité et bonnes pratiques.
|
||||
@ -124,32 +122,8 @@ Guide complet pour le développement.
|
||||
- **Optimisation des performances**
|
||||
- **Déploiement et CI/CD**
|
||||
|
||||
### 📋 [Référence Rapide](QUICK_REFERENCE.md)
|
||||
Référence rapide pour les développeurs.
|
||||
- **Commandes essentielles**
|
||||
- **Structure du projet**
|
||||
- **APIs principales**
|
||||
- **Configuration rapide**
|
||||
- **Dépannage rapide**
|
||||
|
||||
### 🔄 [Guide de Migration](MIGRATION.md)
|
||||
Guide pour les migrations et mises à jour.
|
||||
- **Migration des versions**
|
||||
- **Breaking changes**
|
||||
- **Mise à jour des dépendances**
|
||||
- **Migration des données**
|
||||
- **Tests de migration**
|
||||
|
||||
## 🌐 Guides d'Intégration
|
||||
|
||||
### 🔗 [Intégration 4NK_node](INTEGRATION_4NK_NODE.md)
|
||||
Guide d'intégration avec l'infrastructure 4NK_node.
|
||||
- **Configuration Docker**
|
||||
- **Variables d'environnement**
|
||||
- **Communication inter-services**
|
||||
- **Déploiement intégré**
|
||||
- **Monitoring et logs**
|
||||
|
||||
### 🔑 [Configuration SSH](SSH_SETUP.md)
|
||||
Guide de configuration SSH pour le développement.
|
||||
- **Génération des clés SSH**
|
||||
@ -157,30 +131,13 @@ Guide de configuration SSH pour le développement.
|
||||
- **Intégration avec Gitea**
|
||||
- **Automatisation des déploiements**
|
||||
|
||||
### 🤖 [Push SSH Automatisé](AUTO_SSH_PUSH.md)
|
||||
### 🤖 [Push SSH Automatisé](SSH_USAGE.md)
|
||||
Guide pour l'automatisation des pushes SSH.
|
||||
- **Configuration des scripts**
|
||||
- **Intégration CI/CD**
|
||||
- **Gestion des clés**
|
||||
- **Sécurité et bonnes pratiques**
|
||||
|
||||
## 📊 État et Monitoring
|
||||
|
||||
### 📊 [État Actuel](ETAT_ACTUEL.md)
|
||||
État détaillé du projet sdk_common.
|
||||
- **Statut des compilations**
|
||||
- **Configuration des branches**
|
||||
- **Fonctionnalités opérationnelles**
|
||||
- **Métriques de performance**
|
||||
- **Problèmes connus**
|
||||
|
||||
### 📋 [Résumé Final](RESUME_FINAL.md)
|
||||
Résumé complet de l'état final du projet.
|
||||
- **Succès accomplis**
|
||||
- **Prêt pour la production**
|
||||
- **Documentation complète**
|
||||
- **Support et maintenance**
|
||||
|
||||
## 🔧 Guides d'Open Source
|
||||
|
||||
### ✅ [Checklist Open Source](OPEN_SOURCE_CHECKLIST.md)
|
||||
@ -217,8 +174,7 @@ Guide de support et contact.
|
||||
|
||||
### 📚 Documentation
|
||||
1. [Index](INDEX.md) - Cet index
|
||||
2. [Quick Reference](QUICK_REFERENCE.md) - Référence rapide
|
||||
3. [Roadmap](ROADMAP.md) - Évolution du projet
|
||||
2. [Roadmap](ROADMAP.md) - Évolution du projet
|
||||
|
||||
### 🤝 Communauté
|
||||
1. [Guide Communauté](COMMUNITY_GUIDE.md) - Contribuer
|
||||
@ -254,9 +210,6 @@ cargo test --features sdk-client
|
||||
|
||||
# Tests de compatibilité avec sdk_relay
|
||||
cargo test --features sdk-relay
|
||||
|
||||
# Tests de compatibilité WASM
|
||||
cargo test --features wasm
|
||||
```
|
||||
|
||||
---
|
||||
|
688
docs/USAGE.md
688
docs/USAGE.md
@ -14,8 +14,7 @@ cargo build
|
||||
cargo build --all-features
|
||||
|
||||
# Build avec une feature spécifique
|
||||
cargo build --features wasm
|
||||
cargo build --features blindbit-wasm
|
||||
cargo build --features flate2
|
||||
```
|
||||
|
||||
### 2. Build de Production
|
||||
@ -31,19 +30,6 @@ RUSTFLAGS="-C target-cpu=native" cargo build --release
|
||||
RUSTFLAGS="-C lto=fat" cargo build --release
|
||||
```
|
||||
|
||||
### 3. Build WASM
|
||||
|
||||
```bash
|
||||
# Build WASM pour le web
|
||||
wasm-pack build --target web
|
||||
|
||||
# Build WASM pour Node.js
|
||||
wasm-pack build --target nodejs
|
||||
|
||||
# Build WASM avec optimisations
|
||||
wasm-pack build --target web --release
|
||||
```
|
||||
|
||||
## 🔧 Intégration dans les Projets
|
||||
|
||||
### 1. Intégration Rust
|
||||
@ -52,496 +38,392 @@ wasm-pack build --target web --release
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", branch = "main" }
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", branch = "docker-support" }
|
||||
|
||||
# Avec features spécifiques
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", features = ["wasm"] }
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", features = ["flate2"] }
|
||||
```
|
||||
|
||||
**Utilisation dans le code :**
|
||||
|
||||
```rust
|
||||
use sdk_common::{
|
||||
types::{Wallet, Transaction, SilentPayment},
|
||||
traits::WalletOperations,
|
||||
error::SdkError
|
||||
types::{Process, Member, ValidationRule, ProcessState},
|
||||
traits::ProcessOperations,
|
||||
error::SdkError,
|
||||
compress_data, decompress_data
|
||||
};
|
||||
|
||||
fn main() -> Result<(), SdkError> {
|
||||
// Créer un wallet
|
||||
let wallet = Wallet::new()?;
|
||||
// Créer un processus
|
||||
let process = Process {
|
||||
id: "process_123".to_string(),
|
||||
name: "Mon Processus".to_string(),
|
||||
device_id: "device_456".to_string(),
|
||||
state: ProcessState::Active,
|
||||
states: vec![ProcessState::Active],
|
||||
description: None,
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
|
||||
// Générer un paiement silencieux
|
||||
let payment = SilentPayment::generate(&wallet)?;
|
||||
// Utiliser la compression
|
||||
let data = b"données à compresser";
|
||||
let compressed = compress_data(data)?;
|
||||
let decompressed = decompress_data(&compressed)?;
|
||||
|
||||
// Traiter une transaction
|
||||
let tx = Transaction::from_hex("...")?;
|
||||
let result = wallet.process_transaction(&tx)?;
|
||||
// Valider le processus
|
||||
sdk_common::validate_process(&process)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Intégration JavaScript/TypeScript
|
||||
## 📦 Types et Structures
|
||||
|
||||
**Installation :**
|
||||
|
||||
```bash
|
||||
npm install @4nk/sdk-common
|
||||
```
|
||||
|
||||
**Utilisation :**
|
||||
|
||||
```javascript
|
||||
import { init, Wallet, SilentPayment } from '@4nk/sdk-common';
|
||||
|
||||
async function main() {
|
||||
// Initialiser le module WASM
|
||||
await init();
|
||||
|
||||
// Créer un wallet
|
||||
const wallet = new Wallet();
|
||||
|
||||
// Générer un paiement silencieux
|
||||
const payment = SilentPayment.generate(wallet);
|
||||
|
||||
console.log('Payment:', payment);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
```
|
||||
|
||||
### 3. Intégration Web
|
||||
|
||||
**HTML :**
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>SDK Common Demo</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="module">
|
||||
import init, { Wallet, SilentPayment } from './pkg/sdk_common.js';
|
||||
|
||||
async function main() {
|
||||
await init();
|
||||
|
||||
const wallet = new Wallet();
|
||||
const payment = SilentPayment.generate(wallet);
|
||||
|
||||
document.getElementById('result').textContent =
|
||||
JSON.stringify(payment, null, 2);
|
||||
}
|
||||
|
||||
main();
|
||||
</script>
|
||||
|
||||
<h1>SDK Common Demo</h1>
|
||||
<pre id="result"></pre>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
## 📚 Utilisation des Types et Structures
|
||||
|
||||
### 1. Types de Base
|
||||
### Types de Base
|
||||
|
||||
```rust
|
||||
use sdk_common::types::*;
|
||||
use sdk_common::{
|
||||
Process, ProcessState, Member, ValidationRule, ValidationRuleType
|
||||
};
|
||||
|
||||
// Wallet
|
||||
let wallet = Wallet::new()?;
|
||||
let public_key = wallet.public_key();
|
||||
let private_key = wallet.private_key();
|
||||
// Créer un état de processus
|
||||
let state = ProcessState::Active;
|
||||
|
||||
// Silent Payment
|
||||
let payment = SilentPayment::new(&wallet)?;
|
||||
let address = payment.address();
|
||||
let scan_key = payment.scan_key();
|
||||
// Créer un processus
|
||||
let process = Process {
|
||||
id: "process_123".to_string(),
|
||||
name: "Mon Processus".to_string(),
|
||||
device_id: "device_456".to_string(),
|
||||
state: ProcessState::Active,
|
||||
states: vec![ProcessState::Active],
|
||||
description: Some("Description".to_string()),
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
|
||||
// Transaction
|
||||
let tx = Transaction::from_hex("...")?;
|
||||
let txid = tx.txid();
|
||||
let outputs = tx.outputs();
|
||||
// Créer un membre
|
||||
let member = Member {
|
||||
id: "member_123".to_string(),
|
||||
name: "John Doe".to_string(),
|
||||
public_key: "public_key_here".to_string(),
|
||||
process_id: "process_123".to_string(),
|
||||
roles: vec!["admin".to_string()],
|
||||
sp_addresses: Some(vec!["address1".to_string()]),
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
|
||||
// Créer une règle de validation
|
||||
let rule = ValidationRule {
|
||||
id: "rule_123".to_string(),
|
||||
field_name: "amount".to_string(),
|
||||
rule_type: ValidationRuleType::Range,
|
||||
parameters: Some(serde_json::json!({"min": 0, "max": 1000})),
|
||||
role_id: "admin".to_string(),
|
||||
quorum: Some(2),
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
```
|
||||
|
||||
### 2. Traits et Interfaces
|
||||
## 🔄 Compression et Sérialisation
|
||||
|
||||
### Compression avec flate2
|
||||
|
||||
```rust
|
||||
use sdk_common::traits::*;
|
||||
use sdk_common::{compress_data, decompress_data};
|
||||
|
||||
// Implémentation de WalletOperations
|
||||
impl WalletOperations for MyWallet {
|
||||
fn generate_address(&self) -> Result<Address, SdkError> {
|
||||
// Implémentation personnalisée
|
||||
}
|
||||
// Compression
|
||||
let original_data = b"données importantes à compresser";
|
||||
let compressed = compress_data(original_data)?;
|
||||
|
||||
fn sign_transaction(&self, tx: &Transaction) -> Result<Signature, SdkError> {
|
||||
// Implémentation personnalisée
|
||||
}
|
||||
}
|
||||
// Décompression
|
||||
let decompressed = decompress_data(&compressed)?;
|
||||
assert_eq!(original_data, decompressed.as_slice());
|
||||
```
|
||||
|
||||
### 3. Gestion des Erreurs
|
||||
### Sérialisation JSON
|
||||
|
||||
```rust
|
||||
use sdk_common::error::SdkError;
|
||||
use sdk_common::{serialize_process, deserialize_process};
|
||||
|
||||
fn process_payment(payment_data: &str) -> Result<(), SdkError> {
|
||||
match SilentPayment::from_json(payment_data) {
|
||||
Ok(payment) => {
|
||||
// Traitement réussi
|
||||
Ok(())
|
||||
}
|
||||
Err(SdkError::InvalidFormat) => {
|
||||
eprintln!("Format de paiement invalide");
|
||||
Err(SdkError::InvalidFormat)
|
||||
}
|
||||
Err(SdkError::NetworkError) => {
|
||||
eprintln!("Erreur réseau");
|
||||
Err(SdkError::NetworkError)
|
||||
}
|
||||
Err(e) => {
|
||||
eprintln!("Erreur inattendue: {:?}", e);
|
||||
Err(e)
|
||||
}
|
||||
// Sérialisation
|
||||
let json = serialize_process(&process)?;
|
||||
|
||||
// Désérialisation
|
||||
let deserialized_process = deserialize_process(&json)?;
|
||||
```
|
||||
|
||||
## ✅ Validation
|
||||
|
||||
### Validation des Structures
|
||||
|
||||
```rust
|
||||
use sdk_common::{validate_process, validate_member};
|
||||
|
||||
// Valider un processus
|
||||
validate_process(&process)?;
|
||||
|
||||
// Valider un membre
|
||||
validate_member(&member)?;
|
||||
```
|
||||
|
||||
### Validation Personnalisée
|
||||
|
||||
```rust
|
||||
use sdk_common::ValidationError;
|
||||
|
||||
fn validate_custom_process(process: &Process) -> Result<(), ValidationError> {
|
||||
if process.name.is_empty() {
|
||||
return Err(ValidationError::InvalidProcess("Name cannot be empty".to_string()));
|
||||
}
|
||||
|
||||
if process.device_id.is_empty() {
|
||||
return Err(ValidationError::InvalidProcess("Device ID cannot be empty".to_string()));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 Tests et Validation
|
||||
|
||||
### 1. Tests Unitaires
|
||||
### Tests Unitaires
|
||||
|
||||
```bash
|
||||
# Tests de base
|
||||
cargo test
|
||||
```rust
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use sdk_common::{Process, ProcessState, validate_process};
|
||||
|
||||
# Tests avec output détaillé
|
||||
cargo test -- --nocapture
|
||||
#[test]
|
||||
fn test_process_validation() {
|
||||
let process = Process {
|
||||
id: "test_123".to_string(),
|
||||
name: "Test Process".to_string(),
|
||||
device_id: "device_123".to_string(),
|
||||
state: ProcessState::Active,
|
||||
states: vec![ProcessState::Active],
|
||||
description: None,
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
|
||||
# Tests d'une fonction spécifique
|
||||
cargo test test_wallet_creation
|
||||
assert!(validate_process(&process).is_ok());
|
||||
}
|
||||
|
||||
# Tests avec couverture
|
||||
cargo tarpaulin --out Html
|
||||
#[test]
|
||||
fn test_compression() {
|
||||
let data = b"test data for compression";
|
||||
let compressed = compress_data(data).unwrap();
|
||||
let decompressed = decompress_data(&compressed).unwrap();
|
||||
|
||||
assert_eq!(data, decompressed.as_slice());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Tests d'Intégration
|
||||
### Tests d'Intégration
|
||||
|
||||
```bash
|
||||
# Tests d'intégration
|
||||
cargo test --test integration
|
||||
```rust
|
||||
// tests/integration_test.rs
|
||||
use sdk_common::{Process, Member, ValidationRule};
|
||||
|
||||
# Tests de performance
|
||||
cargo test --test performance
|
||||
|
||||
# Tests de sécurité
|
||||
cargo test --test security
|
||||
#[test]
|
||||
fn test_process_member_integration() {
|
||||
let process = Process { /* ... */ };
|
||||
let member = Member { /* ... */ };
|
||||
|
||||
// Test d'intégration entre processus et membre
|
||||
assert_eq!(member.process_id, process.id);
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Tests WASM
|
||||
## 🔧 Configuration
|
||||
|
||||
```bash
|
||||
# Tests WASM avec Firefox
|
||||
wasm-pack test --headless --firefox
|
||||
|
||||
# Tests WASM avec Chrome
|
||||
wasm-pack test --headless --chrome
|
||||
|
||||
# Tests WASM avec Node.js
|
||||
wasm-pack test --node
|
||||
```
|
||||
|
||||
### 4. Tests de Compatibilité
|
||||
|
||||
```bash
|
||||
# Tests de compatibilité avec sdk_client
|
||||
cargo test --features sdk-client
|
||||
|
||||
# Tests de compatibilité avec sdk_relay
|
||||
cargo test --features sdk-relay
|
||||
|
||||
# Tests de compatibilité WASM
|
||||
cargo test --features wasm
|
||||
```
|
||||
|
||||
## ⚙️ Configuration et Maintenance
|
||||
|
||||
### 1. Configuration des Features
|
||||
|
||||
**Activation des features :**
|
||||
### Features Cargo
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", features = ["wasm", "blindbit-wasm"] }
|
||||
sdk_common = { git = "https://git.4nkweb.com/4nk/sdk_common.git", features = ["flate2"] }
|
||||
```
|
||||
|
||||
**Features disponibles :**
|
||||
|
||||
- `std` : Support standard (par défaut)
|
||||
- `wasm` : Support WebAssembly
|
||||
- `blindbit-wasm` : Support Blindbit en WASM
|
||||
- `sdk-client` : Compatibilité avec sdk_client
|
||||
- `sdk-relay` : Compatibilité avec sdk_relay
|
||||
|
||||
### 2. Configuration de Build
|
||||
|
||||
**Optimisations de performance :**
|
||||
### Variables d'Environnement
|
||||
|
||||
```bash
|
||||
# Compilation optimisée
|
||||
RUSTFLAGS="-C target-cpu=native -C lto=fat" cargo build --release
|
||||
|
||||
# Compilation avec sanitizers
|
||||
RUSTFLAGS="-Z sanitizer=address" cargo test
|
||||
|
||||
# Compilation avec vérifications
|
||||
RUSTFLAGS="-C overflow-checks=on" cargo build
|
||||
```
|
||||
|
||||
### 3. Configuration des Tests
|
||||
|
||||
**Variables d'environnement pour les tests :**
|
||||
|
||||
```bash
|
||||
# Timeout des tests
|
||||
export TEST_TIMEOUT=300
|
||||
|
||||
# Tests parallèles
|
||||
export TEST_PARALLEL=true
|
||||
|
||||
# Logs détaillés
|
||||
# Niveau de log
|
||||
export RUST_LOG=debug
|
||||
|
||||
# Backtrace
|
||||
export RUST_BACKTRACE=1
|
||||
# Configuration de compression
|
||||
export COMPRESSION_LEVEL=6
|
||||
```
|
||||
|
||||
## 🚀 Optimisations de Performance
|
||||
## 🚨 Gestion des Erreurs
|
||||
|
||||
### 1. Optimisations Rust
|
||||
### Types d'Erreurs
|
||||
|
||||
```rust
|
||||
// Utilisation de references pour éviter les copies
|
||||
fn process_wallet(wallet: &Wallet) -> Result<(), SdkError> {
|
||||
// Traitement optimisé
|
||||
}
|
||||
use sdk_common::{
|
||||
SdkError, ValidationError, SerializationError, CompressionError
|
||||
};
|
||||
|
||||
// Utilisation de iterators pour les performances
|
||||
fn process_transactions(txs: &[Transaction]) -> Vec<Result<(), SdkError>> {
|
||||
txs.iter().map(|tx| process_transaction(tx)).collect()
|
||||
}
|
||||
|
||||
// Utilisation de Box pour les gros objets
|
||||
fn create_large_wallet() -> Box<Wallet> {
|
||||
Box::new(Wallet::new().unwrap())
|
||||
fn handle_errors() -> Result<(), SdkError> {
|
||||
match some_operation() {
|
||||
Ok(result) => Ok(result),
|
||||
Err(SdkError::Validation(ValidationError::InvalidProcess(msg))) => {
|
||||
eprintln!("Erreur de validation: {}", msg);
|
||||
Err(SdkError::Validation(ValidationError::InvalidProcess(msg)))
|
||||
},
|
||||
Err(SdkError::Compression(CompressionError::CompressionFailed(msg))) => {
|
||||
eprintln!("Erreur de compression: {}", msg);
|
||||
Err(SdkError::Compression(CompressionError::CompressionFailed(msg)))
|
||||
},
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Optimisations WASM
|
||||
### Gestion des Erreurs avec `?`
|
||||
|
||||
```javascript
|
||||
// Initialisation asynchrone
|
||||
const sdk = await init();
|
||||
|
||||
// Utilisation de Web Workers pour les calculs lourds
|
||||
const worker = new Worker('sdk-worker.js');
|
||||
worker.postMessage({ type: 'process_payment', data: paymentData });
|
||||
|
||||
// Utilisation de SharedArrayBuffer pour les gros datasets
|
||||
const sharedBuffer = new SharedArrayBuffer(1024 * 1024);
|
||||
```rust
|
||||
fn process_data() -> Result<(), SdkError> {
|
||||
let data = b"données à traiter";
|
||||
|
||||
// Compression avec gestion d'erreur automatique
|
||||
let compressed = compress_data(data)?;
|
||||
|
||||
// Validation avec gestion d'erreur automatique
|
||||
let process = create_process()?;
|
||||
validate_process(&process)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Optimisations de Build
|
||||
## 📊 Performance
|
||||
|
||||
### Optimisations
|
||||
|
||||
```rust
|
||||
// Utilisation de références pour éviter les copies
|
||||
fn process_large_data(data: &[u8]) -> Result<Vec<u8>, SdkError> {
|
||||
compress_data(data)
|
||||
}
|
||||
|
||||
// Utilisation de Vec avec capacité pré-allouée
|
||||
fn create_process_list(count: usize) -> Vec<Process> {
|
||||
let mut processes = Vec::with_capacity(count);
|
||||
// ... remplir la liste
|
||||
processes
|
||||
}
|
||||
```
|
||||
|
||||
### Benchmarks
|
||||
|
||||
```bash
|
||||
# Build avec optimisations avancées
|
||||
RUSTFLAGS="-C target-cpu=native -C lto=fat -C codegen-units=1" cargo build --release
|
||||
# Tests de performance
|
||||
cargo bench
|
||||
|
||||
# Build WASM optimisé
|
||||
wasm-pack build --target web --release -- --no-default-features
|
||||
|
||||
# Minification WASM
|
||||
wasm-opt -O4 -o pkg/sdk_common_bg.wasm pkg/sdk_common_bg.wasm
|
||||
# Tests de compression
|
||||
cargo test compression_benchmark
|
||||
```
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
### 1. Validation des Entrées
|
||||
### Bonnes Pratiques
|
||||
|
||||
```rust
|
||||
use sdk_common::validation::*;
|
||||
|
||||
// Validation des adresses
|
||||
fn validate_address(address: &str) -> Result<(), SdkError> {
|
||||
if !is_valid_bitcoin_address(address) {
|
||||
return Err(SdkError::InvalidAddress);
|
||||
// Validation systématique des entrées
|
||||
fn create_secure_process(name: &str, device_id: &str) -> Result<Process, SdkError> {
|
||||
if name.is_empty() || device_id.is_empty() {
|
||||
return Err(SdkError::InvalidInput("Name and device_id cannot be empty".to_string()));
|
||||
}
|
||||
Ok(())
|
||||
|
||||
let process = Process {
|
||||
id: generate_secure_id(),
|
||||
name: name.to_string(),
|
||||
device_id: device_id.to_string(),
|
||||
state: ProcessState::Active,
|
||||
states: vec![ProcessState::Active],
|
||||
description: None,
|
||||
created_at: None,
|
||||
updated_at: None,
|
||||
};
|
||||
|
||||
validate_process(&process)?;
|
||||
Ok(process)
|
||||
}
|
||||
|
||||
// Validation des transactions
|
||||
fn validate_transaction(tx_hex: &str) -> Result<(), SdkError> {
|
||||
if !is_valid_transaction_hex(tx_hex) {
|
||||
return Err(SdkError::InvalidTransaction);
|
||||
}
|
||||
// Gestion sécurisée des erreurs
|
||||
fn handle_sensitive_data(data: &[u8]) -> Result<(), SdkError> {
|
||||
// Ne pas exposer les données sensibles dans les logs
|
||||
let compressed = compress_data(data).map_err(|e| {
|
||||
log::error!("Compression failed: {}", e);
|
||||
SdkError::Internal("Compression failed".to_string())
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Gestion de la Mémoire
|
||||
## 🛠️ Développement
|
||||
|
||||
### Workflow de Développement
|
||||
|
||||
```bash
|
||||
# 1. Cloner le projet
|
||||
git clone https://git.4nkweb.com/4nk/sdk_common.git
|
||||
cd sdk_common
|
||||
|
||||
# 2. Installer les dépendances
|
||||
cargo build
|
||||
|
||||
# 3. Lancer les tests
|
||||
cargo test
|
||||
|
||||
# 4. Vérifier le code
|
||||
cargo clippy -- -D warnings
|
||||
cargo fmt -- --check
|
||||
|
||||
# 5. Générer la documentation
|
||||
cargo doc --open
|
||||
```
|
||||
|
||||
### Debugging
|
||||
|
||||
```rust
|
||||
// Utilisation de zeroize pour les données sensibles
|
||||
use zeroize::Zeroize;
|
||||
// Utilisation de logs pour le debugging
|
||||
use log::{debug, info, warn, error};
|
||||
|
||||
struct SecureWallet {
|
||||
private_key: Vec<u8>,
|
||||
}
|
||||
|
||||
impl Drop for SecureWallet {
|
||||
fn drop(&mut self) {
|
||||
self.private_key.zeroize();
|
||||
fn debug_process(process: &Process) {
|
||||
debug!("Processing process: {:?}", process);
|
||||
|
||||
match validate_process(process) {
|
||||
Ok(()) => info!("Process validation successful"),
|
||||
Err(e) => warn!("Process validation failed: {:?}", e),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Protection contre les Attaques
|
||||
## 📚 Ressources Additionnelles
|
||||
|
||||
```rust
|
||||
// Protection contre les attaques par timing
|
||||
use subtle::ConstantTimeEq;
|
||||
### Documentation
|
||||
|
||||
fn verify_signature(sig1: &[u8], sig2: &[u8]) -> bool {
|
||||
sig1.ct_eq(sig2).unwrap_u8() == 1
|
||||
}
|
||||
- [API Reference](API.md) - Documentation complète des APIs
|
||||
- [Architecture](ARCHITECTURE.md) - Architecture technique détaillée
|
||||
- [Configuration](CONFIGURATION.md) - Guide de configuration
|
||||
- [Tests](TESTING.md) - Stratégies de tests
|
||||
|
||||
// Protection contre les attaques par déni de service
|
||||
fn process_with_timeout<F, T>(f: F, timeout: Duration) -> Result<T, SdkError>
|
||||
where
|
||||
F: FnOnce() -> Result<T, SdkError>,
|
||||
{
|
||||
// Implémentation avec timeout
|
||||
}
|
||||
```
|
||||
### Exemples
|
||||
|
||||
## 📊 Monitoring
|
||||
|
||||
### 1. Métriques de Performance
|
||||
|
||||
```rust
|
||||
use std::time::Instant;
|
||||
|
||||
fn benchmark_operation() {
|
||||
let start = Instant::now();
|
||||
|
||||
// Opération à mesurer
|
||||
let result = perform_operation();
|
||||
|
||||
let duration = start.elapsed();
|
||||
println!("Opération terminée en {:?}", duration);
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Logs et Debug
|
||||
|
||||
```rust
|
||||
use log::{info, warn, error, debug};
|
||||
|
||||
fn process_payment(payment: &SilentPayment) -> Result<(), SdkError> {
|
||||
debug!("Traitement du paiement: {:?}", payment);
|
||||
|
||||
match payment.process() {
|
||||
Ok(_) => {
|
||||
info!("Paiement traité avec succès");
|
||||
Ok(())
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Erreur lors du traitement: {:?}", e);
|
||||
Err(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Métriques de Build
|
||||
|
||||
```bash
|
||||
# Taille du binaire
|
||||
ls -lh target/release/libsdk_common.*
|
||||
|
||||
# Taille WASM
|
||||
ls -lh pkg/sdk_common_bg.wasm
|
||||
|
||||
# Temps de compilation
|
||||
time cargo build --release
|
||||
|
||||
# Analyse des dépendances
|
||||
cargo tree
|
||||
```
|
||||
|
||||
## 🔄 Mises à Jour
|
||||
|
||||
### 1. Mise à Jour de la Bibliothèque
|
||||
|
||||
```bash
|
||||
# Mettre à jour les dépendances
|
||||
cargo update
|
||||
|
||||
# Vérifier les vulnérabilités
|
||||
cargo audit
|
||||
|
||||
# Tester après mise à jour
|
||||
cargo test --all
|
||||
```
|
||||
|
||||
### 2. Migration des Versions
|
||||
|
||||
```rust
|
||||
// Gestion des breaking changes
|
||||
#[cfg(feature = "v2")]
|
||||
use sdk_common::v2::{Wallet, SilentPayment};
|
||||
|
||||
#[cfg(not(feature = "v2"))]
|
||||
use sdk_common::v1::{Wallet, SilentPayment};
|
||||
```
|
||||
|
||||
### 3. Migration des Données
|
||||
|
||||
```rust
|
||||
// Migration des wallets
|
||||
fn migrate_wallet_v1_to_v2(wallet_v1: V1Wallet) -> Result<V2Wallet, SdkError> {
|
||||
// Logique de migration
|
||||
let wallet_v2 = V2Wallet::from_v1(wallet_v1)?;
|
||||
Ok(wallet_v2)
|
||||
}
|
||||
```
|
||||
|
||||
## 🎯 Prochaines Étapes
|
||||
|
||||
### 1. Intégration
|
||||
|
||||
- [Guide de Configuration](CONFIGURATION.md) - Configurer selon vos besoins
|
||||
- [API Reference](API.md) - Consulter les APIs détaillées
|
||||
- [Architecture](ARCHITECTURE.md) - Comprendre l'architecture
|
||||
|
||||
### 2. Développement
|
||||
|
||||
- [Guide de Développement](DEVELOPMENT.md) - Contribuer au développement
|
||||
- [Guide des Tests](TESTING.md) - Écrire et exécuter des tests
|
||||
- [Quick Reference](QUICK_REFERENCE.md) - Référence rapide
|
||||
|
||||
### 3. Intégration avec 4NK_node
|
||||
|
||||
- [Intégration 4NK_node](INTEGRATION_4NK_NODE.md) - Intégrer avec l'infrastructure
|
||||
- [Configuration SSH](SSH_SETUP.md) - Configurer SSH pour l'automatisation
|
||||
- [Push SSH Automatisé](AUTO_SSH_PUSH.md) - Automatiser les déploiements
|
||||
- [Exemples de base](../examples/) - Exemples d'utilisation
|
||||
- [Tests d'intégration](../tests/) - Tests complets
|
||||
- [Benchmarks](../benches/) - Tests de performance
|
||||
|
||||
---
|
||||
|
||||
**📖 La bibliothèque sdk_common est maintenant prête à être utilisée dans vos projets !** 🚀
|
||||
**📖 Guide d'utilisation complet pour sdk_common - Bibliothèque commune pour les Silent Payments** 🚀
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user