Traduction de https://launchpad.ethereum.org/en/withdrawals par Disiaque

Depuis la mise à jour Shanghai/Capella, les retraits ont été activés sur la Beacon Chain grâce à l’inclusion de l’EIP-4895. Cette proposition d’amélioration d’Ethereum permet aux récompenses du staking d’être automatiquement retirées vers la couche d’exécution, et offre également un moyen aux validateurs sortis de débloquer l’intégralité de leur solde sans dépenser de gaz.

Activation des retraits

Pour que votre validateur soit capable de réaliser des retraits de toute nature, une adresse de retrait doit être fournie et enregistrée sur votre compte sur la Beacon Chain. Cette adresse doit être sous votre contrôle et ne peut être modifiée une fois qu’elle est enregistrée.

Validateurs actuels Nouveaux validateurs
(pas encore déposés)
Suivant  la manière dont vous avez effectué votre dépôt initial, votre compte peut ou non être prêt pour les retraits :

> Ligne de commande (= CLI) : si vous avez utilisé le paramètre « –eth1_withdrawal_address » lors de la génération de vos clés, vous êtes prêt.

> Interface graphique Wagyu Key Gen (= GUI) : si vous avez fourni une adresse de retrait lors de la génération de vos clés (sous le « mode avancé »), vous êtes prêt.
Si vous vous apprêtez à effectuer un dépôt pour activer un nouveau validateur, vous pouvez (et devriez) fournir une adresse de retrait avec votre dépôt initial. Cela se fait au moment de la génération de la clé et elle est ensuite inclue dans votre fichier “deposit_data-<timestamp>.json”, qui est soumis avec votre transaction de dépôt de 32 ETH.

Suivant la méthode que vous utilisez pour générer vos clés :

> Ligne de commande (= CLI) : vous pouvez utiliser le paramètre –eth1_withdrawal_address lors de la génération de vos clés.

> Interface graphique Wagyu Key Gen (= GUI) : ce logiciel est en cours de mise à jour pour exiger des utilisateurs qu’ils fournissent une adresse de retrait lors de la génération de clés. En attendant, vous devrez peut-être vérifier les options avancées lors de la configuration pour entrer une adresse. En fournissant ce paramètre, vos informations de retrait contiendront le préfixe 0x01 et votre adresse, indiquant que votre compte est prêt pour les retraits.

Comment mettre à jour les clés du validateur

Si votre compte de validateur possède encore les informations de retrait BLS (0x00), un message unique doit être diffusé indiquant quel compte de couche d’exécution doit être utilisé pour tous les retraits.

⚠️ 0x00 = « Type 0 » = clés BLS = Anciennes informations de retrait : non éligible pour les retraits

✅ 0x01 = « Type 1 » = clés d’exécution = Nouvelles informations de retrait : retraits activés

Veuillez noter que vos informations de retrait (= withdrawal credential) ne sont pas identiques à celles de votre réception de frais (= fees recipient), qui reçoit les frais de transaction des propositions. Les deux peuvent être définies à la même adresse, mais doivent être définies séparément.

Outils disponibles pour générer un message de modification de clé
Ligne de commande – Tutoriel Launchpad
ethdo – Modification des informations de retrait 

Ces outils vous aideront à générer les clés et le message nécessaires à la signature. Les messages signés peuvent être diffusés pour être inclus dans des blocs à partir de la mise à jour Shanghai/Capella. Cela nécessite l’utilisation de votre phrase mnémonique de récupération, et devrait être effectué sur une machine hors ligne.

File d’attente de changement de BLS vers l’exécution (= BTEC)

Une des files d’attente à noter est celle qui limite le nombre d’adresses de retrait BLS (0x00) pouvant être mises à jour vers une adresse d’exécution (0x01) pendant un bloc donné. Cette étape est effectuée en signant un message appelé “BLSToExecutionChange”. Ces derniers sont acceptés dans les blocs à partir du premier slot après la mise à jour Shanghai/Capella.

Ces messages sont limités à 16 par bloc (MAX_BLS_TO_EXECUTION_CHANGES), donc si plus de 16 demandes sont effectuées en même temps, une file d’attente sera formée et ces demandes seront traitées dans les blocs suivants. Cela signifie qu’immédiatement après la mise à jour Shanghai/Capella, les utilisateurs soumettant ce message peuvent subir des retards pouvant aller jusqu’à 2-3 jours avant que cette demande ne soit traitée.

Heureusement, il ne s’agit que d’un message unique qui doit être traité, et les validateurs qui ont fourni des informations de retrait au moment du dépôt sont exemptés de cette étape. Une fois terminé, votre validateur est activé de manière permanente pour les retraits.

Retraits de solde excédentaire (= retraits partiels)

Un retrait de solde excédentaire est effectué lorsqu’un validateur actif atteint le solde effectif maximum de 32 ETH, mais que son solde total (solde effectif + récompenses) est supérieur à 32 ETH. Dans ce cas, le validateur ne peut plus recevoir de récompenses sur le solde excédentaire et tout solde supplémentaire est automatiquement retiré vers son adresse Ethereum.

Ces retraits sont également appelés « retraits partiels » ou « paiements de récompenses », car les 32 ETH restants sont verrouillés et mis en jeu.

Il n’est pas possible de demander manuellement le retrait d’un montant spécifique d’ETH.

Sortir du staking (= retraits complets)

Un retrait complet est effectué pour tout validateur désactivé qui ne participe plus au staking et qui a entièrement cessé d’exercer ses responsabilités de validation. Ainsi, pour qu’un validateur puisse retirer complètement son solde, il doit d’abord terminer le processus de sortie.

Pour sortir du staking et retirer complètement votre solde restant, vous devez effectuer deux actions :
> Assurez-vous d’avoir mis à jour vos informations de retrait en ajoutant une adresse d’exécution pour les retraits.
> Signalez votre intention de sortir du staking en signant et en diffusant un message de sortie volontaire sur le réseau à l’aide de vos clés de validateur et de votre client de validation.

En effectuant la première étape, vous pourrez effectuer des retraits depuis votre compte de validateur. Cela déclenchera automatiquement le traitement des paiements de solde excédentaire (= retraits partiels), mais cela ne déverrouillera pas automatiquement le reste de vos fonds ni ne déclenchera une sortie du réseau

Si vous souhaitez sortir votre validateur du jeu et retirer votre ETH, consultez les guides correspondant à votre configuration ci-dessous :
> Clients de consensus :
Sortir d’un validateur Lighthouse
Sortir d’un validateur Lodestar
Sortir d’un validateur Nimbus
Sortir d’un validateur Prysm
Sortir d’un validateur Teku
> Autres outils de nœud :
Sortir d’un validateur DAppNode
Sortir d’un validateur eth-docker
Sortir d’un mini-pool Rocket Pool

Pour rendre un compte éligible à un retrait complet, le compte du validateur doit d’abord être sorti du staking. Les comptes des validateurs peuvent être sortis du staking de deux manières principales: volontairement ou de force.

  • Toute personne souhaitant mettre fin à ses obligations de staking peut signer un message de « sortie volontaire » qui est ensuite diffusé à la Beacon Chain pour commencer le processus. C’est une étape manuelle.
  • Les comptes qui ont été punis, ou qui ont un solde insuffisant, seront forcés de sortir selon les règles du réseau. C’est automatique et ne peut pas être arrêté une fois initié.

Toute sortie, volontaire ou non, doit être traitée via la file d’attente de sortie. Elle n’est pas instantanée et dépend des autres comptes qui sortent en même temps.

📝 Les validateurs doivent toujours remplir leurs obligations de validation jusqu’à ce qu’ils soient sortis.

Une fois qu’un validateur est sorti et que son solde complet a été retiré, tout dépôt supplémentaire effectué sur ce validateur sera automatiquement transféré à l’adresse de retrait lors du prochain balayage du validateur. Pour staker à nouveau de l’ETH, un nouveau validateur doit être activé.

Mécaniques de retrait : comment fonctionnent-elles ?

Retraits sont des opérations, pas un nouveau type de transaction

Les utilisateurs d’Ethereum sont habitués à ce que les transactions soient exécutées de manière manuelle – si vous souhaitez transférer des fonds, vous devez signer une transaction et payer le gaz.

L’EIP-4895, intitulé Beacon chain push withdrawals as operations, met en œuvre un design qui simplifie l’ensemble de ce processus pour les validateurs.

Au lieu d’un nouveau type de transaction utilisé par les  validateurs demandant manuellement des retraits, les comptes sont automatiquement vérifiés tous les quelques jours pour un éventuel solde excédentaire éligible. Tous les validateurs sont vérifiés en boucle infinie, et toutes les récompenses disponibles ou les fonds sortis sont automatiquement transférés dans un compte de retrait fourni.

File d’attente des retraits

La file d’attente de retraits est automatiquement remplie et traitée par les validateurs proposant des blocs, qui vérifient automatiquement toutes les récompenses disponibles via un mécanisme de balayage.

En boucle infinie, chaque validateur est évalué pour identifier s’il est  éligible pour un retrait d’ETH (dont il existe deux types, plus d’informations ci-dessous). Les validateurs sont traités dans l’ordre de leur numéro d’index, commençant à l’origine à 0, chaque proposant suivant reprenant là où le dernier s’est arrêté.

Lorsqu’un validateur est programmé pour proposer le prochain bloc, il effectue un balayage des comptes de validateur à la recherche de retraits éligibles. Au cours du balayage, le validateur vérifie au maximum 16 384 comptes, en essayant de trouver 16 retraits disponibles à traiter dans le prochain bloc.

Comme une aiguille d’horloge, ce processus progresse dans une direction, et lorsque le dernier validateur est atteint, le balayage recommence depuis le début. À chaque en cours de balayage, le compte est évalué pour des retraits potentiels.

📝 Notez que les deux files d’attente « BLS-to-execution » et « retrait » sont indépendantes et ne rentrent pas en compétition. Chacune est limitée sur une base par bloc.

Époque de sortie et époque de retrait

Immédiatement après la diffusion d’un message de sortie volontaire signé, les valeurs d’époque de sortie et d’époque de retrait sont calculées en fonction du numéro d’époque actuel. Ces valeurs déterminent exactement quand le validateur ne sera plus requis pour être en ligne pour effectuer une validation et quand le validateur est éligible pour un retrait complet.

  • Époque de sortie. Époque à laquelle votre validateur n’est plus actif, ne gagne plus de récompenses et n’est plus soumis aux règles de slashing. Cette époque est déterminée par la première époque disponible qui n’est pas déjà remplie avec d’autres validateurs sortants (la limite de taux dépend du nombre total de validateurs sur le réseau) et doit être d’au moins quatre époques après le début de la sortie. Jusqu’à cette époque (pendant qu’il est « dans la file d’attente »), votre validateur doit être en ligne et est soumis aux mêmes règles de slashing qu’auparavant. Ne désactivez pas votre validateur avant d’avoir atteint cette époque.
  • Époque de retrait. Époque à laquelle vos fonds de validation sont éligibles pour un retrait complet lors du prochain balayage des validateurs. Cela se produit 256 époques après l’époque de sortie, ce qui prend environ 27,3 heures.

Une fois qu’un message de sortie volontaire signé est diffusé, cela prend :

  • Au moins ~25 minutes (quatre époques) à partir de l’époque actuelle avant d’atteindre l’époque de sortie (sans autres validateurs dans la file d’attente, très variable)
  • Ensuite, environ ~27 heures (256 époques) avant que ces fonds ne soient marqués comme retirables
  • Ensuite, jusqu’à quelques jours supplémentaires pour que le prochain balayage des validateurs exécute le retrait complet (en vérifiant les informations de retrait 0x01)

Le délai de cette dernière étape est variable en fonction de l’indice du validateur, de la position actuelle du balayage et du nombre de validateurs. Plus d’informations sur la fréquence des paiements ci-dessous.

Notez qu’une fois qu’un utilisateur possède des informations de retrait 0x01 et a diffusé une sortie volontaire, aucune autre action n’est requise jusqu’à ce que le traitement soit terminé.

Comment chaque validateur est évalué pour les retraits

Un arbre de décision est suivi pour déterminer le type de retrait qui sera initié pour chaque validateur. Si le validateur en question a de l’ETH éligible pour le retrait, il est ajouté à la file d’attente de retrait. Sinon, le compte est ignoré.

  1. Une adresse de retrait a-t-elle été fournie ?
  • Si oui, passer à la question suivante
  • Sinon, arrêter. Aucun retrait ne sera traité et le compte sera ignoré
  1. Le validateur a-t-il terminé le processus de sortie ?
  • Si oui, arrêter. Le retrait complet est traité pour tout solde restant
  • Sinon, passer à la question suivante
  1. Le solde effectif est-il maximisé à 32 ?
  • Si oui, un retrait de solde excédentaire est traité
  • Sinon, aucun retrait ne sera traité et le compte sera ignoré

Le producteur de blocs vérifie ensuite le validateur suivant dans la file d’attente, et détermine à nouveau si un retrait doit être traité ou non. Ce processus est répété jusqu’à ce que 16 retraits éligibles aient été trouvés, ou jusqu’à ce que 16 384 validateurs aient été vérifiés, selon la première occurrence. À ce stade, la file d’attente de retrait est envoyée à la couche d’exécution pour être incluse à la fin du prochain bloc.

Quels facteurs affectent la fréquence des paiements ?

La durée du cycle nécessaire pour vérifier chaque compte dépend de plusieurs éléments :

  • Les limites de taux définies dans la file d’attente des retraits (soumises à des tests avant Shanghai) :
    • MAX_WITHDRAWALS_PER_PAYLOAD : 16 (2⁴) Nombre maximum de retraits pouvant être traités dans un seul bloc
    • MAX_VALIDATORS_PER_WITHDRAWALS_SWEEP : 16 384 (2¹⁴) Nombre maximum de comptes pouvant être vérifiés dans un bloc. La vérification s’arrête lorsque 16 retraits éligibles sont trouvés. Si aucun retrait éligible n’est trouvé dans les 16 384 premiers comptes vérifiés, la file d’attente des retraits pour ce bloc sera soumise telle quelle, et le proposant suivant reprendra là où elle s’est arrêtée.
  • Le nombre total de comptes de validateurs (compte d’index, tous les comptes de validateurs jamais enregistrés, montée en puissance au fil du temps)
  • Le nombre total de comptes de validateurs avec des retraits éligibles (variable)
    • Les comptes sans informations de retrait mises à jour seront ignorés
    • Les comptes ayant déjà effectué un retrait complet et ayant un solde nul seront ignorés
    • Les comptes actifs ayant un solde effectif ou total inférieur à 32 seront ignorés
  • Le nombre d’emplacements vides (opportunités manquées de blocs, variable, généralement minimes)
  • Le timing des slots de la couche de consensus : 12 secondes (aucun plan de changement n’est prévu)

Cela peut être résumé pour estimer la limite supérieure du temps nécessaire pour effectuer un balayage complet en fonction du nombre de retraits nécessitant un traitement :

Nombre de retraits Temps nécessaire
400,000
3.5 jours
500,000 4.3 jours
600,000 5.2 jours
700,000 6.1 jours
800,000 7 jours

Pour suivre Ethereum-France