บทเรียนที่ 2

アイテムの上場と取引

このレッスンでは、アイテムコントラクトを拡張して、マーケットプレイスでのアイテムのリストと取引を処理します。 アイテムを追加、一覧表示、および削除する方法と、アイテムの売買の基本について学習します。 また、コントラクトをデプロイし、Remix IDEでそれと対話する方法についても学習します。

マーケットプレイス契約の構築

次に、単純な Item 契約をより複雑な Marketplace 契約に変換します。 契約は Marketplace 、販売するアイテムのリストを維持し、ユーザーが販売する新しいアイテムをリストする方法を提供し、ユーザーがアイテムを購入する方法を提供します。

これを行うために、コントラクトにいくつかの新機能を追加します。

  1. これで、各アイテムに、アイテムの所有者を表す住所が設定されます seller

  2. ユーザーが新しい商品を出品できる新機能 listItemForSale を導入します。

  3. ユーザーがアイテムを購入できる新機能 buyItem を導入します。

Marketplace契約は次のようになります。

硬度
SPDX ライセンス識別子: MIT
プラグマの堅牢性^ 0.8.6;

契約マーケットプレイス {
    アイテムの新しい構造を定義する
    構造体 アイテム {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

すべての項目を保持する配列
    アイテム[] パブリックアイテム;

新しいアイテムが作成されたときに生成されるイベント
    event NewItem(uint itemId, string itemName, uint itemPrice, address seller);

アイテムが販売用にリストされたときに生成されるイベント
    イベント ItemListed(uint itemId, string itemName, uint itemPrice, address seller);

アイテムの購入時に発行されるイベント
    イベント アイテム購入(uint itemId, string itemName, uint itemPrice, address seller, address buyer);

新しいアイテムを作成するが、すぐに販売用にリストしない関数
    関数 createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }

販売品を出品する機能
    function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

アイテムを購入する機能
    関数 buyItem(uint _itemId) Public Paid {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

この契約では、次のことを行います。

  1. ItemアドレスとforSaleブール値を含むsellerようになった構造体。は seller アイテムの所有者であり forSale 、アイテムが現在販売用にリストされているかどうかを示します。

  2. createItem新しいアイテムを作成し、販売msg.sender者として割り当てる関数。これは msg.sender 、現在の関数と呼ばれる人(またはスマートコントラクト)のアドレスを表すSolidityのグローバル変数です。 ただし、アイテムはすぐには販売されません。

  3. listItemForSale商品の販売者が販売のためにそれをリストできるようにする機能。この require 機能を使用して、販売者のみが販売アイテムをリストできるようにします。

  4. buyItem誰かがアイテムを購入できるようにする機能。この関数は、アイテムが販売中であること、買い手が売り手ではないこと、および正しい価格が送信されたことを確認します。 これらの条件が満たされている場合、関数は売り手にお金を送り、アイテムを非販売としてマークします。

マーケットプレイス契約のデプロイと操作

コントラクトを作成し Marketplace たら、次のステップはそれをコンパイルしてデプロイすることです。 RemixのSolidityコンパイラプラグインを使用して、レッスン1で行ったようにコントラクトをコンパイルできます。

コントラクトをデプロイするには、右側のパネルにある Deploy & Run Transactions プラグイン (キューブアイコンの付いたプラグイン) に移動します。 適切な環境 (シミュレーション用の JavaScript VM) を選択し、[コントラクト] ドロップダウンからコントラクトを選択して Marketplace 、[デプロイ] ボタンをクリックします。

コントラクトがデプロイされると、[デプロイされたコントラクト] セクションに表示されます。 展開すると、そのパブリック状態の変数と関数が表示されます。 これらの関数を呼び出すことで、項目を作成、一覧表示、および購入できます。

アイテムを作成するには、名前と価格を入力し、 createItem ボタンをクリックします。 販売するアイテムを一覧表示するには、アイテムIDを入力して listItemForSale ボタンをクリックします。 アイテムを購入するには、アイテムIDを入力し、正しい量のEtherを送信して buyItem 、ボタンをクリックします。

万丈! これで、イーサリアムブロックチェーン上に基本的な分散型マーケットプレイスを作成する方法がわかりました。

次のレッスンでは、販売からアイテムを削除し、アイテムの価格を更新する機能を追加することで、マーケットプレースを改善します。 乞うご期待!

ข้อจำกัดความรับผิด
* การลงทุนคริปโตมีความเสี่ยงสูง โปรดดำเนินการด้วยความระมัดระวัง หลักสูตรนี้ไม่ได้มีไว้เพื่อเป็นคำแนะนำในการลงทุน
* หลักสูตรนี้สร้างขึ้นโดยผู้เขียนที่ได้เข้าร่วม Gate Learn ความคิดเห็นของผู้เขียนไม่ได้มาจาก Gate Learn
แคตตาล็อก
บทเรียนที่ 2

アイテムの上場と取引

このレッスンでは、アイテムコントラクトを拡張して、マーケットプレイスでのアイテムのリストと取引を処理します。 アイテムを追加、一覧表示、および削除する方法と、アイテムの売買の基本について学習します。 また、コントラクトをデプロイし、Remix IDEでそれと対話する方法についても学習します。

マーケットプレイス契約の構築

次に、単純な Item 契約をより複雑な Marketplace 契約に変換します。 契約は Marketplace 、販売するアイテムのリストを維持し、ユーザーが販売する新しいアイテムをリストする方法を提供し、ユーザーがアイテムを購入する方法を提供します。

これを行うために、コントラクトにいくつかの新機能を追加します。

  1. これで、各アイテムに、アイテムの所有者を表す住所が設定されます seller

  2. ユーザーが新しい商品を出品できる新機能 listItemForSale を導入します。

  3. ユーザーがアイテムを購入できる新機能 buyItem を導入します。

Marketplace契約は次のようになります。

硬度
SPDX ライセンス識別子: MIT
プラグマの堅牢性^ 0.8.6;

契約マーケットプレイス {
    アイテムの新しい構造を定義する
    構造体 アイテム {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

すべての項目を保持する配列
    アイテム[] パブリックアイテム;

新しいアイテムが作成されたときに生成されるイベント
    event NewItem(uint itemId, string itemName, uint itemPrice, address seller);

アイテムが販売用にリストされたときに生成されるイベント
    イベント ItemListed(uint itemId, string itemName, uint itemPrice, address seller);

アイテムの購入時に発行されるイベント
    イベント アイテム購入(uint itemId, string itemName, uint itemPrice, address seller, address buyer);

新しいアイテムを作成するが、すぐに販売用にリストしない関数
    関数 createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }

販売品を出品する機能
    function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

アイテムを購入する機能
    関数 buyItem(uint _itemId) Public Paid {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

この契約では、次のことを行います。

  1. ItemアドレスとforSaleブール値を含むsellerようになった構造体。は seller アイテムの所有者であり forSale 、アイテムが現在販売用にリストされているかどうかを示します。

  2. createItem新しいアイテムを作成し、販売msg.sender者として割り当てる関数。これは msg.sender 、現在の関数と呼ばれる人(またはスマートコントラクト)のアドレスを表すSolidityのグローバル変数です。 ただし、アイテムはすぐには販売されません。

  3. listItemForSale商品の販売者が販売のためにそれをリストできるようにする機能。この require 機能を使用して、販売者のみが販売アイテムをリストできるようにします。

  4. buyItem誰かがアイテムを購入できるようにする機能。この関数は、アイテムが販売中であること、買い手が売り手ではないこと、および正しい価格が送信されたことを確認します。 これらの条件が満たされている場合、関数は売り手にお金を送り、アイテムを非販売としてマークします。

マーケットプレイス契約のデプロイと操作

コントラクトを作成し Marketplace たら、次のステップはそれをコンパイルしてデプロイすることです。 RemixのSolidityコンパイラプラグインを使用して、レッスン1で行ったようにコントラクトをコンパイルできます。

コントラクトをデプロイするには、右側のパネルにある Deploy & Run Transactions プラグイン (キューブアイコンの付いたプラグイン) に移動します。 適切な環境 (シミュレーション用の JavaScript VM) を選択し、[コントラクト] ドロップダウンからコントラクトを選択して Marketplace 、[デプロイ] ボタンをクリックします。

コントラクトがデプロイされると、[デプロイされたコントラクト] セクションに表示されます。 展開すると、そのパブリック状態の変数と関数が表示されます。 これらの関数を呼び出すことで、項目を作成、一覧表示、および購入できます。

アイテムを作成するには、名前と価格を入力し、 createItem ボタンをクリックします。 販売するアイテムを一覧表示するには、アイテムIDを入力して listItemForSale ボタンをクリックします。 アイテムを購入するには、アイテムIDを入力し、正しい量のEtherを送信して buyItem 、ボタンをクリックします。

万丈! これで、イーサリアムブロックチェーン上に基本的な分散型マーケットプレイスを作成する方法がわかりました。

次のレッスンでは、販売からアイテムを削除し、アイテムの価格を更新する機能を追加することで、マーケットプレースを改善します。 乞うご期待!

ข้อจำกัดความรับผิด
* การลงทุนคริปโตมีความเสี่ยงสูง โปรดดำเนินการด้วยความระมัดระวัง หลักสูตรนี้ไม่ได้มีไว้เพื่อเป็นคำแนะนำในการลงทุน
* หลักสูตรนี้สร้างขึ้นโดยผู้เขียนที่ได้เข้าร่วม Gate Learn ความคิดเห็นของผู้เขียนไม่ได้มาจาก Gate Learn