الدرس رقم 4

コントラクトのテスト

Tezosでのトークン化の深堀りのレッスン4へようこそ! このセクションでは、開発プロセスにおける徹底的なテストの重要性と、スマートコントラクト内で提供されるテストスイートを使用してこれらのテストを実行する方法を探ります。 現在もSmartPyオンラインIDEを開発環境として使用しており、コントラクトの実行後にインターフェイスを開いています。

紹介

スマートコントラクトは、ブロックチェーン上にデプロイされると不変であるため、変更することはできません。 したがって、バグやセキュリティの脆弱性は深刻な結果をもたらす可能性があり、テストは開発プロセスに不可欠なステップになります。

このレッスンでは、トークンコントラクトの機能を検証するために設計された一連のテストを含むコントラクトについて説明します Fa1_2TestFull

Fa1_2TestFull契約

Fa1_2TestFullコントラクトは、Admin、Pause、Fa1_2、Mint、Burn、ChangeMetadata などのさまざまなコントラクトからすべての機能を継承するクラスです。これらすべての機能を集約し、徹底的なテストを実行して、コントラクトが期待どおりに機能していることを確認するために使用されます。

ニシキヘビ
クラスFa1_2TestFull(Admin、Pause、Fa1_2、Mint、Burn、ChangeMetadata):
        デフ __init__(自己、管理者、メタデータ、台帳、token_metadata):
            ChangeMetadataです。__init__(自己)            燃える。__init__(自己)            ミント。__init__(自己)            Fa1_2。__init__(self, メタデータ、台帳、token_metadata)
            休止。__init__(自己)            管理者__init__(self、 管理者)

クラスコンストラクタは Fa1_2TestFull 、すべての機能を初期化します。

テストのセットアップ

このコントラクトでは、まず、テスト アカウントとコントラクトの初期化を使用してテスト シナリオを設定します。 これは、で修飾された @sp.add_testテスト関数内で行われます。

ニシキヘビ
@sp.add_test(name="FA12")def test():
    # テストシナリオとアカウントの初期化
    sc = sp.test_scenario(m)    admin = sp.test_account("管理者")    alice = sp.test_account("アリス")    bob = sp.test_account("ロバート")    # いくつかの初期値でコントラクトを初期化する
    token_metadata = {
        "decimals": sp.utils.bytes_of_string("18"),  # Mandatory by the spec"name": sp.utils.bytes_of_string("My Great Token"),  # Recommended"symbol": sp.utils.bytes_of_string("MGT"),  # Recommended# Extra fields"icon": sp.utils.bytes_of_string("https://smartpy.io/static/img/logo-only.svg"),
    }
    contract_metadata = sp.utils.metadata_of_url("ipfs://QmaiAUj1FFNGYTu8rLBjc3eeN9cSKwaF8EGMBNDmhzPNFd")    c1 = m.Fa1_2TestFull(administrator=admin.address,metadata=contract_metadata,token_metadata=token_metadata,ledger={},)    sc + = c1の

テスト アカウント (Admin、Alice、Bob) を定義します。 次に、 Fa1_2TestFullコントラクト をいくつかの初期値で初期化します。 オペレーターは += 、シナリオにコントラクトを追加します。

これ以降は、コードをよりよく理解できるように、コードが左側に表示され、強調表示されたコード行の視覚化が右側に表示されます。 ここで例を挙げます。

テストの実行

次のステップはテストの実行であり、これにはさまざまなコントラクト関数をトリガーし、結果を検証することが含まれます。

たとえば、ミント機能をテストするには、次のコマンドを実行します。

ニシキヘビ
sc.h2("管理者が数枚のコインを鋳造")
c1.mint(アドレス=アリス.アドレス、値=12).run(送信者=管理者)

この行は、管理者が Alice のために 12 個のトークンを作成するテストを実行します。 関数がトークンの鋳造に成功し、アリスの残高を正しく更新した場合、このテストは合格です。

結果の確認

SmartPy は、 verify 条件が真であることを確認するメソッドを提供します。 条件が満たされない場合、テストは失敗します。 例えば:

ニシキヘビ
 c1.update_metadata(key="", value=sp.bytes("0x00")).run(sender=admin)
        sc.verify(c1.data.metadata[""] == sp.bytes("0x00"))

これらの行は、コントラクトのメタデータが に正しく更新された "0x00"ことを確認します。 正しく更新されなかった場合、テストは失敗します。

高度なテスト

スマートコントラクトのテストは、エッジケースや潜在的な障害など、考えられるすべてのユースケースをカバーする必要があります。 これらには、ユーザーの残高を超える送金、契約が一時停止されたときのトークンの燃焼などが含まれます。

たとえば、転送テストが失敗した場合、次のようになります。

ニシキヘビ
sc.h2("ボブはアリスから転勤しようとするが、アリスの承認を得ていない")
c1.transfer(from_=alice.address, to_=bob.address、 値=4).run(送信者=ボブ、 valid=False) です。

ここで、ボブは承認を得ずにアリスのアカウントから4つのトークンを転送しようとします。 この操作は失敗するはずなので、 valid=False 関数を設定します run 。 契約によって転送が正しく防止されている場合、テストは合格です。

要約

スマートコントラクトの開発では、テストが不可欠です。 ブロックチェーンの不変性を考えると、契約に誤りがあると、永続的でコストのかかる結果をもたらす可能性があります。 包括的なテストを作成することで、すべての関数が期待どおりに動作することが保証され、堅牢で安全なコントラクトにつながります。

陽性と陰性の両方のケースのテストを書くことを忘れないでください。 肯定的なケースは、関数が意図したとおりに使用されたときに正しく動作することを検証します。 ネガティブ ケースは、コントラクトが誤った入力や予期しない入力を処理する際に正しく動作することを保証します。

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 4

コントラクトのテスト

Tezosでのトークン化の深堀りのレッスン4へようこそ! このセクションでは、開発プロセスにおける徹底的なテストの重要性と、スマートコントラクト内で提供されるテストスイートを使用してこれらのテストを実行する方法を探ります。 現在もSmartPyオンラインIDEを開発環境として使用しており、コントラクトの実行後にインターフェイスを開いています。

紹介

スマートコントラクトは、ブロックチェーン上にデプロイされると不変であるため、変更することはできません。 したがって、バグやセキュリティの脆弱性は深刻な結果をもたらす可能性があり、テストは開発プロセスに不可欠なステップになります。

このレッスンでは、トークンコントラクトの機能を検証するために設計された一連のテストを含むコントラクトについて説明します Fa1_2TestFull

Fa1_2TestFull契約

Fa1_2TestFullコントラクトは、Admin、Pause、Fa1_2、Mint、Burn、ChangeMetadata などのさまざまなコントラクトからすべての機能を継承するクラスです。これらすべての機能を集約し、徹底的なテストを実行して、コントラクトが期待どおりに機能していることを確認するために使用されます。

ニシキヘビ
クラスFa1_2TestFull(Admin、Pause、Fa1_2、Mint、Burn、ChangeMetadata):
        デフ __init__(自己、管理者、メタデータ、台帳、token_metadata):
            ChangeMetadataです。__init__(自己)            燃える。__init__(自己)            ミント。__init__(自己)            Fa1_2。__init__(self, メタデータ、台帳、token_metadata)
            休止。__init__(自己)            管理者__init__(self、 管理者)

クラスコンストラクタは Fa1_2TestFull 、すべての機能を初期化します。

テストのセットアップ

このコントラクトでは、まず、テスト アカウントとコントラクトの初期化を使用してテスト シナリオを設定します。 これは、で修飾された @sp.add_testテスト関数内で行われます。

ニシキヘビ
@sp.add_test(name="FA12")def test():
    # テストシナリオとアカウントの初期化
    sc = sp.test_scenario(m)    admin = sp.test_account("管理者")    alice = sp.test_account("アリス")    bob = sp.test_account("ロバート")    # いくつかの初期値でコントラクトを初期化する
    token_metadata = {
        "decimals": sp.utils.bytes_of_string("18"),  # Mandatory by the spec"name": sp.utils.bytes_of_string("My Great Token"),  # Recommended"symbol": sp.utils.bytes_of_string("MGT"),  # Recommended# Extra fields"icon": sp.utils.bytes_of_string("https://smartpy.io/static/img/logo-only.svg"),
    }
    contract_metadata = sp.utils.metadata_of_url("ipfs://QmaiAUj1FFNGYTu8rLBjc3eeN9cSKwaF8EGMBNDmhzPNFd")    c1 = m.Fa1_2TestFull(administrator=admin.address,metadata=contract_metadata,token_metadata=token_metadata,ledger={},)    sc + = c1の

テスト アカウント (Admin、Alice、Bob) を定義します。 次に、 Fa1_2TestFullコントラクト をいくつかの初期値で初期化します。 オペレーターは += 、シナリオにコントラクトを追加します。

これ以降は、コードをよりよく理解できるように、コードが左側に表示され、強調表示されたコード行の視覚化が右側に表示されます。 ここで例を挙げます。

テストの実行

次のステップはテストの実行であり、これにはさまざまなコントラクト関数をトリガーし、結果を検証することが含まれます。

たとえば、ミント機能をテストするには、次のコマンドを実行します。

ニシキヘビ
sc.h2("管理者が数枚のコインを鋳造")
c1.mint(アドレス=アリス.アドレス、値=12).run(送信者=管理者)

この行は、管理者が Alice のために 12 個のトークンを作成するテストを実行します。 関数がトークンの鋳造に成功し、アリスの残高を正しく更新した場合、このテストは合格です。

結果の確認

SmartPy は、 verify 条件が真であることを確認するメソッドを提供します。 条件が満たされない場合、テストは失敗します。 例えば:

ニシキヘビ
 c1.update_metadata(key="", value=sp.bytes("0x00")).run(sender=admin)
        sc.verify(c1.data.metadata[""] == sp.bytes("0x00"))

これらの行は、コントラクトのメタデータが に正しく更新された "0x00"ことを確認します。 正しく更新されなかった場合、テストは失敗します。

高度なテスト

スマートコントラクトのテストは、エッジケースや潜在的な障害など、考えられるすべてのユースケースをカバーする必要があります。 これらには、ユーザーの残高を超える送金、契約が一時停止されたときのトークンの燃焼などが含まれます。

たとえば、転送テストが失敗した場合、次のようになります。

ニシキヘビ
sc.h2("ボブはアリスから転勤しようとするが、アリスの承認を得ていない")
c1.transfer(from_=alice.address, to_=bob.address、 値=4).run(送信者=ボブ、 valid=False) です。

ここで、ボブは承認を得ずにアリスのアカウントから4つのトークンを転送しようとします。 この操作は失敗するはずなので、 valid=False 関数を設定します run 。 契約によって転送が正しく防止されている場合、テストは合格です。

要約

スマートコントラクトの開発では、テストが不可欠です。 ブロックチェーンの不変性を考えると、契約に誤りがあると、永続的でコストのかかる結果をもたらす可能性があります。 包括的なテストを作成することで、すべての関数が期待どおりに動作することが保証され、堅牢で安全なコントラクトにつながります。

陽性と陰性の両方のケースのテストを書くことを忘れないでください。 肯定的なケースは、関数が意図したとおりに使用されたときに正しく動作することを検証します。 ネガティブ ケースは、コントラクトが誤った入力や予期しない入力を処理する際に正しく動作することを保証します。

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.