story-research-zapwall/features/remaining-tasks.md
Nicolas Cantu 4735ee71ab feat: Complétion système split et intégrations externes
- Intégration mempool.space pour vérification transactions Bitcoin :
  - Service MempoolSpaceService avec API mempool.space
  - Vérification sorties et montants pour sponsoring
  - Vérification confirmations
  - Attente confirmation avec polling

- Récupération adresses Lightning depuis profils Nostr :
  - Service LightningAddressService
  - Support lud16 et lud06 (NIP-19)
  - Cache avec TTL 1 heure
  - Intégré dans paymentPolling et reviewReward

- Mise à jour événements Nostr pour avis rémunérés :
  - Publication événement avec tags rewarded et reward_amount
  - Parsing tags dans parseReviewFromEvent
  - Vérification doublons

- Tracking sponsoring sur Nostr :
  - Service SponsoringTrackingService
  - Événements avec commissions et confirmations
  - Intégration vérification mempool.space

Toutes les fonctionnalités de split sont maintenant opérationnelles.
Seuls les transferts Lightning réels nécessitent un nœud Lightning.
2025-12-27 21:18:14 +01:00

183 lines
5.7 KiB
Markdown

# 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).