使用荷兰式拍卖模型以最优惠的价格出售您的 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合约。

请参考以下代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;interface IERC721 {function transferFrom(address _from,address _to,uint _nftId) external;
}
contract DutchAuction { }

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

  • 首先,我们要定义拍卖的持续时间。这意味着NFT的拍卖将在此期限后终止。我们将定义持续时间为2天。
  • 接下来,我们需要存储NFT的地址和它的ID。因此,我们将使用IERC721接口来存储NFT。

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

  • 然后,我们将存储卖家的地址。因此,我们将定义变量seller,它将存储卖家的地址。
  • 荷兰式拍卖需要一个起拍价。我们将定义一个变量startingPrice
  • 我们还需要拍卖开始和结束的时间戳。因此,我们将定义两个变量startAt和expiresAt,它们将存储各自的值。
  • 最后,我们将定义discountRate. DiscountRate 将确定价格下降的速率。
uint private constant DURATION = 2 days;
IERC721 public immutable nft;
uint public immutable nftId;
address public immutable seller;
uint public immutable startingPrice;
uint public immutable startAt;
uint public immutable expiresAt;
uint public immutable discountRate;

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

在其中,我们将传入*_startingPrice、_discountRate、_nft_nftId。*

constructor(uint _startingPrice,uint _discountRate,address _nft,uint _nftId) { }
  • 在构造函数中,我们将卖家设置为该合约的部署者。并且一旦NFT被售出,我们需要将 ETH 转移给卖家,我们会进行支付。
seller = payable(msg.sender);
  • 我们将获取用户的输入,以获得startingPrice、discountRate、startAt 和expireAt。因此,我们将其写成:
startingPrice = _startingPrice;
discountRate = _discountRate;
startAt = block.timestamp;
expiresAt = block.timestamp + DURATION;
  • 我们也会检查NFT的价格是否总是大于零。
_startingPrice >= _discountRate * DURATION, "Starting Price is less than the discount offered"

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

  • 最后,我们输入设置NFT。所以我们可以说:
nft = IERC721(_nft);
nftId = _nftId;

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

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

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

代码:

function currentPrice() public view returns (uint) {uint timeElapsed = block.timestamp - startAt;uint discount = discountRate * timeElapsed;return startingPrice - discount;
}
  • 接下来,使用buyNow()函数,用户将能够购买NFT。
function buy() external payable {require(block.timestamp < expiresAt, "Auction expired! :(");uint price = currentPrice();require(msg.value >= price, "ETH is less than the price");nft.transferFrom(seller, msg.sender, nftId);selfdestruct(seller);}

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

如果拍卖没有到期,那么我们将获取当前价格并使用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。

Source:https://medium.com/uv-labs/learn-how-to-sell-your-nfts-at-the-best-price-using-the-dutch-auction-model-2881261b09e3

关于

ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

Layer 2道友 - 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”

使用荷兰式拍卖模型以最优惠的价格出售您的 NFT相关推荐

  1. 【产业互联网周报】松下退出半导体市场;AWS将发布二代自研芯片;戴尔计划以10亿美元的价格出售安全部门RSA...

    关注ITValue,看企业级最新鲜.最具价值报道! 图片来源@视觉中国 | 本周,国内市场,微信医疗相关动态较多,看病就医服务.医保电子凭证.微信"刷脸就医"功能等陆续落地. 海外 ...

  2. r语言electricity数据集_R语言多元逐步回归模型分析房价和葡萄酒价格:选择最合适的预测变量...

    包含更多的预测变量不是免费的:在系数估算的更多可变性,更难的解释以及可能包含高度依赖的预测变量方面要付出代价.确实,  对于样本大小 ,在线性模型中可以考虑 的预测变量最大数量为 p .或等效地,使用 ...

  3. 商城订单使用优惠卷价格计算逻辑,举例计算

    参考文档 代码应用时注意: 计算最后一个满减时,我们四舍五入,肯定会大于或小于最终满减金额.因此最后一个商品满减金额的算法为:总满减金额 - 前面所有商品满减的金额 = 最后一个商品满减金额 例1 一 ...

  4. 比特币现金在奥地利成为主流

    我们都知道比特币现金的目标是成为世界上最好的货币,我认为这里面也包括能够被世界上每一个人使用.为此比特币现金一直在通过区块上限的调整来提高交易处理能力以满足大量用户的使用.虽然现在比特币现金已经有了一 ...

  5. 上千家企业涌入蚂蚁开放联盟链:在区块链上抢先吃红利螃蟹

    近日,蚂蚁区块链的"开放联盟链"在云端开放工具与商家营销工具两大场景开始发力:区块链创业公司"纯白矩阵"用1个月时间,在开放联盟链上开发了ChainIDE全套的 ...

  6. 排名:百度小程序 微信 + 支付宝 + 百度 + 头条 商城源码-拓客营销

    [ 微信 + 支付宝 + 百度 + 头条 ] 小程序 + APP + 公众号 + PC + H5,注重界面美感与用户体验,打造独特电商系统生态圈 官方网站:https://antuoke.com/ 项 ...

  7. (电商)唯品会双十一促销活动复盘——数据分析

    (电商)唯品会双十一促销活动复盘--数据分析 项目背景: 唯品会是一个专门做特卖的网站,什么是特卖呢.特卖一般是指在特定的时间段里,以优惠的价格出售指定的商品,一般以商城或者专卖店为多.该模式在线下早 ...

  8. 【TWS API 问题3】盈透证券的TWS API使用过程中如何实现一个订单成交之后自动取消其他的订单?

    有读者付费咨询下面一个问题: 请问在陆续所下的n个定单中之一被触发执行后,⚠️在保留该订单子订单不被取消的前提下⚠️,如何快速取消其他全部订单呢?是否有比按照订单ID逐一取消所有订单更快捷的方式呢? ...

  9. 苹果秋季发布会打破惯例:最强芯片A14先用在iPad上!

    出品 / 新浪科技 ID:techsina 作者 / 郭晓光 从今天的结果看来,苹果很可能在10月还有一场发布会,推出5G网络iPhone.但这场发布会也并不是没有其他惊喜,A14的出现,同样打破了最 ...

最新文章

  1. NAC网络访问控制,你需要知道的!
  2. T100 section已经修改过
  3. SAP Spartacus 单元测试开发规范
  4. C# 中 ConcurrentDictionary 一定线程安全吗?
  5. Storm ack和fail机制再论
  6. 图像处理之积分图应用三(基于NCC快速相似度匹配算法)
  7. 低代码发展专访系列之二:两三年内会出现“现象级”低代码产品吗?
  8. Oracle 修改 MEMORY_TARGET
  9. php android 乱码,如何解决android php 中文乱码问题
  10. 军用计算机通用规范测试试验,军用装备环境可靠性试验项目表
  11. java之uml类图的介绍
  12. QT创建一个excel文件(通过save as 方法)
  13. 人民银行软件开发中心-IT技术
  14. apache 问题 You don't have permission to access /test.php on this server 解决方法
  15. 【整理】一堆磨人の数学概率期望
  16. 汽车市场勇进派 乐车邦林金文的逆周期生意
  17. 【Unity植物大战僵尸】向日葵动画、天空中阳光的生成与掉落(二)
  18. 赶紧收藏 : 从15000个Python开源项目中精选的Top30
  19. 矩阵指数 Matrix Exponentials
  20. 解决swiper在PC端滑动,切换移动端不动的问题

热门文章

  1. 为什么有些孩子有多动症?为什么有些孩子不快乐?
  2. C#中Abstract和Virtual(转载)
  3. 养老金入市其实是在吹气球
  4. 记录在IE下,JS下载保存文件方法
  5. 浅谈跟美女上床和次贷危机
  6. 使用面向对象思想,实现(人狗大战)小游戏
  7. 统一身份认证登录详细介绍-identity4
  8. android框架结构
  9. ios 震动api_震动API
  10. S7-200SMART存储卡相关问题解决办法(汇总)