# Partage des Rewards entre Miner et Relay ## Vue d'ensemble Cette fonctionnalité permet au miner signet de partager automatiquement les rewards de bloc avec le relay. Quand le miner gagne un bloc, il envoie une partie des rewards (configurable) au relay. ## Configuration ### Variables d'environnement Dans le fichier `miner/miner.env` : ```bash # Adresse du miner pour recevoir sa part des rewards COINBASE_ADDRESS=tb1qminer123456789012345678901234567890 # Adresse du relay pour recevoir sa part des rewards RELAY_ADDRESS=tb1qrelay123456789012345678901234567890 # Ratio de partage (0.0 = 0%, 0.5 = 50%, 1.0 = 100%) REWARD_SPLIT_RATIO=0.5 ``` ### Paramètres de ligne de commande Le miner accepte également ces paramètres : ```bash --relay-address ADDRESS # Adresse du relay --reward-split-ratio RATIO # Ratio de partage (0.0-1.0) ``` ## Fonctionnement ### Mécanisme de partage 1. **Détection du bloc** : Le miner détecte qu'il a gagné un bloc 2. **Calcul des rewards** : Le reward total est divisé selon le ratio configuré 3. **Création de la coinbase** : La transaction coinbase est créée avec deux sorties : - Sortie 1 : Reward pour le miner (1 - ratio) - Sortie 2 : Reward pour le relay (ratio) ### Exemple de partage Avec `REWARD_SPLIT_RATIO=0.5` et un reward de bloc de 5 BTC : - **Miner** : 2.5 BTC (50%) - **Relay** : 2.5 BTC (50%) ## Code modifié ### Fonction `create_coinbase` ```python def create_coinbase(height, value, spk, miner_tag='', relay_spk=None, reward_split_ratio=0.5): # ... code existant ... # Diviser les rewards entre miner et relay si relay_spk est fourni if relay_spk is not None and reward_split_ratio > 0: miner_value = int(value * (1 - reward_split_ratio)) relay_value = int(value * reward_split_ratio) cb.vout = [ CTxOut(miner_value, spk), # Reward pour le miner CTxOut(relay_value, relay_spk) # Reward pour le relay ] logging.info(f"Coinbase split: miner={miner_value} sat, relay={relay_value} sat") else: cb.vout = [CTxOut(value, spk)] return cb ``` ### Gestion des adresses Le miner gère automatiquement les cas où : - L'adresse du relay n'est pas dans le wallet du miner - L'adresse du relay est invalide - Le wallet du relay n'est pas accessible Dans ces cas, le miner utilise une adresse simple pour éviter les erreurs. ## Logs Le miner affiche des logs détaillés : ``` 2025-09-20 02:03:20 INFO Coinbase split: miner=2500000000 sat, relay=2500000000 sat ``` ## Tests ### Test de base 1. Démarrer le miner avec `REWARD_SPLIT_RATIO=0.5` 2. Vérifier les logs pour confirmer le partage 3. Vérifier que la transaction coinbase a deux sorties ### Test avec différents ratios - `REWARD_SPLIT_RATIO=0.0` : Pas de partage (comportement original) - `REWARD_SPLIT_RATIO=0.5` : Partage égal (50/50) - `REWARD_SPLIT_RATIO=1.0` : Tout au relay (100%) ## Avantages 1. **Automatique** : Le partage se fait automatiquement à chaque bloc 2. **Configurable** : Le ratio peut être ajusté selon les besoins 3. **Robuste** : Gestion des erreurs et des cas limites 4. **Transparent** : Logs détaillés pour le suivi ## Limitations 1. **Adresses externes** : Les adresses du relay doivent être valides 2. **Wallet du miner** : Le miner doit avoir accès à son wallet 3. **Réseau** : Fonctionne uniquement en mode signet ## Utilisation Pour activer le partage des rewards : 1. Configurer `RELAY_ADDRESS` dans `miner/miner.env` 2. Définir `REWARD_SPLIT_RATIO` (ex: 0.5 pour 50%) 3. Redémarrer le miner 4. Surveiller les logs pour confirmer le fonctionnement ## Exemple de configuration complète ```bash # miner/miner.env COINBASE_ADDRESS=tb1qminer123456789012345678901234567890 RELAY_ADDRESS=tsp1qqfzxxz9fht9w8pg9q8z0zseynt2prapktyx4eylm4jlwg5mukqg95qnmm2va956rhggul4vspjda368nlzvufahx70n67z66a2vgs5lspytmuvty REWARD_SPLIT_RATIO=0.5 ``` Cette configuration partagera 50% des rewards avec le relay à chaque bloc miné.