LOVE20 Group

LOVE20链群是基于ERC721标准的NFT资产,每个链群都是独一无二的,具有唯一性和稀缺性。每个链群都有自己的名称和ID,并且可以自由转让和交易。

View on GitHub

GroupMarket 交易市场

GroupMarketLOVE20 Group NFT 的专用交易市场。

它不是多合集通用市场,而是部署时通过构造函数绑定:

也就是说,市场内只交易这一组 Group NFT,并统一用对应的 LOVE20 代币结算。

核心设计

部署

构造函数:

constructor(ILOVE20Group group_, ILOVE20Token love20Token_);

特点:

部署成功后,建议至少校验:

仓库里也已补了对应部署检查脚本:

手续费规则

市场固定手续费:

fee = price * 10%
sellerProceeds = price - fee

手续费不会转给平台地址,而是直接销毁,因此会增加 LOVE20 的未铸造量。

交易流程

1. 挂卖单

卖家先授权市场转移 NFT,再调用:

function createListing(uint256 tokenId, uint256 price) external;

约束:

挂单成功后:

重要:

2. 取消卖单

function cancelListing(uint256 tokenId) external;

只有挂单卖家自己可以取消。取消后 NFT 原路退回卖家。

3. 直接购买

买家先授权市场支出 LOVE20,再调用:

function buyListing(uint256 tokenId) external;

成交时:

卖家不能买自己的卖单。

说明:

报价流程

每个 tokenId 最多保留 20 个 active offers。

1. 对指定 NFT 报价

报价者先授权市场支出 LOVE20,再调用:

function makeOffer(uint256 tokenId, uint256 amount) external;

约束:

说明:

2. 取消报价

function cancelOffer(uint256 tokenId) external;

取消前提:

取消后,托管的 LOVE20 全额退回报价者。

3. 接受报价

function acceptOffer(uint256 tokenId, address bidder) external;

分两种情况:

成交后:

当前 NFT 持有人不能接受自己的报价。

只读接口

function listingCount() external view returns (uint256);
function activeOfferCount(uint256 tokenId) external view returns (uint256);
function bidderOfferCount(address bidder) external view returns (uint256);
function listings(uint256 offset, uint256 limit) external view returns (ListingView[] memory);
function activeOffers(uint256 tokenId) external view returns (OfferView[] memory);
function bidderOffers(address bidder, uint256 offset, uint256 limit) external view returns (BidderOfferView[] memory);
function highestOffer(uint256 tokenId) external view returns (OfferView memory);
function highestOffers(uint256[] calldata tokenIds) external view returns (OfferView[] memory);
function listing(uint256 tokenId) external view returns (Listing memory);
function offer(uint256 tokenId, address bidder) external view returns (Offer memory);
function calculateFee(uint256 amount) external pure returns (uint256);
function calculateSellerProceeds(uint256 amount) external pure returns (uint256);

说明:

性能说明

这意味着:

因此更稳妥的前端策略是:

当前边界

对应源码