Solidity入门学习笔记3-根据例子学习Solidity-秘密竞拍

本文是Solidity初学者的学习笔记,重点介绍了如何使用Solidity编写秘密竞拍合约。通过实例,详细解释了合约的逻辑,包括投标、密封投标、揭晓最高投标和退还未中标的投标款项等关键步骤,帮助读者掌握智能合约的开发技巧。
摘要由CSDN通过智能技术生成
//摘自:https://solidity-cn.readthedocs.io/zh/develop/solidity-by-example.html#voting

//案例:简单公开拍卖
//结构:每个人都可在投标期内报价,出价包含了以太币,币与出价人绑定,当出现更高出价,币返还,
//投标结束后,受益人需要手动调用合约接收他的钱,合约并不能自己激活接收

pragma solidity ^0.4.22;

contract SimpleAuction {
    // 拍卖的参数。
    //该参数用来记录受益人
    address public beneficiary;
    // 时间是unix的绝对时间戳(自1970-01-01以来的秒数)
    // 或以秒为单位的时间段。
    //该参数用来设定拍卖的结束时间
    uint public auctionEnd;

    // 拍卖的当前状态
    //该参数用来记录最高出价人
    address public highestBidder;
    //该参数用来记录最高出价
    uint public highestBid;

    //可以取回的之前的出价
    //该映射用来存储每个竞拍者已上交的出价
    mapping(address => uint) pendingReturns;

    // 拍卖结束后设为 true,将禁止所有的变更
    //该bool用来记录auctionEnd函数是否被调用,调用即关闭拍卖,同时将ended状态更新为true
    bool ended;

    // 变更触发的事件
    //在出现更高出价后记录,需记录出价人、出价量
    event HighestBidIncreased(address bidder, uint amount);
    //在拍卖会结束后记录,需记录成交人、出价
    event AuctionEnded(address winner, uint amount);

    // 以下是所谓的 natspec 注释,可以通过三个斜杠来识别。
    // 当用户被要求确认交易时将显示。

    /// 以受益者地址 `_beneficiary` 的名义,
    /// 创建一个简单的拍卖,拍卖时间为 `_biddingTime` 秒。
    //部署合约时,需要提交拍卖持续时间、受益人
    constructor(
        uint _biddingTime,
        address _beneficiary
    ) public {
        beneficiary = _beneficiary;
        //依据拍卖持续时间,生成拍卖会结束时间
        auctionEnd = now + _biddingTime;
    }

    /// 对拍卖进行出价,具体的出价随交易一起发送。
    /// 如果没有在拍卖中胜出,则返还出价。
    function bid() public payable {
        // 参数不是必要的。因为所有的信息已经包含在了交易中。
        // 对于能接收以太币的函数,关键字 payable 是必须的。

        // 如果拍卖已结束,撤销函数的调用。
        //验证拍卖会是否结束
        require(
            now <= auctionEnd,
            "Auction already ended."
        );

        // 如果出价不够高,返还你的钱
        //验证出价是否为最高出价
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值