Smart Contract 응용
경매
pragma solidity ^0.4.11;
contract Auction {
address public highestBidder; // 최고 입찰자 어드레스
uint public highestBid; // 최고 입찰액
/// 생성자
function Auction() payable {
highestBidder = msg.sender;
highestBid = 0;
}
/// 입찰 처리 함수
function bid() public payable {
// 현재 입찰액이 최고 입찰액보다 높은지 확인
require(msg.value > highestBid);
// 기존 최고 입찰자에게 반환할 액수 설정
uint refundAmount = highestBid;
// 최고입찰자 어드레스 업데이트
address currentHighestBidder = highestBidder;
// 스테이트 값 업데이트
highestBid = msg.value;
highestBidder = msg.sender;
// 이전 최고액 입찰자에게 입찰금 반환
if(!currentHighestBidder.send(refundAmount)) {
throw;
}
}
}
추첨
pragma solidity ^0.4.11;
contract Lottery {
// 응모자를 관리하는 매핑
mapping (uint => address) public applicants;
// 응모자 수
uint public numApplicants;
// 당첨자 정보
address public winnerAddress;
uint public winnerInd;
// 소유자
address public owner;
// 타임스탬프
uint public timestamp;
/// 소유자 여부를 확인하는 modifier
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/// 생성자
function Lottery() {
numApplicants = 0;
owner = msg.sender;
}
/// 추첨 응모 처리 함수
function enter() public {
// 응모자가 3명 미만인지 확인
require(numApplicants < 3);
// 이미 응모한 사람이 아닌지 확인
for(uint i = 0; i < numApplicants; i++) {
require(applicants[i] != msg.sender);
}
// 응모 접수 처리
applicants[numApplicants++] = msg.sender;
}
/// 추첨
function hold() public onlyOwner {
// 응모자가 3명 이상인지 확인
require(numApplicants == 3);
// 타임스탬프 값 설정
timestamp = block.timestamp;
// 추첨
winnerInd = timestamp % 3;
winnerAddress = applicants[winnerInd];
}
}
댓글