Lição 2

Хранение значений в контракте

Здравствуйте и добро пожаловать обратно! В нашем первом уроке мы познакомили Вас со SmartPy и Tezos, создав очень простой смарт-контракт. В этом уроке мы углубимся в один из самых важных компонентов любого смарт-контракта Tezos: хранилище.

Что такое хранение?

В смарт-контракте Tezos хранилище - это как память контракта. Это место, где хранятся все данные, имеющие отношение к контракту. По сути, он действует как состояние нашего контракта, храня значения, которые сохраняются в различных транзакциях, и позволяя смарт-контракту "запоминать" информацию. Именно эта способность позволяет нам создавать сложные и увлекательные децентрализованные приложения на блокчейне Tezos.

Глубокое понимание хранения данных

Прежде чем мы погрузимся в наш код для этого урока, давайте немного подробнее разберем концепцию хранения. Хранилище контракта - это состояние, которое сохраняется между вызовами функций. Если Вы знакомы с традиционным программированием, Вы можете думать об этом как о "глобальном состоянии" контракта. Это то, что позволяет пользователям постоянно взаимодействовать с контрактом в течение определенного времени.

Теперь давайте посмотрим на код нашего контракта для этого урока:

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)
        scenario.h1("Store Value")
 scenario += c1
 c1.replace(value=15)
 scenario.p("Some вычисление").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)

Выполнение и разбивка кода

В нашем примере контракта на хранение данных мы имеем несколько точек входа - замена, удвоение и деление. После развертывания этого контракта пользователи могут вызывать эти точки входа для взаимодействия с контрактом.

Для точек входа replace и divide пользователи должны предоставить параметры в транзакции. Для замены требуется параметр value, а для деления- параметр divisor.

Когда Вы запустите этот контракт в SmartPy IDE, справа Вы увидите визуальное представление операций и хранения контракта. Здесь Вы можете фактически смоделировать взаимодействие с пользователем. Вот пошаговое руководство:

  1. Разверните свой контракт, нажав на кнопку Развернуть.

  2. После развертывания Вы увидите контракт, представленный в разделе Контракты. Щелкните на нем.

  3. Теперь Вы увидите список точек входа для контракта.

  4. Для вызова замены введите в поле значение params.value, а затем нажмите на кнопку replace.

  5. Чтобы вызвать удвоение, просто нажмите кнопку удвоения.

  6. Чтобы вызвать функцию divide, введите в поле значение для params.divisor, а затем нажмите кнопку divide.
    Каждое из этих взаимодействий будет создавать новую операцию, перечисленную в контракте, и Вы сможете увидеть обновленное состояние хранилища контракта после каждой операции.

В этом контракте мы подчеркиваем концепцию хранения с помощью строки self.data.storedValue = value. Здесь self.data относится к хранилищу нашего контракта. Именно здесь мы храним состояние нашего контракта: единственный параметр с именем storedValue.

У нас также есть несколько точек входа в этот контракт. Точки входа - это, по сути, публичные функции, которые позволяют внешним сторонам взаимодействовать с контрактом. Здесь наши точки входа позволяют модифицировать storedValue различными способами. Мы можем заменить его новым значением, удвоить его или разделить на заданный делитель.

Далее рассмотрим сценарий тестирования, который мы настроили. Мы создаем экземпляр нашего контракта с начальным значением 12 для storedValue. Затем мы вызываем наши точки входа для изменения значения storedValue различными способами и проверяем результаты.

Почему хранение важно?

Возможность хранить и обновлять значения в хранилище контракта является основополагающей при создании смарт-контрактов Tezos. Он позволяет сохранять данные при различных взаимодействиях с контрактом. Будь то поддержание балансов в токен-контракте, хранение информации о пользователях в децентрализованном приложении или сохранение состояния игры на блокчейне, хранение данных является основной характеристикой, облегчающей выполнение этих функций.

Хранилище в смарт-контракте может содержать простые значения, такие как целые числа, строки и булевы, или более сложные структуры данных, такие как списки, карты и пользовательские объекты. Это позволяет нам строить сложную логику и переходы состояний в наших контрактах.

В следующем уроке мы продолжим развивать эти основные понятия, введем более сложные вычисления внутри смарт-контрактов и начнем работать с более продвинутыми типами данных в хранилище нашего контракта. Итак, следите за новостями и помните: практика делает совершенным. Не стесняйтесь экспериментировать с кодом, вносить изменения и наблюдать за результатами!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 2

Хранение значений в контракте

Здравствуйте и добро пожаловать обратно! В нашем первом уроке мы познакомили Вас со SmartPy и Tezos, создав очень простой смарт-контракт. В этом уроке мы углубимся в один из самых важных компонентов любого смарт-контракта Tezos: хранилище.

Что такое хранение?

В смарт-контракте Tezos хранилище - это как память контракта. Это место, где хранятся все данные, имеющие отношение к контракту. По сути, он действует как состояние нашего контракта, храня значения, которые сохраняются в различных транзакциях, и позволяя смарт-контракту "запоминать" информацию. Именно эта способность позволяет нам создавать сложные и увлекательные децентрализованные приложения на блокчейне Tezos.

Глубокое понимание хранения данных

Прежде чем мы погрузимся в наш код для этого урока, давайте немного подробнее разберем концепцию хранения. Хранилище контракта - это состояние, которое сохраняется между вызовами функций. Если Вы знакомы с традиционным программированием, Вы можете думать об этом как о "глобальном состоянии" контракта. Это то, что позволяет пользователям постоянно взаимодействовать с контрактом в течение определенного времени.

Теперь давайте посмотрим на код нашего контракта для этого урока:

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)
        scenario.h1("Store Value")
 scenario += c1
 c1.replace(value=15)
 scenario.p("Some вычисление").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)

Выполнение и разбивка кода

В нашем примере контракта на хранение данных мы имеем несколько точек входа - замена, удвоение и деление. После развертывания этого контракта пользователи могут вызывать эти точки входа для взаимодействия с контрактом.

Для точек входа replace и divide пользователи должны предоставить параметры в транзакции. Для замены требуется параметр value, а для деления- параметр divisor.

Когда Вы запустите этот контракт в SmartPy IDE, справа Вы увидите визуальное представление операций и хранения контракта. Здесь Вы можете фактически смоделировать взаимодействие с пользователем. Вот пошаговое руководство:

  1. Разверните свой контракт, нажав на кнопку Развернуть.

  2. После развертывания Вы увидите контракт, представленный в разделе Контракты. Щелкните на нем.

  3. Теперь Вы увидите список точек входа для контракта.

  4. Для вызова замены введите в поле значение params.value, а затем нажмите на кнопку replace.

  5. Чтобы вызвать удвоение, просто нажмите кнопку удвоения.

  6. Чтобы вызвать функцию divide, введите в поле значение для params.divisor, а затем нажмите кнопку divide.
    Каждое из этих взаимодействий будет создавать новую операцию, перечисленную в контракте, и Вы сможете увидеть обновленное состояние хранилища контракта после каждой операции.

В этом контракте мы подчеркиваем концепцию хранения с помощью строки self.data.storedValue = value. Здесь self.data относится к хранилищу нашего контракта. Именно здесь мы храним состояние нашего контракта: единственный параметр с именем storedValue.

У нас также есть несколько точек входа в этот контракт. Точки входа - это, по сути, публичные функции, которые позволяют внешним сторонам взаимодействовать с контрактом. Здесь наши точки входа позволяют модифицировать storedValue различными способами. Мы можем заменить его новым значением, удвоить его или разделить на заданный делитель.

Далее рассмотрим сценарий тестирования, который мы настроили. Мы создаем экземпляр нашего контракта с начальным значением 12 для storedValue. Затем мы вызываем наши точки входа для изменения значения storedValue различными способами и проверяем результаты.

Почему хранение важно?

Возможность хранить и обновлять значения в хранилище контракта является основополагающей при создании смарт-контрактов Tezos. Он позволяет сохранять данные при различных взаимодействиях с контрактом. Будь то поддержание балансов в токен-контракте, хранение информации о пользователях в децентрализованном приложении или сохранение состояния игры на блокчейне, хранение данных является основной характеристикой, облегчающей выполнение этих функций.

Хранилище в смарт-контракте может содержать простые значения, такие как целые числа, строки и булевы, или более сложные структуры данных, такие как списки, карты и пользовательские объекты. Это позволяет нам строить сложную логику и переходы состояний в наших контрактах.

В следующем уроке мы продолжим развивать эти основные понятия, введем более сложные вычисления внутри смарт-контрактов и начнем работать с более продвинутыми типами данных в хранилище нашего контракта. Итак, следите за новостями и помните: практика делает совершенным. Не стесняйтесь экспериментировать с кодом, вносить изменения и наблюдать за результатами!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.