從0到1:搭建你的NFT去中心化交易平台

robot
摘要生成中

從零搭建NFT去中心化交易平台

ERC-20代幣可以通過某些DEX進行去中心化交易,那麼ERC-721協議的NFT如何實現去中心化交易呢?目前主流NFT交易所多採用掛單方式,類似商品上架到超市貨架。本文將介紹如何通過智能合約和簡單前端頁面實現NFT的去中心化交易。

Web3新手系列:從零實現一個NFT DEX

NFT交易機制

NFT(非同質化代幣)遵循ERC-721協議,每個Token都是獨一無二的。由於其特性,無法像ERC-20那樣通過價格曲線設定價格。目前常見的交易方式是訂單簿形式。

訂單簿模式主要有兩種:

  1. 定價單:賣家設定價格,買家覺得合適即可購買
  2. 求購單:買家發出求購訂單,賣家覺得價格合適即可出售

一般來說,求購單價格會低於定價單。本文主要介紹定價單交易方式。

Web3新手系列:從零實現一個NFT DEX

NFT DEX核心功能

一個基本的NFT DEX應包含以下功能:

  1. 上架商品:將NFT按設定價格上架
  2. 購買商品:按NFT定價進行購買
  3. 收取手續費:根據成交價按比例收取

上架商品流程

  1. 前端:用戶選擇NFT並設定價格,點擊上架
  2. 合約:用戶授權合約操作NFT

合約中需維護用戶上架商品價格Map。

購買商品流程

  1. 前端:用戶選擇NFT,點擊購買
  2. 合約:轉帳給賣方,將NFT轉給買方

Web3新手系列:從零實現一個NFT DEX

NFT DEX實現

1. 創建NFT

可使用Remix快速部署ERC-721協議NFT,也可直接使用現有NFT。

Web3新手系列:從零實現一個NFT DEX

2. 合約開發

主要包含以下方法:

2.1 賣家上架NFT

  1. 校驗NFT所有權
  2. 添加上架記錄
  3. 觸發上架事件

Web3新手系列:從零實現一個NFT DEX

2.2 買家購買NFT

  1. 讀取NFT數據
  2. 計算並扣除手續費
  3. 轉移NFT給買家
  4. 觸發購買事件

Web3新手系列:從零實現一個NFT DEX

2.3 取消上架

將上架記錄isActive字段設爲false

Web3新手系列:從零實現一個NFT DEX

2.4 提取手續費

將合約中累積的手續費提取到指定地址

Web3新手系列:從零實現一個NFT DEX

3. 前端開發

使用Ant Design Web3、Wagmi、Next.js等工具開發。

主要包含三個頁面:

  • Mint:用於測試鑄造NFT
  • Buy:NFT交易市場
  • Portfolio:管理用戶NFT

Web3新手系列:從零實現一個NFT DEX

3.1 連接錢包

使用Ant Design Web3組件實現錢包連接。

Web3新手系列:從零實現一個NFT DEX

3.2 Mint頁面

調用合約mint方法鑄造測試NFT。

Web3新手系列:從零實現一個NFT DEX

3.3 Portfolio頁面

展示用戶NFT,支持上架和下架操作。

  • 獲取用戶NFT列表
  • 判斷NFT上架狀態
  • 調用上架/下架合約方法

Web3新手系列:從零實現一個NFT DEX

3.4 Buy頁面

展示所有已上架NFT,支持購買操作。

  • 展示isAlive的NFT
  • 調用purchaseNFT方法購買

前端開發完成後,可部署到Vercel等平台。

通過以上步驟,我們就實現了一個具備基本功能的NFT去中心化交易平台。

Web3新手系列:從零實現一個NFT DEX

MINT2.21%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
快照暴击手vip
· 17分鐘前
完全去中心化了吗
回復0
Whale_Whisperervip
· 07-29 00:12
架构挺完整的
回復0
空投猎手王vip
· 07-28 23:58
就差空投信息了
回復0
Token小灵通vip
· 07-28 23:53
是个好项目啊老哥
回復0
Alpha不开口vip
· 07-28 23:52
开干就在此刻
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)