Lección 4

Создание контрактов FIFO

В этом уроке мы рассмотрим более сложный пример контрактов SmartPy: очередь "первый пришел - первый ушел" (FIFO). FIFO - это метод организации и манипулирования буфером данных, при котором самая старая (первая) запись, или "голова" очереди, обрабатывается первой.

Теория

В структуре данных FIFO первый элемент, добавленный в очередь, будет и первым удаленным. Это эквивалентно требованию, согласно которому после добавления нового элемента все элементы, которые были добавлены до этого, должны быть удалены, прежде чем можно будет удалить новый элемент.

Источник: Invostopedia

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

Практический

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

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

Вот как может выглядеть контракт:

Python
import smartpy as sp


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

    class 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]


if "templates" not in __name__:

   @sp.add_test(name="Fifo")
 def test():
 scenario = sp.test_scenario(main)
        scenario.h1("Simple Fifo Contract")
 c1 = main.SimpleFifo()
 scenario += c1
 c1.push(4)
 c1.push(5)
 c1.push(6)
 c1.push(7)
 c1.pop()
 scenario.verify(sp.View(c1, "head")() == 5)

Чтобы протестировать контракт FIFO:

Шаг 1: Скопируйте код контракта и вставьте его в SmartPy IDE.

Шаг 2: Нажмите кнопку Run (Выполнить ) в правом верхнем углу, чтобы скомпилировать и смоделировать контракт.

Шаг 3: Посмотрите правую часть IDE, чтобы увидеть результаты моделирования. Вы увидите состояние хранилища контрактов после каждой операции.

Шаг 4: Экспериментируйте, изменяя порядок операций или добавляя новые операции.

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

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 4

Создание контрактов FIFO

В этом уроке мы рассмотрим более сложный пример контрактов SmartPy: очередь "первый пришел - первый ушел" (FIFO). FIFO - это метод организации и манипулирования буфером данных, при котором самая старая (первая) запись, или "голова" очереди, обрабатывается первой.

Теория

В структуре данных FIFO первый элемент, добавленный в очередь, будет и первым удаленным. Это эквивалентно требованию, согласно которому после добавления нового элемента все элементы, которые были добавлены до этого, должны быть удалены, прежде чем можно будет удалить новый элемент.

Источник: Invostopedia

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

Практический

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

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

Вот как может выглядеть контракт:

Python
import smartpy as sp


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

    class 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]


if "templates" not in __name__:

   @sp.add_test(name="Fifo")
 def test():
 scenario = sp.test_scenario(main)
        scenario.h1("Simple Fifo Contract")
 c1 = main.SimpleFifo()
 scenario += c1
 c1.push(4)
 c1.push(5)
 c1.push(6)
 c1.push(7)
 c1.pop()
 scenario.verify(sp.View(c1, "head")() == 5)

Чтобы протестировать контракт FIFO:

Шаг 1: Скопируйте код контракта и вставьте его в SmartPy IDE.

Шаг 2: Нажмите кнопку Run (Выполнить ) в правом верхнем углу, чтобы скомпилировать и смоделировать контракт.

Шаг 3: Посмотрите правую часть IDE, чтобы увидеть результаты моделирования. Вы увидите состояние хранилища контрактов после каждой операции.

Шаг 4: Экспериментируйте, изменяя порядок операций или добавляя новые операции.

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

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.
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.