//摘自: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."
);
// 如果出价不够高,返还你的钱
//验证出价是否为最高出价
Solidity入门学习笔记3-根据例子学习Solidity-秘密竞拍
最新推荐文章于 2022-10-04 09:37:19 发布
本文是Solidity初学者的学习笔记,重点介绍了如何使用Solidity编写秘密竞拍合约。通过实例,详细解释了合约的逻辑,包括投标、密封投标、揭晓最高投标和退还未中标的投标款项等关键步骤,帮助读者掌握智能合约的开发技巧。
摘要由CSDN通过智能技术生成