Trong phần này, chúng tôi sẽ giới thiệu hai chức năng mới: removeItemFromSale
và updateItemPrice
. Các chức năng này sẽ cho phép người bán xóa mặt hàng của họ khỏi chương trình bán và cập nhật giá tương ứng cho mặt hàng của họ.
Marketplace
nâng cao:Độ rắn
// SPDX-Mã định danh giấy phép: MIT
độ rắn pragma ^0.8.6;
Contract Marketplace {
// Xác định cấu trúc mới cho Item
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
// Mảng chứa tất cả các item
Item[] public items;
// Các định nghĩa sự kiện được bỏ qua để ngắn gọn
// Các định nghĩa hàm khác bị bỏ qua để ngắn gọn
// Hàm xóa một mặt hàng khỏi đợt giảm giá
hàm getItemFromSale(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;
}
// Hàm cập nhật giá của một mặt hàng
hàm 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;
}
}
Trong hàm removeItemFromSale
, trước tiên chúng tôi truy xuất mục có _itemId
được cung cấp. Sau đó, chúng tôi kiểm tra xem người gọi hàm (msg.sender
) có phải là người bán mặt hàng đó hay không. Nếu trường hợp này xảy ra, chúng tôi đặt thuộc tính forSale
của mặt hàng đó thành false
, loại bỏ mặt hàng đó khỏi việc bán một cách hiệu quả.
Tương tự, trong hàm updateItemPrice
, chúng ta truy xuất mặt hàng có _itemId
được cung cấp, kiểm tra xem msg.sender
có phải là người bán không và nếu có thì chúng ta sẽ cập nhật giá của mặt hàng đó thành _newPrice
được cung cấp.
Sau khi nâng cao hợp đồng Marketplace
, hãy biên dịch và triển khai nó giống như bạn đã làm trong các bài học trước. Hãy nhớ chọn đúng hợp đồng từ menu thả xuống trong plugin trình biên dịch Solidity trước khi biên dịch và triển khai.
Sau khi hợp đồng được triển khai, nó sẽ xuất hiện trong phần Hợp đồng đã triển khai trong plugin Triển khai & Chạy giao dịch. Tại đây, bạn có thể tương tác với hợp đồng.
Để xóa một mặt hàng khỏi bán, hãy nhập ID mặt hàng vào chức năng removeItemFromSale
và nhấp vào nút. Để cập nhật giá của một mặt hàng, nhập ID mặt hàng và giá mới vào chức năng updateItemPrice
và nhấp vào nút.
Với điều này, giờ đây bạn đã xây dựng một thị trường phi tập trung cơ bản nhưng đầy đủ chức năng trên chuỗi khối Ethereum. Bạn có thể tạo, liệt kê, mua, xóa và cập nhật các mặt hàng bằng hợp đồng thông minh này. Bạn đã làm rất tốt!
Trong bài học tiếp theo, chúng ta sẽ thảo luận cách xử lý các lỗ hổng bảo mật tiềm ẩn trong hợp đồng của chúng ta và giới thiệu các công cụ sửa đổi để hợp lý hóa mã của chúng ta hơn nữa. Giữ nguyên!
Trong phần này, chúng tôi sẽ giới thiệu hai chức năng mới: removeItemFromSale
và updateItemPrice
. Các chức năng này sẽ cho phép người bán xóa mặt hàng của họ khỏi chương trình bán và cập nhật giá tương ứng cho mặt hàng của họ.
Marketplace
nâng cao:Độ rắn
// SPDX-Mã định danh giấy phép: MIT
độ rắn pragma ^0.8.6;
Contract Marketplace {
// Xác định cấu trúc mới cho Item
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
// Mảng chứa tất cả các item
Item[] public items;
// Các định nghĩa sự kiện được bỏ qua để ngắn gọn
// Các định nghĩa hàm khác bị bỏ qua để ngắn gọn
// Hàm xóa một mặt hàng khỏi đợt giảm giá
hàm getItemFromSale(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;
}
// Hàm cập nhật giá của một mặt hàng
hàm 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;
}
}
Trong hàm removeItemFromSale
, trước tiên chúng tôi truy xuất mục có _itemId
được cung cấp. Sau đó, chúng tôi kiểm tra xem người gọi hàm (msg.sender
) có phải là người bán mặt hàng đó hay không. Nếu trường hợp này xảy ra, chúng tôi đặt thuộc tính forSale
của mặt hàng đó thành false
, loại bỏ mặt hàng đó khỏi việc bán một cách hiệu quả.
Tương tự, trong hàm updateItemPrice
, chúng ta truy xuất mặt hàng có _itemId
được cung cấp, kiểm tra xem msg.sender
có phải là người bán không và nếu có thì chúng ta sẽ cập nhật giá của mặt hàng đó thành _newPrice
được cung cấp.
Sau khi nâng cao hợp đồng Marketplace
, hãy biên dịch và triển khai nó giống như bạn đã làm trong các bài học trước. Hãy nhớ chọn đúng hợp đồng từ menu thả xuống trong plugin trình biên dịch Solidity trước khi biên dịch và triển khai.
Sau khi hợp đồng được triển khai, nó sẽ xuất hiện trong phần Hợp đồng đã triển khai trong plugin Triển khai & Chạy giao dịch. Tại đây, bạn có thể tương tác với hợp đồng.
Để xóa một mặt hàng khỏi bán, hãy nhập ID mặt hàng vào chức năng removeItemFromSale
và nhấp vào nút. Để cập nhật giá của một mặt hàng, nhập ID mặt hàng và giá mới vào chức năng updateItemPrice
và nhấp vào nút.
Với điều này, giờ đây bạn đã xây dựng một thị trường phi tập trung cơ bản nhưng đầy đủ chức năng trên chuỗi khối Ethereum. Bạn có thể tạo, liệt kê, mua, xóa và cập nhật các mặt hàng bằng hợp đồng thông minh này. Bạn đã làm rất tốt!
Trong bài học tiếp theo, chúng ta sẽ thảo luận cách xử lý các lỗ hổng bảo mật tiềm ẩn trong hợp đồng của chúng ta và giới thiệu các công cụ sửa đổi để hợp lý hóa mã của chúng ta hơn nữa. Giữ nguyên!