レッスン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 の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン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 の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。