次に、単純な Item
契約をより複雑な Marketplace
契約に変換します。 契約は Marketplace
、販売するアイテムのリストを維持し、ユーザーが販売する新しいアイテムをリストする方法を提供し、ユーザーがアイテムを購入する方法を提供します。
これを行うために、コントラクトにいくつかの新機能を追加します。
これで、各アイテムに、アイテムの所有者を表す住所が設定されます seller
。
ユーザーが新しい商品を出品できる新機能 listItemForSale
を導入します。
ユーザーがアイテムを購入できる新機能 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);
}
}
Item
アドレスとforSale
ブール値を含むseller
ようになった構造体。は seller
アイテムの所有者であり forSale
、アイテムが現在販売用にリストされているかどうかを示します。
createItem
新しいアイテムを作成し、販売msg.sender
者として割り当てる関数。これは msg.sender
、現在の関数と呼ばれる人(またはスマートコントラクト)のアドレスを表すSolidityのグローバル変数です。 ただし、アイテムはすぐには販売されません。
listItemForSale
商品の販売者が販売のためにそれをリストできるようにする機能。この require
機能を使用して、販売者のみが販売アイテムをリストできるようにします。
buyItem
誰かがアイテムを購入できるようにする機能。この関数は、アイテムが販売中であること、買い手が売り手ではないこと、および正しい価格が送信されたことを確認します。 これらの条件が満たされている場合、関数は売り手にお金を送り、アイテムを非販売としてマークします。
コントラクトを作成し Marketplace
たら、次のステップはそれをコンパイルしてデプロイすることです。 RemixのSolidityコンパイラプラグインを使用して、レッスン1で行ったようにコントラクトをコンパイルできます。
コントラクトをデプロイするには、右側のパネルにある Deploy & Run Transactions プラグイン (キューブアイコンの付いたプラグイン) に移動します。 適切な環境 (シミュレーション用の JavaScript VM) を選択し、[コントラクト] ドロップダウンからコントラクトを選択して Marketplace
、[デプロイ] ボタンをクリックします。
コントラクトがデプロイされると、[デプロイされたコントラクト] セクションに表示されます。 展開すると、そのパブリック状態の変数と関数が表示されます。 これらの関数を呼び出すことで、項目を作成、一覧表示、および購入できます。
アイテムを作成するには、名前と価格を入力し、 createItem
ボタンをクリックします。 販売するアイテムを一覧表示するには、アイテムIDを入力して listItemForSale
ボタンをクリックします。 アイテムを購入するには、アイテムIDを入力し、正しい量のEtherを送信して buyItem
、ボタンをクリックします。
万丈! これで、イーサリアムブロックチェーン上に基本的な分散型マーケットプレイスを作成する方法がわかりました。
次のレッスンでは、販売からアイテムを削除し、アイテムの価格を更新する機能を追加することで、マーケットプレースを改善します。 乞うご期待!
次に、単純な Item
契約をより複雑な Marketplace
契約に変換します。 契約は Marketplace
、販売するアイテムのリストを維持し、ユーザーが販売する新しいアイテムをリストする方法を提供し、ユーザーがアイテムを購入する方法を提供します。
これを行うために、コントラクトにいくつかの新機能を追加します。
これで、各アイテムに、アイテムの所有者を表す住所が設定されます seller
。
ユーザーが新しい商品を出品できる新機能 listItemForSale
を導入します。
ユーザーがアイテムを購入できる新機能 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);
}
}
Item
アドレスとforSale
ブール値を含むseller
ようになった構造体。は seller
アイテムの所有者であり forSale
、アイテムが現在販売用にリストされているかどうかを示します。
createItem
新しいアイテムを作成し、販売msg.sender
者として割り当てる関数。これは msg.sender
、現在の関数と呼ばれる人(またはスマートコントラクト)のアドレスを表すSolidityのグローバル変数です。 ただし、アイテムはすぐには販売されません。
listItemForSale
商品の販売者が販売のためにそれをリストできるようにする機能。この require
機能を使用して、販売者のみが販売アイテムをリストできるようにします。
buyItem
誰かがアイテムを購入できるようにする機能。この関数は、アイテムが販売中であること、買い手が売り手ではないこと、および正しい価格が送信されたことを確認します。 これらの条件が満たされている場合、関数は売り手にお金を送り、アイテムを非販売としてマークします。
コントラクトを作成し Marketplace
たら、次のステップはそれをコンパイルしてデプロイすることです。 RemixのSolidityコンパイラプラグインを使用して、レッスン1で行ったようにコントラクトをコンパイルできます。
コントラクトをデプロイするには、右側のパネルにある Deploy & Run Transactions プラグイン (キューブアイコンの付いたプラグイン) に移動します。 適切な環境 (シミュレーション用の JavaScript VM) を選択し、[コントラクト] ドロップダウンからコントラクトを選択して Marketplace
、[デプロイ] ボタンをクリックします。
コントラクトがデプロイされると、[デプロイされたコントラクト] セクションに表示されます。 展開すると、そのパブリック状態の変数と関数が表示されます。 これらの関数を呼び出すことで、項目を作成、一覧表示、および購入できます。
アイテムを作成するには、名前と価格を入力し、 createItem
ボタンをクリックします。 販売するアイテムを一覧表示するには、アイテムIDを入力して listItemForSale
ボタンをクリックします。 アイテムを購入するには、アイテムIDを入力し、正しい量のEtherを送信して buyItem
、ボタンをクリックします。
万丈! これで、イーサリアムブロックチェーン上に基本的な分散型マーケットプレイスを作成する方法がわかりました。
次のレッスンでは、販売からアイテムを削除し、アイテムの価格を更新する機能を追加することで、マーケットプレースを改善します。 乞うご期待!