“Comment nous avons fait $100K en échangeant des CryptoKitties”
Ceci est la traduction de l’article d’Ivan Bogatyy – “How we made $100K trading CryptoKitties” – paru originellement sur Hackernoon. Nous le remercions pour son aimable autorisation.
Désormais, tout le monde a entendu parler des Cryptokitties, un jeu mignon qui est devenu viral au point de surcharger le réseau Ethereum tout entier. Voici l’histoire qui raconte comment nous avons fait $107K en investissant dans les CryptoKitties, et brièvement établi le record de la plus grosse vente (actuellement la deuxième plus importante). Plus tard, nous avons fait environ $8K en déployant un robot d’arbitrage automatisé. Tandis que jouer à spéculer durant le pic de la fièvre fut excitant, le bot était assez technique et sera intéressant pour les personnes qui veulent apprendre l’ingénierie blockchain en général.
Alors que j’étais en train de jouer avec mes smart contracts Ethereum durant un samedi soir banal (le 2 décembre), quelque chose n’allait pas : les transactions étaient bloquées et prenaient beaucoup plus de temps que d’habitude pour être confirmées. Une investigation rapide montra qu’il y avait dix à vingt fois plus de transactions en attente que d’habitude, et beaucoup d’entre elles allaient vers la même adresse mystérieuse, 0x06012..66d. C’est ainsi que j’ai découvert le désormais fameux jeu des CryptoKitties.
Thèse d’investissement :
Le matin suivant, j’appelais Oleg Ostroumov, un ami proche qui dirige un fonds d’investissement crypto en Russie, pour discuter de ce phénomène inhabituel. Tandis que le jeu des CryptoKitties était seulement une curiosité pour moi, Oleg y vit immédiatement une opportunité lucrative d’investissement. Premièrement, nous faisions clairement partie des premiers entrants. Deuxièmement, le jeu présentait tous les signes précurseurs qu’il allait devenir viral, similaire à Pokemon Go, et montrait les prémices d’une explosion.
Désormais la question était, quels Kitties devions-nous acheter ? La place de marché proposait 4 façons de classer les Kitties : le moins cher d’abord, le plus cher d’abord, le plus récent en premier, le plus vieux en premier (note : le site web a été refait depuis). Les trois premières options sont clairement transitoires : vous pouvez toujours proposer un Kitty moins cher, plus cher, ou plus récent sur le marché. Les plus vieux, cependant, sont comme les diamants : ils durent toujours. Nous avons donc décidé d’acheter des Founder Cats à un seul chiffre, malgré leurs étiquettes de prix déjà lourdes : quelqu’un venait juste de les saisir à 25 ETH et re-listé la gamme à 50 ETH (25K $), avec le Founder Cat # 1 se vendant au prix encore plus élevé de 150 ETH.
Oleg acheta les Founder Cats #4, #6, #8 à 50 ETH chacun ($25K au moment présent), et je mis $5K pour 20% de parts sur le Founder Cat #4. Nous étions plutôt optimistes à propos de la kitties-mania et nous re-listâmes les Kitties à 250 ETH, cinq fois le prix d’achat.
Note à part : nous gaspillâmes environ une heure à cause d’un prix du gas trop bas, et dûmes réinstaller MetaMask (à l’époque, il n’existait pas l’option “renvoyer la transaction avec un gasPrice supérieur” – elle fut implémentée juste après). Leçon apprise : si vous effectuez un achat de $25K, n’essayez pas de sauver 20$ sur les frais.
Juste après avoir raccroché le téléphone, j’ai considéré la probabilité que cela devienne mon record personnel quant à la manière la plus ridicule de gaspiller 5K $. Probablement assez haute.
L’art subtil de partir au sommet
Durant les jours suivants (du 2 au 5 décembre), le jeu entra dans sa phase d’explosion virale. Étant donné son côté addictif, c’était très difficile de se concentrer sur autre chose. Clairement, la folie n’allait pas durer : les mécaniques du jeu étaient bien plus simples que Pokemon Go, avec seulement deux fonctions disponibles, acheter ou les accoupler pour en produire de nouveaux. Nous partîmes du principe que cela pourrait durer deux semaines de plus, il était donc important de formuler une stratégie de sortie rationnelle à l’avance et de s’y tenir.
Nous avons utilisé trois métriques. Tout d’abord, les Google Trends pour “CryptoKitties” montraient la fréquence à laquelle les gens cherchaient des informations au sujet du jeu, ce qui est un assez bon principal indicateur d’intérêt. Ensuite, GasGuzzlers montre les smart contracts consommant le plus de gas sur le réseau, ainsi que la part consommée (pour CryptoKitties, c’était ~4% lorsque nous entrâmes et ~20% durant le pic de popularité). Enfin, nous regardâmes les conditions du marché et les prix des ventes récentes sur une application très bien construite, https://kittysales.herokuapp.com. Le 4 et 5 décembre, quelques kitties peu prestigieux (#35, #78, #87) furent vendus pour presque 200 ETH, nous étions donc confiants sur le fait que nos prix étaient bien ajustés. Cependant, les 5 et 6 décembres virent des sommets quant à toutes les métriques, et à la fin du 6 décembre la popularité du jeu était clairement en berne. Observant cela, nous eûmes un appel d’urgence le 6 décembre pour essayer de déterminer ce que nous allions faire avec les Kitties, aucun ne s’était encore vendu à notre prix de 250 ETH. Je souhaitais re-lister le Kitty à 100 ETH, tandis qu’Oleg était déterminé à coller au prix de 250 ETH. Étant donné notre désaccord au sujet de la valeur du Kitty, nous effectuâmes un arbitrage évident : je lui vendis mes 20% de parts à 100 ETH de “Kitty-valorisation”, doublant mon argent instantanément. Je ne savais pas que je serais seulement heureux de cette affaire durant environ 20 minutes…
Je continuais de suivre le marché par curiosité. Alors, 20 minutes après qu’Oleg me l’ait acheté, je vis notre Founder Cat #4 vendu au prix originel de 250 ETH. J’étais si confiant que c’était Oleg qui générait de l’activité pour sa marchandise, que je m’inquiétais à peine de lui demander. Lorsque je le fis, cependant, j’appris la pleine puissance du HODL : c’était un achat authentique, nous n’avions aucune idée de qui était l’acheteur, et il venait de battre le record du monde pour la vente d’un objet de collection numérique sur blockchain.
Arbitrage automatique
Ayant eu un tel début chanceux, nous nous demandions ce que nous pourrions faire d’autre avec. Le battage médiatique était clairement terminé et les prix ridicules pour les Kitties les plus rares étaient inaccessibles, mais la file d’attente restait : les gens voulaient toujours jouer, et obtenir quelques Kitties pour eux-mêmes.
Nous décidâmes donc d’essayer d’implémenter un bot d’arbitrage automatique pour la longue file d’attente des Kitties moins chers. Comme n’importe quelle stratégie de revente, cela consistait essentiellement en trois étapes :
- Déterminer des groupes de kitties dont le prix devrait être à peu près le même. Les paramètres que nous regardions étaient la Rareté, le Refroidissement et la Génération (seuls les Kitties de génération 0 et 1 étaient suffisamment chers pour s’en inquiéter). Les Kitties avec les mêmes valeurs pour ces trois paramètres étaient considérés équivalents (en ignorant les variantes comme Cattribute ou Cuter Artwork).
- Acheter des items sous-évalués de chaque classe. Dans notre cas, nous n’achetâmes que le Kitty le moins cher pour chaque paramètre considéré.
- Revendre l’item acquis pour plus cher. Dans notre cas, nous voulions éviter une course au prix le plus bas avec les autres revendeurs potentiels, donc nous listions chaque Kitty à un prix un plus bas que le second prix le moins cher (similaire à la “second-price auction” de Google.)
Après avoir exploré plusieurs librairies blockchain, nous trouvâmes que réécrire mon précédent code de front-running pour Bancor fonctionnait le mieux. La meilleure stratégie était : attendre des transactions mettant des Kitties en vente, acheter immédiatement s’il correspond au critère requis. Ce mécanisme de réaction instantanée est assez similaire au front-running, excepté qu’il s’agit plutôt de post-running : personne ne peut placer une transaction d’achat avant la transaction de mise aux enchères, cela doit donc arriver immédiatement après. À un niveau plus technique, il y a différentes façons d’implémenter ceci :
- Dès que vous voyez une transaction de mise aux enchères en attente, essayez d’acheter le Kitty dans le même bloc. Vous pouvez envoyer la transaction d’achat avec un prix légèrement inférieur (c-à-d que si la transaction de mise aux enchères coûte 25 Gwei de gas, vous pouvez payer 24,999 Gwei), ou, alternativement, payer exactement la même chose. Dans le premier cas, vous risquez d’être juste en dessous du seuil de coupure du bloc, et donc votre transaction restera en attente pour des heures durant les pics d’activité. Dans l’autre cas, vous courrez le risque que les mineurs placent votre transaction d’achat avant la transaction de mise aux enchères (le gasPrice étant le même, l’ordre peut être arbitraire et dépend du logiciel de minage), ce qui engendrerait l’échec de votre transaction.
- Attendre jusqu’à ce que la transaction de mise aux enchères soit confirmée et envoyer la transaction d’achat juste après avec un gasPrice très élevé, pour s’assurer que la transaction soit incluse dans le bloc suivant.
Vous ne vous attendiez pas à ce que ce mignon petit jeu soit un univers aussi dense, mais nous avions des compétiteurs qui ont employé chacune des trois options pour attraper les Kitties ! Et puisque chacune de ces options avait ses propres avantages, nous devions implémenter toutes ces stratégies pour avoir les meilleures chances de l’emporter (cela peut être fait soit de façon naïve, en exécutant trois versions depuis trois comptes, ou en réutilisant le nonce au sein du même compte, mais plus de détails encore sont derrière cette histoire).
Une autre possibilité que nous avions considéré était la suivante : disons que vous voulez acheter un Kitty, et que son prix soit en train de chuter lentement de par la vente aux enchères linéaires. Plutôt que de l’acheter immédiatement, on peut attendre jusqu’à ce qu’un autre concurrent apparaisse et front-run son achat, en obtenant ainsi le prix le plus bas possible. Aussi amusant que cela ait été d’avoir été si machiavéliques, le marché était en train de chuter trop vite pour justifier de porter autant d’attention sur un seul Kitty à gros ticket.
Conséquences
Plus d’un mois après la fin du battage médiatique, nous recevions une agréable surprise : quelqu’un venait d’acheter le Kitty #6. Les 29 ETH étaient au-dessous du prix initial, mais c’était néanmoins une somme décente (de plus, l’ether venait de doubler son prix à ce moment-là).Le Kitty #8 restant reçoit les soins et l’adoration indissociables d’Oleg. Le Kitty a ses propres autocollants, t-shirts et même un pin’s en argent fait maison. J’ai entendu dire qu’il avait également son canal Instagram. En fin de compte, c’était une leçon très pratique sur les manies spéculatives. J’ai sous-performé et et Oleg a sur-performé, mais nous avons presque tous deux doublé notre argent, ce qui était un résultat assez étonnant. Oui, les minous imaginaires n’ont absolument aucune valeur intrinsèque ou prix plancher garanti. Néanmoins, on peut toujours jouer à ce jeu et même gagner. Et bien sûr, il était pratiquement impossible de prédire où se situerait le sommet de la bulle, même si nous en sommes bien approchés.
Pour mes ~5000$ de gains issus de cette aventure, j’ai décidé de les donner à la Summer Informatics School du MCCME, un camp d’entraînement au code russe exceptionnel où j’ai appris lorsque j’étais étudiant, ainsi qu’à la Fondation pour la Liberté de la Presse. J’y ai encore doublé mon argent grâce aux généreux Gift match program de Google.
Merci à Oleg Ostroumov, Alina Aseeva, Aashna Mehra, Haseeb Qureshi et David Smooke pour avoir lu les brouillons de l’histoire. Pour en savoir plus, suivez-moi sur Twitter à https://twitter.com/IvanBogatyy.
Article original : How we made $100K trading CryptoKitties, par Ivan Bogatyy (Hackernoon)