L`approche consiste à avoir un proxy qui délègue des appels à des implémentations spécifiques qui peuvent être mises à niveau, en supposant que la structure de stockage ne changera jamais. Ce scénario est appelé «stockage éternel». Voyons comment le contrat de proxy ressemble: à ce stade, il convient de mentionner comment fonctionne le stockage. Le stockage contractuel agit essentiellement comme un mappage de bytes32 à bytes32. La clé peut facilement être interprétée comme un nombre de conversion d`octets en décimales: les contrats peuvent appeler d`autres contrats ou envoyer Ether à des comptes non contractuels par le biais d`appels de messages. Les appels de messages sont similaires aux transactions, en ce qu`ils ont une source, une cible, la charge utile des données, éther, gaz et les données de retour. En fait, chaque transaction se compose d`un appel de message de niveau supérieur qui à son tour peut créer d`autres appels de messages. Mettons la nouvelle fonction à utiliser dans un test dans StorageCoin. js. Nous allons avoir besoin de fixer une allocation afin de voir une valeur. Pour ce faire, nous allons également devoir annuler la pause du jeton.

Écrivons des tests pour ces deux étapes pendant que nous y sommes. Voici le fichier de test mis à jour: vous pourriez vous demander à ce stade… Je pensais qu`ils étaient stockés dans l`ordre? C`est toujours le cas… mais si vous avez réellement passer par l`héritage de chaque contrat, vous constaterez que l`ordre est différent. Ouvrez votre répertoire openzeppelin-solidity dans node_modules et vous verrez que la commande est comme ceci: ERC20/basicToken-> StandardToken-> PausableToken-> StorageCoin Storage est défini séquentiellement par ordre d`apparition dans le code du contrat. Tout le stockage est stocké en octets ce qui signifie qu`il pourrait être une bonne idée de vérifier comment fonctionne l`ASCII (les chaînes sont codées en ASCII non Unicode). Ouvrez StorageCoinFlattened. sol dans votre répertoire racine. Vous devriez avoir la même chose: comme vous pouvez le voir, les implémentations de comportement de jeton s`étendent de UpgradeableTokenStorage, qui dérive de UpgradeableTokenStorage et TokenStorage. C`est ce que chaque implémentation du comportement évolutif a besoin: proxy, UpgradeabilityProxy et UpgradeabilityStorage sont des contrats génériques qui peuvent être utilisés pour implémenter l`évolutivité via des proxys.