Lesson 4

FIFO 契約登録

このレッスンでは、SmartPy コントラクトのより複雑な例である先入れ先出し (FIFO) キューについて掘り下げます。 FIFOは、データバッファを編成および操作する方法であり、キューの最も古い(最初の)エントリまたは「ヘッド」が最初に処理されます。

理論

FIFO データ構造では、キューに追加された最初の要素が最初に削除されます。 これは、新しい要素が追加されると、新しい要素を削除する前に、以前に追加されたすべての要素を削除する必要があるという要件と同じです。

出典:Invostopedia

スマートコントラクトのコンテキストでは、FIFOキューの実装は、すべての人が入ってきた順にサービスを受ける(または処理される)公平なキューイングシステムなど、多くのシナリオで役立ちます。

実用的

それでは、FIFOコントラクトを書いてみましょう。 コントラクトの主な操作は push、キューに要素を追加する と、 popキューから要素を削除することです。

コントラクトはキューをストレージ内のリストに格納し、すべての操作はリストの末尾に要素を追加し、すべてのpushpop操作はリストの先頭から要素を削除します。

コントラクトは次のようになります。

ニシキヘビ
SmartPy を SP としてインポートする

@sp.モジュール
デフmain():
    # Fifo クラスは、プッシュ命令とポップ命令を処理する単純なコントラクトを定義します
    #先入れ先出し法で。    class SimpleFifo(sp.契約):
        デフ __init__(セルフ):
            self.data.first = 0
            self.data.last = -1
            self.data.saved = {}

@sp.エントリポイント
        デフポップ(セルフ):
            self.data.first<self.data.lastをアサートします
            del self.data.saved[self.data.first]            self.data.first += 1

@sp.エントリポイント
        デフpush(自己、要素):
            self.data.last += 1
            self.data.saved[self.data.last] (self.data.last) = 要素

@sp.オンチェーンビュー
        デフヘッド(自己):
            self.data.saved[self.data.first]を返します「テンプレート」が __name__にない場合:

@sp.add_test(名前="FIFO")
    def test()を使用します。
        シナリオ = sp.test_scenario(main)        scenario.h1("シンプル FIFO契約")
        C1 = メイン。シンプルフィフォ()
        シナリオ += 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: 操作の順序を変更したり、新しい操作を追加したりして、実験します。

これで、TezosブロックチェーンでFIFOコントラクトを作成する方法を学びました。 次のレッスンでは、コントラクトが独自のビューを呼び出せる SmartPy の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 4

FIFO 契約登録

このレッスンでは、SmartPy コントラクトのより複雑な例である先入れ先出し (FIFO) キューについて掘り下げます。 FIFOは、データバッファを編成および操作する方法であり、キューの最も古い(最初の)エントリまたは「ヘッド」が最初に処理されます。

理論

FIFO データ構造では、キューに追加された最初の要素が最初に削除されます。 これは、新しい要素が追加されると、新しい要素を削除する前に、以前に追加されたすべての要素を削除する必要があるという要件と同じです。

出典:Invostopedia

スマートコントラクトのコンテキストでは、FIFOキューの実装は、すべての人が入ってきた順にサービスを受ける(または処理される)公平なキューイングシステムなど、多くのシナリオで役立ちます。

実用的

それでは、FIFOコントラクトを書いてみましょう。 コントラクトの主な操作は push、キューに要素を追加する と、 popキューから要素を削除することです。

コントラクトはキューをストレージ内のリストに格納し、すべての操作はリストの末尾に要素を追加し、すべてのpushpop操作はリストの先頭から要素を削除します。

コントラクトは次のようになります。

ニシキヘビ
SmartPy を SP としてインポートする

@sp.モジュール
デフmain():
    # Fifo クラスは、プッシュ命令とポップ命令を処理する単純なコントラクトを定義します
    #先入れ先出し法で。    class SimpleFifo(sp.契約):
        デフ __init__(セルフ):
            self.data.first = 0
            self.data.last = -1
            self.data.saved = {}

@sp.エントリポイント
        デフポップ(セルフ):
            self.data.first<self.data.lastをアサートします
            del self.data.saved[self.data.first]            self.data.first += 1

@sp.エントリポイント
        デフpush(自己、要素):
            self.data.last += 1
            self.data.saved[self.data.last] (self.data.last) = 要素

@sp.オンチェーンビュー
        デフヘッド(自己):
            self.data.saved[self.data.first]を返します「テンプレート」が __name__にない場合:

@sp.add_test(名前="FIFO")
    def test()を使用します。
        シナリオ = sp.test_scenario(main)        scenario.h1("シンプル FIFO契約")
        C1 = メイン。シンプルフィフォ()
        シナリオ += 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: 操作の順序を変更したり、新しい操作を追加したりして、実験します。

これで、TezosブロックチェーンでFIFOコントラクトを作成する方法を学びました。 次のレッスンでは、コントラクトが独自のビューを呼び出せる SmartPy の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent 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.