docs: ajustements mineurs post-alignement (USAGE, ARCHITECTURE)
This commit is contained in:
parent
b4dcadbb34
commit
034fd62370
@ -172,17 +172,17 @@ impl SilentPaymentGenerator {
|
|||||||
pub fn new(wallet: Wallet, network: Network) -> Self {
|
pub fn new(wallet: Wallet, network: Network) -> Self {
|
||||||
Self { wallet, network }
|
Self { wallet, network }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_payment(&self) -> Result<SilentPayment, SdkError> {
|
pub fn generate_payment(&self) -> Result<SilentPayment, SdkError> {
|
||||||
// 1. Générer la clé de scan
|
// 1. Générer la clé de scan
|
||||||
let scan_key = self.generate_scan_key()?;
|
let scan_key = self.generate_scan_key()?;
|
||||||
|
|
||||||
// 2. Générer la clé de dépense
|
// 2. Générer la clé de dépense
|
||||||
let spend_key = self.generate_spend_key()?;
|
let spend_key = self.generate_spend_key()?;
|
||||||
|
|
||||||
// 3. Créer l'adresse silencieuse
|
// 3. Créer l'adresse silencieuse
|
||||||
let address = self.create_silent_address(&scan_key, &spend_key)?;
|
let address = self.create_silent_address(&scan_key, &spend_key)?;
|
||||||
|
|
||||||
Ok(SilentPayment {
|
Ok(SilentPayment {
|
||||||
scan_key,
|
scan_key,
|
||||||
spend_key,
|
spend_key,
|
||||||
@ -203,16 +203,16 @@ pub struct TransactionScanner {
|
|||||||
impl TransactionScanner {
|
impl TransactionScanner {
|
||||||
pub fn scan_transaction(&self, tx: &Transaction) -> Result<Vec<Output>, SdkError> {
|
pub fn scan_transaction(&self, tx: &Transaction) -> Result<Vec<Output>, SdkError> {
|
||||||
let mut outputs = Vec::new();
|
let mut outputs = Vec::new();
|
||||||
|
|
||||||
for (index, output) in tx.outputs.iter().enumerate() {
|
for (index, output) in tx.outputs.iter().enumerate() {
|
||||||
// 1. Extraire les données de l'output
|
// 1. Extraire les données de l'output
|
||||||
let script_pubkey = &output.script_pubkey;
|
let script_pubkey = &output.script_pubkey;
|
||||||
|
|
||||||
// 2. Vérifier si c'est un paiement silencieux
|
// 2. Vérifier si c'est un paiement silencieux
|
||||||
if self.is_silent_payment_output(script_pubkey)? {
|
if self.is_silent_payment_output(script_pubkey)? {
|
||||||
// 3. Dériver la clé de scan
|
// 3. Dériver la clé de scan
|
||||||
let derived_key = self.derive_scan_key(script_pubkey)?;
|
let derived_key = self.derive_scan_key(script_pubkey)?;
|
||||||
|
|
||||||
// 4. Vérifier la correspondance
|
// 4. Vérifier la correspondance
|
||||||
if self.matches_scan_key(&derived_key)? {
|
if self.matches_scan_key(&derived_key)? {
|
||||||
outputs.push(Output {
|
outputs.push(Output {
|
||||||
@ -224,7 +224,7 @@ impl TransactionScanner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(outputs)
|
Ok(outputs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,7 +242,7 @@ impl OutputCreator {
|
|||||||
pub fn create_output(&self, amount: u64, address: &Address) -> Result<TxOut, SdkError> {
|
pub fn create_output(&self, amount: u64, address: &Address) -> Result<TxOut, SdkError> {
|
||||||
// 1. Créer le script de sortie
|
// 1. Créer le script de sortie
|
||||||
let script_pubkey = self.create_output_script(address)?;
|
let script_pubkey = self.create_output_script(address)?;
|
||||||
|
|
||||||
// 2. Créer la sortie
|
// 2. Créer la sortie
|
||||||
Ok(TxOut {
|
Ok(TxOut {
|
||||||
value: amount,
|
value: amount,
|
||||||
@ -267,13 +267,13 @@ impl SecureKeyManager {
|
|||||||
// Générer une clé privée sécurisée
|
// Générer une clé privée sécurisée
|
||||||
let private_key = SecureKey::generate()?;
|
let private_key = SecureKey::generate()?;
|
||||||
let public_key = private_key.public_key()?;
|
let public_key = private_key.public_key()?;
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
private_key,
|
private_key,
|
||||||
public_key,
|
public_key,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sign(&self, message: &[u8]) -> Result<Signature, SdkError> {
|
pub fn sign(&self, message: &[u8]) -> Result<Signature, SdkError> {
|
||||||
// Signature sécurisée avec protection contre les attaques par timing
|
// Signature sécurisée avec protection contre les attaques par timing
|
||||||
self.private_key.sign_secure(message)
|
self.private_key.sign_secure(message)
|
||||||
@ -302,20 +302,20 @@ impl InputValidator {
|
|||||||
if tx.serialized_size() > self.max_tx_size {
|
if tx.serialized_size() > self.max_tx_size {
|
||||||
return Err(SdkError::TransactionTooLarge);
|
return Err(SdkError::TransactionTooLarge);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Vérifier les entrées
|
// 2. Vérifier les entrées
|
||||||
for input in &tx.inputs {
|
for input in &tx.inputs {
|
||||||
self.validate_input(input)?;
|
self.validate_input(input)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Vérifier les sorties
|
// 3. Vérifier les sorties
|
||||||
for output in &tx.outputs {
|
for output in &tx.outputs {
|
||||||
self.validate_output(output)?;
|
self.validate_output(output)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Vérifier la cohérence
|
// 4. Vérifier la cohérence
|
||||||
self.validate_consistency(tx)?;
|
self.validate_consistency(tx)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -333,13 +333,13 @@ impl SecurityManager {
|
|||||||
pub fn process_request(&self, request: &Request) -> Result<Response, SdkError> {
|
pub fn process_request(&self, request: &Request) -> Result<Response, SdkError> {
|
||||||
// 1. Rate limiting
|
// 1. Rate limiting
|
||||||
self.rate_limiter.check_limit(&request.source)?;
|
self.rate_limiter.check_limit(&request.source)?;
|
||||||
|
|
||||||
// 2. Sanitisation des entrées
|
// 2. Sanitisation des entrées
|
||||||
let sanitized_request = self.input_sanitizer.sanitize(request)?;
|
let sanitized_request = self.input_sanitizer.sanitize(request)?;
|
||||||
|
|
||||||
// 3. Validation
|
// 3. Validation
|
||||||
self.validate_request(&sanitized_request)?;
|
self.validate_request(&sanitized_request)?;
|
||||||
|
|
||||||
// 4. Traitement sécurisé
|
// 4. Traitement sécurisé
|
||||||
self.process_secure(&sanitized_request)
|
self.process_secure(&sanitized_request)
|
||||||
}
|
}
|
||||||
@ -377,7 +377,7 @@ pub fn create_large_wallet() -> Box<Wallet> {
|
|||||||
#[cfg(feature = "wasm")]
|
#[cfg(feature = "wasm")]
|
||||||
pub mod wasm_optimizations {
|
pub mod wasm_optimizations {
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
// Utilisation de Web Workers pour les calculs lourds
|
// Utilisation de Web Workers pour les calculs lourds
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn process_payment_async(payment_data: JsValue) -> js_sys::Promise {
|
pub fn process_payment_async(payment_data: JsValue) -> js_sys::Promise {
|
||||||
@ -386,7 +386,7 @@ pub mod wasm_optimizations {
|
|||||||
process_payment_worker(payment_data)
|
process_payment_worker(payment_data)
|
||||||
).into()
|
).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utilisation de SharedArrayBuffer pour les gros datasets
|
// Utilisation de SharedArrayBuffer pour les gros datasets
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn process_large_dataset(data: &js_sys::Uint8Array) -> Result<(), JsValue> {
|
pub fn process_large_dataset(data: &js_sys::Uint8Array) -> Result<(), JsValue> {
|
||||||
@ -411,11 +411,11 @@ impl CacheManager {
|
|||||||
tx_cache: LruCache::new(1000),
|
tx_cache: LruCache::new(1000),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_wallet(&mut self, id: &str) -> Option<&Wallet> {
|
pub fn get_wallet(&mut self, id: &str) -> Option<&Wallet> {
|
||||||
self.wallet_cache.get(id)
|
self.wallet_cache.get(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn cache_wallet(&mut self, id: String, wallet: Wallet) {
|
pub fn cache_wallet(&mut self, id: String, wallet: Wallet) {
|
||||||
self.wallet_cache.put(id, wallet);
|
self.wallet_cache.put(id, wallet);
|
||||||
}
|
}
|
||||||
@ -437,11 +437,11 @@ impl PerformanceMetrics {
|
|||||||
pub fn record_operation(&mut self, operation: &str, duration: Duration) {
|
pub fn record_operation(&mut self, operation: &str, duration: Duration) {
|
||||||
self.operation_times.insert(operation.to_string(), duration);
|
self.operation_times.insert(operation.to_string(), duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn record_error(&mut self, error_type: &str) {
|
pub fn record_error(&mut self, error_type: &str) {
|
||||||
*self.error_counts.entry(error_type.to_string()).or_insert(0) += 1;
|
*self.error_counts.entry(error_type.to_string()).or_insert(0) += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_memory_usage(&self) -> MemoryUsage {
|
pub fn get_memory_usage(&self) -> MemoryUsage {
|
||||||
self.memory_usage.current_usage()
|
self.memory_usage.current_usage()
|
||||||
}
|
}
|
||||||
@ -462,15 +462,15 @@ impl Logger {
|
|||||||
self.output.write(level, message);
|
self.output.write(level, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn debug(&self, message: &str) {
|
pub fn debug(&self, message: &str) {
|
||||||
self.log(LogLevel::Debug, message);
|
self.log(LogLevel::Debug, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn info(&self, message: &str) {
|
pub fn info(&self, message: &str) {
|
||||||
self.log(LogLevel::Info, message);
|
self.log(LogLevel::Info, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn error(&self, message: &str) {
|
pub fn error(&self, message: &str) {
|
||||||
self.log(LogLevel::Error, message);
|
self.log(LogLevel::Error, message);
|
||||||
}
|
}
|
||||||
@ -529,13 +529,13 @@ mod tests {
|
|||||||
fn test_wallet_creation() {
|
fn test_wallet_creation() {
|
||||||
// Test de base
|
// Test de base
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "wasm")]
|
#[cfg(feature = "wasm")]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_wasm_integration() {
|
fn test_wasm_integration() {
|
||||||
// Test WASM
|
// Test WASM
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "blindbit-wasm")]
|
#[cfg(feature = "blindbit-wasm")]
|
||||||
#[test]
|
#[test]
|
||||||
fn test_blindbit_wasm() {
|
fn test_blindbit_wasm() {
|
||||||
|
@ -70,14 +70,14 @@ use sdk_common::{
|
|||||||
fn main() -> Result<(), SdkError> {
|
fn main() -> Result<(), SdkError> {
|
||||||
// Créer un wallet
|
// Créer un wallet
|
||||||
let wallet = Wallet::new()?;
|
let wallet = Wallet::new()?;
|
||||||
|
|
||||||
// Générer un paiement silencieux
|
// Générer un paiement silencieux
|
||||||
let payment = SilentPayment::generate(&wallet)?;
|
let payment = SilentPayment::generate(&wallet)?;
|
||||||
|
|
||||||
// Traiter une transaction
|
// Traiter une transaction
|
||||||
let tx = Transaction::from_hex("...")?;
|
let tx = Transaction::from_hex("...")?;
|
||||||
let result = wallet.process_transaction(&tx)?;
|
let result = wallet.process_transaction(&tx)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -98,13 +98,13 @@ import { init, Wallet, SilentPayment } from '@4nk/sdk-common';
|
|||||||
async function main() {
|
async function main() {
|
||||||
// Initialiser le module WASM
|
// Initialiser le module WASM
|
||||||
await init();
|
await init();
|
||||||
|
|
||||||
// Créer un wallet
|
// Créer un wallet
|
||||||
const wallet = new Wallet();
|
const wallet = new Wallet();
|
||||||
|
|
||||||
// Générer un paiement silencieux
|
// Générer un paiement silencieux
|
||||||
const payment = SilentPayment.generate(wallet);
|
const payment = SilentPayment.generate(wallet);
|
||||||
|
|
||||||
console.log('Payment:', payment);
|
console.log('Payment:', payment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,20 +124,20 @@ main().catch(console.error);
|
|||||||
<body>
|
<body>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import init, { Wallet, SilentPayment } from './pkg/sdk_common.js';
|
import init, { Wallet, SilentPayment } from './pkg/sdk_common.js';
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
await init();
|
await init();
|
||||||
|
|
||||||
const wallet = new Wallet();
|
const wallet = new Wallet();
|
||||||
const payment = SilentPayment.generate(wallet);
|
const payment = SilentPayment.generate(wallet);
|
||||||
|
|
||||||
document.getElementById('result').textContent =
|
document.getElementById('result').textContent =
|
||||||
JSON.stringify(payment, null, 2);
|
JSON.stringify(payment, null, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<h1>SDK Common Demo</h1>
|
<h1>SDK Common Demo</h1>
|
||||||
<pre id="result"></pre>
|
<pre id="result"></pre>
|
||||||
</body>
|
</body>
|
||||||
@ -177,7 +177,7 @@ impl WalletOperations for MyWallet {
|
|||||||
fn generate_address(&self) -> Result<Address, SdkError> {
|
fn generate_address(&self) -> Result<Address, SdkError> {
|
||||||
// Implémentation personnalisée
|
// Implémentation personnalisée
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign_transaction(&self, tx: &Transaction) -> Result<Signature, SdkError> {
|
fn sign_transaction(&self, tx: &Transaction) -> Result<Signature, SdkError> {
|
||||||
// Implémentation personnalisée
|
// Implémentation personnalisée
|
||||||
}
|
}
|
||||||
@ -437,10 +437,10 @@ use std::time::Instant;
|
|||||||
|
|
||||||
fn benchmark_operation() {
|
fn benchmark_operation() {
|
||||||
let start = Instant::now();
|
let start = Instant::now();
|
||||||
|
|
||||||
// Opération à mesurer
|
// Opération à mesurer
|
||||||
let result = perform_operation();
|
let result = perform_operation();
|
||||||
|
|
||||||
let duration = start.elapsed();
|
let duration = start.elapsed();
|
||||||
println!("Opération terminée en {:?}", duration);
|
println!("Opération terminée en {:?}", duration);
|
||||||
}
|
}
|
||||||
@ -453,7 +453,7 @@ use log::{info, warn, error, debug};
|
|||||||
|
|
||||||
fn process_payment(payment: &SilentPayment) -> Result<(), SdkError> {
|
fn process_payment(payment: &SilentPayment) -> Result<(), SdkError> {
|
||||||
debug!("Traitement du paiement: {:?}", payment);
|
debug!("Traitement du paiement: {:?}", payment);
|
||||||
|
|
||||||
match payment.process() {
|
match payment.process() {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
info!("Paiement traité avec succès");
|
info!("Paiement traité avec succès");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user