Урок 4

FIFO合約創建

在本課中,我們將深入探討SmartPy合約的一個更覆雜的案例:先進先出(FIFO)隊列。FIFO是一種組織和操作數據緩衝區的方法,首先處理隊列中最早的(第一個)指令,又稱“頭(head)”。

理論

在FIFO的數據結構中,第一個加入隊列的元素也將是第一個被移除的元素。也就是説,一旦添加了新元素,必鬚先移除之前添加的所有元素,才能移除新元素。

來源:Investopedia

在智能合約中,實現FIFO隊列可以用於許多場景,例如公平的排隊繫統,每個人都按照他們到達的順序得到服務(或處理)。

實操

我們直接開始編寫一個FIFO合約。合約的兩個主要運算將是push(用於曏隊列添加元素)和pop(用於從隊列中移除元素)。

合約將隊列存儲在其存儲空間中的列錶中,每次push運算都會將一個元素追加到列錶的末尾,而每次pop運算都會從列錶的開頭移除一個元素。

合約代碼如下:

Python
import smartpy as sp


@sp.module
def main():
    # The Fifo class defines a simple contract that handles push and pop instructions
    # on a first-in first-out basis.

    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] = element

        @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合約:

第一步:覆製合約代碼併粘貼至SmartPy IDE中。

第二步:點擊右上角的Run按鈕來編譯和模擬合約。

第三步:查看IDE右側的模擬結果。你將看到每次運算後合衕存儲的狀態。

第四步:嘗試更改運算的順序或添加新運算。

現在,你已經學會了如何在Tezos區塊鏈上創建FIFO合約!在下一課中,我們將進一步介紹SmartPy的一個強大功能——遞歸,可以讓合約調用自身。祝大家編程愉快!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.
Каталог
Урок 4

FIFO合約創建

在本課中,我們將深入探討SmartPy合約的一個更覆雜的案例:先進先出(FIFO)隊列。FIFO是一種組織和操作數據緩衝區的方法,首先處理隊列中最早的(第一個)指令,又稱“頭(head)”。

理論

在FIFO的數據結構中,第一個加入隊列的元素也將是第一個被移除的元素。也就是説,一旦添加了新元素,必鬚先移除之前添加的所有元素,才能移除新元素。

來源:Investopedia

在智能合約中,實現FIFO隊列可以用於許多場景,例如公平的排隊繫統,每個人都按照他們到達的順序得到服務(或處理)。

實操

我們直接開始編寫一個FIFO合約。合約的兩個主要運算將是push(用於曏隊列添加元素)和pop(用於從隊列中移除元素)。

合約將隊列存儲在其存儲空間中的列錶中,每次push運算都會將一個元素追加到列錶的末尾,而每次pop運算都會從列錶的開頭移除一個元素。

合約代碼如下:

Python
import smartpy as sp


@sp.module
def main():
    # The Fifo class defines a simple contract that handles push and pop instructions
    # on a first-in first-out basis.

    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] = element

        @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合約:

第一步:覆製合約代碼併粘貼至SmartPy IDE中。

第二步:點擊右上角的Run按鈕來編譯和模擬合約。

第三步:查看IDE右側的模擬結果。你將看到每次運算後合衕存儲的狀態。

第四步:嘗試更改運算的順序或添加新運算。

現在,你已經學會了如何在Tezos區塊鏈上創建FIFO合約!在下一課中,我們將進一步介紹SmartPy的一個強大功能——遞歸,可以讓合約調用自身。祝大家編程愉快!

Отказ от ответственности
* Криптоинвестирование сопряжено со значительными рисками. Будьте осторожны. Курс не является инвестиционным советом.
* Курс создан автором, который присоединился к Gate Learn. Мнение автора может не совпадать с мнением Gate Learn.