- Fix unused function warnings by renaming to _unusedExtractTags - Fix type errors in nostrTagSystem.ts for includes() calls - Fix type errors in reviews.ts for filter kinds array - Fix ArrayBuffer type errors in articleEncryption.ts - Remove unused imports (DecryptionKey, decryptArticleContent, extractTagsFromEvent) - All TypeScript checks now pass without disabling any controls
6.0 KiB
Documentation technique
Auteur : Équipe 4NK
Architecture
Zapwall est une plateforme décentralisée basée sur Nostr pour la publication et la monétisation de contenu. Le système utilise Lightning Network pour les paiements et Bitcoin mainnet pour le sponsoring.
Services principaux
- Nostr (
lib/nostr.ts) : Pool de connexions, publication/récupération d'événements, profils, zap requests - Paiements (
lib/payment.ts,lib/paymentPolling.ts) : Invoices Lightning via Alby/WebLN, vérification zap receipts (NIP-57), envoi automatique contenu privé - Commissions (
lib/platformCommissions.ts) : Configuration centralisée, calcul splits, validation montants - Tracking (
lib/platformTracking.ts,lib/sponsoringTracking.ts) : Événements Nostr (kind 30078/30079) pour audit - Intégrations :
lib/mempoolSpace.ts: Vérification transactions Bitcoin via mempool.space APIlib/lightningAddress.ts: Récupération adresses Lightning depuis profils Nostr (lud16/lud06)
Stockage
- IndexedDB : Contenu privé chiffré (AES-GCM)
- localStorage : Métadonnées articles, invoices
- Nostr : Contenus publics et événements de tracking
Système de commissions
Configuration (lib/platformCommissions.ts)
- Articles : 800 sats (700 auteur, 100 plateforme)
- Avis : 70 sats (49 reviewer, 21 plateforme)
- Sponsoring : 0.046 BTC (0.042 auteur, 0.004 plateforme)
Implémentation
Articles (lib/paymentPolling.ts, lib/articleInvoice.ts) :
- Validation montant 800 sats à chaque étape
- Tracking avec
author_amountetplatform_commissiondans événements Nostr - Récupération adresse Lightning auteur via
lightningAddressService - Transfert automatique déclenché (logs, nécessite nœud Lightning pour exécution)
Sponsoring (lib/sponsoringPayment.ts, lib/sponsoringTracking.ts) :
- Validation montant 0.046 BTC
- Vérification transactions Bitcoin via
mempoolSpaceService(sorties auteur + plateforme) - Tracking sur Nostr (kind 30079) avec confirmations
Avis (lib/reviewReward.ts) :
- Validation montant 70 sats
- Mise à jour événement Nostr avec tags
rewarded: trueetreward_amount: 70 - Récupération adresse Lightning reviewer
- Transfert automatique déclenché (logs, nécessite nœud Lightning)
Tracking
Tous les paiements sont trackés sur Nostr :
- Kind 30078 : Livraisons de contenu (
lib/platformTracking.ts) - Kind 30079 : Paiements de sponsoring (
lib/sponsoringTracking.ts)
Les événements incluent author_amount, platform_commission, zap_receipt (si applicable), et sont signés par l'auteur avec tag p pour la plateforme.
Système de tags Nostr
Nouveau système de tags (tous en anglais)
Tous les contenus sont des notes Nostr (kind 1) avec un système de tags unifié :
- Type :
#author,#series,#publication,#quote(tags simples sans valeur) - Catégorie :
#sciencefictionou#research(tags simples sans valeur) - ID :
#id_<id>(tag avec valeur :['id', '<id>']) - Paywall :
#paywall(tag simple, pour les publications payantes) - Payment :
#payment(tag simple optionnel, pour les notes de paiement)
Utilitaires (lib/nostrTagSystem.ts)
buildTags(): Construit les tags à partir d'un objet typéextractTagsFromEvent(): Extrait les tags d'un événementbuildTagFilter(): Construit les filtres Nostr pour les requêtes
Internationalisation (i18n)
Système de traduction (lib/i18n.ts)
- Chargement depuis fichiers texte plats (
public/locales/fr.txt,public/locales/en.txt) - Format :
key=valueavec support des paramètres{{param}} - Hook
useI18npour utiliser les traductions dans les composants - Initialisé dans
_app.tsxavec locale par défaut (fr)
Langues supportées
- Français (fr) : langue par défaut
- Anglais (en) : disponible
- Extensible : ajout de nouvelles langues via fichiers de traduction
Financement IA
Jauge de financement (components/FundingGauge.tsx)
- Affiche le montant collecté, la cible (0.27 BTC) et le pourcentage
- Calcul des fonds via
lib/fundingCalculation.ts - Agrégation de toutes les commissions (articles, avis, sponsoring)
- Description de l'usage des fonds pour le développement IA
Calcul des fonds (lib/fundingCalculation.ts)
- Estimation basée sur les taux de commission
- Agrégation des zap receipts par type (purchase, review_tip, sponsoring)
- Calcul du pourcentage de progression vers la cible
Flux de paiement article
- Lecteur clique "Unlock for 800 sats"
- Création invoice Lightning via Alby/WebLN (
lib/articleInvoice.ts) - Publication zap request sur Nostr (NIP-57)
- Lecteur paie l'invoice
- Polling vérification zap receipt (
lib/paymentPolling.ts) - Envoi automatique contenu privé (message chiffré NIP-04,
lib/articlePublisher.ts) - Tracking livraison avec commissions (
lib/platformTracking.ts)
Flux de sponsoring
- Utilisateur demande sponsoring 0.046 BTC (
lib/sponsoringPayment.ts) - Service calcule split (0.042/0.004 BTC)
- Retourne deux adresses Bitcoin (auteur + plateforme)
- Utilisateur crée transaction avec deux sorties
- Vérification via mempool.space (
lib/mempoolSpace.ts) - Tracking sur Nostr (
lib/sponsoringTracking.ts)
Vérification livraison contenu
Le système vérifie l'envoi du contenu privé à trois niveaux :
- Publication :
publishEvent()retourne l'ID de l'événement publié - Vérification relay :
verifyPrivateMessagePublished()confirme présence sur relay (timeout 5s) - Tracking : Événement Nostr (kind 30078) avec
verified: true/false
Tous les événements sont loggés avec IDs, timestamps et statuts.
Limitations
Transferts Lightning automatiques : Nécessitent un nœud Lightning de la plateforme. Actuellement, les transferts sont loggés dans lib/automaticTransfer.ts et peuvent être exécutés manuellement. Les adresses Lightning sont récupérées automatiquement depuis les profils Nostr.