У смарт-контракті Tezos сховище схоже на пам’ять контракту. Це місце, де зберігаються всі дані, пов’язані з договором. По суті, він діє як стан нашого контракту, зберігаючи значення, які зберігаються в різних транзакціях, і дозволяючи розумному контракту «запам’ятовувати» інформацію. Саме ця можливість дозволяє нам створювати складні та захоплюючі децентралізовані програми на блокчейні Tezos.
Перш ніж ми заглибимося в наш код для цього уроку, давайте трохи докладніше розберемо концепцію зберігання. Зберігання контракту — це стан, який зберігається між викликами функцій. Якщо ви працюєте з традиційним програмуванням, ви можете думати про це як про «глобальний стан» контракту. Це те, що дозволяє користувачам мати постійну взаємодію з контрактом протягом тривалого часу.
А тепер давайте подивимося на код контракту для цього уроку:
Python
імпортує smartpy як 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 , параметри):
assert params.divisor > 5
self.data.storedValue /= params.divisor
якщо "шаблони" не в __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
сценарій = sp.test_scenario(main)
scenario.h1("Зберігати Значення")
сценарій += c1
c1.replace(value=15)
scenario.p("Деякі обчислення").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
, double
і divide
. Після розгортання цього контракту користувачі можуть викликати ці точки входу для взаємодії з контрактом.
Для точок входу replace
та divide
користувачі повинні надати параметри в транзакції. Для replace
потрібне value
параметра, а для divide
потрібен divisor
параметра.
Коли ви запускаєте цей контракт у середовищі розробки SmartPy, праворуч ви побачите візуальне представлення операцій і сховища контракту. Тут можна фактично симулювати взаємодію користувача. Ось покрокова інструкція:
Розгорніть свій контракт, натиснувши кнопку Deploy
.
Після розгортання ви побачите договір, представлений у розділі Contracts
. Натисніть на нього.
Тепер ви побачите перелік точок входу для контракту.
Щоб викликати replace
, введіть значення для params.value
у полі, а потім натисніть кнопку replace
.
Щоб викликати double
, просто натисніть double
кнопку.
Щоб викликати divide
, введіть значення для params.divisor
у полі, а потім натисніть кнопку divide
.
Кожна з цих взаємодій створить нову операцію, указану в контракті, і ви зможете побачити оновлений стан сховища контракту після кожної операції.
У цьому контракті ми підкреслюємо концепцію зберігання за допомогою рядка self.data.storedValue = value
. Тут self.data
стосується сховища за нашим контрактом. Тут ми зберігаємо стан нашого контракту: єдиний параметр під назвою storedValue
.
У нас також є кілька точок входу в цей контракт. Точки входу — це, по суті, публічні функції, які дозволяють зовнішнім сторонам взаємодіяти з контрактом. Тут наші точки входу дозволяють змінювати storedValue
різними способами. Ми можемо замінити його новим значенням, подвоїти або поділити на заданий дільник.
Далі розглянемо сценарій тестування, який ми створили. Ми створюємо екземпляр нашого контракту з початковим значенням 12
для storedValue
. Потім ми викликаємо наші точки входу, щоб змінювати значення storedValue
різними способами та перевіряти результати.
Можливість зберігати та оновлювати значення в сховищі контракту є фундаментальною для створення смарт-контрактів Tezos. Це дозволяє зберігати дані під час різних взаємодій із контрактом. Незалежно від того, чи йдеться про підтримку балансів у контракті токена, зберігання інформації про користувача в децентралізованому додатку чи збереження стану гри в блокчейні, зберігання є основною функцією, яка полегшує ці функції.
Сховище в смарт-контракті може містити прості значення, такі як цілі числа, рядки та логічні значення, або більш складні структури даних, такі як списки, карти та користувацькі об’єкти. Це дозволяє нам будувати складну логіку та переходи між станами в наших контрактах.
У наступному уроці ми продовжимо розвивати ці основні концепції, представимо більш складні обчислення в смарт-контрактах і почнемо працювати з розширенішими типами даних у сховищі нашого контракту. Тож слідкуйте за оновленнями та пам’ятайте: практика робить досконалим. Не соромтеся експериментувати з кодом, вносити зміни та спостерігати за результатами!
У смарт-контракті Tezos сховище схоже на пам’ять контракту. Це місце, де зберігаються всі дані, пов’язані з договором. По суті, він діє як стан нашого контракту, зберігаючи значення, які зберігаються в різних транзакціях, і дозволяючи розумному контракту «запам’ятовувати» інформацію. Саме ця можливість дозволяє нам створювати складні та захоплюючі децентралізовані програми на блокчейні Tezos.
Перш ніж ми заглибимося в наш код для цього уроку, давайте трохи докладніше розберемо концепцію зберігання. Зберігання контракту — це стан, який зберігається між викликами функцій. Якщо ви працюєте з традиційним програмуванням, ви можете думати про це як про «глобальний стан» контракту. Це те, що дозволяє користувачам мати постійну взаємодію з контрактом протягом тривалого часу.
А тепер давайте подивимося на код контракту для цього уроку:
Python
імпортує smartpy як 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 , параметри):
assert params.divisor > 5
self.data.storedValue /= params.divisor
якщо "шаблони" не в __name__:
@sp.add_test(name="StoreValue")
def test() :
c1 = main.StoreValue(12)
сценарій = sp.test_scenario(main)
scenario.h1("Зберігати Значення")
сценарій += c1
c1.replace(value=15)
scenario.p("Деякі обчислення").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
, double
і divide
. Після розгортання цього контракту користувачі можуть викликати ці точки входу для взаємодії з контрактом.
Для точок входу replace
та divide
користувачі повинні надати параметри в транзакції. Для replace
потрібне value
параметра, а для divide
потрібен divisor
параметра.
Коли ви запускаєте цей контракт у середовищі розробки SmartPy, праворуч ви побачите візуальне представлення операцій і сховища контракту. Тут можна фактично симулювати взаємодію користувача. Ось покрокова інструкція:
Розгорніть свій контракт, натиснувши кнопку Deploy
.
Після розгортання ви побачите договір, представлений у розділі Contracts
. Натисніть на нього.
Тепер ви побачите перелік точок входу для контракту.
Щоб викликати replace
, введіть значення для params.value
у полі, а потім натисніть кнопку replace
.
Щоб викликати double
, просто натисніть double
кнопку.
Щоб викликати divide
, введіть значення для params.divisor
у полі, а потім натисніть кнопку divide
.
Кожна з цих взаємодій створить нову операцію, указану в контракті, і ви зможете побачити оновлений стан сховища контракту після кожної операції.
У цьому контракті ми підкреслюємо концепцію зберігання за допомогою рядка self.data.storedValue = value
. Тут self.data
стосується сховища за нашим контрактом. Тут ми зберігаємо стан нашого контракту: єдиний параметр під назвою storedValue
.
У нас також є кілька точок входу в цей контракт. Точки входу — це, по суті, публічні функції, які дозволяють зовнішнім сторонам взаємодіяти з контрактом. Тут наші точки входу дозволяють змінювати storedValue
різними способами. Ми можемо замінити його новим значенням, подвоїти або поділити на заданий дільник.
Далі розглянемо сценарій тестування, який ми створили. Ми створюємо екземпляр нашого контракту з початковим значенням 12
для storedValue
. Потім ми викликаємо наші точки входу, щоб змінювати значення storedValue
різними способами та перевіряти результати.
Можливість зберігати та оновлювати значення в сховищі контракту є фундаментальною для створення смарт-контрактів Tezos. Це дозволяє зберігати дані під час різних взаємодій із контрактом. Незалежно від того, чи йдеться про підтримку балансів у контракті токена, зберігання інформації про користувача в децентралізованому додатку чи збереження стану гри в блокчейні, зберігання є основною функцією, яка полегшує ці функції.
Сховище в смарт-контракті може містити прості значення, такі як цілі числа, рядки та логічні значення, або більш складні структури даних, такі як списки, карти та користувацькі об’єкти. Це дозволяє нам будувати складну логіку та переходи між станами в наших контрактах.
У наступному уроці ми продовжимо розвивати ці основні концепції, представимо більш складні обчислення в смарт-контрактах і почнемо працювати з розширенішими типами даних у сховищі нашого контракту. Тож слідкуйте за оновленнями та пам’ятайте: практика робить досконалим. Не соромтеся експериментувати з кодом, вносити зміни та спостерігати за результатами!