从零构建NFT去中心化交易平台教程

robot
摘要生成中

从零打造NFT去中心化交易平台

对于遵循ERC-721协议的NFT资产,如何实现去中心化交易呢?目前主流的NFT交易所多采用挂单方式,类似于商品上架到超市货架,买家觉得价格合适就可以购买。本文将通过编写智能合约和简单前端,实现一个基础的NFT去中心化交易平台。

NFT特性及交易方式

NFT是非同质化代币,每个Token都是独一无二的,通常在钱包中展示不同图片,并有唯一ID区分。由于NFT的这种特性,无法像ERC-20代币那样通过价格曲线定价,因此常见的交易方式是订单簿模式。

订单簿交易主要有两种:

  1. 定价单:卖家设定售价,买家觉得合适即可购买
  2. 求购单:买家发出求购订单,卖家觉得价格合适可以出售

本文主要介绍定价单交易方式。

Web3新手系列:从零实现一个NFT DEX

NFT交易平台基本功能

一个基础的NFT交易平台应该包含以下功能:

  1. 上架商品:卖家将NFT按设定价格上架
  2. 购买商品:买家按NFT定价购买
  3. 平台手续费:按成交价收取一定比例手续费

上架流程

  1. 前端:用户选择NFT并设定价格,点击上架
  2. 合约:用户授权合约操作NFT

购买流程

  1. 前端:用户选择想购买的NFT,点击购买
  2. 合约:将买家资金转给卖家,NFT转给买家

Web3新手系列:从零实现一个NFT DEX

实现NFT交易平台

1. 创建测试NFT

可以通过Remix快速创建一个ERC-721标准的NFT合约用于测试。

Web3新手系列:从零实现一个NFT DEX

2. 编写智能合约

合约主要包含以下方法:

2.1 卖家上架NFT

  • 校验NFT所有权
  • 添加上架记录
  • 触发上架事件

2.2 买家购买NFT

  • 读取NFT数据
  • 计算并扣除手续费
  • 转移NFT给买家
  • 触发购买事件

2.3 取消上架

  • 将上架记录标记为无效

2.4 提取手续费

  • 将累积的手续费提取到指定地址

Web3新手系列:从零实现一个NFT DEX

3. 开发前端界面

使用以下工具:

  • Ant Design Web3:连接钱包、展示NFT
  • Wagmi:与钱包交互
  • Nextjs + Vercel:部署项目

主要页面:

  • Mint:铸造测试NFT
  • Buy:NFT交易市场
  • Portfolio:管理用户NFT

3.1 连接钱包

使用Ant Design Web3组件实现钱包连接。

Web3新手系列:从零实现一个NFT DEX

3.2 Mint页面

调用合约mint方法铸造NFT。

Web3新手系列:从零实现一个NFT DEX

3.3 Portfolio页面

  • 展示用户NFT
  • 支持上架和下架操作
  • 上架前需授权NFT给合约

Web3新手系列:从零实现一个NFT DEX

3.4 Buy页面

  • 展示已上架NFT
  • 支持购买操作

Web3新手系列:从零实现一个NFT DEX

至此,一个具备基本功能的NFT去中心化交易平台就完成了。可以部署到Vercel进行测试使用。

Web3新手系列:从零实现一个NFT DEX

Web3新手系列:从零实现一个NFT DEX

Web3新手系列:从零实现一个NFT DEX

Web3新手系列:从零实现一个NFT DEX

Web3新手系列:从零实现一个NFT DEX

MINT-0.57%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
SignatureVerifiervip
· 5小时前
很期待功能演示
回复0
Pump策略师vip
· 08-06 02:59
交易量太薄了
回复0
GateUser-26d7f434vip
· 08-06 02:57
智能合约很优秀
回复0
ETH三明治侠vip
· 08-06 02:57
智能合约很关键哦
回复0
DAO治理专员vip
· 08-06 02:55
经验不足的模型。
查看原文回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)