FIFO データ構造では、キューに追加された最初の要素が最初に削除されます。 これは、新しい要素が追加されると、新しい要素を削除する前に、以前に追加されたすべての要素を削除する必要があるという要件と同じです。
出典:Invostopedia
スマートコントラクトのコンテキストでは、FIFOキューの実装は、すべての人が入ってきた順にサービスを受ける(または処理される)公平なキューイングシステムなど、多くのシナリオで役立ちます。
それでは、FIFOコントラクトを書いてみましょう。 コントラクトの主な操作は push
、キューに要素を追加する と、 pop
キューから要素を削除することです。
コントラクトはキューをストレージ内のリストに格納し、すべての操作はリストの末尾に要素を追加し、すべてのpush
pop
操作はリストの先頭から要素を削除します。
コントラクトは次のようになります。
ニシキヘビ
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 の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!
FIFO データ構造では、キューに追加された最初の要素が最初に削除されます。 これは、新しい要素が追加されると、新しい要素を削除する前に、以前に追加されたすべての要素を削除する必要があるという要件と同じです。
出典:Invostopedia
スマートコントラクトのコンテキストでは、FIFOキューの実装は、すべての人が入ってきた順にサービスを受ける(または処理される)公平なキューイングシステムなど、多くのシナリオで役立ちます。
それでは、FIFOコントラクトを書いてみましょう。 コントラクトの主な操作は push
、キューに要素を追加する と、 pop
キューから要素を削除することです。
コントラクトはキューをストレージ内のリストに格納し、すべての操作はリストの末尾に要素を追加し、すべてのpush
pop
操作はリストの先頭から要素を削除します。
コントラクトは次のようになります。
ニシキヘビ
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 の強力な機能である再帰的ビューについてさらに詳しく説明します。 探求を続け、幸せなコーディングをしてください!