solidity实战练习3——荷兰拍卖

//SPDX-License-Identifier:MIT
pragma solidity ^0.8.24;
interface IERC721{
    function transFrom(address _from,address _to,uint nftid) external ;
}

contract DutchAuction
{   
    address payable immutable seller;//卖方
    uint immutable startTime;//拍卖开始时间
    uint immutable endTime;//拍卖结束时间
    uint immutable lastTime;//拍卖持续时间
    uint immutable startPrice;//启始价格
    uint immutable discount;//每秒减少多少钱

    IERC721 public nft;//nft 变量能够存储一个已经部署的符合 IERC721 接口的合约地址
    uint public nftId;

    constructor(//对合约中的不可变变量进行赋值
    address payable _seller,
    uint  _startTime,

    uint  _lastTime,
    uint  _startPrice,
    uint  _discount,
    IERC721  _nft,
    uint _nftId
    ){
        seller=_seller;
        startTime=_startTime;

        lastTime=_lastTime;
        endTime=_lastTime+_startTime;
        startPrice=_startPrice;
        discount=_discount;
        require(startPrice>discount * lastTime,"it may become nagetive number");//检查一下防止拍卖价成为负数
        nft=_nft;
        nftId=_nftId;
    }
    function getPrice() public view returns(uint ){//获取当前(调用本函数的时刻)的价格
        require(startTime+block.timestamp<=endTime,"Sorry,you comes too late");//检查是否流派
       return(startPrice-(block.timestamp-startTime)*discount);
    }
    function buy()external payable returns(bool)
    {
        uint nowPrice=getPrice();
        require(msg.value>= nowPrice,"You have no enough money");
        require(startTime+block.timestamp<=endTime,"Sorry,you comes too late");
        nft.transFrom(seller,msg.sender,nftId);
        uint  refund = msg.value- nowPrice;
        payable(msg.sender).transfer(refund);
        seller.transfer(nowPrice);
        destroy();
        return true;
    }
    function destroy()public payable{
        seller.transfer(address(this).balance);
    }
}

荷兰合约(Dutch Auction Contract)是一种智能合约,通常运行在区块链上,用于实现荷兰式拍卖(Dutch Auction)的拍卖逻辑。荷兰合约的设计旨在确保拍卖过程的透明性、安全性和自动化执行。

荷兰拍卖的基本组成和功能:

  1. 起始价格设定

    • 合约会设定一个初始的高价作为起始拍卖价格。
  2. 价格递减设定

    • 根据预定的规则或时间间隔,合约会以固定速度递减拍卖价格。这个递减的速度通常是事先确定好的,可以根据拍卖的需求调整。
  3. 买家接受价格

    • 参与者可以在拍卖过程中选择接受当前价格。一旦有人接受了当前价格,拍卖即结束。
  4. 自动执行

    • 荷兰合约通常具备自动执行功能,一旦有人接受了当前价格,合约会立即执行资金的转移和商品或服务的交割。
  5. 资金管理

    • 合约会确保安全地处理所有资金的转移,确保卖方和买方的权益。
  6. 拍卖结束条件

    • 拍卖可以在以下条件下结束:
      • 有人接受了当前价格;
      • 拍卖价格降至预设的最低价;
      • 达到预定的拍卖结束时间。

相关推荐

  1. solidity实战练习2--ERC20实现

    2024-07-15 02:56:02       26 阅读
  2. solidity案例详解(五)能源电力竞拍合

    2024-07-15 02:56:02       49 阅读
  3. C 练习实例49-宏#define命令练习3

    2024-07-15 02:56:02       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 02:56:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 02:56:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 02:56:02       62 阅读
  4. Python语言-面向对象

    2024-07-15 02:56:02       72 阅读

热门阅读

  1. sqlalchemy使用with_entities返回指定数据列

    2024-07-15 02:56:02       16 阅读
  2. Redis如何高效安全的遍历所有key

    2024-07-15 02:56:02       13 阅读
  3. ansible安装

    2024-07-15 02:56:02       18 阅读
  4. RocketMQ~生产者与消费者的消费模式(pull or push)

    2024-07-15 02:56:02       20 阅读
  5. Go语言基础数据类型、变量及自增语法

    2024-07-15 02:56:02       22 阅读
  6. Linux使用python调用串口<Ubuntu>

    2024-07-15 02:56:02       20 阅读
  7. 求职笔记day3

    2024-07-15 02:56:02       22 阅读
  8. WSL2 的安装与运行 Linux 系统

    2024-07-15 02:56:02       19 阅读
  9. Android C++系列:Linux网络(五)常见术语

    2024-07-15 02:56:02       21 阅读
  10. DP讨论——适配器、桥接模式等通用理解

    2024-07-15 02:56:02       18 阅读