[区块链&DAPP介绍 Day20] contract 案例2 - 拍卖

今天来介绍第二个案例。今天的案例就以拍卖为情境设定

情境

假设要制定一定拍卖场的合约,到底要怎麽定义呢?首先需要三个角色

  1. 拍卖人
  2. 委托人
  3. 买家

再来需要一个竞标的功能,可以让买家出价,并且要在时间限定内,价钱最高者得到。下面我们来看看范例

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.7;

contract auction {

    //纪录卖家
    address payable public seller;

    //纪录最高买家
    address payable public buyer;

    //纪录最高出价金额
    uint public auctionAmount;

    //拍卖结束时间
    uint auctionEndTime;

    //拍卖是否结束
    bool isFinish;

    constructor(address payable _seller,uint _duration)  {
        seller = _seller;
        sellet = payable(msg.sender);
        auctionEndTime = _duration + block.timestamp;
        isFinish = false;
    }

    //竞拍功能
    function bid() public payable{
        //确认拍卖还在执行中
        require(!isFinish);

        //确认拍卖还在时间范围内
        require(block.timestamp<auctionEndTime);

        //确认你送的值有大於目前的拍卖最高价
        require(msg.value>auctionAmount);

        //退钱给上一个买家
        if(auctionAmount>0) {
            buyer.transfer(auctionAmount);
        }
        buyer = payable(msg.sender);
        auctionAmount = msg.value;
    }

    //结束拍卖
    function auctionEnd() public payable{

        //确认现在时间大於拍卖结束时间
        require(block.timestamp>=auctionEndTime);

        //确认拍卖是否结束
        require(!isFinish);

        //把拍卖开关关掉
        isFinish = true;

        //把钱送给卖家
        seller.transfer(auctionAmount);
    }
}

<<:  鬼故事 - 真的有监控吗

>>:  Day13 开发套件 - 范例程序码介绍02 Android 端

Swift 新手-App Launch Screen 设计&程序码互动

设计 Launch Screen 会需要用到两个档案,分别是: Main.storyboard(用途...

Day 23 Password Attacks - 密码攻击 (hydra, pw-inspector)

工具介绍 今天要体验的工具是hydra,有别於先前体验过的其他工具,虽然也是透过字典档的形式,但它支...

Day27 - 铁人付外挂测试验收(三)- 端对端测试

曾经做过一个专案,顾客把商品加入购物车後,可以同时选择要加入几笔商品,然後在结帐页的时候需要根据商品...

[第二十二天]从0开始的UnityAR手机游戏开发-APP内撷取画面

在玩AR APP时都有一个拍照功能,本次章节会介绍如何撰写Unity的截图功能 先在Project新...

Day 08 Section Summary 2

Mbed Simulator Importance of Mbed platform in rapi...