Урок 4

Створення контракту FIFO

У цьому уроці ми розглянемо більш складний приклад контрактів SmartPy: чергу першим прийшов, першим вийшов (FIFO). FIFO — це метод організації буфера даних і керування ним, де першим обробляється найстаріший (перший) запис або «голова» черги.

Теорія

У структурі даних FIFO перший елемент, доданий до черги, буде першим видаленим. Це еквівалентно вимозі, згідно з якою після додавання нового елемента всі елементи, додані раніше, повинні бути видалені, перш ніж можна буде видалити новий елемент.

Джерело: Invostopedia

У контексті смарт-контрактів реалізація черги FIFO може бути корисною для багатьох сценаріїв, наприклад, чесної системи черги, де всі обслуговуються (або обробляються) у тому порядку, у якому вони надходять.

Практичний

Давайте напишемо контракт FIFO. Основними операціями для нашого контракту будуть push, щоб додати елементи до черги, і pop, щоб видалити елементи з черги.

Контракт зберігає чергу в списку у своєму сховищі, і кожна операція push додає елемент у кінець списку, тоді як кожна операція pop видаляє елемент із початку списку.

Ось як може виглядати договір:

Python 
 імпортує smartpy як sp 


 @sp.module 
 def main(): 
 # Клас Fifo визначає простий контракт, який обробляє інструкції push і pop 
 # за принципом "перший прийшов - перший вийшов".

    клас SimpleFifo(sp.Contract): 
 def __init__(self): 
 self.data.first = 0 
 self.data.last = -1 
 self.data.saved = {} 

 @sp.entrypoint 
 def pop(self): 
 assert self.data.first < self.data.last 
 del self.data.saved[self.data.first]
            self.data.first += 1 

 @sp.entrypoint 
 def push(self, element): 
 self.data.last += 1 
 self.data.saved[self.data.last] = елемент 

 @sp.onchain_view 
 def head(self): 
 return self.data.saved[self.data.first]


якщо "шаблони" відсутні в __name__: 

 @sp.add_test(name="Fifo") 
 def test(): 
 сценарій = sp.test_scenario(main)
        scenario.h1("Просто Контракт Fifo") 
 c1 = main.SimpleFifo() 
 сценарій += c1 
 c1.push(4) 
 c1.push(5) 
 c1.push(6) 
 c1.push(7) 
 c1.pop( ) 
 scenario.verify(sp.View(c1, "head")() == 5)

Щоб перевірити контракт FIFO:

Крок 1: Скопіюйте код контракту та вставте його в IDE SmartPy.

Крок 2: натисніть кнопку Run у верхньому правому куті, щоб скомпілювати та імітувати контракт.

Крок 3. Перевірте праву частину IDE, щоб побачити результати моделювання. Після кожної операції ви побачите стан контрактного сховища.

Крок 4: Експериментуйте, змінюючи порядок операцій або додаючи нові операції.

Тепер ви дізналися, як створити контракт FIFO на блокчейні Tezos! У наступному уроці ми розглянемо рекурсивні представлення, потужну функцію SmartPy, яка дозволяє контрактам викликати власні представлення. Продовжуйте досліджувати та щасливого кодування!

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 4

Створення контракту FIFO

У цьому уроці ми розглянемо більш складний приклад контрактів SmartPy: чергу першим прийшов, першим вийшов (FIFO). FIFO — це метод організації буфера даних і керування ним, де першим обробляється найстаріший (перший) запис або «голова» черги.

Теорія

У структурі даних FIFO перший елемент, доданий до черги, буде першим видаленим. Це еквівалентно вимозі, згідно з якою після додавання нового елемента всі елементи, додані раніше, повинні бути видалені, перш ніж можна буде видалити новий елемент.

Джерело: Invostopedia

У контексті смарт-контрактів реалізація черги FIFO може бути корисною для багатьох сценаріїв, наприклад, чесної системи черги, де всі обслуговуються (або обробляються) у тому порядку, у якому вони надходять.

Практичний

Давайте напишемо контракт FIFO. Основними операціями для нашого контракту будуть push, щоб додати елементи до черги, і pop, щоб видалити елементи з черги.

Контракт зберігає чергу в списку у своєму сховищі, і кожна операція push додає елемент у кінець списку, тоді як кожна операція pop видаляє елемент із початку списку.

Ось як може виглядати договір:

Python 
 імпортує smartpy як sp 


 @sp.module 
 def main(): 
 # Клас Fifo визначає простий контракт, який обробляє інструкції push і pop 
 # за принципом "перший прийшов - перший вийшов".

    клас SimpleFifo(sp.Contract): 
 def __init__(self): 
 self.data.first = 0 
 self.data.last = -1 
 self.data.saved = {} 

 @sp.entrypoint 
 def pop(self): 
 assert self.data.first < self.data.last 
 del self.data.saved[self.data.first]
            self.data.first += 1 

 @sp.entrypoint 
 def push(self, element): 
 self.data.last += 1 
 self.data.saved[self.data.last] = елемент 

 @sp.onchain_view 
 def head(self): 
 return self.data.saved[self.data.first]


якщо "шаблони" відсутні в __name__: 

 @sp.add_test(name="Fifo") 
 def test(): 
 сценарій = sp.test_scenario(main)
        scenario.h1("Просто Контракт Fifo") 
 c1 = main.SimpleFifo() 
 сценарій += c1 
 c1.push(4) 
 c1.push(5) 
 c1.push(6) 
 c1.push(7) 
 c1.pop( ) 
 scenario.verify(sp.View(c1, "head")() == 5)

Щоб перевірити контракт FIFO:

Крок 1: Скопіюйте код контракту та вставте його в IDE SmartPy.

Крок 2: натисніть кнопку Run у верхньому правому куті, щоб скомпілювати та імітувати контракт.

Крок 3. Перевірте праву частину IDE, щоб побачити результати моделювання. Після кожної операції ви побачите стан контрактного сховища.

Крок 4: Експериментуйте, змінюючи порядок операцій або додаючи нові операції.

Тепер ви дізналися, як створити контракт FIFO на блокчейні Tezos! У наступному уроці ми розглянемо рекурсивні представлення, потужну функцію SmartPy, яка дозволяє контрактам викликати власні представлення. Продовжуйте досліджувати та щасливого кодування!

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.