版权声明:忠于祖国,忠于人民 https://blog.csdn.net/boss2967/article/details/83307936
01.结构解析
一个简单的投票合约
02.结构解析图解
03.整体结构
pragma solidity ^0.4.24;
contract SimpleAuction{
address public beneficiary;
uint public auctionEnd;
address public highestBidder;
uint public highestBid;
mapping(address=>uint)pendingReturns;
bool ended;
event HighestBidIncreased(address bidder,uint amount);
event AuchtionEnded(address winner,uint amount);
function SimpleAuction(uint _biddingTime,address _beneficiary){
beneficiary =_beneficiary;
auctionEnd = now+_biddingTime;
}
function bid()payable{
require(now <=auctionEnd);
require(msg.value >highestBid);
if(highestBidder !=0){
pendingReturns[highestBidder]+=highestBid;
}
highestBidder = msg.sender;
highestBid = msg.value;
HighestBidIncreased(msg.sender,msg.value);
}
function withdraw() view returns(bool){
uint amount = pendingReturns[msg.sender];
if (amount >0){
pendingReturns[msg.sender] = 0;
if (!msg.sender.send(amount)){
pendingReturns[msg.sender] = amount;
return false;
}
}
return true;
}
function auctionEnd(){
require(now >=auctionEnd);
require(!ended);
ended = true;
AuchtionEnded(highestBidder,highestBid);
beneficiary.transfer(highestBid);
}
}
04.重要函数
01. 参数声明
address public beneficiary;//最终受益者
uint public auctionEnd;//拍卖结束的时间戳
address public highestBidder;//当前出价最高者
uint public highestBid;.//当前最高的出价
mapping(address=>uint)pendingReturns;//需要退回竞拍者和其出价
bool ended;//竞拍是否结束的标识符
event HighestBidIncreased(address bidder,uint amount);//出现更高出价时引发的事件(Event)
event AuchtionEnded(address winner,uint amount);//竞拍结束时引发的事件
02. 初始化竞拍合约,指定竞拍期事件和最终受益者
//
function SimpleAuction(uint _biddingTime,address _beneficiary){
beneficiary =_beneficiary;
auctionEnd = now+_biddingTime;
}
03.竞拍者出价
//
function bid()payable{
require(now <=auctionEnd);
require(msg.value >highestBid);
if(highestBidder !=0){
pendingReturns[highestBidder]+=highestBid;
}
highestBidder = msg.sender;
highestBid = msg.value;
HighestBidIncreased(msg.sender,msg.value);
}
04.出价被别人超过后竞拍者可以执行撤销
//
function withdraw() view returns(bool){
uint amount = pendingReturns[msg.sender];
if (amount >0){
pendingReturns[msg.sender] = 0;
if (!msg.sender.send(amount)){
pendingReturns[msg.sender] = amount;
return false;
}
}
return true;
}
05.竞拍结束后执行 将最高的出价支付给受益者
//
function auctionEnd(){
require(now >=auctionEnd);
require(!ended);
ended = true;
AuchtionEnded(highestBidder,highestBid);
beneficiary.transfer(highestBid);
}