Tezosのスマートコントラクトでは、ストレージはコントラクトのメモリのようなものです。 これは、契約に関連するすべてのデータが保持される場所です。 基本的に、それは私たちのコントラクトの状態として機能し、異なるトランザクション間で持続する値を保存し、スマートコントラクトが情報を「記憶」できるようにします。 この機能により、Tezosブロックチェーン上で複雑で魅力的な分散型アプリケーションを構築することができます。
このレッスンのコードに飛び込む前に、ストレージの概念をもう少し詳しく見てみましょう。 コントラクトのストレージは、関数呼び出し間で保持される状態です。 従来のプログラミングのバックグラウンドを持っている場合は、コントラクトの「グローバル状態」と考えることができます。 これにより、ユーザーは時間の経過とともに契約と継続的にやり取りできます。
それでは、このレッスンのコントラクトコードを見てみましょう。
ニシキヘビ
SmartPy を SP としてインポートする
@sp.モジュール
デフmain():
class StoreValue(sp.契約):
デフ __init__(自己、値):
self.data.storedValue = 値
@sp.エントリポイント
デフreplace(self、params):
self.data.storedValue = params.value
@sp.エントリポイント
def double(self):
self.data.storedValue *= 2
@sp.エントリポイント
def divide(self, params):
params.divisor > 5をアサートします
self.data.storedValue /= params.divisor
「テンプレート」が __name__にない場合:
@sp.add_test(name="StoreValue") (英語)
def test()を使用します。
C1 = メイン。ストアバリュー(12)
シナリオ = sp.test_scenario(main) scenario.h1("ストア 値")
シナリオ += C1
c1.replace(値=15)
scenario.p("いくつかの 計算").show(c1.data.storedValue * 12)
c1.replace(値=25)
c1.double()を
c1.divide(divisor=2).run( valid=False, exception="WrongCondition: params.divisor > 5" (有効=False、例外="WrongCondition: params.divisor 5"
)
scenario.verify(c1.data.storedValue == 50)
c1.divide(除数=6)
scenario.verify(c1.data.storedValue == 8)
ストレージ コントラクトの例では、 replacedoubledivideこのコントラクトをデプロイした後、ユーザーはこれらのエントリポイントを呼び出してコントラクトを操作できます。
replaceとdivideエントリポイントの場合、ユーザーはトランザクションでパラメーターを指定する必要があります。の場合はreplaceパラメータが必須で、 の場合はdivideパラメータvaluedivisorが必須です。
このコントラクトを SmartPy IDE で実行すると、右側にコントラクトの操作とストレージが視覚的に表示されます。 ここでは、実際にユーザー操作をシミュレートできます。 以下は、そのステップバイステップガイドです。
ボタンをクリックして契約 Deploy をデプロイします。
展開後、コントラクトが の下に Contracts表示されます。 クリックして。
これで、コントラクトのエントリポイントが一覧表示されます。
呼び出す replaceには、フィールドにの値 params.value を入力し、 replace ボタンをクリックします。
電話をかけ doubleるには、ボタンをクリックするだけです double 。
呼び出す divideには、フィールドにの値 params.divisor を入力し、 divide ボタンをクリックします。
これらの各インタラクションにより、コントラクトの下に一覧表示される新しい操作が作成され、各操作後にコントラクトのストレージの更新された状態を確認できます。

この契約では、 という行 self.data.storedValue = valueでストレージの概念を強調しています。 ここでは、 self.data 契約の保管を指します。 これは、コントラクトの状態を保持している場所であり、 という名前の 1 つのパラメーター storedValueです。
また、この契約にはいくつかのエントリポイントがあります。 エントリ ポイントは基本的に、外部の当事者がコントラクトと対話できるようにするパブリック機能です。 ここでは、エントリポイントでさまざまな方法で変更できます storedValue 。 新しい値に置き換えたり、2倍にしたり、特定の除数で除算したりできます。
次に、設定したテストシナリオについて考えてみましょう。 の初期値12storedValueを持つコントラクトのインスタンスを作成します。次に、エントリ ポイントを呼び出して、さまざまな方法で値を変更し、 storedValue 結果を検証します。
コントラクトのストレージ内に値を保存・更新する機能は、Tezosのスマートコントラクトを構築するための基本です。 これにより、コントラクトとのさまざまなやり取りにわたってデータの永続性が可能になります。 トークンコントラクトの残高を維持したり、分散型アプリケーションにユーザー情報を保存したり、ブロックチェーン上でゲームの状態を保持したりする場合でも、ストレージはこれらの機能を容易にするコア機能です。
スマートコントラクトのストレージには、整数、文字列、ブール値などの単純な値や、リスト、マップ、カスタム定義オブジェクトなどのより複雑なデータ構造を含めることができます。 これにより、コントラクトに複雑なロジックと状態遷移を構築できます。
次のレッスンでは、これらのコアコンセプトを引き続き構築し、スマートコントラクト内でより複雑な計算を導入し、コントラクトのストレージでより高度なデータ型の作業を開始します。 ですから、ご期待ください:練習は完璧になります。 コードを試し、変更を加え、結果を確認することを躊躇しないでください。