Lección 2

Зберігання значень у контракті

Привіт і ласкаво просимо назад! У нашому першому уроці ми познайомили вас із SmartPy і Tezos, створивши дуже простий смарт-контракт. У цьому уроці ми глибше заглибимося в один із найважливіших компонентів будь-якого смарт-контракту 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, праворуч ви побачите візуальне представлення операцій і сховища контракту. Тут можна фактично симулювати взаємодію користувача. Ось покрокова інструкція:

  1. Розгорніть свій контракт, натиснувши кнопку Deploy .

  2. Після розгортання ви побачите договір, представлений у розділі Contracts. Натисніть на нього.

  3. Тепер ви побачите перелік точок входу для контракту.

  4. Щоб викликати replace, введіть значення для params.value у полі, а потім натисніть кнопку replace .

  5. Щоб викликати double, просто натисніть double кнопку.

  6. Щоб викликати divide, введіть значення для params.divisor у полі, а потім натисніть кнопку divide .
    Кожна з цих взаємодій створить нову операцію, указану в контракті, і ви зможете побачити оновлений стан сховища контракту після кожної операції.

У цьому контракті ми підкреслюємо концепцію зберігання за допомогою рядка self.data.storedValue = value. Тут self.data стосується сховища за нашим контрактом. Тут ми зберігаємо стан нашого контракту: єдиний параметр під назвою storedValue.

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

Далі розглянемо сценарій тестування, який ми створили. Ми створюємо екземпляр нашого контракту з початковим значенням 12 для storedValue. Потім ми викликаємо наші точки входу, щоб змінювати значення storedValue різними способами та перевіряти результати.

Чому зберігання важливе?

Можливість зберігати та оновлювати значення в сховищі контракту є фундаментальною для створення смарт-контрактів Tezos. Це дозволяє зберігати дані під час різних взаємодій із контрактом. Незалежно від того, чи йдеться про підтримку балансів у контракті токена, зберігання інформації про користувача в децентралізованому додатку чи збереження стану гри в блокчейні, зберігання є основною функцією, яка полегшує ці функції.

Сховище в смарт-контракті може містити прості значення, такі як цілі числа, рядки та логічні значення, або більш складні структури даних, такі як списки, карти та користувацькі об’єкти. Це дозволяє нам будувати складну логіку та переходи між станами в наших контрактах.

У наступному уроці ми продовжимо розвивати ці основні концепції, представимо більш складні обчислення в смарт-контрактах і почнемо працювати з розширенішими типами даних у сховищі нашого контракту. Тож слідкуйте за оновленнями та пам’ятайте: практика робить досконалим. Не соромтеся експериментувати з кодом, вносити зміни та спостерігати за результатами!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 2

Зберігання значень у контракті

Привіт і ласкаво просимо назад! У нашому першому уроці ми познайомили вас із SmartPy і Tezos, створивши дуже простий смарт-контракт. У цьому уроці ми глибше заглибимося в один із найважливіших компонентів будь-якого смарт-контракту 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, праворуч ви побачите візуальне представлення операцій і сховища контракту. Тут можна фактично симулювати взаємодію користувача. Ось покрокова інструкція:

  1. Розгорніть свій контракт, натиснувши кнопку Deploy .

  2. Після розгортання ви побачите договір, представлений у розділі Contracts. Натисніть на нього.

  3. Тепер ви побачите перелік точок входу для контракту.

  4. Щоб викликати replace, введіть значення для params.value у полі, а потім натисніть кнопку replace .

  5. Щоб викликати double, просто натисніть double кнопку.

  6. Щоб викликати divide, введіть значення для params.divisor у полі, а потім натисніть кнопку divide .
    Кожна з цих взаємодій створить нову операцію, указану в контракті, і ви зможете побачити оновлений стан сховища контракту після кожної операції.

У цьому контракті ми підкреслюємо концепцію зберігання за допомогою рядка self.data.storedValue = value. Тут self.data стосується сховища за нашим контрактом. Тут ми зберігаємо стан нашого контракту: єдиний параметр під назвою storedValue.

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

Далі розглянемо сценарій тестування, який ми створили. Ми створюємо екземпляр нашого контракту з початковим значенням 12 для storedValue. Потім ми викликаємо наші точки входу, щоб змінювати значення storedValue різними способами та перевіряти результати.

Чому зберігання важливе?

Можливість зберігати та оновлювати значення в сховищі контракту є фундаментальною для створення смарт-контрактів Tezos. Це дозволяє зберігати дані під час різних взаємодій із контрактом. Незалежно від того, чи йдеться про підтримку балансів у контракті токена, зберігання інформації про користувача в децентралізованому додатку чи збереження стану гри в блокчейні, зберігання є основною функцією, яка полегшує ці функції.

Сховище в смарт-контракті може містити прості значення, такі як цілі числа, рядки та логічні значення, або більш складні структури даних, такі як списки, карти та користувацькі об’єкти. Це дозволяє нам будувати складну логіку та переходи між станами в наших контрактах.

У наступному уроці ми продовжимо розвивати ці основні концепції, представимо більш складні обчислення в смарт-контрактах і почнемо працювати з розширенішими типами даних у сховищі нашого контракту. Тож слідкуйте за оновленнями та пам’ятайте: практика робить досконалим. Не соромтеся експериментувати з кодом, вносити зміни та спостерігати за результатами!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.