Clients sans état : Une voie vers la décentralisation dans Ethereum

Débutant12/25/2023, 9:46:08 AM
Cet article présente en détail la solution décentralisée d'Ethereum, le client sans état, et explique ce qu'est l'état, ainsi que son contexte, ses principes et ses solutions.

Au fur et à mesure que l'utilisation d'Ethereum augmente, l'exploitation d'un nœud complet devient plus gourmande en ressources et en bande passante. De ce fait, moins de personnes sont en mesure de gérer des nœuds complets, ce qui réduit la décentralisation du réseau. En outre, Ethereum a du mal à s'adapter à l'augmentation de la demande de transactions, ce qui entraîne une congestion du réseau et des frais de gaz élevés.

Les clients apatrides proposés par Vitalik en 2017 offrent une solution potentielle aux deux défis de décentralisation auxquels Ethereum est confronté. L'idée principale des clients sans état est de réduire les besoins en stockage et en bande passante pour le fonctionnement d'un nœud complet, ce qui permet à un plus grand nombre de personnes de participer et de décentraliser le réseau. Cet essai propose un examen approfondi du fonctionnement des clients apatrides et de leurs avantages et inconvénients potentiels.

Qu'est-ce que l'état Ethereum ?

Pour comprendre les clients sans état, il faut d'abord comprendre le concept d'"état" dans Ethereum. L'état Ethereum fait référence à l'état actuel de tous les comptes, contrats, soldes, nonces et stockage dans le monde Ethereum. Il peut être considéré comme une base de données qui stocke toutes les informations pertinentes sur le réseau Ethereum à un moment donné.

L'état est conservé dans un Merkle Patricia trie, qui est essentiellement un arbre de Merkle modifié qui stocke des paires clé-valeur. Le hachage de la racine de ce triangle résume l'ensemble de l'état. Après chaque nouveau bloc, l'état est mis à jour en fonction des transactions effectuées dans ce bloc. Le nouveau hachage de la racine de l'état est inclus dans l'en-tête du bloc.

Au fur et à mesure que des comptes, des contrats et des transactions sont ajoutés, l'état Ethereum devient de plus en plus grand. Aujourd'hui, la taille de l'état est supérieure à 1 To et augmente de plusieurs dizaines de gigaoctets par an. Ce développement de l'État est à l'origine des problèmes liés à la décentralisation.

Pourquoi la croissance des États pose-t-elle des problèmes ?

L'augmentation de la taille des états d'Ethereum pose plusieurs problèmes majeurs :

  • Temps de synchronisation plus longs pour les nouveaux nœuds - Il faut un temps extrêmement long pour qu'un nouveau nœud se synchronise en traitant tous les changements d'état historiques. Cela entrave la décentralisation en rendant plus difficile l'exploitation de nouveaux nœuds complets. La synchronisation d'un nouveau nœud à partir de Genesis prend actuellement plusieurs jours, voire des semaines, sur du matériel grand public. Cela représente un obstacle majeur à la création efficace de nouveaux nœuds et à l'adhésion d'un plus grand nombre de participants au réseau.
  • Exigences accrues en matière de matériel - Un état plus important nécessite davantage de stockage, de mémoire et de puissance de traitement pour le stockage, l'accès et la mise à jour. Cela empêche les utilisateurs moins bien dotés en ressources d'exploiter des nœuds. Au minimum, l'exécution d'un nœud Ethereum entièrement synchronisé nécessite désormais un disque SSD d'une capacité de 1 à 2 To. Cela n'est pas à la portée de nombreux opérateurs de nœuds potentiels.
  • Utilisation accrue de la bande passante - Les diffusions de nouveaux blocs doivent également inclure l'état mis à jour, ce qui nécessite davantage de bande passante. Cela augmente les coûts pour les opérateurs de nœuds. Actuellement, l'État domine la plupart des diffusions de blocs, de sorte que la taille des blocs continue d'augmenter. Une plus grande largeur de bande se traduit par des coûts plus élevés pour les opérateurs de nœuds.
  • Vérification des blocs plus lente - La lecture et la mise à jour d'un état plus important ralentissent la vérification des blocs, ce qui limite le débit des transactions. Chaque transaction nécessite plusieurs lectures et écritures du stockage pour mettre à jour les soldes, les nonces, l'état du contrat, etc. Un état plus grand signifie plus de lectures/écritures par bloc, ce qui réduit le nombre de transactions pouvant être traitées par seconde.
  • Coûts de stockage permanent - Une fois que les données sont ajoutées à l'état, elles doivent être stockées pour toujours. Il en résulte une croissance illimitée de l'État. Il n'existe actuellement aucun mécanisme permettant de supprimer activement les données d'état anciennes et inutilisées. Les coûts de conservation de l'État augmentent donc indéfiniment tant qu'Ethereum continue à fonctionner.

Explication des clients sans état

Les clients sans état permettent de vérifier les nouveaux blocs sans avoir besoin d'accéder à l'état complet d'Ethereum. Ils utilisent des preuves cryptographiques appelées "témoins" qui prouvent la validité des changements d'état dans un bloc, sans disposer des données d'état sous-jacentes.

Voici comment fonctionnent les clients sans état à un niveau élevé :

  • Le client ne stocke que les en-têtes de bloc et les racines d'état, et non les données d'état complètes. Les en-têtes de bloc contiennent des métadonnées telles que le hachage de la racine de la table d'état après le traitement de ce bloc.
  • Lors de la vérification d'un nouveau bloc, le client reçoit un "témoin" en même temps que le bloc. Ce témoin est un ensemble de preuves Merkle qui démontrent que les mises à jour d'état spécifiques des transactions sont valides.
  • Le témoin contient des preuves Merkle des valeurs d'état spécifiques nécessaires au traitement des transactions. Par exemple, les soldes des comptes ou le stockage des contrats sont mis à jour.
  • Le client utilise le témoin pour s'assurer que les transactions sont valides par rapport à la dernière racine d'état connue. Les preuves authentifient que les changements d'état correspondent à la racine précédente.
  • S'il est valide, le client met à jour la nouvelle racine d'état fournie dans l'en-tête du bloc. Cette nouvelle racine d'état sera utilisée pour vérifier le bloc suivant.

En utilisant des témoins pour vérifier l'état au lieu de stocker l'état complet localement, les clients sans état bénéficient de plusieurs avantages :

  • Temps de synchronisation très rapide - pas besoin de rejouer les changements d'état historiques. Un client sans état peut se synchroniser presque instantanément avec les seuls en-têtes de bloc.
  • Faibles exigences en matière de stockage - les racines des états ne représentent que 32 octets. Au lieu de centaines de Go d'état, seuls des blocs d'en-tête sont nécessaires.
  • Moins de bande passante - seuls les en-têtes de bloc et les témoins sont transférés, et non l'état complet. L'utilisation de la bande passante est réduite au minimum.
  • Vérification rapide - les témoins ne contiennent que de petits sous-ensembles d'états pertinents. Seuls les comptes mis à jour/le stockage touché sont prouvés.
  • Prise en charge facile des clients légers - les clients légers peuvent facilement vérifier les preuves. Le modèle de client léger est très compatible avec la vérification sans état.

Défis posés par les clients sans état

Si les clients sans état présentent certains avantages majeurs, ils doivent également relever d'importants défis techniques :

  • Taille des témoins - les témoins peuvent être trop volumineux pour être transmis efficacement. Si des preuves de Merkle complètes sont utilisées, elles peuvent dépasser les limites de taille des blocs.
  • Création de témoins - la création de témoins optimaux est complexe pour les auteurs de propositions de blocs. Les proposants doivent rassembler les fragments de preuve adéquats pour vérifier chaque transaction.
  • Pas d'incitation pour les témoins - le fait de fournir des témoins ne donne lieu à aucune récompense directe. Contrairement à l'exploitation minière, il n'existe pas de structure d'incitation intégrée pour la création de témoins.
  • Données temporaires - les témoins prouvent leur état à un moment donné et doivent être régénérés. Les témoins ne peuvent pas être réutilisés au fur et à mesure que l'état progresse.
  • Stockage de l'état - quelqu'un doit encore maintenir l'état complet pour produire des témoins. La vérification sans état repose sur la génération de témoins avec état.
  • Applications complexes - certains contrats peuvent s'appuyer sur de grands sous-ensembles d'états, ce qui gonfle les témoins. Par exemple, les contrats qui mettent à jour de nombreux emplacements de stockage par transaction.

Solutions possibles

Les chercheurs ont proposé diverses solutions pour relever ces défis :

  • Arbres de Verkle - structures de données spéciales permettant de réduire la taille des témoins. Les arbres de Verkle utilisent des engagements cryptographiques succincts pour minimiser la taille de la preuve.
  • Caches de témoins - les proposants pourraient conserver des témoins récents afin de les réutiliser. La mise en cache des témoins susceptibles d'être réutilisés permet d'amortir les coûts de création.
  • Incitations au protocole - mécanismes de récompense pour la fourniture de témoins utiles. De nouvelles structures d'incitation pourraient compenser la création de témoins.
  • Racines à état intermédiaire - suivre les racines dans le temps pour éviter de régénérer les preuves. Le maintien de racines partielles pourrait permettre de réutiliser des fragments de témoins.
  • Location de l'État - exiger des paiements pour maintenir l'État à long terme, élaguer l'État inutilisé. Le loyer oblige à nettoyer le stockage périmé pour limiter la taille de l'épreuve.
  • Modèle de témoin partitionné - répartition de la gestion des états entre les proposants et les vérificateurs. Disposez de nœuds de proposition dédiés qui génèrent des témoins.

Il existe des compromis entre ces approches et des recherches supplémentaires sont nécessaires pour découvrir les mises en œuvre optimales. Heureusement, les innovations rapides dans le domaine de la cryptographie sans connaissance pourraient ouvrir de nouvelles possibilités pour des clients sans état efficaces.

Impact potentiel

Si les obstacles techniques peuvent être surmontés, les clients sans état pourraient faire progresser Ethereum de manière significative :

  • Des synchronisations et des vérifications plus rapides pour supporter un débit de transaction plus élevé. La validation sans état accélérera considérablement le traitement des blocs.
  • Réduction des besoins en ressources pour faire fonctionner les nœuds, ce qui améliore la décentralisation. Les ordinateurs portables et les amateurs pourraient, de manière réaliste, utiliser des nœuds complets.
  • Meilleure prise en charge des clients légers tels que les portefeuilles mobiles. Les preuves d'état sont très compatibles avec le modèle du client léger.
  • Introduction en douceur de la répartition des tâches (sharding), avec une vérification sans état entre les shards. Les transactions inter-barrières peuvent utiliser des preuves d'état efficaces.
  • Possibilité de supprimer et d'élaguer les anciennes données d'état qui ne sont plus utiles. La croissance de l'État peut être gérée activement au lieu d'être illimitée.
  • Plus de flexibilité pour les opérateurs de nœuds afin de personnaliser l'état en fonction des besoins. Les nœuds pourraient adapter les politiques de conservation des états aux cas d'utilisation.
  • Passer à un modèle où le calcul et la bande passante sont plus importants que le stockage. L'architecture évolue vers un modèle plus adapté à l'informatique dématérialisée.

Il existe également des risques potentiels, comme une vulnérabilité accrue aux attaques DDoS et le fait que l'historique de la blockchain ne soit stocké de manière fiable que par un petit nombre d'opérateurs de nœuds. Cependant, les preuves cryptographiques pourraient réduire ces risques. Dans l'ensemble, les clients sans état constituent l'une des approches les plus prometteuses pour surmonter les limites actuelles d'Ethereum.

Conclusion

La taille croissante de l'état d'Ethereum pose des problèmes de décentralisation au fur et à mesure de son adoption. Les clients sans état présentent une solution en permettant aux nœuds de vérifier les transactions sans disposer de l'état complet de la blockchain. Cela pourrait permettre aux téléphones portables d'exécuter des nœuds Ethereum, ce qui renforcerait considérablement la décentralisation.

Clause de non-responsabilité:

  1. Cet article est repris de[Mirror]. Tous les droits d'auteur appartiennent à l'auteur original[YQ]. Si vous avez des objections à cette réimpression, veuillez contacter l'équipe de Gate Learn, qui s'en chargera rapidement.
  2. Clause de non-responsabilité : Les points de vue et les opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent pas un conseil en investissement.
  3. Les traductions de l'article dans d'autres langues sont effectuées par l'équipe de Gate Learn. Sauf mention contraire, il est interdit de copier, distribuer ou plagier les articles traduits.

Clients sans état : Une voie vers la décentralisation dans Ethereum

Débutant12/25/2023, 9:46:08 AM
Cet article présente en détail la solution décentralisée d'Ethereum, le client sans état, et explique ce qu'est l'état, ainsi que son contexte, ses principes et ses solutions.

Au fur et à mesure que l'utilisation d'Ethereum augmente, l'exploitation d'un nœud complet devient plus gourmande en ressources et en bande passante. De ce fait, moins de personnes sont en mesure de gérer des nœuds complets, ce qui réduit la décentralisation du réseau. En outre, Ethereum a du mal à s'adapter à l'augmentation de la demande de transactions, ce qui entraîne une congestion du réseau et des frais de gaz élevés.

Les clients apatrides proposés par Vitalik en 2017 offrent une solution potentielle aux deux défis de décentralisation auxquels Ethereum est confronté. L'idée principale des clients sans état est de réduire les besoins en stockage et en bande passante pour le fonctionnement d'un nœud complet, ce qui permet à un plus grand nombre de personnes de participer et de décentraliser le réseau. Cet essai propose un examen approfondi du fonctionnement des clients apatrides et de leurs avantages et inconvénients potentiels.

Qu'est-ce que l'état Ethereum ?

Pour comprendre les clients sans état, il faut d'abord comprendre le concept d'"état" dans Ethereum. L'état Ethereum fait référence à l'état actuel de tous les comptes, contrats, soldes, nonces et stockage dans le monde Ethereum. Il peut être considéré comme une base de données qui stocke toutes les informations pertinentes sur le réseau Ethereum à un moment donné.

L'état est conservé dans un Merkle Patricia trie, qui est essentiellement un arbre de Merkle modifié qui stocke des paires clé-valeur. Le hachage de la racine de ce triangle résume l'ensemble de l'état. Après chaque nouveau bloc, l'état est mis à jour en fonction des transactions effectuées dans ce bloc. Le nouveau hachage de la racine de l'état est inclus dans l'en-tête du bloc.

Au fur et à mesure que des comptes, des contrats et des transactions sont ajoutés, l'état Ethereum devient de plus en plus grand. Aujourd'hui, la taille de l'état est supérieure à 1 To et augmente de plusieurs dizaines de gigaoctets par an. Ce développement de l'État est à l'origine des problèmes liés à la décentralisation.

Pourquoi la croissance des États pose-t-elle des problèmes ?

L'augmentation de la taille des états d'Ethereum pose plusieurs problèmes majeurs :

  • Temps de synchronisation plus longs pour les nouveaux nœuds - Il faut un temps extrêmement long pour qu'un nouveau nœud se synchronise en traitant tous les changements d'état historiques. Cela entrave la décentralisation en rendant plus difficile l'exploitation de nouveaux nœuds complets. La synchronisation d'un nouveau nœud à partir de Genesis prend actuellement plusieurs jours, voire des semaines, sur du matériel grand public. Cela représente un obstacle majeur à la création efficace de nouveaux nœuds et à l'adhésion d'un plus grand nombre de participants au réseau.
  • Exigences accrues en matière de matériel - Un état plus important nécessite davantage de stockage, de mémoire et de puissance de traitement pour le stockage, l'accès et la mise à jour. Cela empêche les utilisateurs moins bien dotés en ressources d'exploiter des nœuds. Au minimum, l'exécution d'un nœud Ethereum entièrement synchronisé nécessite désormais un disque SSD d'une capacité de 1 à 2 To. Cela n'est pas à la portée de nombreux opérateurs de nœuds potentiels.
  • Utilisation accrue de la bande passante - Les diffusions de nouveaux blocs doivent également inclure l'état mis à jour, ce qui nécessite davantage de bande passante. Cela augmente les coûts pour les opérateurs de nœuds. Actuellement, l'État domine la plupart des diffusions de blocs, de sorte que la taille des blocs continue d'augmenter. Une plus grande largeur de bande se traduit par des coûts plus élevés pour les opérateurs de nœuds.
  • Vérification des blocs plus lente - La lecture et la mise à jour d'un état plus important ralentissent la vérification des blocs, ce qui limite le débit des transactions. Chaque transaction nécessite plusieurs lectures et écritures du stockage pour mettre à jour les soldes, les nonces, l'état du contrat, etc. Un état plus grand signifie plus de lectures/écritures par bloc, ce qui réduit le nombre de transactions pouvant être traitées par seconde.
  • Coûts de stockage permanent - Une fois que les données sont ajoutées à l'état, elles doivent être stockées pour toujours. Il en résulte une croissance illimitée de l'État. Il n'existe actuellement aucun mécanisme permettant de supprimer activement les données d'état anciennes et inutilisées. Les coûts de conservation de l'État augmentent donc indéfiniment tant qu'Ethereum continue à fonctionner.

Explication des clients sans état

Les clients sans état permettent de vérifier les nouveaux blocs sans avoir besoin d'accéder à l'état complet d'Ethereum. Ils utilisent des preuves cryptographiques appelées "témoins" qui prouvent la validité des changements d'état dans un bloc, sans disposer des données d'état sous-jacentes.

Voici comment fonctionnent les clients sans état à un niveau élevé :

  • Le client ne stocke que les en-têtes de bloc et les racines d'état, et non les données d'état complètes. Les en-têtes de bloc contiennent des métadonnées telles que le hachage de la racine de la table d'état après le traitement de ce bloc.
  • Lors de la vérification d'un nouveau bloc, le client reçoit un "témoin" en même temps que le bloc. Ce témoin est un ensemble de preuves Merkle qui démontrent que les mises à jour d'état spécifiques des transactions sont valides.
  • Le témoin contient des preuves Merkle des valeurs d'état spécifiques nécessaires au traitement des transactions. Par exemple, les soldes des comptes ou le stockage des contrats sont mis à jour.
  • Le client utilise le témoin pour s'assurer que les transactions sont valides par rapport à la dernière racine d'état connue. Les preuves authentifient que les changements d'état correspondent à la racine précédente.
  • S'il est valide, le client met à jour la nouvelle racine d'état fournie dans l'en-tête du bloc. Cette nouvelle racine d'état sera utilisée pour vérifier le bloc suivant.

En utilisant des témoins pour vérifier l'état au lieu de stocker l'état complet localement, les clients sans état bénéficient de plusieurs avantages :

  • Temps de synchronisation très rapide - pas besoin de rejouer les changements d'état historiques. Un client sans état peut se synchroniser presque instantanément avec les seuls en-têtes de bloc.
  • Faibles exigences en matière de stockage - les racines des états ne représentent que 32 octets. Au lieu de centaines de Go d'état, seuls des blocs d'en-tête sont nécessaires.
  • Moins de bande passante - seuls les en-têtes de bloc et les témoins sont transférés, et non l'état complet. L'utilisation de la bande passante est réduite au minimum.
  • Vérification rapide - les témoins ne contiennent que de petits sous-ensembles d'états pertinents. Seuls les comptes mis à jour/le stockage touché sont prouvés.
  • Prise en charge facile des clients légers - les clients légers peuvent facilement vérifier les preuves. Le modèle de client léger est très compatible avec la vérification sans état.

Défis posés par les clients sans état

Si les clients sans état présentent certains avantages majeurs, ils doivent également relever d'importants défis techniques :

  • Taille des témoins - les témoins peuvent être trop volumineux pour être transmis efficacement. Si des preuves de Merkle complètes sont utilisées, elles peuvent dépasser les limites de taille des blocs.
  • Création de témoins - la création de témoins optimaux est complexe pour les auteurs de propositions de blocs. Les proposants doivent rassembler les fragments de preuve adéquats pour vérifier chaque transaction.
  • Pas d'incitation pour les témoins - le fait de fournir des témoins ne donne lieu à aucune récompense directe. Contrairement à l'exploitation minière, il n'existe pas de structure d'incitation intégrée pour la création de témoins.
  • Données temporaires - les témoins prouvent leur état à un moment donné et doivent être régénérés. Les témoins ne peuvent pas être réutilisés au fur et à mesure que l'état progresse.
  • Stockage de l'état - quelqu'un doit encore maintenir l'état complet pour produire des témoins. La vérification sans état repose sur la génération de témoins avec état.
  • Applications complexes - certains contrats peuvent s'appuyer sur de grands sous-ensembles d'états, ce qui gonfle les témoins. Par exemple, les contrats qui mettent à jour de nombreux emplacements de stockage par transaction.

Solutions possibles

Les chercheurs ont proposé diverses solutions pour relever ces défis :

  • Arbres de Verkle - structures de données spéciales permettant de réduire la taille des témoins. Les arbres de Verkle utilisent des engagements cryptographiques succincts pour minimiser la taille de la preuve.
  • Caches de témoins - les proposants pourraient conserver des témoins récents afin de les réutiliser. La mise en cache des témoins susceptibles d'être réutilisés permet d'amortir les coûts de création.
  • Incitations au protocole - mécanismes de récompense pour la fourniture de témoins utiles. De nouvelles structures d'incitation pourraient compenser la création de témoins.
  • Racines à état intermédiaire - suivre les racines dans le temps pour éviter de régénérer les preuves. Le maintien de racines partielles pourrait permettre de réutiliser des fragments de témoins.
  • Location de l'État - exiger des paiements pour maintenir l'État à long terme, élaguer l'État inutilisé. Le loyer oblige à nettoyer le stockage périmé pour limiter la taille de l'épreuve.
  • Modèle de témoin partitionné - répartition de la gestion des états entre les proposants et les vérificateurs. Disposez de nœuds de proposition dédiés qui génèrent des témoins.

Il existe des compromis entre ces approches et des recherches supplémentaires sont nécessaires pour découvrir les mises en œuvre optimales. Heureusement, les innovations rapides dans le domaine de la cryptographie sans connaissance pourraient ouvrir de nouvelles possibilités pour des clients sans état efficaces.

Impact potentiel

Si les obstacles techniques peuvent être surmontés, les clients sans état pourraient faire progresser Ethereum de manière significative :

  • Des synchronisations et des vérifications plus rapides pour supporter un débit de transaction plus élevé. La validation sans état accélérera considérablement le traitement des blocs.
  • Réduction des besoins en ressources pour faire fonctionner les nœuds, ce qui améliore la décentralisation. Les ordinateurs portables et les amateurs pourraient, de manière réaliste, utiliser des nœuds complets.
  • Meilleure prise en charge des clients légers tels que les portefeuilles mobiles. Les preuves d'état sont très compatibles avec le modèle du client léger.
  • Introduction en douceur de la répartition des tâches (sharding), avec une vérification sans état entre les shards. Les transactions inter-barrières peuvent utiliser des preuves d'état efficaces.
  • Possibilité de supprimer et d'élaguer les anciennes données d'état qui ne sont plus utiles. La croissance de l'État peut être gérée activement au lieu d'être illimitée.
  • Plus de flexibilité pour les opérateurs de nœuds afin de personnaliser l'état en fonction des besoins. Les nœuds pourraient adapter les politiques de conservation des états aux cas d'utilisation.
  • Passer à un modèle où le calcul et la bande passante sont plus importants que le stockage. L'architecture évolue vers un modèle plus adapté à l'informatique dématérialisée.

Il existe également des risques potentiels, comme une vulnérabilité accrue aux attaques DDoS et le fait que l'historique de la blockchain ne soit stocké de manière fiable que par un petit nombre d'opérateurs de nœuds. Cependant, les preuves cryptographiques pourraient réduire ces risques. Dans l'ensemble, les clients sans état constituent l'une des approches les plus prometteuses pour surmonter les limites actuelles d'Ethereum.

Conclusion

La taille croissante de l'état d'Ethereum pose des problèmes de décentralisation au fur et à mesure de son adoption. Les clients sans état présentent une solution en permettant aux nœuds de vérifier les transactions sans disposer de l'état complet de la blockchain. Cela pourrait permettre aux téléphones portables d'exécuter des nœuds Ethereum, ce qui renforcerait considérablement la décentralisation.

Clause de non-responsabilité:

  1. Cet article est repris de[Mirror]. Tous les droits d'auteur appartiennent à l'auteur original[YQ]. Si vous avez des objections à cette réimpression, veuillez contacter l'équipe de Gate Learn, qui s'en chargera rapidement.
  2. Clause de non-responsabilité : Les points de vue et les opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent pas un conseil en investissement.
  3. Les traductions de l'article dans d'autres langues sont effectuées par l'équipe de Gate Learn. Sauf mention contraire, il est interdit de copier, distribuer ou plagier les articles traduits.
Lancez-vous
Inscrivez-vous et obtenez un bon de
100$
!