У цьому розділі ми представимо дві нові функції: 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. Ви можете створювати, перераховувати, купувати, видаляти та оновлювати елементи за допомогою цього розумного контракту. Чудова робота!
У наступному уроці ми обговоримо, як усунути потенційні вразливості безпеки в нашому контракті, і введемо модифікатори для подальшої оптимізації нашого коду. Залишайтеся на зв'язку!