У цьому розділі ми представимо дві нові функції: removeItemFromSale
і updateItemPrice
. Ці функції дозволять продавцю зняти свій товар із продажу та відповідно оновити ціну на свій товар.
Marketplace
:Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
contract Marketplace {
// Визначити нову структуру для Items
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
// Масив для зберігання всіх елементів
Item[] public items;
// Визначення подій пропущено для стислості
// Визначення інших функцій пропущено для стислості
// Функція для вилучення товару з продажу
function removeItemFromSale(uint _itemId) public {
Item storage item = items[_itemId];
require(msg.sender == item.seller, "Only the owner can remove the item from sale");
item.forSale = false;
}
// Функція для оновлення ціни товару
функція updateItemPrice(uint _itemId, uint _newPrice) public {
Item storage item = items[_itemId];
require(msg.sender == item.seller, "Only the owner can update the price");
item.price = _newPrice;
}
}
У функції removeItemFromSale
ми спочатку отримуємо товар із наданим _itemId
. Потім ми перевіряємо, чи особа, яка викликає функцію (msg.sender
), є продавцем товару. Якщо це так, ми встановлюємо для властивості forSale
елемента значення false
, фактично видаляючи його з продажу.
Подібним чином у функції updateItemPrice
ми отримуємо товар із наданим _itemId
, перевіряємо, чи msg.sender
є продавцем, і якщо так, ми оновлюємо ціну товару до наданого _newPrice
.
Після вдосконалення контракту Marketplace
скомпілюйте та розгорніть його так само, як ви робили в попередніх уроках. Пам’ятайте, що перед компіляцією та розгортанням у розкривному меню модуля компілятора Solidity потрібно вибрати правильний контракт.
Після розгортання контракту він з’явиться в розділі «Розгорнуті контракти» плагіна «Розгортання та виконання транзакцій». Тут ви можете взаємодіяти з договором.
Щоб зняти товар із продажу, введіть ідентифікатор товару у функцію removeItemFromSale
і натисніть кнопку. Щоб оновити ціну товару, введіть ідентифікатор товару та нову ціну у функцію updateItemPrice
і натисніть кнопку.
Завдяки цьому ви створили базовий, але функціональний децентралізований ринок на блокчейні Ethereum. Ви можете створювати, перераховувати, купувати, видаляти та оновлювати елементи за допомогою цього розумного контракту. Чудова робота!
У наступному уроці ми обговоримо, як усунути потенційні вразливості безпеки в нашому контракті, і введемо модифікатори для подальшої оптимізації нашого коду. Залишайтеся на зв'язку!
У цьому розділі ми представимо дві нові функції: removeItemFromSale
і updateItemPrice
. Ці функції дозволять продавцю зняти свій товар із продажу та відповідно оновити ціну на свій товар.
Marketplace
:Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;
contract Marketplace {
// Визначити нову структуру для Items
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
// Масив для зберігання всіх елементів
Item[] public items;
// Визначення подій пропущено для стислості
// Визначення інших функцій пропущено для стислості
// Функція для вилучення товару з продажу
function removeItemFromSale(uint _itemId) public {
Item storage item = items[_itemId];
require(msg.sender == item.seller, "Only the owner can remove the item from sale");
item.forSale = false;
}
// Функція для оновлення ціни товару
функція updateItemPrice(uint _itemId, uint _newPrice) public {
Item storage item = items[_itemId];
require(msg.sender == item.seller, "Only the owner can update the price");
item.price = _newPrice;
}
}
У функції removeItemFromSale
ми спочатку отримуємо товар із наданим _itemId
. Потім ми перевіряємо, чи особа, яка викликає функцію (msg.sender
), є продавцем товару. Якщо це так, ми встановлюємо для властивості forSale
елемента значення false
, фактично видаляючи його з продажу.
Подібним чином у функції updateItemPrice
ми отримуємо товар із наданим _itemId
, перевіряємо, чи msg.sender
є продавцем, і якщо так, ми оновлюємо ціну товару до наданого _newPrice
.
Після вдосконалення контракту Marketplace
скомпілюйте та розгорніть його так само, як ви робили в попередніх уроках. Пам’ятайте, що перед компіляцією та розгортанням у розкривному меню модуля компілятора Solidity потрібно вибрати правильний контракт.
Після розгортання контракту він з’явиться в розділі «Розгорнуті контракти» плагіна «Розгортання та виконання транзакцій». Тут ви можете взаємодіяти з договором.
Щоб зняти товар із продажу, введіть ідентифікатор товару у функцію removeItemFromSale
і натисніть кнопку. Щоб оновити ціну товару, введіть ідентифікатор товару та нову ціну у функцію updateItemPrice
і натисніть кнопку.
Завдяки цьому ви створили базовий, але функціональний децентралізований ринок на блокчейні Ethereum. Ви можете створювати, перераховувати, купувати, видаляти та оновлювати елементи за допомогою цього розумного контракту. Чудова робота!
У наступному уроці ми обговоримо, як усунути потенційні вразливості безпеки в нашому контракті, і введемо модифікатори для подальшої оптимізації нашого коду. Залишайтеся на зв'язку!