본문 바로가기
블록체인 기술사업 교육/Solidity

블록체인 기술사업 교육 11일차 (Solidity)

by Mecodata 2023. 4. 17.

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];
	}

}

'블록체인 기술사업 교육 > Solidity' 카테고리의 다른 글

Truffle  (0) 2023.05.17
블록체인 기술사업 교육 8&9일차  (0) 2023.04.12

댓글