Tezosのスマートコントラクトは、オブジェクト指向プログラミングのメソッドや関数と見なすことができる複数のエントリーポイントを持つことができます。 これらの各エントリ ポイントは、独自のパラメーターを持つことができ、コントラクトのストレージと対話できます。 電卓の契約では、各数学演算がエントリポイントになります。
ストレージのすべての変更はブロックチェーンに記録されることに注意することが重要です。 その結果、私たちが実行する操作は、通常の電卓のように一時的なものではありません。 その代わり、Tezosブロックチェーン上での不変で監査可能な操作です。
また、Tezosブロックチェーンは分散化されているため、すべての計算は決定論的である必要があることを覚えておく価値があります。 つまり、除算などの操作は、これまでとは若干異なる動作をする可能性があります。 例えば、Tezosの契約における除算は整数除算であるため、3を2で割ると1.5ではなく1になります。
以下は電卓の契約コードです。 コントラクトは Calculator
、操作の結果をストレージに格納します。 各エントリ ポイントは 1 つのパラメーターを受け取り、格納された結果と入力パラメーターを使用して操作を実行します。
ニシキヘビ
SmartPy を SP としてインポートする
@sp.モジュール
デフmain():
class Calculator(sp.契約):
デフ __init__(セルフ):
self.data.result = 0
@sp.エントリポイント
def multiply(self, x, y):
self.data.result = x * y
@sp.エントリポイント
デフadd(自己、x、y):
self.data.result = x + y
@sp.エントリポイント
def square(self, x):
self.data.result = x * x
@sp.エントリポイント
デフsquareRoot(自己、x):
アサート x >= 0
y = x
y * y > x:
y = (x / y + y) / 2
アサート y * y <= x and x < (y + 1) * (y + 1)
self.data.result = y
@sp.エントリポイント
def factorial(self, x):
self.data.result = 1
範囲(1、x + 1)のyの場合:
self.data.result *= y
@sp.エントリポイント
デフlog2(自己、x):
assert x > 0, "入力は 0 より大きくなければならない"
self.data.result = 0 # カウンターを初期化する
if x < 1: # 0 < x < 1 間隔の場合
y = x
y < 1 の場合:
self.data.result -= 1 # カウンターをデクリメントする
y *= 2 # y >= 1 になるまで y に 2 を掛ける
else: # x >= 1 の場合
y = x
y >= 2 の場合:
self.data.result += 1 # カウンターをインクリメント
y /= 2 # y を 2 で割る
「テンプレート」が __name__にない場合: @sp.add_test(name = "電卓")
def test()を使用します。
C1 = メイン。電卓()
シナリオ = sp.test_scenario(main) scenario.h1("電卓") シナリオ += C1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
C1.スクエア(12)
c1.squareRoot(0)
c1.平方根(1234)
c1.階乗(100)
c1.log2(c1.data.result) シナリオ.ベリファイ(c1.data.result == 524)
この契約を実行に移しましょう!
ステップ 1: コントラクト コードを SmartPy IDE に貼り付けます。
ステップ2: Run
右上のボタンをクリックして、コントラクトをコンパイルしてシミュレートします。
ステップ3:IDEの右側でシミュレーション結果を確認します。 コントラクトストレージの状態は、乗算、加算、平方根などの各操作の後に確認できます
ステップ4:操作のパラメータを自由に変更し、契約ストレージの変化を観察してください。
これで、基本的な電卓操作を実行するスマートコントラクトを構築して操作できました。 次のレッスンでは、FIFOコントラクトの作成など、より高度な概念を見ていきます。 探求を続け、幸せなコーディングをすることを忘れないでください!
Tezosのスマートコントラクトは、オブジェクト指向プログラミングのメソッドや関数と見なすことができる複数のエントリーポイントを持つことができます。 これらの各エントリ ポイントは、独自のパラメーターを持つことができ、コントラクトのストレージと対話できます。 電卓の契約では、各数学演算がエントリポイントになります。
ストレージのすべての変更はブロックチェーンに記録されることに注意することが重要です。 その結果、私たちが実行する操作は、通常の電卓のように一時的なものではありません。 その代わり、Tezosブロックチェーン上での不変で監査可能な操作です。
また、Tezosブロックチェーンは分散化されているため、すべての計算は決定論的である必要があることを覚えておく価値があります。 つまり、除算などの操作は、これまでとは若干異なる動作をする可能性があります。 例えば、Tezosの契約における除算は整数除算であるため、3を2で割ると1.5ではなく1になります。
以下は電卓の契約コードです。 コントラクトは Calculator
、操作の結果をストレージに格納します。 各エントリ ポイントは 1 つのパラメーターを受け取り、格納された結果と入力パラメーターを使用して操作を実行します。
ニシキヘビ
SmartPy を SP としてインポートする
@sp.モジュール
デフmain():
class Calculator(sp.契約):
デフ __init__(セルフ):
self.data.result = 0
@sp.エントリポイント
def multiply(self, x, y):
self.data.result = x * y
@sp.エントリポイント
デフadd(自己、x、y):
self.data.result = x + y
@sp.エントリポイント
def square(self, x):
self.data.result = x * x
@sp.エントリポイント
デフsquareRoot(自己、x):
アサート x >= 0
y = x
y * y > x:
y = (x / y + y) / 2
アサート y * y <= x and x < (y + 1) * (y + 1)
self.data.result = y
@sp.エントリポイント
def factorial(self, x):
self.data.result = 1
範囲(1、x + 1)のyの場合:
self.data.result *= y
@sp.エントリポイント
デフlog2(自己、x):
assert x > 0, "入力は 0 より大きくなければならない"
self.data.result = 0 # カウンターを初期化する
if x < 1: # 0 < x < 1 間隔の場合
y = x
y < 1 の場合:
self.data.result -= 1 # カウンターをデクリメントする
y *= 2 # y >= 1 になるまで y に 2 を掛ける
else: # x >= 1 の場合
y = x
y >= 2 の場合:
self.data.result += 1 # カウンターをインクリメント
y /= 2 # y を 2 で割る
「テンプレート」が __name__にない場合: @sp.add_test(name = "電卓")
def test()を使用します。
C1 = メイン。電卓()
シナリオ = sp.test_scenario(main) scenario.h1("電卓") シナリオ += C1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
C1.スクエア(12)
c1.squareRoot(0)
c1.平方根(1234)
c1.階乗(100)
c1.log2(c1.data.result) シナリオ.ベリファイ(c1.data.result == 524)
この契約を実行に移しましょう!
ステップ 1: コントラクト コードを SmartPy IDE に貼り付けます。
ステップ2: Run
右上のボタンをクリックして、コントラクトをコンパイルしてシミュレートします。
ステップ3:IDEの右側でシミュレーション結果を確認します。 コントラクトストレージの状態は、乗算、加算、平方根などの各操作の後に確認できます
ステップ4:操作のパラメータを自由に変更し、契約ストレージの変化を観察してください。
これで、基本的な電卓操作を実行するスマートコントラクトを構築して操作できました。 次のレッスンでは、FIFOコントラクトの作成など、より高度な概念を見ていきます。 探求を続け、幸せなコーディングをすることを忘れないでください!