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

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第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, позволяющей контрактам вызывать свои собственные представления. Продолжайте исследовать и счастливого кодирования!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。