En un contrato inteligente de Tezos, el almacenamiento es como la memoria del contrato. Este es el lugar donde se guardan todos los datos relevantes para el contrato. Esencialmente, actúa como el estado de nuestro contrato, almacenando valores que persisten en diferentes transacciones y permitiendo que el contrato inteligente "recuerde" información. Es esta capacidad la que nos permite construir aplicaciones descentralizadas complejas y atractivas en la cadena de bloques de Tezos.
Antes de profundizar en nuestro código para esta lección, analicemos un poco más el concepto de almacenamiento. El almacenamiento de un contrato es el estado que persiste entre llamadas a funciones. Si tiene experiencia en programación tradicional, puede considerarlo como el "estado global" del contrato. Es lo que permite a los usuarios tener interacciones continuas con un contrato a lo largo del tiempo.
Ahora, echemos un vistazo a nuestro código de contrato para esta lección:
Python
importa smartpy como sp
@sp.module
def main():
clase StoreValue(sp.Contract):
def __init__(self, valor):
self.data.storedValue = valor
@sp.entrypoint
def reemplazar(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def dividir(self , params):
afirmar params.divisor > 5
self.data.storedValue /= params.divisor
si "plantillas" no están en __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
escenario = sp.test_scenario(principal)
escenario.h1("Tienda Valor")
escenario += c1
c1.replace(valor=15)
escenario.p("Algunos cálculo").show(c1.data.storedValue * 12)
c1.replace(valor=25)
c1.double()
c1.divide(divisor=2).run(
válido=Falso, excepción="Condición incorrecta: params.divisor > 5"
)
escenario.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
escenario.verify(c1.data.storedValue == 8)
En nuestro ejemplo de contrato de almacenamiento, tenemos varios puntos de entrada: replace
, double
y divide
. Después de implementar este contrato, los usuarios pueden llamar a estos puntos de entrada para interactuar con el contrato.
Para los puntos de entrada de replace
y divide
, los usuarios deben proporcionar parámetros en la transacción. Para replace
, se requiere un value
de parámetro y para divide
, se requiere un divisor
de parámetro.
Cuando ejecute este contrato en SmartPy IDE, en el lado derecho, verá una representación visual de las operaciones y el almacenamiento del contrato. De hecho, puedes simular las interacciones del usuario aquí. Aquí hay una guía paso a paso:
Implemente su contrato haciendo clic en el botón Deploy
.
Después de la implementación, verá el contrato representado en Contracts
. Haz click en eso.
Ahora verá los puntos de entrada del contrato enumerados.
Para llamar replace
, ingrese un valor para params.value
en el campo y luego haga clic en el botón replace
.
Para igualar double
, simplemente haga clic en el botón double
.
Para llamar a divide
, ingrese un valor para params.divisor
en el campo y luego haga clic en el botón divide
.
Cada una de estas interacciones creará una nueva operación enumerada en el contrato y podrá ver el estado actualizado del almacenamiento del contrato después de cada operación.
En este contrato, enfatizamos el concepto de almacenamiento con la línea self.data.storedValue = value
. Aquí, self.data
se refiere al almacenamiento de nuestro contrato. Aquí es donde mantenemos el estado de nuestro contrato: un único parámetro llamado storedValue
.
También tenemos varios puntos de entrada en este contrato. Los puntos de entrada son esencialmente funciones públicas que permiten a partes externas interactuar con el contrato. Aquí, nuestros puntos de entrada permiten la modificación del storedValue
de varias maneras. Podemos reemplazarlo con un nuevo valor, duplicarlo o dividirlo por un divisor determinado.
A continuación, consideremos el escenario de prueba que hemos configurado. Creamos una instancia de nuestro contrato con el valor inicial 12
para storedValue
. Luego llamamos a nuestros puntos de entrada para modificar el valor de storedValue
de varias maneras y validar los resultados.
La capacidad de almacenar y actualizar valores dentro del almacenamiento de un contrato es fundamental para crear contratos inteligentes de Tezos. Permite la persistencia de datos en diferentes interacciones con el contrato. Ya sea manteniendo los saldos en un contrato de token, almacenando información del usuario en una aplicación descentralizada o manteniendo el estado de un juego en la cadena de bloques, el almacenamiento es una característica central que facilita estas funcionalidades.
El almacenamiento en un contrato inteligente puede contener valores simples como números enteros, cadenas y valores booleanos, o estructuras de datos más complejas como listas, mapas y objetos definidos de forma personalizada. Esto nos permite construir lógicas complejas y transiciones de estado en nuestros contratos.
En la próxima lección, continuaremos desarrollando estos conceptos básicos, introduciendo cálculos más complejos dentro de los contratos inteligentes y comenzaremos a trabajar con tipos de datos más avanzados en el almacenamiento de nuestro contrato. Así que estad atentos y recordad: la práctica hace la perfección. ¡No dudes en experimentar con el código, realizar modificaciones y observar los resultados!
En un contrato inteligente de Tezos, el almacenamiento es como la memoria del contrato. Este es el lugar donde se guardan todos los datos relevantes para el contrato. Esencialmente, actúa como el estado de nuestro contrato, almacenando valores que persisten en diferentes transacciones y permitiendo que el contrato inteligente "recuerde" información. Es esta capacidad la que nos permite construir aplicaciones descentralizadas complejas y atractivas en la cadena de bloques de Tezos.
Antes de profundizar en nuestro código para esta lección, analicemos un poco más el concepto de almacenamiento. El almacenamiento de un contrato es el estado que persiste entre llamadas a funciones. Si tiene experiencia en programación tradicional, puede considerarlo como el "estado global" del contrato. Es lo que permite a los usuarios tener interacciones continuas con un contrato a lo largo del tiempo.
Ahora, echemos un vistazo a nuestro código de contrato para esta lección:
Python
importa smartpy como sp
@sp.module
def main():
clase StoreValue(sp.Contract):
def __init__(self, valor):
self.data.storedValue = valor
@sp.entrypoint
def reemplazar(self, params):
self.data.storedValue = params.value
@sp.entrypoint
def double(self):
self.data.storedValue *= 2
@sp.entrypoint
def dividir(self , params):
afirmar params.divisor > 5
self.data.storedValue /= params.divisor
si "plantillas" no están en __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
escenario = sp.test_scenario(principal)
escenario.h1("Tienda Valor")
escenario += c1
c1.replace(valor=15)
escenario.p("Algunos cálculo").show(c1.data.storedValue * 12)
c1.replace(valor=25)
c1.double()
c1.divide(divisor=2).run(
válido=Falso, excepción="Condición incorrecta: params.divisor > 5"
)
escenario.verify(c1.data.storedValue == 50)
c1.divide(divisor=6)
escenario.verify(c1.data.storedValue == 8)
En nuestro ejemplo de contrato de almacenamiento, tenemos varios puntos de entrada: replace
, double
y divide
. Después de implementar este contrato, los usuarios pueden llamar a estos puntos de entrada para interactuar con el contrato.
Para los puntos de entrada de replace
y divide
, los usuarios deben proporcionar parámetros en la transacción. Para replace
, se requiere un value
de parámetro y para divide
, se requiere un divisor
de parámetro.
Cuando ejecute este contrato en SmartPy IDE, en el lado derecho, verá una representación visual de las operaciones y el almacenamiento del contrato. De hecho, puedes simular las interacciones del usuario aquí. Aquí hay una guía paso a paso:
Implemente su contrato haciendo clic en el botón Deploy
.
Después de la implementación, verá el contrato representado en Contracts
. Haz click en eso.
Ahora verá los puntos de entrada del contrato enumerados.
Para llamar replace
, ingrese un valor para params.value
en el campo y luego haga clic en el botón replace
.
Para igualar double
, simplemente haga clic en el botón double
.
Para llamar a divide
, ingrese un valor para params.divisor
en el campo y luego haga clic en el botón divide
.
Cada una de estas interacciones creará una nueva operación enumerada en el contrato y podrá ver el estado actualizado del almacenamiento del contrato después de cada operación.
En este contrato, enfatizamos el concepto de almacenamiento con la línea self.data.storedValue = value
. Aquí, self.data
se refiere al almacenamiento de nuestro contrato. Aquí es donde mantenemos el estado de nuestro contrato: un único parámetro llamado storedValue
.
También tenemos varios puntos de entrada en este contrato. Los puntos de entrada son esencialmente funciones públicas que permiten a partes externas interactuar con el contrato. Aquí, nuestros puntos de entrada permiten la modificación del storedValue
de varias maneras. Podemos reemplazarlo con un nuevo valor, duplicarlo o dividirlo por un divisor determinado.
A continuación, consideremos el escenario de prueba que hemos configurado. Creamos una instancia de nuestro contrato con el valor inicial 12
para storedValue
. Luego llamamos a nuestros puntos de entrada para modificar el valor de storedValue
de varias maneras y validar los resultados.
La capacidad de almacenar y actualizar valores dentro del almacenamiento de un contrato es fundamental para crear contratos inteligentes de Tezos. Permite la persistencia de datos en diferentes interacciones con el contrato. Ya sea manteniendo los saldos en un contrato de token, almacenando información del usuario en una aplicación descentralizada o manteniendo el estado de un juego en la cadena de bloques, el almacenamiento es una característica central que facilita estas funcionalidades.
El almacenamiento en un contrato inteligente puede contener valores simples como números enteros, cadenas y valores booleanos, o estructuras de datos más complejas como listas, mapas y objetos definidos de forma personalizada. Esto nos permite construir lógicas complejas y transiciones de estado en nuestros contratos.
En la próxima lección, continuaremos desarrollando estos conceptos básicos, introduciendo cálculos más complejos dentro de los contratos inteligentes y comenzaremos a trabajar con tipos de datos más avanzados en el almacenamiento de nuestro contrato. Así que estad atentos y recordad: la práctica hace la perfección. ¡No dudes en experimentar con el código, realizar modificaciones y observar los resultados!