- Création lib/platformCommissions.ts : configuration centralisée des commissions - Articles : 800 sats (700 auteur, 100 plateforme) - Avis : 70 sats (49 lecteur, 21 plateforme) - Sponsoring : 0.046 BTC (0.042 auteur, 0.004 plateforme) - Validation des montants à chaque étape : - Publication : vérification du montant avant publication - Paiement : vérification du montant avant acceptation - Erreurs explicites si montant incorrect - Tracking des commissions sur Nostr : - Tags author_amount et platform_commission dans événements - Interface ContentDeliveryTracking étendue - Traçabilité complète pour audit - Logs structurés avec informations de commission - Documentation complète du système Les commissions sont maintenant systématiques, validées et traçables.
143 lines
4.9 KiB
Markdown
143 lines
4.9 KiB
Markdown
# Vérification de l'envoi du contenu privé
|
|
|
|
**Auteur** : Équipe 4NK
|
|
|
|
## Objectif
|
|
|
|
Garantir que le contenu privé est bien envoyé au destinataire après confirmation du paiement.
|
|
|
|
## Système de vérification multi-niveaux
|
|
|
|
### 1. Publication sur le relay Nostr
|
|
|
|
Lors de l'envoi du contenu privé :
|
|
- Le message est chiffré avec NIP-04 (chiffrement entre l'auteur et le destinataire)
|
|
- L'événement est publié sur le relay Nostr (kind: 4)
|
|
- L'ID de l'événement est retourné pour traçabilité
|
|
|
|
**Vérification** : `publishEvent()` retourne l'événement publié avec son ID unique.
|
|
|
|
### 2. Vérification sur le relay
|
|
|
|
Après publication, le système vérifie que le message est bien présent sur le relay :
|
|
- Requête au relay avec l'ID du message
|
|
- Filtrage par auteur, destinataire et article
|
|
- Timeout de 5 secondes pour la vérification
|
|
|
|
**Vérification** : `verifyPrivateMessagePublished()` confirme la présence du message sur le relay.
|
|
|
|
### 3. Logs structurés
|
|
|
|
Tous les événements sont journalisés avec :
|
|
- ID du message
|
|
- ID de l'article
|
|
- Clé publique du destinataire
|
|
- Clé publique de l'auteur
|
|
- Timestamp ISO
|
|
- Statut de vérification
|
|
|
|
**Traçabilité** : Les logs permettent de suivre chaque envoi et de diagnostiquer les problèmes.
|
|
|
|
## Garanties d'envoi
|
|
|
|
### Niveau 1 : Publication réussie
|
|
- ✅ L'événement est signé et publié
|
|
- ✅ L'ID du message est retourné
|
|
- ✅ Le message est visible sur le relay
|
|
|
|
### Niveau 2 : Vérification sur relay
|
|
- ✅ Le message est retrouvé sur le relay avec les bons filtres
|
|
- ✅ Les tags correspondent (auteur, destinataire, article)
|
|
- ✅ Le message est accessible
|
|
|
|
### Niveau 3 : Récupération par le destinataire
|
|
- ✅ Le destinataire peut récupérer le message avec sa clé privée
|
|
- ✅ Le message est déchiffrable
|
|
- ✅ Le contenu correspond à l'article
|
|
|
|
## Points de contrôle
|
|
|
|
### 1. Avant l'envoi
|
|
- Vérification que le contenu privé est stocké
|
|
- Vérification que la clé privée de l'auteur est disponible
|
|
- Vérification que le paiement est confirmé (zap receipt)
|
|
|
|
### 2. Pendant l'envoi
|
|
- Chiffrement du contenu avec NIP-04
|
|
- Création de l'événement avec les bons tags
|
|
- Publication sur le relay
|
|
|
|
### 3. Après l'envoi
|
|
- Vérification que l'événement est publié
|
|
- Vérification que le message est sur le relay
|
|
- Logs de confirmation
|
|
|
|
## Gestion des erreurs
|
|
|
|
### Erreurs possibles
|
|
1. **Contenu non trouvé** : Le contenu privé n'est pas stocké
|
|
- Log : `Stored private content not found for article`
|
|
- Action : Vérifier le stockage local
|
|
|
|
2. **Clé privée indisponible** : La clé de l'auteur n'est pas disponible
|
|
- Log : `Author private key not available`
|
|
- Action : Vérifier la connexion Nostr
|
|
|
|
3. **Publication échouée** : L'événement n'a pas pu être publié
|
|
- Log : `Failed to publish private message event`
|
|
- Action : Vérifier la connexion au relay
|
|
|
|
4. **Vérification échouée** : Le message n'est pas sur le relay
|
|
- Log : `Private message not found on relay`
|
|
- Action : Réessayer ou vérifier la connexion
|
|
|
|
## Traçabilité
|
|
|
|
### Logs locaux (console navigateur)
|
|
|
|
Chaque envoi génère des logs avec :
|
|
- **messageEventId** : ID unique du message sur Nostr
|
|
- **articleId** : ID de l'article concerné
|
|
- **recipientPubkey** : Clé publique du destinataire
|
|
- **authorPubkey** : Clé publique de l'auteur
|
|
- **timestamp** : Date et heure ISO de l'événement
|
|
- **verified** : Statut de vérification sur le relay
|
|
|
|
### Événements de tracking sur Nostr
|
|
|
|
Pour que la plateforme puisse suivre tous les envois, chaque envoi de contenu génère un événement de tracking publié sur Nostr :
|
|
|
|
- **Kind** : 30078 (événement de tracking personnalisé)
|
|
- **Auteur** : L'auteur de l'article (qui envoie le contenu)
|
|
- **Tag `p`** : La clé publique de la plateforme (pour requêter tous les événements)
|
|
- **Tags** :
|
|
- `article` : ID de l'article
|
|
- `author` : Clé publique de l'auteur
|
|
- `recipient` : Clé publique du destinataire
|
|
- `message` : ID du message privé envoyé
|
|
- `amount` : Montant du paiement en sats
|
|
- `verified` : Statut de vérification (true/false)
|
|
- `timestamp` : Timestamp Unix
|
|
- `zap_receipt` : ID du zap receipt (si disponible)
|
|
- **Content** : JSON avec toutes les informations de tracking
|
|
|
|
La plateforme peut interroger tous ces événements en filtrant par `#p` avec sa clé publique pour obtenir une vue complète de tous les envois de contenu.
|
|
|
|
## Utilisation
|
|
|
|
### Pour l'auteur
|
|
L'auteur peut vérifier que son contenu a bien été envoyé en consultant les logs de la console du navigateur.
|
|
|
|
### Pour la plateforme
|
|
La plateforme peut suivre tous les envois via les logs structurés et identifier les problèmes de livraison.
|
|
|
|
### Pour le destinataire
|
|
Le destinataire peut récupérer le contenu via `getPrivateContent()` qui interroge le relay Nostr.
|
|
|
|
## Améliorations futures
|
|
|
|
- Système de notification pour l'auteur en cas d'échec
|
|
- Retry automatique en cas d'échec de publication
|
|
- Dashboard de suivi des envois pour les auteurs
|
|
- Confirmation de réception par le destinataire
|