# 從零構建NFT去中心化交易所閱讀過前面幾篇文章的讀者應該了解,對於ERC-20協議代幣,我們可以通過某DEX等去中心化交易所進行交易。那麼對於ERC-721協議,也就是NFT來說,如何實現去中心化交易呢?目前主流的NFT交易平台多採用掛單方式交易,類似於將商品陳列在超市貨架上,買家覺得價格合適就可以購買。本文將通過編寫智能合約和簡單前端頁面,實現NFT的去中心化交易。需要注意的是,本文內容僅供學習參考,不適用於生產環境。## NFT(非同質化代幣)NFT即非同質化代幣,遵循ERC-721協議,每個Token都是獨一無二的。通常NFT在錢包中會顯示不同的圖片,並且每組NFT都有唯一的ID用於區分。由於NFT的特性,無法像ERC-20那樣通過價格曲線設定價格。目前比較常見的交易方式是通過訂單簿形式。## 訂單簿交易訂單簿模式簡單來說就是人爲設定商品價格,區別於某些DEX通過價格曲線計算價格的方式。訂單簿一般有兩種交易模式:1. 定價單:賣家設定出售價格,買家覺得合適就可以購買。2. 求購單:買家發出求購訂單,賣家覺得價格合適就可以出售。通常求購單價格會低於定價單。本文只介紹第一種定價方式。## NFT DEX的基本功能一個NFT DEX應該包含以下基礎功能:1. 上架商品:將NFT按定價上架2. 購買商品:根據NFT定價進行購買 3. DEX手續費:按成交價格比例收取手續費### 上架商品上架商品需要完成:1. 前端:用戶選擇NFT並設定價格,點擊上架。2. 合約:用戶授權合約操作NFT。合約中需維護用戶上架商品價格Map,可以放在中心化服務中以減輕合約負擔,本文中將保存在合約內。### 購買商品 購買商品時會發生:1. 前端:用戶選擇想購買的NFT,點擊購買。2. 合約:將買家資金轉給賣家,NFT轉給買家。## 實現NFT DEX我們將從零開始實現一個NFT DEX。### 1. 創建NFT爲測試需要,我們可以通過Remix快速創建一個ERC-721協議的NFT。也可以跳過此步驟,直接使用現有NFT。### 2. 合約編寫合約方法應包含:#### 2.1 賣家上架NFT流程:1. 用戶選擇NFT2. 設置價格(可用穩定幣或ETH計價) 3. 授權NFT給合約上架方法需要:1. 校驗NFT所有權2. 添加上架記錄 3. 觸發上架事件#### 2.2 買家購買NFT 合約執行步驟:1. 讀取NFT數據2. 計算並扣除手續費3. 轉移NFT給買家4. 觸發購買事件#### 2.3 取消上架將上架記錄的isActive字段設爲false。#### 2.4 提取手續費DEX可在每筆交易中收取手續費,存入合約或轉至指定地址。本文採用存入合約方式。### 3. DEX前端開發使用工具:- Ant Design Web3:連接錢包和展示NFT卡片- Wagmi:與錢包交互 - Nextjs + Vercel:部署項目前端包含三個頁面:Mint、Buy和Portfolio。#### 3.1 連接錢包使用Ant Design Web3的連接組件實現錢包連接。#### 3.2 Mint 使用wagmi的useWriteContract方法實現NFT鑄造。#### 3.3 Portfolio展示用戶NFT,支持上架和下架操作。使用opensea API獲取NFT列表,通過合約判斷是否已上架。#### 3.4 Buy展示已上架NFT,支持購買操作。調用purchaseNFT方法完成交易。至此,一個具備基礎功能的NFT DEX前端頁面就完成了,可部署到Vercel上。
從零搭建NFT去中心化交易所:合約與前端開發指南
從零構建NFT去中心化交易所
閱讀過前面幾篇文章的讀者應該了解,對於ERC-20協議代幣,我們可以通過某DEX等去中心化交易所進行交易。那麼對於ERC-721協議,也就是NFT來說,如何實現去中心化交易呢?
目前主流的NFT交易平台多採用掛單方式交易,類似於將商品陳列在超市貨架上,買家覺得價格合適就可以購買。
本文將通過編寫智能合約和簡單前端頁面,實現NFT的去中心化交易。需要注意的是,本文內容僅供學習參考,不適用於生產環境。
NFT(非同質化代幣)
NFT即非同質化代幣,遵循ERC-721協議,每個Token都是獨一無二的。通常NFT在錢包中會顯示不同的圖片,並且每組NFT都有唯一的ID用於區分。
由於NFT的特性,無法像ERC-20那樣通過價格曲線設定價格。目前比較常見的交易方式是通過訂單簿形式。
訂單簿交易
訂單簿模式簡單來說就是人爲設定商品價格,區別於某些DEX通過價格曲線計算價格的方式。訂單簿一般有兩種交易模式:
定價單:賣家設定出售價格,買家覺得合適就可以購買。
求購單:買家發出求購訂單,賣家覺得價格合適就可以出售。
通常求購單價格會低於定價單。本文只介紹第一種定價方式。
NFT DEX的基本功能
一個NFT DEX應該包含以下基礎功能:
上架商品
上架商品需要完成:
合約中需維護用戶上架商品價格Map,可以放在中心化服務中以減輕合約負擔,本文中將保存在合約內。
購買商品
購買商品時會發生:
實現NFT DEX
我們將從零開始實現一個NFT DEX。
1. 創建NFT
爲測試需要,我們可以通過Remix快速創建一個ERC-721協議的NFT。也可以跳過此步驟,直接使用現有NFT。
2. 合約編寫
合約方法應包含:
2.1 賣家上架NFT
流程:
上架方法需要:
2.2 買家購買NFT
合約執行步驟:
2.3 取消上架
將上架記錄的isActive字段設爲false。
2.4 提取手續費
DEX可在每筆交易中收取手續費,存入合約或轉至指定地址。本文採用存入合約方式。
3. DEX前端開發
使用工具:
前端包含三個頁面:Mint、Buy和Portfolio。
3.1 連接錢包
使用Ant Design Web3的連接組件實現錢包連接。
3.2 Mint
使用wagmi的useWriteContract方法實現NFT鑄造。
3.3 Portfolio
展示用戶NFT,支持上架和下架操作。使用opensea API獲取NFT列表,通過合約判斷是否已上架。
3.4 Buy
展示已上架NFT,支持購買操作。調用purchaseNFT方法完成交易。
至此,一個具備基礎功能的NFT DEX前端頁面就完成了,可部署到Vercel上。