Web3 Người mới series: Từ con số không để hiện thực hóa một NFT DEX

Người dùng đã xem qua vài bài viết trước đây chắc hẳn biết rằng, đối với các Token theo giao thức ERC-20, chúng ta có thể giao dịch thông qua DEX đại diện là Uniswap, đạt được sự Phi tập trung. Vậy đối với giao thức ERC-721, tức là NFT, chúng ta có thể thực hiện giao dịch Phi tập trung như thế nào?

Hiện nay, một số sàn giao dịch NFT phổ biến sử dụng hình thức đặt lệnh để giao dịch, giống như việc đưa từng món hàng lên kệ siêu thị, người mua thấy giá hợp lý thì có thể mang sản phẩm về nhà.

Bài viết này sẽ thông qua việc viết hợp đồng thông minh và một trang giao diện đơn giản, thực hiện giao dịch NFT phi tập trung. Lưu ý bài viết này chỉ dùng cho mục đích học tập, không thể sử dụng thực tế trong môi trường sản xuất.

NFT (Non-Fungible Token)

NFT cũng chính là Token không đồng nhất, tức là mỗi Token đều là không đồng nhất, khác nhau, nó tuân theo giao thức ERC-721. Nói chung, mỗi NFT trong ví sẽ hiển thị những hình ảnh khác nhau, và mỗi nhóm NFT sẽ có một ID độc nhất để phân biệt.

Web3 người mới series: Từ số không hiện thực hóa một NFT DEX

Do đặc tính của NFT, nó không thể thiết lập giá theo đường cong giá giống như ERC-20 - vì mỗi Token đều khác nhau. Do đó, hình thức giao dịch phổ biến hiện nay là thông qua hình thức sổ lệnh.

Giao dịch sổ lệnh

Chế độ sổ lệnh đơn giản mà nói là giá của hàng hóa được thiết lập bởi con người, khác với cách tính giá thông qua đường cong giá như Uniswap. Sổ lệnh thường sẽ được chia thành hai chế độ giao dịch, một là lệnh định giá, tức là người bán thiết lập một mức giá mà họ muốn bán, nếu có người mua cảm thấy giá hợp lý, họ có thể tiến hành mua. Chế độ thứ hai là lệnh mua, tức là người mua phát hành một lệnh mua dựa trên nhu cầu của mình, khi người bán cảm thấy giá hợp lý, họ có thể tiến hành bán.

Thông thường, giá của đơn mua sẽ thấp hơn giá của đơn định giá. Bài viết này chỉ giới thiệu phương thức định giá thứ nhất.

Chức năng của NFT DEX

Một DEX NFT nên bao gồm những chức năng cơ bản sau:

  1. Đưa hàng hóa lên kệ: Đưa một NFT lên kệ theo giá đã định.
  2. Mua sản phẩm: Thực hiện mua dựa trên giá định giá của NFT
  3. Phí giao dịch DEX: Phí giao dịch được thu theo tỷ lệ dựa trên giá giao dịch.

lên kệ hàng hóa

Để niêm yết sản phẩm, cần thực hiện những việc sau:

  1. Giao diện người dùng: Người dùng chọn NFT của mình và thiết lập một mức giá, nhấp vào đăng bán.
  2. Giao thức: Người dùng cần thiết lập quyền cho hợp đồng, có thể điều khiển NFT của người dùng.

Vậy là hàng hóa đã được niêm yết hoàn tất. Trong hợp đồng, cần duy trì một bản đồ giá hàng hóa của người dùng, phần dữ liệu này thường có thể được thực hiện trong dịch vụ tập trung, nhằm giảm bớt gánh nặng cho hợp đồng, nhưng trong bài viết này, phần dữ liệu bản đồ này sẽ được duy trì trong hợp đồng.

Mua hàng

Khi mua hàng, sẽ xảy ra một số điều sau đây:

  1. Frontend: Người dùng chọn một NFT muốn mua, nhấp vào mua.
  2. Hợp đồng: Gọi hợp đồng, chuyển tiền của người dùng đến người bán NFT và chuyển NFT đến người mua.

Triển khai một DEX NFT

Trong chương này, chúng ta sẽ bắt đầu từ con số không để triển khai một DEX NFT, đây là địa chỉ DEX mà tác giả đã triển khai nft-dex-frontend.vercel.app.

Web3 người mới series: Từ số không thực hiện một NFT DEX

1. Tạo một NFT

Để phục vụ cho việc thử nghiệm, tốt nhất là chúng ta có thể có một NFT của riêng mình. Chúng ta có thể nhanh chóng xây dựng một NFT theo giao thức ERC-721 thông qua Remix, nó cung cấp các mẫu tương ứng.

Web3 mới vào nghề: Từ số không hiện thực hóa một NFT DEX

Chúng tôi có thể dễ dàng triển khai một NFT theo mẫu. Tất nhiên, bạn cũng có thể bỏ qua bước này và sử dụng NFT mà chúng tôi đã chuẩn bị sẵn.

2. Viết hợp đồng

Phương pháp hợp đồng của chúng tôi nên bao gồm một số phương pháp sau:

2.1. Người bán niêm yết NFT

Người bán cần chỉ định NFT muốn bán và giá tương ứng. Khi niêm yết, người dùng cần ký hợp đồng ủy quyền NFT, để hợp đồng thông minh của chúng tôi có quyền thao tác với NFT này, như vậy khi có người mua, giao dịch này có thể tự động hoàn thành.

Vì vậy, quy trình nên như sau: 1. Người dùng chọn NFT của mình; 2. Đặt giá, ở đây có thể định giá bằng stablecoin USDT, USDC hoặc ETH; 3. Ủy quyền NFT cho hợp đồng.

Sau đó, bạn có thể gọi phương thức niêm yết của hợp đồng, phương thức này cần thực hiện những việc sau:

  1. Kiểm tra quyền sở hữu của NFT
  2. Thêm hồ sơ niêm yết
  3. Sự kiện kích hoạt niêm yết

Web3 người mới bắt đầu: Từ số không thực hiện một NFT DEX

2.2. Người mua mua NFT

Người mua khi mua NFT chỉ cần chọn NFT mà mình muốn và thanh toán bằng Token tương ứng. Ở cấp độ hợp đồng sẽ thực hiện các bước sau: 1. Đọc dữ liệu NFT tương ứng từ "listings"; 2. Tính phí giao dịch dựa trên giá NFT và trừ phần này từ giá giao dịch; 3. Chuyển NFT cho người mua; 4. Kích hoạt sự kiện mua.

Web3 mới bắt đầu: Từ con số không đến việc thực hiện một NFT DEX

2.3. Huỷ bỏ niêm yết

Tất nhiên, người bán có thể cảm thấy giá không hợp lý và sẽ chọn hủy niêm yết. Có thể thấy rằng chúng tôi đã giữ lại một trường isActive ở nơi lưu trữ thông tin niêm yết, để chỉ ra xem sản phẩm đó có hợp lệ hay không, vì vậy khi hủy niêm yết, chúng tôi chỉ cần đặt trường này là false.

Web3 người mới series: Từ con số không thực hiện một NFT DEX

2.4. Phí rút tiền

DEX có thể thu phí giao dịch trong mỗi giao dịch, phí này có thể được lưu vào hợp đồng hoặc chuyển vào một địa chỉ của riêng bạn, bài viết này chọn phương thức lưu vào hợp đồng.

Web3 người mới series: Từ số không thực hiện một NFT DEX

Đến đây, các chức năng cơ bản của hợp đồng của chúng tôi đã hoàn thiện.

3. Phát triển giao diện DEX

Trước khi bắt đầu, chúng ta cần chuẩn bị một số công cụ, bao gồm các công cụ sau:

  1. Ant Design Web3:dùng để kết nối ví và hiển thị thẻ NFT.
  2. Wagmi: Dùng để tương tác với ví.
  3. Nextjs + Vercel:Triển khai dự án của chúng tôi.

Ứng dụng front-end của chúng tôi nên bao gồm ba trang, Mint, Buy và Portfolio, Mint là để người dùng có thể Mint NFT của chúng tôi, chỉ dành cho mục đích trình diễn, Buy là chợ DEX của chúng tôi, người dùng có thể mua NFT của chúng tôi ở đó, trong Portfolio, người dùng có thể thực hiện các thao tác niêm yết và gỡ niêm yết NFT.

3.1. Kết nối ví

Kết nối ví của người dùng, sử dụng Ant Design Web3 để thực hiện

Quá trình kết nối ví của người dùng rất đơn giản, chỉ cần sử dụng thành phần kết nối do Ant Design Web3 cung cấp.

Đầu tiên, chúng tôi bọc một Provider vào lớp ngoài của dự án, như vậy trong mã phía sau chúng tôi có thể sử dụng khả năng của Ant Design Web3. Ngoài ra, vì chúng tôi cần kết nối với chuỗi thử nghiệm sepolia, để tiết kiệm thời gian, nên sử dụng một số dịch vụ nút để cải thiện tốc độ truy vấn dữ liệu, tôi đang sử dụng endpoint của ZAN, nó rất phù hợp để sử dụng trong môi trường Châu Á-Thái Bình Dương, nhanh chóng và giá cả rất hợp lý, hỗ trợ nhiều chuỗi.

Web3 người mới series: Từ số không thực hiện một NFT DEX

Sau đó, đặt một nút kết nối ở nơi cần kết nối ví:

Web3 người mới series: Từ con số không thực hiện một NFT DEXNhư vậy là đã xong, rất đơn giản.

3.2. Mint

Mint một NFT, nhận Token thử nghiệm có thể đến

Trên trang Mint, chúng ta có thể Mint NFT dùng thử. Mint là một thao tác viết hợp đồng, ở đây chúng ta sẽ sử dụng phương thức useWriteContract trong wagmi. Chúng ta cần chỉ định địa chỉ hợp đồng, ABI của hợp đồng và các tham số của hợp đồng.

Web3 người mới series: Từ con số không thực hiện một NFT DEX

Sau đó, chỉ cần xác nhận trong ví là có thể Mint thành công.

3.3. Danh mục

Quản lý NFT của người dùng

Tại đây cần hiển thị tất cả NFT của người dùng. Chúng tôi có thể sử dụng một số API NFT để lấy, ở đây sử dụng API của opensea, vì không có nhiều API NFT hỗ trợ chuỗi thử nghiệm sepolia.

Sau khi có được danh sách NFT của người dùng, cần xác định xem liệu chúng đã được niêm yết hay chưa, những NFT chưa niêm yết sẽ hỗ trợ niêm yết, còn những NFT đã niêm yết sẽ hỗ trợ gỡ niêm yết. Cách xác định là thông qua phương thức « getSellerListings » trong hợp đồng DEX để lấy những NFT mà người dùng đã niêm yết, sau đó dựa vào trường « isAlive » của những NFT này để xác định xem chúng có đang được niêm yết hay không.

Web3 người mới series: Từ con số không thực hiện một NFT DEX

Khi niêm yết, cần gọi phương thức hợp đồng "listNFT", và khi hủy, cần gọi phương thức "cancelListing". Trước khi niêm yết, cần gọi thêm phương thức ủy quyền NFT, ủy quyền NFT cho hợp đồng, như vậy sau khi giao dịch thành công, NFT này có thể tự động chuyển cho người mua.

Web3 người mới series: Từ số không thực hiện một NFT DEX

3.4. Mua

Trong Buy có thể mua NFT

Đầu tiên, chúng ta cần hiển thị các NFT đã được niêm yết. Tương tự như việc hiển thị NFT đã có của người dùng trong Portfolio, điểm khác ở đây là một cái là toàn cầu, không còn là của một người dùng nào cả, cái kia chỉ cần hiển thị các NFT có isAlive.

Sử dụng phương thức 「 purchaseNFT 」 khi mua, khi gọi phương thức này, cần sử dụng ETH để thanh toán giá.

Web3 người mới series: Từ số không thực hiện một NFT DEX

Giá trị này ở đây chính là ETH mà người mua cần thanh toán.

Một trang front-end DEX chứa tất cả các khả năng cơ bản như vậy đã hoàn thành, chúng ta có thể triển khai nó trên vercel.

Bài viết này được viết bởi ZAN Team (Tài khoản X @zan_team) của Yeezo (Tài khoản X @GaoYeezo 75065).

Xem bản gốc
Nội dung chỉ mang tính chất tham khảo, không phải là lời chào mời hay đề nghị. Không cung cấp tư vấn về đầu tư, thuế hoặc pháp lý. Xem Tuyên bố miễn trừ trách nhiệm để biết thêm thông tin về rủi ro.
  • Phần thưởng
  • Bình luận
  • Chia sẻ
Bình luận
0/400
Không có bình luận
  • Ghim
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)