Explorer les CryptoKitties - Partie 2: Les CryptoMidwives

Ceci est la deuxième partie d'un article de blog sur l'extraction et l'analyse des données de la blockchain Ethereum. Vous pouvez ignorer l’introduction si vous avez lu la partie 1

Intro

Si vous lisez ceci, vous avez probablement entendu parler du jeu qui a attiré l’attention de tout le monde sur le réseau Ethereum au cours des derniers mois: CryptoKitties!

En bref, le jeu consiste à collecter des chats virtuels. Les chats sont créés par les joueurs du jeu, qui peuvent en élever deux pour en générer un nouveau. Chaque chat a sa propre séquence génétique, qui détermine leurs attributs physiques. Leur génome est fonction des gènes de leurs parents et de quelques aléas. En plus de l'élevage, Axiom Zen, la société à l'origine du jeu, peut créer jusqu'à 50 000 chats aux caractéristiques prédéfinies. Il existe un marché pour l'achat et la vente de chats et un autre pour la «location» de chats à des fins de reproduction. Vous pouvez en savoir plus sur le jeu ici.

Block Science est une société de recherche et d'analyse en technologie spécialisée dans la conception et l'évaluation de systèmes économiques décentralisés. Analyser certains aspects de l’économie des CryptoKitties semblait être une excellente occasion d’améliorer nos outils d’extraction de données tout en mettant la main sur des données réelles issues d’une application décentralisée en direct (et dynamique!).

Cet article de blog a été divisé en deux parties:

  • La première partie couvre les aspects techniques liés à l'extraction et à la transformation des données de la blockchain Ethereum.
  • La partie 2 (cet article) contient l'analyse réelle de certaines données de jeu.

Analyser les données

Nous avons commencé notre analyse en créant un cadre de données contenant toutes les entrées de journal enregistrées entre les blocs 4605167 et 5374870 par les trois contrats intelligents CryptoKitties: la mécanique de base du jeu, la vente aux enchères et la vente aux enchères (où les joueurs «louent» leurs chats pour que les autres puissent se reproduire). ). À partir des chiffres (graphique 1), nous en arrivons à deux résultats intéressants:

Graphique 1 - Nombre de fréquences des événements CryptoKitties
  1. L'événement Enceinte se produit beaucoup plus souvent que l'événement AuctionSuccessful du contrat intelligent d'adjudication. Cela devrait signifier que l'essentiel de la reproduction a lieu entre des chats appartenant au même joueur, car nous savons d'après le code source du jeu que toute enchère réussie entraîne une grossesse; et
  2. L’événement de transfert n’est que 6% plus fréquent que la somme des événements qui l’entraînent. D'après le code source, nous savons que chaque enchère créée ou annulée, chaque naissance et chaque vente donnent lieu à un transfert. Cela signifie que 6% des transferts ont lieu par un mécanisme autre que les contrats intelligents officiels - tels que les joueurs offrant des chatons à des amis. Nous devrions voir ce pourcentage augmenter une fois que les nouveaux jeux construits sur CryptoKitties seront devenus suffisamment populaires pour que les joueurs commencent à perdre leurs chats lors de défis, par exemple; ou une fois que des échanges décentralisés avec des fonctionnalités de trading plus avancées apparaissent, permettant aux crypto-kitties d'être listés dessus.

L'économie de donner naissance à des chatons

Voyant l'existence d'une composante économique autour de la naissance de nouveaux chats, nous procédons à une étude plus approfondie de ce processus. Lorsque deux chats se reproduisent, une variable est définie sur la chatte gravée qui indique sur quel bloc la grossesse sera terminée. Cependant, il n’existe pas de minuterie inhérente au réseau Ethereum permettant à un morceau de code de s’exécuter automatiquement dans un certain bloc. Cela signifie que quelqu'un doit appeler une fonction dans le contrat de jeu intelligent qui «donne naissance» au nouveau chat. C'est le but de la fonction giveBirth: lorsqu'elle est appelée, elle vérifie si la grossesse est terminée. Ce n'est que lorsque la fonction giveBirth est appelée que les gènes de la progéniture sont déterminés par un algorithme à source fermée. Afin de réduire les risques que les joueurs jouent sur le système, les développeurs ont créé un mécanisme incitatif permettant d’appeler donBirth dès la fin de la grossesse.

Étant donné que cette fonction giveBirth () comprend un élément aléatoire, il est essentiel de l'appeler rapidement après la date prévue de l'accouchement (dans les 250 blocs, ou environ 30 minutes). Si l'appel prend plus de temps, il offre aux mauvais acteurs la possibilité de «relancer» l'élément aléatoire de leur combinaison génétique et d'obtenir un avantage injuste par rapport aux autres obtenteurs. Pour éviter que cela ne se produise, nous permettons à quiconque d'appeler giveBirth () et nous versons l'intégralité des frais de naissance au premier appelant qui accouche avec succès du nouveau chaton. (la source)

La mention d'une limite de 250 blocs implique que CryptoKitties utilise le hachage du bloc précédant le bloc de naissance attendu comme source d'entropie pour déterminer les gènes de nouveaux chatons. Les hachages de blocs ne sont disponibles pour l'EVM que pour 256 blocs (~ 250). Après cela, les appels à blockhash renvoient zéro. Cela signifie que si l'incitation pour les agents externes n'existait pas, un joueur pourrait simuler la naissance d'un nouveau chaton et, s'il n'aimait pas le résultat, attendre 256 blocs et essayer à nouveau.

Mise à jour (19 août 2018): la récente publication du document Erays nous porte à croire que cet incitatif économique est encore plus important que nous ne le pensions. Selon le journal, si la naissance survient après la période de 256 blocs, CryptoKitties n'utilise pas le "zéro" comme source d'entropie, mais plutôt le numéro de bloc actuel. Ce qui signifie qu'un attaquant obtiendrait non seulement une seconde relance, mais autant de relances qu'il le voudrait, simplement en simulant la naissance de son nouveau minou à différents blocs.

Ainsi, le jeu collecte des frais de chaque élevage (appelés frais de naissance) et permet à tout compte Ethereum de réclamer ces frais en appelant simplement la fonction giveBirth sur la chatte enceinte au (ou après) le bloc droit. Le nouveau chat va toujours chez le propriétaire du chat enceinte. Mais n'importe qui peut donner naissance à un chat dont la période de grossesse est terminée et être indemnisé.

Cela a conduit à l'émergence de «CryptoMidwives», comme les surnommait Michael Zargham: des agents qui, même s'ils ne sont pas eux-mêmes des joueurs du jeu, remplissent une fonction essentielle dans l'économie des CryptoKitties. Le concept n'est pas propre à CryptoKitties et pourrait être généralisé à «CryptoServices», un modèle de conception dans lequel le compte qui appelle certaines fonctions d'un contrat intelligent en est récompensé.

// Envoyer les frais de solde à la personne qui a fait la naissance.
msg.sender.send (autoBirthFee);

Le jeu de données du journal des événements nous montre que la plupart des naissances ne sont causées que par quelques comptes. Au début de l'histoire du jeu, les comptes associés à AxiomZen étaient les seuls à donner naissance à des chatons. Au fil du temps, d'autres comptes ont commencé à appeler la méthode giveBirth. Nous pouvons également constater que seules quelques sages-femmes représentent la plupart des naissances: la zone orange du graphique 2 représente les 5 premiers comptes sur 1 000 blocs (151 comptes au total). À l'exception d'un pic d'environ 4 700 000 blocs, AxiomZen et les principaux interlocuteurs représentent la grande majorité des naissances tout le temps.

Graphique 2 - Composition des appels réussis à donnerNaissance au fil du temps, par expéditeur de la transaction

Les pics d'activité d'AxiomZen semblent bien corrélés avec les moments d'augmentation du prix moyen du gaz des transactions Ethereum. C'était à prévoir, car l'augmentation des coûts liés à l'accouchement rend l'attrait moins attrayant pour les agents externes. En décembre, AxiomZen a augmenté les frais d'accouchement de 0,002 éther à 0,015 éther pendant quelques jours, puis a été ramené à 0,008 éther, ce qui a bien résisté au pic de janvier.

Source: https://etherscan.io/chart/gasprice

Lorsque nous enrichissons l'ensemble de données du journal des événements avec les informations provenant des transactions qui les ont générées, nous constatons qu'en général, les CryptoMidwives n'appellent pas directement la fonction giveBirth dans le contrat de jeu, mais passent plutôt par un contrat intelligent intermédiaire. Cela leur permet d'effectuer une transaction unique sur un contrat intelligent à source fermée, qui appelle à son tour la fonction giveBirth autant de fois qu'il est invité à le faire. Voir la transaction 0x6cc717fc… pour un exemple.

Graphique 3 - Composition des appels réussis à donnerNaissance au fil du temps, par destinataire de la transaction

Avec les données disponibles dans la blockchain, nous pouvons même nous pencher sur les revenus et la rentabilité de ces agents. Concentrons-nous sur les 10 meilleurs CryptoMidwives de 2018. Le compte 0x05be6e… est le premier rang en termes de nombre de naissances, nettement en avance sur la concurrence. Le compte 0xa21037… (appartenant à AxiomZen) arrive à la huitième place, ce qui est bien, car ils ne devraient agir qu'en dernier recours.

Graphique 4 - Nombre de chatons livrés par les 10 meilleurs CryptoMidwives de 2018

Depuis le 11 décembre, la récompense pour une naissance réussie est de 0,008 ETH. Avec cette information, nous pouvons calculer le revenu de chacun des 10 premiers CryptoMidwives.

Graphique 5 - Revenus des 10 meilleurs crypto-midwives de 2018

Cependant, donner naissance à des crypto kitties est payant. En outre, la concurrence sur ce marché est féroce! De nombreuses tentatives d’appel de donBirth «arrivent en retard» - c’est-à-dire que, lorsque la transaction est traitée par les mineurs, la chatte n’est plus enceinte car une autre transaction a été traitée en premier. Ces arrivées tardives ne consomment pas autant d’essence, mais pourraient quand même coûter beaucoup d’honoraires. En soustrayant tous ces frais des récompenses, nous en venons aux bénéfices de chaque sage-femme. Fait intéressant, le compte 0x80cfd2…, qui se classe au sixième rang des revenus, se démarque dans cet indicateur de performance. De toute évidence, ils doivent avoir trouvé un moyen d'économiser des frais, que ce soit par la conception de contrats intelligents, un meilleur timing de la diffusion de leurs transactions, un meilleur choix du prix de l'essence ou une combinaison de ces facteurs.

Graphique 6 - Bénéfices des 10 meilleurs crypto-midwives de 2018

Afin d'étudier l'hypothèse de conception de contrat intelligent, nous avons créé une métrique appelée «efficacité du code». C'est un simple ratio de chatons livrés par gaz utilisé. Si nous examinons les valeurs normalisées de l’efficacité moyenne du code pour les contrats intelligents utilisés par les principales sages-femmes de 2018 (graphique 7), nous constatons qu’il existe très peu de différence entre elles.

Graphique 7 - Efficacité du code des contrats intelligents utilisés par les meilleurs CryptoMidwives de 2018

Si, au lieu de définir l'efficacité en termes de gaz utilisé, nous le définissons en termes de bénéfice (bénéfice par chaton livré), nous constatons que le compte 0x80cfd2 est beaucoup moins efficace que le compte 0x05be6e (graphique 8). En supposant une efficacité de code similaire, cela signifierait que 0x80cfd2 paie des prix du gaz plus élevés pour leurs transactions qui donnent naissance à des chatons.

Graphique 8 - Efficacité des meilleurs CryptoMidwives de 2018

Les prix plus élevés du gaz pourraient expliquer la rentabilité plus élevée du compte 0x80cfd2. Cela pourrait leur permettre de gagner chaque course pour donner la naissance à laquelle ils concourent. Et en effet, chaque transaction du compte 0x80cfd2 a donné naissance à un ou plusieurs chatons. On ne peut pas en dire autant de 0x05be6e, qui a un grand nombre de transactions dans leurs contrats intelligents qui ne donnent naissance à aucun chat.

Graphique 9 - Histogramme des transactions par compte 0x05be6e et 0x80cfd2, par nombre de chatons nés

Toutefois, les frais du compte 0x05be6e n'entraînant aucune naissance ne sont pas uniquement causés par des transactions qui perdent la guerre des prix de l'essence. Il semble que leur contrat intelligent principal, 0x39243a, nécessite une sorte d'interaction périodique très coûteuse en gaz. Voir par exemple la transaction 0xcc0f970e. Sans ce type de transaction, 0x05be6e mènerait non seulement le classement des revenus, mais également celui de la rentabilité.

Mise à jour (25 mai 2018): une analyse plus poussée indique que des transactions comme 0xcc0f970e permettent au contrat intelligent de sage-femme d'économiser de l'essence sur les transactions qui donnent naissance à des chatons, en utilisant des "restitutions pour stockage", la même technique utilisée par GasToken. Je dois remercier Ricardo de m'avoir aidé à comprendre cela. Le contrat utilisé par le compte 0x80cfd2 semble également tirer parti de ces remboursements, mais il utilise un autre compte pour enregistrer les données dans la mémoire (0x3a91b4…). Une analyse de rentabilité plus précise devrait prendre en compte des grappes de comptes et des contrats intelligents appartenant à un seul agent.

Vous pouvez trouver le code source de ces analyses sur un cahier Jupyter dans notre GitHub.

Conclusion

L'incitation économique créée pour que les chats naissent le plus tôt possible semble fonctionner. La concentration d'événements de naissance dans quelques comptes indique que des bots ont été créés pour donner naissance à des chats dès que possible. Mais il semble probable qu’une fois qu’il n’y aura plus d’efficacité supplémentaire à gagner grâce à des contrats plus intelligents avec les sages-femmes, les robots devront mener une guerre des prix de l’essence pour rester compétitifs. Ce qui signifie qu’en fin de compte, une grande partie des frais d’accouchement se retrouveront probablement entre les mains des mineurs.

Dans tous les cas, les frais de naissance rendent les CryptoKitties plus onéreuses que si ce mécanisme n’était pas nécessaire. CryptoKitties, le premier jeu du genre à acquérir une influence significative sur le réseau Ethereum, continuera certainement d’inspirer de nombreux développeurs pendant un bon bout de temps. Il sera intéressant de voir comment les nouveaux jeux répondent à ce type de défi à l'avenir.

Travail futur

Comme de nombreuses analyses, celle-ci soulève d'autres questions. Laissez le vôtre et vos commentaires dans les commentaires! Nous continuerons d’examiner cet ensemble de données dans de futurs articles.

Graphique 10 - Carte thermique des transactions du top 10 des CryptoMidwives de 2018, par compte et par contrat intelligent. Que vois-tu?

Un merci spécial à l'équipe de Block Science pour ses recherches, ses idées et ses analyses.