第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赞同其观点或证实其描述。
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, 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.