|
| 1 | +# Récompenses des validateurs |
| 2 | +!!! warning "En me connectant à DoubleZero, j'accepte les [Conditions d'utilisation de DoubleZero](https://doublezero.xyz/terms-protocol)" |
| 3 | + |
| 4 | +Les validateurs qui publient des leader shreds vers DoubleZero Edge reçoivent des récompenses à chaque époque. Avant que les récompenses puissent être versées, chaque validateur doit enregistrer **où** les récompenses sont envoyées en configurant un compte `ValidatorPublisherRewards` sur Solana. Ce compte stocke : |
| 5 | + |
| 6 | +- le **mint des récompenses** — le jeton dans lequel les récompenses sont versées, 2z (sauf modification manuelle) |
| 7 | +- le **propriétaire des récompenses** — le portefeuille qui détient le compte de jetons associé (ATA) recevant les récompenses |
| 8 | + |
| 9 | +La commande `configure` définira ces champs, et les versements automatiques se feront époque par époque par la suite. Vous pouvez relancer `configure` ultérieurement pour modifier l'un ou l'autre champ. |
| 10 | + |
| 11 | +!!! info "Si vous n'avez pas encore terminé la [Configuration](setup.md), la [Connexion Validateur Mainnet-Beta](DZ%20Mainnet-beta%20Connection.md) et la [Connexion Multicast Validateur](Validator%20Multicast%20Connection.md), faites-le d'abord." |
| 12 | + |
| 13 | +## Prérequis |
| 14 | + |
| 15 | +- Validateurs publiant des leader shreds — voir [Connexion Multicast Validateur](Validator%20Multicast%20Connection.md). |
| 16 | +- La dernière version du CLI `doublezero-solana` : `sudo apt update && sudo apt install doublezero-solana`, au minimum `0.5.6`. |
| 17 | +- Accès à la **paire de clés d'identité du validateur**, soit sur la même machine, soit conservée hors ligne avec la possibilité de signer un message. |
| 18 | +- Une clé publique de portefeuille de destination qui détiendra l'ATA des récompenses. |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## 1. Choisir un chemin d'authentification |
| 23 | + |
| 24 | +La configuration du compte de récompenses nécessite une autorisation de la clé d'identité du validateur. Il existe deux façons de la fournir : |
| 25 | + |
| 26 | +| Chemin | Quand l'utiliser | |
| 27 | +|---|---| |
| 28 | +| **Direct** | La paire de clés d'identité du validateur se trouve sur la machine depuis laquelle vous exécutez les commandes. | |
| 29 | +| **Hors chaîne** | La paire de clés d'identité du validateur est conservée hors ligne ou sur une machine distincte de celle du portefeuille payeur de frais. | |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +## 2a. Chemin direct |
| 34 | + |
| 35 | +Exécutez `configure` avec la paire de clés d'identité du validateur en tant que `-k`. |
| 36 | + |
| 37 | +```bash |
| 38 | +doublezero-solana shreds publisher-rewards configure \ |
| 39 | + --node-id <ValidatorIdentity111111111111111111111111111> \ |
| 40 | + --rewards-token-owner <Wallet567Identity111111111111111111111111111> \ |
| 41 | + -k <path-to-validator-identity-keypair.json> |
| 42 | +``` |
| 43 | +Exemple de sortie |
| 44 | +```bash |
| 45 | +Shred subscription - Configure Validator Publisher Rewards |
| 46 | +Node ID: ValidatorIdentity111111111111111111111111111 |
| 47 | +Rewards owner: ValidatorIdentity111111111111111111111111111 |
| 48 | +Rewards mint: J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd |
| 49 | +Rewards ATA: 11111111111Pt3PatTj59dG5BhYuqPb9QJDUr1111111 |
| 50 | +Auth path: direct |
| 51 | +Configured validator publisher rewards: 41111111ntmoBTnvcKcP1g2a1111111HPoN3z5uf11111112jjzBJsr1B2JrTRff4dSGe1pdM1111111TMADi3Nz |
| 52 | +``` |
| 53 | +`Configured validator publisher rewards: ` affiche la transaction que vous pouvez consulter dans un explorateur de blocs. |
| 54 | + |
| 55 | +| Drapeau | Description | |
| 56 | +|---|---| |
| 57 | +| `--node-id` | Clé publique d'identité du nœud validateur. | |
| 58 | +| `--rewards-token-owner` | Portefeuille qui détiendra l'ATA recevant les récompenses. | |
| 59 | +| `--rewards-token-mint` | Le jeton dans lequel les récompenses seront reçues, `2z`. Les jetons pris en charge incluent également `usdc` et `wsol`. | |
| 60 | +| `-k` | Chemin vers la paire de clés d'identité du validateur. Sur le chemin direct, la clé publique de la paire de clés doit correspondre à `--node-id`, sinon la commande échouera et vous indiquera de passer au chemin hors chaîne. | |
| 61 | + |
| 62 | +L'ATA est automatiquement initialisé dans la même transaction s'il n'existe pas encore. |
| 63 | + |
| 64 | +Passez directement à l'[étape 3](#3-verifier-la-configuration). |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## 2b. Chemin hors chaîne |
| 69 | + |
| 70 | +Trois sous-étapes : préparer, signer, configurer. |
| 71 | + |
| 72 | +### 2b.i. Préparer le message hors chaîne |
| 73 | + |
| 74 | +Exécutez ceci n'importe où — c'est en lecture seule et ne nécessite pas la paire de clés d'identité du validateur. La commande affiche le blob hexadécimal à signer et le slot absolu auquel la signature expire. |
| 75 | + |
| 76 | +```bash |
| 77 | +doublezero-solana shreds publisher-rewards prepare-offchain-message \ |
| 78 | + --node-id <ValidatorIdentity111111111111111111111111111> \ |
| 79 | + --rewards-token-owner <Wallet567Identity111111111111111111111111111> \ |
| 80 | + --valid-for 1h |
| 81 | +``` |
| 82 | +Exemple de sortie |
| 83 | + |
| 84 | +```bash |
| 85 | +Hex message: 123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3 |
| 86 | +Deadline slot: 422954444 |
| 87 | + |
| 88 | +Sign with: |
| 89 | + solana sign-offchain-message 123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3 --keypair <validator-identity> |
| 90 | + |
| 91 | +Then submit: |
| 92 | + doublezero-solana shreds publisher-rewards configure \ |
| 93 | + --node-id ValidatorIdentity111111111111111111111111111 --rewards-token-mint J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd --rewards-token-owner Wallet567Identity111111111111111111111111111 \ |
| 94 | + --deadline-slot 422954444 --signature <BASE58> |
| 95 | +``` |
| 96 | + |
| 97 | + |
| 98 | +| Drapeau | Description | |
| 99 | +|---|---| |
| 100 | +| `--node-id` | Clé publique d'identité du nœud validateur. | |
| 101 | +| `--rewards-token-owner` | Portefeuille qui détiendra l'ATA recevant les récompenses. | |
| 102 | +| `--rewards-token-mint` | Le jeton dans lequel les récompenses seront reçues, `2z`. Les jetons pris en charge incluent également `usdc` et `wsol`. | |
| 103 | +| `--valid-for` | Durée de vie de la signature relative au slot actuel. Accepte `<n>s`, `<n>m` ou `<n>h`. Par défaut : `1h`. | |
| 104 | +| `--deadline-slot` | Alternative à `--valid-for` : slot absolu auquel l'autorisation expire. Mutuellement exclusif avec `--valid-for`. | |
| 105 | +| `--json` | Émet du JSON (`{ hex, deadline_slot }`) au lieu du résumé lisible. | |
| 106 | + |
| 107 | +La commande affiche le message d'authentification encodé en hexadécimal, le slot limite résolu et des extraits de commandes shell prêts à l'emploi pour les deux étapes suivantes. |
| 108 | + |
| 109 | +### 2b.ii. Signer le message |
| 110 | + |
| 111 | +Sur la machine qui détient la paire de clés d'identité du validateur : |
| 112 | + |
| 113 | +```bash |
| 114 | +solana sign-offchain-message <123457fc138f556a2578bdb079dc923342cc4e4a376683dc4c6cb923051e0be3> \ |
| 115 | +--keypair <path-to-validator-identity-keypair.json> |
| 116 | +``` |
| 117 | + |
| 118 | +Cela affiche une signature en base58. |
| 119 | + |
| 120 | +Exemple de sortie |
| 121 | + |
| 122 | +```bash |
| 123 | +SignatureTBUwGq511mPLMCEE4f5fNsmX1PQrozXBBJeCdSrcbhqSX1MwFp8NsNZbhCNMZ1kPWakjsLL9e3GUxxp |
| 124 | +``` |
| 125 | + |
| 126 | +### 2b.iii. Soumettre `configure` |
| 127 | + |
| 128 | +De retour sur la machine avec votre portefeuille payeur de frais : |
| 129 | + |
| 130 | +```bash |
| 131 | +doublezero-solana shreds publisher-rewards configure \ |
| 132 | + --node-id <ValidatorIdentity111111111111111111111111111> \ |
| 133 | + --rewards-token-owner <Wallet567Identity111111111111111111111111111> \ |
| 134 | + --signature <SignatureTBUwGq511mPLMCEE4f5fNsmX1PQrozXBBJeCdSrcbhqSX1MwFp8NsNZbhCNMZ1kPWakjsLL9e3GUxxp> \ |
| 135 | + --deadline-slot <DEADLINE_SLOT> |
| 136 | +``` |
| 137 | + |
| 138 | +`--signature` et `--deadline-slot` doivent être passés ensemble. Les valeurs doivent correspondre à celles produites aux étapes 2b.i et 2b.ii. |
| 139 | + |
| 140 | +L'ATA est automatiquement initialisé dans la même transaction s'il n'existe pas encore. |
| 141 | + |
| 142 | + |
| 143 | +Exemple de sortie |
| 144 | + |
| 145 | +```bash |
| 146 | +Shred subscription - Configure Validator Publisher Rewards |
| 147 | +Node ID: ValidatorIdentity111111111111111111111111111 |
| 148 | +Rewards owner: ValidatorIdentity111111111111111111111111111 |
| 149 | +Rewards mint: J6pQQ3FAcJQeWPPGppWRb4nM8jU3wLyYbRrLh7feMfvd |
| 150 | +Rewards ATA: 11111111111Pt3PatTj59dG5BhYuqPb9QJDUr1111111 |
| 151 | +Auth path: offchain |
| 152 | +Configured validator publisher rewards: 41111111ntmoBTnvcKcP1g2a1111111HPoN3z5uf11111112jjzBJsr1B2JrTRff4dSGe1pdM1111111TMADi3Nz |
| 153 | +``` |
| 154 | + |
| 155 | +--- |
| 156 | + |
| 157 | +## 3. Vérifier la configuration |
| 158 | + |
| 159 | +```bash |
| 160 | +doublezero-solana shreds publisher-rewards show --node-id <NODE_ID> |
| 161 | +``` |
| 162 | + |
| 163 | +La commande affiche le `Node ID`, le `Rewards owner`, le `Rewards mint`, l'adresse ATA résolue et le statut de l'ATA. Le **Resolved ATA** est l'adresse déterministe dérivée du propriétaire des récompenses + du mint des récompenses — c'est là que les récompenses seront déposées à chaque époque. |
| 164 | + |
| 165 | +--- |
| 166 | + |
| 167 | +## Dépannage |
| 168 | + |
| 169 | +### Chemin direct : la clé publique de `-k` ne correspond pas à `--node-id` |
| 170 | + |
| 171 | +La paire de clés du payeur de frais que vous avez fournie n'est pas l'identité du validateur. Passez soit la paire de clés d'identité du validateur en tant que `-k`, soit basculez vers le [chemin hors chaîne](#2b-chemin-hors-chaine). |
| 172 | + |
| 173 | +### Signature expirée |
| 174 | + |
| 175 | +Chaque signature hors chaîne a un slot limite. Si trop de temps s'écoule entre `prepare-offchain-message` et `configure`, relancez `prepare-offchain-message`, re-signez et re-soumettez. La validité par défaut est de 1 heure — prolongez avec `--valid-for 4h` ou similaire si vous avez besoin de plus de temps pour un processus de signature hors ligne. |
0 commit comments