我最近在重新学solidity,巩固一下细节,也写一个“Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。

推特:@0xAA_Science

discord:WTF Academy

所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity

Opensea是以太坊上最大的NFT交易平台,总交易总量达到了$300亿Opensea在交易中抽成2.5%,因此它通过用户交易至少获利了$7.5亿。另外,它的运作并不去中心化,且不准备发币补偿用户。NFT玩家苦Opensea久已,今天我们就利用智能合约搭建一个零手续费的去中心化NFT交易所:NFTSwap

设计逻辑

NFTSwap合约

事件

合约包含4个事件,对应挂单list、撤单revoke、修改价格update、购买purchase这四个行为:

    event List(address indexed seller, address indexed nftAddr, uint256 indexed tokenId, uint256 price);
    event Purchase(address indexed buyer, address indexed nftAddr, uint256 indexed tokenId, uint256 price);
    event Revoke(address indexed seller, address indexed nftAddr, uint256 indexed tokenId);
    event Update(address indexed seller, address indexed nftAddr, uint256 indexed tokenId, uint256 newPrice);

订单

NFT订单抽象为Order结构体,包含挂单价格price和持有人owner信息。nftList映射记录了订单是对应的NFT系列(合约地址)和tokenId信息。

    // 定义order结构体
    struct Order{
        address owner;
        uint256 price;
    }
    // NFT Order映射
    mapping(address => mapping(uint256 => Order)) public nftList;

回退函数

NFTSwap中,用户使用ETH购买NFT。因此,合约需要实现fallback()函数来接收ETH

    fallback() external payable{}