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

5.7 KiB

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 :

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 :

{
  "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 :

{
  "name": "Author",
  "lud16": "author@getalby.com",
  "lud06": "lnurl..."
}

NIP-19 : Les adresses Lightning peuvent être dans les métadonnées de profil (kind 0).