# Tâches restantes - Système de commissions **Date** : Décembre 2024 **Auteur** : Équipe 4NK ## État actuel ✅ **Implémenté** : - Configuration centralisée des commissions - Validation des montants à chaque étape - Tracking des commissions sur Nostr - Services de split (articles, avis, sponsoring) - Services de transfert automatique (structure) ⏳ **À compléter** : 1. Intégration mempool.space pour vérification transactions Bitcoin 2. Récupération adresses Lightning depuis profils Nostr 3. Mise à jour événements Nostr pour avis rémunérés 4. Tracking sponsoring sur Nostr 5. Transferts Lightning réels (nécessite nœud Lightning) ## Tâches détaillées ### 1. Intégration mempool.space ✅ IMPLÉMENTÉ **Objectif** : Vérifier que les transactions Bitcoin de sponsoring contiennent les deux sorties correctes. **API mempool.space** : - Endpoint : `https://mempool.space/api/tx/{txid}` - Documentation : https://mempool.space/api **Implémenté** : - ✅ Service `MempoolSpaceService` pour récupérer une transaction depuis mempool.space - ✅ Vérification que la transaction a deux sorties : - Sortie 1 : `split.authorSats` vers `authorMainnetAddress` - Sortie 2 : `split.platformSats` vers `PLATFORM_BITCOIN_ADDRESS` - ✅ Vérification du nombre de confirmations - ✅ Gestion des erreurs et retry - ✅ Intégré dans `sponsoringPayment.ts` **Fichier** : `lib/mempoolSpace.ts` ✅ ### 2. Récupération adresses Lightning ✅ IMPLÉMENTÉ **Objectif** : Récupérer les adresses Lightning des auteurs/reviewers depuis leurs profils Nostr. **Standards Nostr** : - NIP-19 : Lightning addresses dans les métadonnées de profil - Format : `lud16` ou `lud06` dans le profil JSON - Exemple : `{"lud16": "user@domain.com"}` **Implémenté** : - ✅ Service `LightningAddressService` pour parser les métadonnées de profil - ✅ Extraction de `lud16` ou `lud06` depuis les profils - ✅ Cache des adresses récupérées - ✅ Fallback si pas d'adresse disponible - ✅ Intégré dans `paymentPolling.ts` et `reviewReward.ts` **Fichiers** : - `lib/lightningAddress.ts` ✅ - `types/nostr.ts` ✅ (ajout de `lud16` et `lud06`) ### 3. Mise à jour événements Nostr pour avis ✅ IMPLÉMENTÉ **Objectif** : Mettre à jour l'événement Nostr d'un avis avec les tags `rewarded: true` et `reward_amount: 70`. **Implémenté** : - ✅ Récupération de l'événement original de l'avis - ✅ Ajout des tags `rewarded` et `reward_amount` - ✅ Publication de l'événement mis à jour - ✅ Gestion des erreurs si l'événement n'existe plus - ✅ Vérification que l'avis n'est pas déjà rémunéré - ✅ Parsing des tags dans `parseReviewFromEvent` **Fichiers** : - `lib/reviewReward.ts` ✅ (méthode `updateReviewWithReward` implémentée) - `lib/nostrEventParsing.ts` ✅ (parsing des tags `rewarded` et `reward_amount`) ### 4. Tracking sponsoring sur Nostr ✅ IMPLÉMENTÉ **Objectif** : Publier des événements de tracking pour les paiements de sponsoring. **Implémenté** : - ✅ Service `SponsoringTrackingService` pour publier les événements - ✅ Tags similaires aux articles : `author_amount`, `platform_commission` - ✅ Vérification de transaction via mempool.space avant tracking - ✅ Informations de confirmation et nombre de confirmations - ✅ Intégré dans `sponsoringPayment.ts` **Fichiers** : - `lib/sponsoringTracking.ts` ✅ (nouveau service) - `lib/sponsoringPayment.ts` ✅ (méthode `trackSponsoringPayment` implémentée) ### 5. Transferts Lightning réels (PRIORITÉ BASSE - nécessite infrastructure) **Objectif** : Effectuer réellement les transferts Lightning vers les auteurs/reviewers. **Prérequis** : - Nœud Lightning de la plateforme - API pour créer et payer des invoices - Gestion des erreurs et retry **À implémenter** : - Intégration avec l'API du nœud Lightning - Création d'invoices pour les transferts - Paiement automatique des invoices - Queue de transferts en attente - Retry en cas d'échec **Fichier** : `lib/automaticTransfer.ts` (modifier les méthodes de transfert) ## Plan d'implémentation ### Phase 1 : Vérification transactions ✅ TERMINÉ 1. ✅ Créer `lib/mempoolSpace.ts` 2. ✅ Implémenter récupération transaction 3. ✅ Implémenter vérification sorties 4. ✅ Intégrer dans `sponsoringPayment.ts` ### Phase 2 : Adresses Lightning ✅ TERMINÉ 1. ✅ Créer `lib/lightningAddress.ts` 2. ✅ Parser profils Nostr pour `lud16`/`lud06` 3. ✅ Intégrer dans `paymentPolling.ts` et `reviewReward.ts` ### Phase 3 : Mise à jour avis ✅ TERMINÉ 1. ✅ Implémenter `updateReviewWithReward` dans `reviewReward.ts` 2. ✅ Parser tags `rewarded` et `reward_amount` dans `parseReviewFromEvent` ### Phase 4 : Tracking sponsoring ✅ TERMINÉ 1. ✅ Créer `lib/sponsoringTracking.ts` 2. ✅ Implémenter tracking dans `sponsoringPayment.ts` 3. ⏳ Mise à jour `total_sponsoring` sur présentation (structure préparée) ### Phase 5 : Transferts réels (long terme - nécessite infrastructure) 1. ⏳ Configurer nœud Lightning 2. ⏳ Implémenter API d'intégration 3. ⏳ Créer queue de transferts 4. ⏳ Monitoring et alertes ## Notes techniques ### mempool.space API **Récupérer une transaction** : ``` GET https://mempool.space/api/tx/{txid} ``` **Réponse** : ```json { "txid": "...", "vout": [ { "value": 4200000, "scriptpubkey_address": "bc1q..." }, { "value": 400000, "scriptpubkey_address": "bc1q..." } ], "status": { "confirmed": true, "block_height": 123456, "block_hash": "..." } } ``` ### Lightning addresses dans Nostr **Format profil** : ```json { "name": "Author", "lud16": "author@getalby.com", "lud06": "lnurl..." } ``` **NIP-19** : Les adresses Lightning peuvent être dans les métadonnées de profil (kind 0).