mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
平台 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

使用荷兰式拍卖模型以最优惠的价格出售NFT

收藏
分享

拍卖是一种流行的方法,它可以以最好的价格出售NFT。

有一些拍卖技巧是为了出售我们的NFT收藏品,但荷兰式拍卖不同于其他技巧,它的使用频率更高。

与常规拍卖不同的是,在荷兰式拍卖中,价格开始时很高,然后在预定的时间间隔内慢慢下降。

简单地说,在荷兰式拍卖中,NFT的价格从初始价格(上限)开始,并定期下降一个固定额度(例如,每 10 分钟下降 0.1 ETH ),直到它达到最低价格。

荷兰式拍卖为何如此受欢迎?

其中一个原因可能与区块链上的gas战争有关。

Gas Wars是指在交易吞吐量较低的 以太坊 等区块链上同时启动大量交易时,会出现区块链 Gas 费用的飙升。

荷兰式拍卖被用来将多余的铸币费从矿工转移到艺术家身上,或用于资助特定的慈善机构或社区 DAO。

先决条件

在Remix IDE中创建一个名为 NFT.sol 的新文件并粘贴我们之前使用的合约。

编写智能合约

在我们的Remix IDE中创建一个新的solidity文件,并将其命名为DutchAuction.sol。

创建一个IERC-721接口,然后初始化Dutch Auction合约。

请参考以下代码:

8yxDbJPtNacG8zkRcF8F2S0tSoXlsMEsBgPX7xz2.png

初始化合约后,我们将定义一些必须在合约中使用的变量。

  • 首先,我们要定义拍卖的持续时间。这意味着NFT的拍卖将在此期限后终止。我们将定义持续时间为2天。

  • 接下来,我们需要存储NFT的地址和它的ID。因此,我们将使用IERC721接口来存储NFT。

     

我们将这个变量设置为不可变的,这样一旦部署合约,它的值就不会改变。

  • 然后,我们将存储卖家的地址。因此,我们将定义变量seller,它将存储卖家的地址。

  • 荷兰式拍卖需要一个起拍价。我们将定义一个变量startingPrice。

  • 我们还需要拍卖开始和结束的时间戳。因此,我们将定义两个变量startAt和expiresAt,它们将存储各自的值。

  • 最后,我们将定义 discountRate . DiscountRate 将确定价格下降的速率。

n1Ud3jmFJ894XLkmwJJFn9buR5tXPrKT2df1dlIj.png

接下来,我们将在构造函数中初始化这些状态变量。

在其中,我们将传入startingPrice、discountRate、_nft和_nftId。

7UNXDTvIryXnj4OSiiWiystbJj0v5d8jNuzx9acM.png

  • 在构造函数中,我们将卖家设置为该合约的部署者。并且一旦NFT被售出,我们需要将 ETH 转移给卖家,我们会进行支付。

     

4DPSGCkwXz9TbrS02PMsvbmPUxrYpPuzIo9N4qvs.png

  • 我们将获取用户的输入,以获得startingPrice、discountRate、startAt 和expireAt。因此,我们将其写成:

vhNtUdABieYnaVukI289B2sqvUciwbB3QSshqynV.png

  • 我们也会检查NFT的价格是否总是大于零。

_startingPrice >= _discountRate * DURATION, "Starting Price is less than the discount offered"

_discountRate * DURATION 是应用于startingPrice 的最大价格扣除额。

  • 最后,我们输入设置NFT。所以我们可以说:

ZjFI7KSyUvqmiUfzfs6f3uY0aBH2ZMk84KTow6fM.png

我们的构造函数已经完成了。

接下来,我们将定义两个将进一步使用的函数:currentPrice()和buyNow()。

  • 使用currentPrice(),我们将知道NFT在特定时间里的价格。

     

代码:

c9GTyJE5W8Ik6AB9mHm0DK9ivUwHLt3QXCKqImZd.png

  • 接下来,使用buyNow()函数,用户将能够购买NFT。

NBUSLLTJzdXI28V7tb4RNdAfyo5YsqSjdyxp9f0t.png

在这个函数中,首先,我们将检查拍卖是否过期。

如果拍卖没有到期,那么我们将获取当前价格并使用currentPrice函数将其存储在price变量中。

接下来,我们将检查发送的金额是否大于或等于价格。

一旦我们知道 msg.sender已经发送了足够的ETH来购买NFT,我们将使用3个参数来转移NFT的所有权:seller、msg.sender、nftId。

最后,我们使用了selfdestruct()函数来结束拍卖。因此,我们将在函数内部传递卖家地址。

我们的合约应该是这样的:

接下来,我们将通过销售NFT测试荷兰拍卖智能合约。

使用tokenURI来创建我们的NFT

现在我们将部署这个NFT,然后使用它的tokenURI调用mint函数。

一旦我们创造了NFT。接下来我们要使用我们的荷兰拍卖合约。

部署荷兰式拍卖合约

编写荷兰式拍卖合约,然后部署它。

为了部署我们的合约,我们必须传递一些参数。

设置startingPrice为1000000, discountRate为1,我们刚刚部署的NFT地址,最后,我们必须提供等于1的tokenId 。

添加了参数后,单击Deploy按钮部署我们的合约。

只要我们的荷兰式拍卖合约生效。我们接下来要做的是批准荷兰式拍卖来使用我们的NFT。

为此,我们将打开部署合约下的NFT,并执行审批功能。

我们需要传递荷兰式的部署地址和NFT的代币id来运行审批函数。

要检查荷兰式拍卖是否已经启动,请打开已部署的荷兰式拍卖合约,并运行currentPrice函数几次。你会注意到每次你运行这个函数,都会得到一个递减的价格值。

现在是时候出售我们的NFT了。

使用荷兰式拍卖合约来出售我们的NFT

首先,运行currentPrice函数并复制价格值。

然后切换到我们想从中购买 NFT 的其他帐户,并将价格值粘贴到 value 选项下。

然后运行buyNow函数。

回到我们的NFT合约并运行ownerOf函数,就可以看到合约的所有者被更新了。

这就是我们如何使用荷兰式拍卖出售我们的NFT。

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。