Lección 3

スマートコントラクト計算機の構築

このレッスンでは、基本的な電卓を作成することで、SmartPyとTezosブロックチェーンとの相互作用方法の理解を深めていきます。 このコントラクトには、足し算、引き算、掛け算、割り算の機能があります。

理論

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コントラクトの作成など、より高度な概念を見ていきます。 探求を続け、幸せなコーディングをすることを忘れないでください!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 3

スマートコントラクト計算機の構築

このレッスンでは、基本的な電卓を作成することで、SmartPyとTezosブロックチェーンとの相互作用方法の理解を深めていきます。 このコントラクトには、足し算、引き算、掛け算、割り算の機能があります。

理論

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コントラクトの作成など、より高度な概念を見ていきます。 探求を続け、幸せなコーディングをすることを忘れないでください!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a 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.