Dans un contrat intelligent Tezos, le stockage est comme la mémoire du contrat. C'est l'endroit où sont conservées toutes les données relatives au contrat. Essentiellement, il agit comme l'état de notre contrat, en stockant des valeurs qui persistent à travers différentes transactions et en permettant au contrat intelligent de "se souvenir" des informations. C'est cette capacité qui nous permet de construire des applications décentralisées complexes et attrayantes sur la blockchain Tezos.
Avant de nous plonger dans le code de cette leçon, décomposons un peu plus le concept de stockage. Le stockage d'un contrat est l'état qui persiste entre les appels de fonction. Si vous venez d'un milieu de programmation traditionnel, vous pouvez considérer qu'il s'agit de l'"état global" du contrat. C'est ce qui permet aux utilisateurs d'avoir des interactions continues avec un contrat au fil du temps.
Jetons maintenant un coup d'œil au code de notre contrat pour cette leçon :
Python
import smartpy as sp
@sp.module
def main() :
class StoreValue(sp.Contract) :
def __init__(self, value) :
self.data.storedValue = value
@sp.entrypoint
def replace(self, params) :
self.data.storedValue = params.value
@sp.entrypoint
def double(self) :
self.data.storedValue *= 2
@sp.entrypoint
def divide(self, params) :
assert params.divisor > 5
self.data.storedValue /= params.divisor
if "templates" not in __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
scenario = sp.test_scenario(main)
scénario.h1("Store Valeur")
scenario += c1
c1.replace(value=15)
scenario.p("Some calcul").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
valid=False, exception="WrongCondition : params.divisor > 5"
)
scenario.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
scenario.verify(c1.data.storedValue == 8)
Dans notre exemple de contrat de stockage, nous avons plusieurs points d'entrée : remplacer
, doubler
et diviser
. Après avoir déployé ce contrat, les utilisateurs peuvent appeler ces points d'entrée pour interagir avec le contrat.
Pour les points d'entrée remplacer
et diviser
, les utilisateurs doivent fournir des paramètres dans la transaction. Pour remplacer
, une valeur de
paramètre est requise, et pour diviser
, un diviseur de
paramètre est requis.
Lorsque vous exécutez ce contrat dans l'IDE SmartPy, vous verrez sur le côté droit une représentation visuelle des opérations et du stockage du contrat. Vous pouvez en fait simuler les interactions entre les utilisateurs. Voici un guide étape par étape :
Déployez votre contrat en cliquant sur le bouton Déployer
.
Après le déploiement, vous verrez le contrat représenté sous Contrats
. Cliquez dessus.
Les points d'entrée du contrat sont maintenant répertoriés.
Pour appeler le remplacement
, saisissez une valeur pour params.value
dans le champ, puis cliquez sur le bouton remplacer
.
Pour appeler le double
, il suffit de cliquer sur le bouton double
.
Pour appeler diviser
, saisissez une valeur pour params.divisor
dans le champ, puis cliquez sur le bouton diviser
.
Chacune de ces interactions créera une nouvelle opération répertoriée sous le contrat, et vous pouvez voir l'état mis à jour du stockage du contrat après chaque opération.
Dans ce contrat, nous mettons l'accent sur le concept de stockage avec la ligne self.data.storedValue = value
. Ici, self.data
fait référence au stockage de notre contrat. C'est ici que nous conservons l'état de notre contrat : un seul paramètre nommé storedValue
.
Nous avons également plusieurs points d'entrée dans ce contrat. Les points d'entrée sont essentiellement des fonctions publiques qui permettent aux parties externes d'interagir avec le contrat. Ici, nos points d'entrée permettent de modifier la valeur stockée de
différentes manières. Nous pouvons la remplacer par une nouvelle valeur, la doubler ou la diviser par un diviseur donné.
Ensuite, examinons le scénario de test que nous avons mis en place. Nous créons une instance de notre contrat avec la valeur initiale 12
pour storedValue
. Nous appelons ensuite nos points d'entrée pour modifier la valeur de storedValue de
différentes manières et valider les résultats.
La possibilité de stocker et de mettre à jour des valeurs dans le stockage d'un contrat est fondamentale pour construire des contrats intelligents Tezos. Il permet la persistance des données lors des différentes interactions avec le contrat. Qu'il s'agisse de maintenir les soldes dans un contrat de jetons, de stocker des informations sur les utilisateurs dans une application décentralisée ou de conserver l'état d'un jeu sur la blockchain, le stockage est une caractéristique essentielle qui facilite ces fonctionnalités.
Le stockage dans un contrat intelligent peut contenir des valeurs simples comme des entiers, des chaînes et des booléens, ou des structures de données plus complexes comme des listes, des cartes et des objets personnalisés. Cela nous permet de construire une logique complexe et des transitions d'état dans nos contrats.
Dans la prochaine leçon, nous continuerons à développer ces concepts de base, en introduisant des calculs plus complexes dans les contrats intelligents, et nous commencerons à travailler avec des types de données plus avancés dans le stockage de notre contrat. Restez donc à l'écoute et n'oubliez pas : c'est en forgeant qu'on devient forgeron. N'hésitez pas à expérimenter le code, à faire des modifications et à observer les résultats !
Dans un contrat intelligent Tezos, le stockage est comme la mémoire du contrat. C'est l'endroit où sont conservées toutes les données relatives au contrat. Essentiellement, il agit comme l'état de notre contrat, en stockant des valeurs qui persistent à travers différentes transactions et en permettant au contrat intelligent de "se souvenir" des informations. C'est cette capacité qui nous permet de construire des applications décentralisées complexes et attrayantes sur la blockchain Tezos.
Avant de nous plonger dans le code de cette leçon, décomposons un peu plus le concept de stockage. Le stockage d'un contrat est l'état qui persiste entre les appels de fonction. Si vous venez d'un milieu de programmation traditionnel, vous pouvez considérer qu'il s'agit de l'"état global" du contrat. C'est ce qui permet aux utilisateurs d'avoir des interactions continues avec un contrat au fil du temps.
Jetons maintenant un coup d'œil au code de notre contrat pour cette leçon :
Python
import smartpy as sp
@sp.module
def main() :
class StoreValue(sp.Contract) :
def __init__(self, value) :
self.data.storedValue = value
@sp.entrypoint
def replace(self, params) :
self.data.storedValue = params.value
@sp.entrypoint
def double(self) :
self.data.storedValue *= 2
@sp.entrypoint
def divide(self, params) :
assert params.divisor > 5
self.data.storedValue /= params.divisor
if "templates" not in __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
scenario = sp.test_scenario(main)
scénario.h1("Store Valeur")
scenario += c1
c1.replace(value=15)
scenario.p("Some calcul").show(c1.data.storedValue * 12)
c1.replace(value=25)
c1.double()
c1.divide(divisor=2).run(
valid=False, exception="WrongCondition : params.divisor > 5"
)
scenario.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
scenario.verify(c1.data.storedValue == 8)
Dans notre exemple de contrat de stockage, nous avons plusieurs points d'entrée : remplacer
, doubler
et diviser
. Après avoir déployé ce contrat, les utilisateurs peuvent appeler ces points d'entrée pour interagir avec le contrat.
Pour les points d'entrée remplacer
et diviser
, les utilisateurs doivent fournir des paramètres dans la transaction. Pour remplacer
, une valeur de
paramètre est requise, et pour diviser
, un diviseur de
paramètre est requis.
Lorsque vous exécutez ce contrat dans l'IDE SmartPy, vous verrez sur le côté droit une représentation visuelle des opérations et du stockage du contrat. Vous pouvez en fait simuler les interactions entre les utilisateurs. Voici un guide étape par étape :
Déployez votre contrat en cliquant sur le bouton Déployer
.
Après le déploiement, vous verrez le contrat représenté sous Contrats
. Cliquez dessus.
Les points d'entrée du contrat sont maintenant répertoriés.
Pour appeler le remplacement
, saisissez une valeur pour params.value
dans le champ, puis cliquez sur le bouton remplacer
.
Pour appeler le double
, il suffit de cliquer sur le bouton double
.
Pour appeler diviser
, saisissez une valeur pour params.divisor
dans le champ, puis cliquez sur le bouton diviser
.
Chacune de ces interactions créera une nouvelle opération répertoriée sous le contrat, et vous pouvez voir l'état mis à jour du stockage du contrat après chaque opération.
Dans ce contrat, nous mettons l'accent sur le concept de stockage avec la ligne self.data.storedValue = value
. Ici, self.data
fait référence au stockage de notre contrat. C'est ici que nous conservons l'état de notre contrat : un seul paramètre nommé storedValue
.
Nous avons également plusieurs points d'entrée dans ce contrat. Les points d'entrée sont essentiellement des fonctions publiques qui permettent aux parties externes d'interagir avec le contrat. Ici, nos points d'entrée permettent de modifier la valeur stockée de
différentes manières. Nous pouvons la remplacer par une nouvelle valeur, la doubler ou la diviser par un diviseur donné.
Ensuite, examinons le scénario de test que nous avons mis en place. Nous créons une instance de notre contrat avec la valeur initiale 12
pour storedValue
. Nous appelons ensuite nos points d'entrée pour modifier la valeur de storedValue de
différentes manières et valider les résultats.
La possibilité de stocker et de mettre à jour des valeurs dans le stockage d'un contrat est fondamentale pour construire des contrats intelligents Tezos. Il permet la persistance des données lors des différentes interactions avec le contrat. Qu'il s'agisse de maintenir les soldes dans un contrat de jetons, de stocker des informations sur les utilisateurs dans une application décentralisée ou de conserver l'état d'un jeu sur la blockchain, le stockage est une caractéristique essentielle qui facilite ces fonctionnalités.
Le stockage dans un contrat intelligent peut contenir des valeurs simples comme des entiers, des chaînes et des booléens, ou des structures de données plus complexes comme des listes, des cartes et des objets personnalisés. Cela nous permet de construire une logique complexe et des transitions d'état dans nos contrats.
Dans la prochaine leçon, nous continuerons à développer ces concepts de base, en introduisant des calculs plus complexes dans les contrats intelligents, et nous commencerons à travailler avec des types de données plus avancés dans le stockage de notre contrat. Restez donc à l'écoute et n'oubliez pas : c'est en forgeant qu'on devient forgeron. N'hésitez pas à expérimenter le code, à faire des modifications et à observer les résultats !