Titres Titres

In the year 2022, the catastrophic failure of an orbital space project rained explosive debris across the earth.The weeks of destruction and resulting fallout from this event would destroy all life on the planet.
Only those in secure bunkers that did not receive a direct hit from the debris would survive.
Verrouillez ces portes blindées et ouvrez une nouvelle boîte de haricots parce que je suis sur le point de décomposer le code et la conception de mon nouveau projet, NFT apocalyptique.
Avant d’entrer dans le vif du sujet, je devrais vous donner une description de base du projet. Pour apaiser vos peurs, non, ce n’est pas un shill générique pfp, en fait ce n’est pas du tout un shill. Si vous êtes venu ici à la recherche de choses à acheter, cherchez ailleurs, nous sommes là pour parler de technologie.
En bref, Doomsday NFT utilise les NFT comme composant d’un jeu de survie en chaîne se déroulant dans un monde au bord de l’apocalypse. Chaque jeton représente un bunker caché sous une ville du monde entier. La position sur la carte de ce bunker est stockée sur la chaîne, et lorsque l’apocalypse commence, les impacts sur la chaîne détruiront les bunkers jusqu’à ce qu’il en reste. Le propriétaire du dernier bunker survivant peut réclamer un prix.
Cet article détaillera d’abord les éléments technologiques clés ainsi que certains des choix de conception de jeu.
L’un des éléments techniques clés utilisés dans ce jeu est l’utilisation rétroactive du blockhash
. Les lecteurs de longue date se souviendront peut-être que j’ai écrit un article à ce sujet il y a quelques années qui couvrait son utilisation dans un DApp de course de bateaux que j’ai fait (et qui n’a jamais décollé pour diverses raisons). Que vous lisiez ou non ceci, ne vous inquiétez pas, la mise en œuvre est un peu différente (et plus simple) cette fois.
haschich
Solidity met à disposition le has des 256 blocs Ethereum les plus récemment extraits. Le blockhash est effectivement inconnu de quiconque à l’avance, même de la personne qui exploite. Lorsqu’une personne réussit à extraire un bloc, elle n’a pas le pouvoir de changer le blockhash sans recommencer le processus d’extraction, donc à moins qu’elle ne perde des millions de dollars avec ce blockhash particulier, il est peu probable qu’elle le fasse, car quelqu’un d’autre exploitera le bloc et obtiendra la récompense du bloc. Ce que tout cela signifie, c’est que le blockhash, s’il est utilisé correctement, est une source totalement sécurisée et imprévisible de caractère aléatoire en chaîne.
Le déterminisme des transactions blockchain rend le hasard sur la chaîne plus difficile. Si un tx dépend d’une certaine valeur aléatoire et que cette valeur est calculée pendant ce tx, alors il est trivialement facile de faire un pic à la réponse avant de vous engager dans l’action.
Cependant, en utilisant le blockhash d’un bloc spécifique d’un certain temps dans le passé ne peut pas être trompé, tant que l’engagement envers le résultat s’est produit avant ce bloc.
Une analogie serait si nous devions parier sur si la température dans ma ville natale serait supérieure ou inférieure à 30 °C (86 °F) dimanche. Tant que nous commettons tous les deux nos suppositions avant dimanche et que le gagnant peut récupérer son prix à partir de lundi, il n’y a aucun moyen de tricher. Avant dimanche, c’était inconnaissable, et après dimanche, cela ne peut pas être changé. (Les météorologues ne me @ pas, pour nous, simples mortels, tout est aléatoire).
La façon dont nous procédons avec les blockhash est de décaler et de moduler le numéro de bloc actuel et d’utiliser ce blockhash. Voilà à quoi ça ressemble :
uint INTERVAL = 120;
uint targetBlock = block.number - (block.number % INTERVAL) - 5;bytes32 hash = blockhash(targetBlock);
INTERVAL
est la durée (en blocs) pendant laquelle la source aléatoire reste la même. En soustrayant le INTERVAL
modulo de block.number
à partir de block.number
, il arrondit effectivement block.number
au multiple le plus proche de INTERVAL
. La raison pour laquelle nous soustrayons également 5 est que les réorganisations en chaîne se produisent assez souvent, mais sont rarement plus profondes que 1 ou 2 blocs. 5 ignore les 5 blocs les plus récents de notre caractère aléatoire.
Vous pouvez choisir n’importe quelle valeur pour INTERVAL
, ou pour le bouclier de réorganisation, mais leur somme doit être inférieure à 256, car au-delà, le blockhash n’est pas disponible.
Impacts
Alors, comment Doomsday NFT utilise-t-il cela? Au départ, il y a une période pré-apocalyptique où les gens peuvent acquérir des bunkers, cela durera une semaine, puis l’Apocalypse commence. À ce stade, il utilise la méthode ci-dessus pour générer de manière aléatoire l’emplacement et le rayon d’un impact tous les 120 blocs (30 à 40 min).
Tous les bunkers ont leurs coordonnées cartographiques projetées stockées sur la chaîne, et les coordonnées d’impact et les rayons sont dans les mêmes unités, il s’agit donc simplement d’un cas de trigonométrie de base pour vérifier si un bunker a été touché. Si c’est le cas, alors pour les 120 prochains blocs, ce fait est irréfutable. Pendant cette période, n’importe qui peut appeler un confirmHit
transaction et enregistrer les effets. L’impact est affiché sur la carte tactique du jeu, avec des villes vulnérables en rouge et jaune.
0,01 ETH (25 % de la taxe d’émission) est réservé à cet effet, il est versé à celui qui effectue cette transaction. La valeur a été choisie car elle doit toujours être supérieure au coût de la transaction dans des fourchettes de prix du gaz raisonnables. Cela incite quiconque à l’appeler et garantit ainsi que tout impact sera enregistré, tout en récompensant une participation active. Dans les pics de gaz les plus extrêmes, il existe toujours une incitation à appeler cette fonction si vous êtes un joueur autre que celui touché, car vous bénéficiez toujours de l’élimination de la concurrence.
Dans les derniers stades du jeu, le rayon moyen de l’explosion augmentera à mesure que le nombre de survivants diminuera. C’est pour contrer la moindre chance de toucher un bunker restant.
Tout projet de blockchain bien conçu doit comprendre les incitations. Si vous ne faites pas cela correctement, alors tout système que vous construisez s’effondrera inévitablement. Doomsday NFT a été conçu pour rendre la participation accessible tout en respectant le souhait inévitable des joueurs d’améliorer leurs chances de succès.
Frais de menthe
Je voulais garder les frais de monnaie aussi bas que possible, cependant, le facteur contraignant pour les frais de monnaie était la récompense de transaction de confirmation. La valeur de 0,01 ETH était importante pour le garder séduisant, mais je voulais m’assurer qu’au moins la moitié des frais de monnaie iraient au prize pool. En tant que personne qui a passé plusieurs mois à le construire, j’avais également besoin d’en garder pour moi pour que cela en vaille la peine. C’est pourquoi la taxe d’émission de 0,04 ETH a été choisie :
- 0,02 ETH à la cagnotte
- 0.01 ETH pour frapper le confirmateur
- 0,01 ETH au créateur
0,04 ETH semblait être la plus petite valeur permettant encore une distribution équitable.
Limite et rareté de la menthe
Il n’y a pas de limite sur le nombre de jetons qu’une personne peut frapper. La base de données des villes à partir desquelles les jetons sont générés contient environ 38 000 emplacements uniques, mais il n’est pas prévu que ce nombre de jetons soit frappé. Il a été choisi pour permettre aux gens de sélectionner les villes qu’ils connaissaient ou dans lesquelles ils vivaient dans la vraie vie. Il ajoute également un certain regroupement naturel à l’emplacement des villes et permet aux joueurs de prendre des décisions calculées sur les bunkers qu’ils choisissent d’habiter. Le nombre élevé de bunkers uniques signifie que personne ne sera exclu pendant la phase de menthe, et un nombre plus élevé de jetons profite à tout le monde car cela signifie un plus grand prize pool.
Cependant, après 7 jours lorsque l’Apocalypse commence, la frappe sera définitivement arrêtée. À ce stade, l’offre totale de jetons ne diminuera que lorsque les bunkers seront détruits.
Évacuation et prix plancher
Le propriétaire de n’importe quel bunker peut choisir de l’évacuer à tout moment (en supposant qu’il ne se trouve pas actuellement dans le rayon d’explosion). L’évacuation détruira le Bunker et paiera une partie de la cagnotte.
La formule qui détermine le paiement est la suivante :
uint payout = //Winner fee from mints less evacuated funds
((MINT_COST * TOTAL_BUNKERS * MINT_PERCENT_WINNER / 100 - evacuatedFunds) //Divided by remaining tokens
/ totalSupply()) //Divided by two
/ 2 //Plus the fee that would have been given to the confirmer
+ CONFIRM_HIT_FEE;
En effet, s’il reste N jetons, vous obtenez Prize / N / 2
.
Le / 2 est important, car il décourage les gens qui se retirent trop tôt et garantit qu’il y a toujours une plus grande récompense pour risquer de jouer. Cela signifie également que si vous ne faites pas partie des 50% des premiers joueurs à être éliminés, vous pouvez vous retirer à tout moment et vous retrouver avec plus d’ETH que vous n’en aviez au départ. Différents acteurs auront différentes stratégies, l’idée était de construire suffisamment pour permettre un comportement émergent.
Cependant, cela devrait fixer un prix plancher pour tous les bunkers restants, car ils peuvent être instantanément évacués pour le paiement indiqué. La valeur marchande des Bunkers devrait donc être déterminée par différents acteurs arbitrant ce qu’ils pensent être la stratégie idéale. Ainsi, plus le jeu se poursuit, le prix plancher devrait continuer à augmenter.
Renforcement
Au-delà de la sélection et de l’évacuation stratégiques du Bunker, les joueurs ont la possibilité de renforcer leur Bunker. Pour chaque fois qu’un bunker est renforcé, il peut supporter un coup supplémentaire, mais le coût pour le faire double à chaque fois. Cela permet aux joueurs en fin de partie qui ont de fortes chances de gagner un grand nombre d’ETH d’augmenter leurs chances tout en diminuant leur rendement attendu. La décision d’utiliser un coût de renforcement exponentiel visait à atténuer l’effet qu’aurait une forte disparité de richesse entre les joueurs sur le résultat du jeu, tout en respectant le souhait des joueurs d’utiliser ce mécanisme autant qu’ils le souhaitent. 90% des frais de renforcement sont ajoutés à la cagnotte.
Pour tous ceux qui s’interrogent sur l’œuvre d’art du bunker, chaque bunker a été généré en utilisant la population de la ville associée comme graine. Plutôt que d’ajouter ou de supprimer des éléments comme le font beaucoup d’art NFT en gros lots, le générateur d’art Bunker trace une disposition unique et la remplit de différentes pièces préconçues sélectionnées en fonction de leur taille, ainsi qu’une ligne d’horizon unique. C’était l’un des avantages de l’utilisation de l’esthétique skeuomorphique et scifi des années 70, car cette époque se prêtait à une imagerie vectorielle plus stylisée.
Alors bonne chance si vous êtes un joueur, et si vous êtes un créateur, j’espère que cet article vous a fourni des informations que vous pourrez apporter à votre prochain projet. C’est tout un territoire très nouveau, et bien que j’aie construit en prévision de nombreux comportements conflictuels, il y a trop de folie dans cet espace pour savoir comment quelque chose va finir.