В структуре данных 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, позволяющей контрактам вызывать свои собственные представления. Продолжайте исследовать и счастливого кодирования!
В структуре данных 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, позволяющей контрактам вызывать свои собственные представления. Продолжайте исследовать и счастливого кодирования!